📄 ili9320.c
字号:
LCD_WriteReg(0x000F,0x0000); ili9320_Delay(50000); //扫描开始地址
LCD_WriteReg(0x0041,0x0000); ili9320_Delay(50000);
LCD_WriteReg(0x0042,0x0000); ili9320_Delay(50000);
LCD_WriteReg(0x0048,0x0000); ili9320_Delay(50000);
LCD_WriteReg(0x0049,0x013F); ili9320_Delay(50000);
LCD_WriteReg(0x004A,0x0000); ili9320_Delay(50000);
LCD_WriteReg(0x004B,0x0000); ili9320_Delay(50000);
LCD_WriteReg(0x0044,0xEF00); ili9320_Delay(50000);
LCD_WriteReg(0x0045,0x0000); ili9320_Delay(50000);
LCD_WriteReg(0x0046,0x013F); ili9320_Delay(50000);
LCD_WriteReg(0x0030,0x0707); ili9320_Delay(50000);
LCD_WriteReg(0x0031,0x0204); ili9320_Delay(50000);
LCD_WriteReg(0x0032,0x0204); ili9320_Delay(50000);
LCD_WriteReg(0x0033,0x0502); ili9320_Delay(50000);
LCD_WriteReg(0x0034,0x0507); ili9320_Delay(50000);
LCD_WriteReg(0x0035,0x0204); ili9320_Delay(50000);
LCD_WriteReg(0x0036,0x0204); ili9320_Delay(50000);
LCD_WriteReg(0x0037,0x0502); ili9320_Delay(50000);
LCD_WriteReg(0x003A,0x0302); ili9320_Delay(50000);
LCD_WriteReg(0x003B,0x0302); ili9320_Delay(50000);
LCD_WriteReg(0x0023,0x0000); ili9320_Delay(50000);
LCD_WriteReg(0x0024,0x0000); ili9320_Delay(50000);
LCD_WriteReg(0x0025,0x8000); ili9320_Delay(50000);
LCD_WriteReg(0x004f,0); //行首址0
LCD_WriteReg(0x004e,0); //列首址0
}
else if(DeviceCode==0x7783)
{
// Start Initial Sequence
LCD_WriteReg(0x00FF,0x0001);
LCD_WriteReg(0x00F3,0x0008);
LCD_WriteReg(0x0001,0x0100);
LCD_WriteReg(0x0002,0x0700);
LCD_WriteReg(0x0003,0x1038); //0x1030 0x1018
LCD_WriteReg(0x0008,0x0302);
LCD_WriteReg(0x0008,0x0207);
LCD_WriteReg(0x0009,0x0000);
LCD_WriteReg(0x000A,0x0000);
LCD_WriteReg(0x0010,0x0000); //0x0790
LCD_WriteReg(0x0011,0x0005);
LCD_WriteReg(0x0012,0x0000);
LCD_WriteReg(0x0013,0x0000);
ili9320_Delay(50);
LCD_WriteReg(0x0010,0x12B0);
ili9320_Delay(50);
LCD_WriteReg(0x0011,0x0007);
ili9320_Delay(50);
LCD_WriteReg(0x0012,0x008B);
ili9320_Delay(50);
LCD_WriteReg(0x0013,0x1700);
ili9320_Delay(50);
LCD_WriteReg(0x0020,0x0000); // GRAM水平起始位置
LCD_WriteReg(0x0021,0x0000);
LCD_WriteReg(0x0029,0x0022);
//################# void Gamma_Set(void) ####################//
LCD_WriteReg(0x0030,0x0000);
LCD_WriteReg(0x0031,0x0707);
LCD_WriteReg(0x0032,0x0505);
LCD_WriteReg(0x0035,0x0107);
LCD_WriteReg(0x0036,0x0008);
LCD_WriteReg(0x0037,0x0000);
LCD_WriteReg(0x0038,0x0202);
LCD_WriteReg(0x0039,0x0106);
LCD_WriteReg(0x003C,0x0202);
LCD_WriteReg(0x003D,0x0408);
ili9320_Delay(50);
LCD_WriteReg(0x0050,0x0000);
LCD_WriteReg(0x0051,0x00EF);
LCD_WriteReg(0x0052,0x0000);
LCD_WriteReg(0x0053,0x013F);
LCD_WriteReg(0x0060,0xA700);
LCD_WriteReg(0x0061,0x0001);
LCD_WriteReg(0x0090,0x0033);
LCD_WriteReg(0x002B,0x000B);
LCD_WriteReg(0x0007,0x0133);
ili9320_Delay(50);
}
for(i=50000;i>0;i--);
}
/****************************************************************************
* 名 称:void ili9320_SetCursor(u16 x,u16 y)
* 功 能:设置屏幕座标
* 入口参数:x 行座标
* y 列座标
* 出口参数:无
* 说 明:
* 调用方法:ili9320_SetCursor(10,10);
****************************************************************************/
//__inline void ili9320_SetCursor(u16 x,u16 y)
void ili9320_SetCursor(u16 x,u16 y)
{
if(DeviceCode==0x8989)
{
LCD_WriteReg(0x004e,y); //行
LCD_WriteReg(0x004f,0x13f-x); //列
}
else if(DeviceCode==0x9919)
{
LCD_WriteReg(0x004e,x); // 行
LCD_WriteReg(0x004f,y); // 列
}
else if(DeviceCode==0x7783)
{
LCD_WriteReg(0x0020,x); // 行
LCD_WriteReg(0x0021,y); // 列
}
else
{
LCD_WriteReg(0x0020,y); // 行
LCD_WriteReg(0x0021,0x13f-x); // 列
}
}
/****************************************************************************
* 名 称:void ili9320_SetWindows(u16 StartX,u16 StartY,u16 EndX,u16 EndY)
* 功 能:设置窗口区域
* 入口参数:StartX 行起始座标
* StartY 列起始座标
* EndX 行结束座标
* EndY 列结束座标
* 出口参数:无
* 说 明:
* 调用方法:ili9320_SetWindows(0,0,100,100);
****************************************************************************/
__inline void ili9320_SetWindows(u16 StartX,u16 StartY,u16 EndX,u16 EndY)
{
ili9320_SetCursor(StartX,StartY);
LCD_WriteReg(0x0050, StartX);
LCD_WriteReg(0x0052, StartY);
LCD_WriteReg(0x0051, EndX);
LCD_WriteReg(0x0053, EndY);
}
/****************************************************************************
* 名 称:void ili9320_Clear(u16 dat)
* 功 能:将屏幕填充成指定的颜色,如清屏,则填充 0xffff
* 入口参数:dat 填充值
* 出口参数:无
* 说 明:
* 调用方法:ili9320_Clear(0xffff);
****************************************************************************/
void ili9320_Clear(u16 Color)
{
u32 index=0;
ili9320_SetCursor(0,0);
LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
for(index=0;index<76800;index++)
{
LCD->LCD_RAM=Color;
}
}
/****************************************************************************
* 名 称:u16 ili9320_GetPoint(u16 x,u16 y)
* 功 能:获取指定座标的颜色值
* 入口参数:x 行座标
* y 列座标
* 出口参数:当前座标颜色值
* 说 明:
* 调用方法:i=ili9320_GetPoint(10,10);
****************************************************************************/
u16 ili9320_GetPoint(u16 x,u16 y)
{
ili9320_SetCursor(x,y);
if(DeviceCode==0x7783)
return (LCD_ReadRAM());
else
return (ili9320_BGR2RGB(LCD_ReadRAM()));
}
/****************************************************************************
* 名 称:void ili9320_SetPoint(u16 x,u16 y,u16 point)
* 功 能:在指定座标画点
* 入口参数:x 行座标
* y 列座标
* point 点的颜色
* 出口参数:无
* 说 明:
* 调用方法:ili9320_SetPoint(10,10,0x0fe0);
****************************************************************************/
void ili9320_SetPoint(u16 x,u16 y,u16 point)
{
if ( (x>320)||(y>240) ) return;
ili9320_SetCursor(x,y);
LCD_WriteRAM_Prepare();
LCD_WriteRAM(point);
}
/****************************************************************************
* 名 称:void ili9320_DrawPicture(u16 StartX,u16 StartY,u16 EndX,u16 EndY,u16 *pic)
* 功 能:在指定座标范围显示一副图片
* 入口参数:StartX 行起始座标
* StartY 列起始座标
* EndX 行结束座标
* EndY 列结束座标
pic 图片头指针
* 出口参数:无
* 说 明:图片取模格式为水平扫描,16位颜色模式
* 调用方法:ili9320_DrawPicture(0,0,100,100,(u16*)demo);
****************************************************************************/
void ili9320_DrawPicture(u16 StartX,u16 StartY,u16 EndX,u16 EndY,u16 *pic)
{
u16 i;
ili9320_SetWindows(StartX,StartY,EndX,EndY);
ili9320_SetCursor(StartX,StartY);
LCD_WriteRAM_Prepare();
for (i=0;i<(EndX*EndY);i++)
{
LCD_WriteRAM(*pic++);
}
}
/****************************************************************************
* 名 称:void ili9320_PutChar(u16 x,u16 y,u8 c,u16 charColor,u16 bkColor)
* 功 能:在指定座标显示一个8x16点阵的ascii字符
* 入口参数:x 行座标
* y 列座标
* charColor 字符的颜色
* bkColor 字符背景颜色
* 出口参数:无
* 说 明:显示范围限定为可显示的ascii码
* 调用方法:ili9320_PutChar(10,10,'a',0x0000,0xffff);
****************************************************************************/
void ili9320_PutChar(u16 x,u16 y,u8 c,u16 charColor,u16 bkColor)
{
u16 i=0;
u16 j=0;
u8 tmp_char=0;
for (i=0;i<16;i++)
{
tmp_char=ascii_8x16[((c-0x20)*16)+i];
for (j=0;j<8;j++)
{
if ( (tmp_char >> 7-j) & 0x01 == 0x01)
{
ili9320_SetPoint(x+j,y+i,charColor); // 字符颜色
}
else
{
ili9320_SetPoint(x+j,y+i,bkColor); // 背景颜色
}
}
}
}
/****************************************************************************
* 名 称:u16 ili9320_BGR2RGB(u16 c)
* 功 能:RRRRRGGGGGGBBBBB 改为 BBBBBGGGGGGRRRRR 格式
* 入口参数:c BRG 颜色值
* 出口参数:RGB 颜色值
* 说 明:内部函数调用
* 调用方法:
****************************************************************************/
u16 ili9320_BGR2RGB(u16 c)
{
u16 r, g, b, rgb;
b = (c>>0) & 0x1f;
g = (c>>5) & 0x3f;
r = (c>>11) & 0x1f;
rgb = (b<<11) + (g<<5) + (r<<0);
return( rgb );
}
/****************************************************************************
* 名 称:void ili9320_BackLight(u8 status)
* 功 能:开、关液晶背光
* 入口参数:status 1:背光开 0:背光关
* 出口参数:无
* 说 明:
* 调用方法:ili9320_BackLight(1);
****************************************************************************/
void ili9320_BackLight(u8 status)
{
if ( status >= 1 )
{
Lcd_Light_ON;
}
else
{
Lcd_Light_OFF;
}
}
/****************************************************************************
* 名 称:void ili9320_Delay(vu32 nCount)
* 功 能:延时
* 入口参数:nCount 延时值
* 出口参数:无
* 说 明:
* 调用方法:ili9320_Delay(10000);
****************************************************************************/
void ili9320_Delay(vu32 nCount)
{
for(; nCount != 0; nCount--);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -