📄 ili9320.c
字号:
* 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);
Clr_Cs;
ili9320_WriteIndex(0x0022);
ili9320_WriteData(point);
Set_Cs;
}
/****************************************************************************
* 名 称: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);
Clr_Cs;
ili9320_WriteIndex(0x0022);
for (i=0;i<(EndX*EndY);i++)
{
ili9320_WriteData(*pic++);
}
Set_Cs;
}
/****************************************************************************
* 名 称: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); // 背景颜色
}
}
}
}
/****************************************************************************
* 名 称:void ili9320_Test()
* 功 能:测试液晶屏
* 入口参数:无
* 出口参数:无
* 说 明:显示彩条,测试液晶屏是否正常工作
* 调用方法:ili9320_Test();
****************************************************************************/
void ili9320_Test()
{
u8 R_data,G_data,B_data,i,j;
ili9320_SetCursor(0x00, 0x0000);
ili9320_WriteRegister(0x0050,0x00);//水平 GRAM起始位置
ili9320_WriteRegister(0x0051,239);//水平GRAM终止位置
ili9320_WriteRegister(0x0052,0);//垂直GRAM起始位置
ili9320_WriteRegister(0x0053,319);//垂直GRAM终止位置
Clr_Cs;
ili9320_WriteIndex(0x0022);
R_data=0;G_data=0;B_data=0;
for(j=0;j<50;j++)//红色渐强条
{
for(i=0;i<240;i++)
{R_data=i/8;ili9320_WriteData(R_data<<11|G_data<<5|B_data);
}
}
R_data=0x1f;G_data=0x3f;B_data=0x1f;
for(j=0;j<50;j++)
{
for(i=0;i<240;i++)
{
G_data=0x3f-(i/4);
B_data=0x1f-(i/8);
ili9320_WriteData(R_data<<11|G_data<<5|B_data);
}
}
//----------------------------------
R_data=0;G_data=0;B_data=0;
for(j=0;j<50;j++)//绿色渐强条
{
for(i=0;i<240;i++)
{G_data=i/4;
ili9320_WriteData(R_data<<11|G_data<<5|B_data);
}
}
R_data=0x1f;G_data=0x3f;B_data=0x1f;
for(j=0;j<50;j++)
{
for(i=0;i<240;i++)
{
R_data=0x1f-(i/8);
B_data=0x1f-(i/8);
ili9320_WriteData(R_data<<11|G_data<<5|B_data);
}
}
//----------------------------------
R_data=0;G_data=0;B_data=0;
for(j=0;j<60;j++)//蓝色渐强条
{
for(i=0;i<240;i++)
{B_data=i/8;ili9320_WriteData(R_data<<11|G_data<<5|B_data);
}
}
B_data=0;
R_data=0x1f;G_data=0x3f;B_data=0x1f;
for(j=0;j<60;j++)
{
for(i=0;i<240;i++)
{
G_data=0x3f-(i/4);
R_data=0x1f-(i/8);
ili9320_WriteData(R_data<<11|G_data<<5|B_data);
}
}
Set_Cs;
}
/****************************************************************************
* 名 称: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_WriteIndex(u16 idx)
* 功 能:写 ili9320 控制器寄存器地址
* 入口参数:idx 寄存器地址
* 出口参数:无
* 说 明:调用前需先选中控制器,内部函数
* 调用方法:ili9320_WriteIndex(0x0000);
****************************************************************************/
__inline void ili9320_WriteIndex(u16 idx)
{
Clr_Rs;
Set_nRd;
GPIOE->ODR = idx;
Clr_nWr;
Set_nWr;
}
/****************************************************************************
* 名 称:void ili9320_WriteData(u16 dat)
* 功 能:写 ili9320 寄存器数据
* 入口参数:dat 寄存器数据
* 出口参数:无
* 说 明:向控制器指定地址写入数据,调用前需先写寄存器地址,内部函数
* 调用方法:ili9320_WriteData(0x1030)
****************************************************************************/
void ili9320_WriteData(u16 data)
{
Set_Rs;
Set_nRd;
GPIOE->ODR = data;
Clr_nWr;
Set_nWr;
}
/****************************************************************************
* 名 称:u16 ili9320_ReadData(void)
* 功 能:读取控制器数据
* 入口参数:无
* 出口参数:返回读取到的数据
* 说 明:内部函数
* 调用方法:i=ili9320_ReadData();
****************************************************************************/
__inline u16 ili9320_ReadData(void)
{
//========================================================================
// ** **
// ** nCS ----\__________________________________________/------- **
// ** RS ------\____________/----------------------------------- **
// ** nRD -------------------------\_____/--------------------- **
// ** nWR --------\_______/-------------------------------------- **
// ** DB[0:15] ---------[index]----------[data]----------------------- **
// ** **
//========================================================================
unsigned short val = 0;
Set_Rs;
Set_nWr;
Clr_nRd;
GPIOE->CRH = 0x44444444;
GPIOE->CRL = 0x44444444;
val = GPIOE->IDR;
val = GPIOE->IDR;
GPIOE->CRH = 0x33333333;
GPIOE->CRL = 0x33333333;
Set_nRd;
return val;
}
/****************************************************************************
* 名 称:u16 ili9320_ReadRegister(u16 index)
* 功 能:读取指定地址寄存器的值
* 入口参数:index 寄存器地址
* 出口参数:寄存器值
* 说 明:内部函数
* 调用方法:i=ili9320_ReadRegister(0x0022);
****************************************************************************/
__inline u16 ili9320_ReadRegister(u16 index)
{
Clr_Cs;
ili9320_WriteIndex(index);
index = ili9320_ReadData();
Set_Cs;
return index;
}
/****************************************************************************
* 名 称:void ili9320_WriteRegister(u16 index,u16 dat)
* 功 能:写指定地址寄存器的值
* 入口参数:index 寄存器地址
* :dat 寄存器值
* 出口参数:无
* 说 明:内部函数
* 调用方法:ili9320_WriteRegister(0x0000,0x0001);
****************************************************************************/
__inline void ili9320_WriteRegister(u16 index,u16 dat)
{
/************************************************************************
** **
** nCS ----\__________________________________________/------- **
** RS ------\____________/----------------------------------- **
** nRD ------------------------------------------------------- **
** nWR --------\_______/--------\_____/----------------------- **
** DB[0:15] ---------[index]----------[data]----------------------- **
** **
************************************************************************/
Clr_Cs;
ili9320_WriteIndex(index);
ili9320_WriteData(dat);
Set_Cs;
}
/****************************************************************************
* 名 称: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 + -