论坛元老
 
- 积分
- 4081
- 金钱
- 4081
- 注册时间
- 2012-10-21
- 在线时间
- 642 小时
|

楼主 |
发表于 2012-10-24 23:20:17
|
显示全部楼层
回复【2楼】正点原子:
---------------------------------
只加了一个图片显示程序,就在你原来的程序基础上加了两个函数,函数如下:
/****************************************************************************
* 名 称:void ili9320_SetWindows(u16 StartX,u16 StartY,u16 EndX,u16 EndY)
* 功 能:设置窗口区域
* 入口参数:StartX 行起始座标
* StartY 列起始座标
* EndX 行结束座标
* EndY 列结束座标
* 出口参数:无
* 说 明:
* 调用方法:ili9320_SetWindows(0,0,100,100);
****************************************************************************/
void LCD_SetWindows(u16 StartX,u16 StartY,u16 Height,u16 Width)
{
LCD_WriteReg(R80, StartX); //水平方向GRAM起始地址
LCD_WriteReg(R81, StartX+Height); //水平方向GRAM结束地址
LCD_WriteReg(R82, StartY); //垂直方向GRAM起始地址
LCD_WriteReg(R83, StartY+Width); //垂直方向GRAM结束地址
LCD_SetCursor(StartX,StartY);
}
/****************************************************************************
* 名 称:void ili9320_DrawPicture(u16 StartX,u16 StartY,u16 Width,u16 Height,u16 *pic)
* 功 能:在指定座标范围显示一副图片
* 入口参数:StartX 行起始座标
* StartY 列起始座标
* EndX 行结束座标
* EndY 列结束座标
pic 图片头指针
* 出口参数:无
* 说 明:图片取模格式为水平扫描,16位颜色模式
* 调用方法:ili9320_DrawPicture(0,0,100,100,(u16*)demo);
****************************************************************************/
void LCD_DrawPicture(u16 StartX,u16 StartY,u16 Width,u16 Height,u8 *pic)
{
u32 i;
u8 *bitmap = (u8 *)pic;
if(lcddev.id==0x8999)
{
//设置图片显示窗口大小
LCD_WriteReg(0x44,StartX|(StartX+Width-1)<<8); //设置水平方向GRAM起始地址(低字节为起始地址,高字节为结束地址)
LCD_WriteReg(0x45,StartY); //设置窗口的Y方向的开始位置
LCD_WriteReg(0x46,StartY+Height-1); //设置窗口的Y方向的结束位置
}
else
{
LCD_WriteReg(R80, StartX); //水平方向GRAM起始地址
LCD_WriteReg(R81, StartX+Width-1); //水平方向GRAM结束地址
LCD_WriteReg(R82, StartY); //垂直方向GRAM起始地址
LCD_WriteReg(R83, StartY+Height-1); //垂直方向GRAM结束地址
}
// LCD_SetWindows(StartX, StartY, Width-1, Height-1);
LCD_SetCursor(StartX,StartY);
LCD_WriteRAM_Prepare();
for (i=0;i<(Height*Width);i++)
{
LCD_WriteRAM(*bitmap++);
}
// LCD_SetWindows(0x00,0x00,0xef,0x13f);
if(lcddev.id==0x8999)
{
//恢复窗口
LCD_WriteReg(0x44,0|239<<8); //设置窗口的X方向开始位置和结束位置
LCD_WriteReg(0x45,0); //设置窗口的Y方向的开始位置
LCD_WriteReg(0x46,319); //设置窗口的Y方向的结束位置
}
else
{
LCD_WriteReg(R80, 0); //水平方向GRAM起始地址
LCD_WriteReg(R81, 0xef); //水平方向GRAM结束地址
LCD_WriteReg(R82, 0); //垂直方向GRAM起始地址
LCD_WriteReg(R83, 0x13f); //垂直方向GRAM结束地址
}
}
|
|