📄 ili932x.c
字号:
{
u32 temp;
Lcd_SetBox(xStart,yStart,xLong,yLong,0,0);
Lcd_WR_Start();
Set_Rs;
for (temp=0; temp<xLong*yLong; temp++)
{
DataToWrite(Color);
Clr_nWr;
Set_nWr;
}
Set_Cs;
}
void Lcd_ClearCharBox(u8 x,u16 y,u16 Color)
{
u32 temp;
Lcd_SetBox(x*8,y*16,8,16,0,0);
Lcd_WR_Start();
Set_Rs;
for (temp=0; temp < 128; temp++)
{
DataToWrite(Color);
Clr_nWr;
//Delay_nus(22);
Set_nWr;
}
Set_Cs;
}
/****************************************************************
函数名:Lcd写1个ASCII字符函数
入口参数:x,横向坐标,由左到右分别是0~29
y,纵向坐标,由上到下分别为0~19
CharColaor,字符的颜色
CharBackColor,字符背景颜色
ASCIICode,相应字符的ASCII码
也就是说,320240分辨率的显示屏,横向能显示30个ASCII字符,竖向能显示20行
返回值:无
注意!!!!!如果单独使用此函数则应该加上Lcd_Rs_H()和Set_Cs;为了优化系统省去了
这个指令,假设此函数执行的上一条语句是写命令,(RS_L情况)则写入将出错
,因为ILI9320认为当RS_L时写入的是命令
*****************************************************************/
void Lcd_WriteASCII(u8 x,u8 y,u16 x_offset,u16 y_offset,u16 CharColor,u16 CharBackColor,u8 ASCIICode)
{
u8 RowCounter,BitCounter;
u8 *ASCIIPointer;
u8 ASCIIBuffer[16];
#if (ID_AM==000)|(ID_AM==010)|(ID_AM==100)|(ID_AM==110)
Lcd_SetBox(x*8,y*16,8,16,x_offset,y_offset);
#else
Lcd_SetBox(x*16,y*8,16,8,x_offset,y_offset);
#endif
Lcd_WR_Start();
GetASCIICode(ASCIIBuffer,ASCIICode,ASCII_Offset);//取这个字符的显示代码
ASCIIPointer=ASCIIBuffer;
for (RowCounter=0; RowCounter<16; RowCounter++)
{
for (BitCounter=0; BitCounter<8; BitCounter++)
{
if ((*ASCIIPointer&(0x80 >> BitCounter)) == 0x00)
{
//Set_Rs;
DataToWrite(CharBackColor);
Clr_nWr;
Set_nWr;
}
else
{
//Set_Rs;
DataToWrite(CharColor);
Clr_nWr;
Set_nWr;
}
}
ASCIIPointer++;
}
// Set_Cs;
}
void Lcd_WriteASCIIClarity(u8 x,u8 y,u8 x_offset,u8 y_offset,u16 CharColor,u8 ASCIICode)
{
GPIO_InitTypeDef GPIO_InitStructure;
u8 RowCounter,BitCounter;
u8 *ASCIIPointer;
u8 ASCIIBuffer[16];
u16 Temp;
#if (ID_AM==000)|(ID_AM==010)|(ID_AM==100)|(ID_AM==110)
Lcd_SetBox(x*8,y*16,8,16,x_offset,y_offset);
#else
Lcd_SetBox(x*16,y*8,16,8,x_offset,y_offset);
#endif
Lcd_WR_Start();
GetASCIICode(ASCIIBuffer,ASCIICode,ASCII_Offset);//取这个字符的显示代码
ASCIIPointer=ASCIIBuffer;
for (RowCounter=0; RowCounter<16; RowCounter++)
{
for(BitCounter=0;BitCounter<8;BitCounter++)
{
if((*ASCIIPointer & (0x80 >> BitCounter)) == 0x00)
{
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOE, &GPIO_InitStructure);
Clr_nRd;
Set_nRd;
Temp=GPIO_ReadInputData(GPIOE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOE, &GPIO_InitStructure);
DataToWrite(Temp);
Clr_nWr;
Set_nWr;
}
else
{
//Set_Rs;
DataToWrite(CharColor);
Clr_nWr;
Set_nWr;
}
}
ASCIIPointer++;
}
// Set_Cs;
}
/**************************************************************
向液晶屏写入32*16的ASCII字符
输入参数:
x向坐标 x :(0~14)
y向坐标 y :(0~9)
x向偏移量 x_offset:(理论上是0~239)
y向偏移量 y_offset:(理论上是0~319) 注意:偏移量不能过大,当x轴向超出16,y轴向超过32
也就是32*16字符大小时强烈建议使用x和y调整,
虽然偏移量可以实现大范围偏移但是可读性和维
护性都较差
字符颜色 CharColor:字符颜色
背景颜色 CharBackColor:背景颜色
***************************************************************/
void Lcd_Write32X16ASCII(u8 x,u8 y,u8 x_offset,u8 y_offset,u16 CharColor,u16 CharBackColor,u8 ASCIICode)
{
u8 RowCounter,BitCounter;
u8 *ASCIIPointer;
u8 ASCIIBuffer[16];
#if (ID_AM==000)|(ID_AM==010)|(ID_AM==100)|(ID_AM==110)
Lcd_SetBox(x*16,y*32,16,32,x_offset,y_offset);
#else
Lcd_SetBox(x*32,y*16,32,16,x_offset,y_offset);
#endif
Lcd_WR_Start();
GetASCIICode(ASCIIBuffer,ASCIICode,ASCII_Offset);//取这个字符的显示代码
ASCIIPointer=ASCIIBuffer;
for(RowCounter=0; RowCounter<16; RowCounter++)
{
for(BitCounter=0; BitCounter<8; BitCounter++)
{
if((*ASCIIPointer & (0x80 >> BitCounter)) == 0x00)
{
//Set_Rs;
DataToWrite(CharBackColor);
Clr_nWr;
Set_nWr;
DataToWrite(CharBackColor);
Clr_nWr;
Set_nWr;
}
else
{
//Set_Rs;
DataToWrite(CharColor);
Clr_nWr;
Set_nWr;
DataToWrite(CharColor);
Clr_nWr;
Set_nWr;
}
}
for(BitCounter=0; BitCounter<8; BitCounter++)
{
if((*ASCIIPointer & (0x80 >> BitCounter)) == 0x00)
{
//Set_Rs;
DataToWrite(CharBackColor);
Clr_nWr;
Set_nWr;
DataToWrite(CharBackColor);
Clr_nWr;
Set_nWr;
}
else
{
//Set_Rs;
DataToWrite(CharColor);
Clr_nWr;
Set_nWr;
DataToWrite(CharColor);
Clr_nWr;
Set_nWr;
}
}
ASCIIPointer++;
}
// Set_Cs;
}
//可以单独使用的写一个ASCII字符函数
void Lcd_Write32X16ASCIIWrite(u8 x,u8 y,u8 x_offset,u8 y_offset,u16 CharColor,u16 CharBackColor,u8 ASCIICode)
{
u8 RowCounter,BitCounter;
u8 *ASCIIPointer;
//配置ASCII字符位置
#if (ID_AM==000)|(ID_AM==010)|(ID_AM==100)|(ID_AM==110)
Lcd_SetBox(x*16,y*32,16,32,x_offset,y_offset);
#else
Lcd_SetBox(x*32,y*16,32,16,x_offset,y_offset);
#endif
Lcd_WR_Start();
// CatchASCII(ASCIICode,ASCII_Offset);//取这个字符的显示代码
// ASCIIPointer=CharBuffer;
for(RowCounter=0;RowCounter<16;RowCounter++)
{
for(BitCounter=0;BitCounter<8;BitCounter++)
{
if((*ASCIIPointer & (0x80 >> BitCounter)) == 0x00)
{
Set_Rs;
DataToWrite(CharBackColor);
Clr_nWr;
Set_nWr;
DataToWrite(CharBackColor);
Clr_nWr;
Set_nWr;
}
else
{
Set_Rs;
DataToWrite(CharColor);
Clr_nWr;
Set_nWr;
DataToWrite(CharColor);
Clr_nWr;
Set_nWr;
}
}
for(BitCounter=0;BitCounter<8;BitCounter++)
{
if((*ASCIIPointer & (0x80 >> BitCounter)) == 0x00)
{
Set_Rs;
DataToWrite(CharBackColor);
Clr_nWr;
Set_nWr;
DataToWrite(CharBackColor);
Clr_nWr;
Set_nWr;
}
else
{
Set_Rs;
DataToWrite(CharColor);
Clr_nWr;
Set_nWr;
DataToWrite(CharColor);
Clr_nWr;
Set_nWr;
}
}
ASCIIPointer++;
}
Set_Cs;
}
void Lcd_Write32X16ASCIIClarity(u8 x,u8 y,u8 x_offset,u8 y_offset,u16 CharColor,u8 ASCIICode)
{
GPIO_InitTypeDef GPIO_InitStructure;
u8 RowCounter,BitCounter;
u8 *ASCIIPointer;
u8 ASCIIBuffer[16];
u16 Temp;
#if (ID_AM==000)|(ID_AM==010)|(ID_AM==100)|(ID_AM==110)
Lcd_SetBox(x*16,y*32,16,32,x_offset,y_offset);
#else
Lcd_SetBox(x*32,y*16,32,16,x_offset,y_offset);
#endif
Lcd_WR_Start();
GetASCIICode(ASCIIBuffer,ASCIICode,ASCII_Offset);//取这个字符的显示代码
ASCIIPointer=ASCIIBuffer;
for(RowCounter=0; RowCounter<16; RowCounter++)
{
for(BitCounter=0; BitCounter<8; BitCounter++)
{
if((*ASCIIPointer & (0x80 >> BitCounter)) == 0x00)
{
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOE, &GPIO_InitStructure);
Clr_nRd;
Set_nRd;
Temp=GPIO_ReadInputData(GPIOE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOE, &GPIO_InitStructure);
DataToWrite(Temp);
Clr_nWr;
Set_nWr;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOE, &GPIO_InitStructure);
Clr_nRd;
Set_nRd;
Temp=GPIO_ReadInputData(GPIOE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOE, &GPIO_InitStructure);
DataToWrite(Temp);
Clr_nWr;
Set_nWr;
}
else
{
//Set_Rs;
DataToWrite(CharColor);
Clr_nWr;
Set_nWr;
DataToWrite(CharColor);
Clr_nWr;
Set_nWr;
}
}
for(BitCounter=0; BitCounter<8; BitCounter++)
{
if((*ASCIIPointer & (0x80 >> BitCounter)) == 0x00)
{
//Set_Rs;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOE, &GPIO_InitStructure);
Clr_nRd;
Set_nRd;
Temp=GPIO_ReadInputData(GPIOE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOE, &GPIO_InitStructure);
DataToWrite(Temp);
Clr_nWr;
Set_nWr;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOE, &GPIO_InitStructure);
Clr_nRd;
Set_nRd;
Temp=GPIO_ReadInputData(GPIOE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOE, &GPIO_InitStructure);
DataToWrite(Temp);
Clr_nWr;
Set_nWr;
}
else
{
//Set_Rs;
DataToWrite(CharColor);
Clr_nWr;
Set_nWr;
DataToWrite(CharColor);
Clr_nWr;
Set_nWr;
}
}
ASCIIPointer++;
}
// Set_Cs;
}
/************************************************************
函数名:Lcd写字符串函数
功能:向指定位置写入一个或多个字符,本函数带自动换行功能
入口参数:x,横向坐标,由左到右分别是0~29
y,纵向坐标,由上到下分别为0~19
CharColaor,字符的颜色
CharBackColor,字符背景颜色
*s 指向要写的字符串
返回值:无
*************************************************************/
void Lcd_WriteString(u8 x,u8 y,u16 x_offset,u16 y_offset,u16 CharColor,u16 CharBackColor,char *s)
{
u8 databuff;
Set_Rs;
do
{
databuff=*s++;
Lcd_WriteASCII(x,y,x_offset,y_offset,CharColor,CharBackColor,databuff);
#if (ID_AM==000)|(ID_AM==010)|(ID_AM==100)|(ID_AM==110)
if (x<29)
{
x++;
}
else if (y<19)
{
x=0;
y++;
}
else
{
x=0;
y=0;
}
#else
if (y<39)
{
y++;
}
else if (x<14)
{
y=0;
x++;
}
else
{
x=0;
y=0;
}
#endif
}
while (*s!=0);
Set_Cs;
}
void Lcd_WriteStringClarity(u8 x,u8 y,u8 x_offset,u8 y_offset,u16 CharColor,char *s)
{
u8 databuff;
Set_Rs;
do
{
databuff=*s++;
Lcd_WriteASCIIClarity(x,y,x_offset,y_offset,CharColor,databuff);
#if (ID_AM==000)|(ID_AM==010)|(ID_AM==100)|(ID_AM==110)
if (x<29)
{
x++;
}
else if (y<19)
{
x=0;
y++;
}
else
{
x=0;
y=0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -