本帖最后由 eltonchang2001 于 2022-11-9 11:54 编辑
利用ESK32-A2A31显示模块可以实现中文及图片显示,其实现方法如下: 1. 图片显示 在例程中提供了图片显示函数void LCD_PicDraw(u8 X_Location, u16 Y_Location, u8 Height, u16Width, uc8 *Pptr) ,它可以指定图片的显示位置、图片的长度与宽度等。 为了显示所需要的图片,可通过相应的工具来生成对应的数组文件,其后缀为*.h。 图1 生成工具
这样处理后,其显示效果如图2所示。 图2 显示效果
但此时所显示的图片效果与字符的显示方向是反向的,为此需要将显示函数改为如下的内容: void LCD_PicDraw(u8 X_Location, u16 Y_Location, u8 Height, u16 Width, uc8 *Pptr)
{
u32 xid = 0;
u32 ImgAdds = 0;
u32 yid = 0;
u32 i = 0, j = 0, color = 0;
xid = Height + X_Location;
yid = Y_Location;
LCD_StarterSet(xid, yid);
for (i = 0; i < Height; i++)
{
LCD_WriteRAMPrior();
for (j = 0; j < Width; j++)
{
ImgAdds = (i * Width * 2) + (j * 2);
color = Pptr[ImgAdds] << 8 | (Pptr[ImgAdds + 1]);
LCD_WriteRAM(color);
}
xid++;
LCD_StarterSet(xid, yid);
}
}
经修改,使用如下的主程序就可获得图3所示的效果。 int main(void)
{
LCD_Init();
LCD_Config();
LCD_BackColorSet(Black);
LCD_TextColorSet(Yellow);
LCD_StringLineDisplay(Line3, " Photo ");
LCD_PicDraw((50), (50), 80, 160, gImage_k);
while (1);
}
图3修正后的显示效果
2. 中文显示 要实现中文显示,可使用字模提取软件来构建字库,见图4所示。 图4 提取字模 为实现中文的显示,所配置的显示函数如下: void LCD_hzDisplay(u32 Line_Num, u32 Column, u8 Ascii)
{
LCD_hzDraw (Line_Num, Column, &ASCII_FontA_Table[Ascii * 32]);
}
void LCD_hzDraw(u32 X_Location, u32 Y_Location, u8 *Cptr)
{
u32 xid = X_Location;
u32 i = 0, j = 0;
u16 u = 0;
LCD_StarterSet(X_Location, Y_Location);
for (i = 0; i < 16; i++)
{
LCD_WriteRAMPrior();
u=Cptr[i*2];
for (j = 8; j>0; j--)
{
if ((u & (1 << (j-1))) == 0x00)
{
LCD_WriteRAM(Color_Back);
}
else
{
LCD_WriteRAM(Color_Text);
}
}
u=Cptr[i*2+1];
for (j = 8; j>0; j--)
{
if ((u & (1 << (j-1))) == 0x00)
{
LCD_WriteRAM(Color_Back);
}
else
{
LCD_WriteRAM(Color_Text);
}
}
xid++;
LCD_StarterSet(xid, Y_Location);
}
}
这样通过下面的主程序就可获得图5所示的显示效果。 int main(void)
{
LCD_Init();
LCD_Config();
LCD_BackColorSet(Black);
LCD_TextColorSet(Yellow);
LCD_hzDisplay(Line1, 70, 0);
LCD_ hzDisplay (Line1, 90, 1);
LCD _hzDisplay (Line1, 110, 2);
LCD_ hzDisplay (Line1, 130, 3);
LCD_ hzDisplay (Line1, 150, 4);
while (1);
}
图5 显示效果
|