本帖最后由 jinglixixi 于 2020-8-9 11:20 编辑
3. 增添汉字显示功能 在TFT屏显示功能中提供了字符及字符串的显示函数,其字符库的结构为: FONT_TYPE ASCII_Font_Table[] = { /* Space ' ' */ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 。。。 };
相应的字符显示函数为: - void LCD_CharDraw(u32 X_Location, u32 Y_Location, u16 *Cptr)
- {
- u32 xid = X_Location;
- u32 i = 0, j = 0;
- LCD_StarterSet(X_Location, Y_Location);
- for (i = 0; i < Font_Raw; i++) // 24
- {
- LCD_WriteRAMPrior();
- for (j = 0; j < Font_Column; j++) // 16
- {
- if ((Cptr[i] & (1 << j)) == 0x00)
- {
- LCD_WriteRAM(Color_Back);
- }
- else
- {
- LCD_WriteRAM(Color_Text);
- }
- }
- xid++;
- LCD_StarterSet(xid, Y_Location);
- }
- }
复制代码通过分析可知,它所使用的是16*24的点阵字模,字符宽为16个像素点,高为24个像素点。 为此我们也可以通过字模提取软件来为其配置相应的中文字库,以实现专用汉字的显示。
1)字模的提取 使用PCtoLCD2002完美版软件来提取字模,对提取字模的相关设置如图1所示,提取后字模见图2所示。 稍感遗憾的是该软件提取的字模是以字节为单位的,无法直接生成以字为单位的字模,为先解决汉字显示函数,只好先手工完成数据格式的转换。
图1 字模提取的设置
图2 提取字模
随后用提取的字模替换一个指定字符的字模,再调用字符显示函数加以测试,可见到显示正确, 这样我们就可以放手解决单字节数据格式的问题了。 2)配置汉字显示函数 经改造相应的汉字显示函数为: - void LCD_CharDisplayA(u32 Line_Num, u32 Column, u8 Ascii)
- {
- LCD_CharDrawA(Line_Num, Column, (u8 *)&ASCII_FontA_Table[Ascii * 48]);
- }
-
- void LCD_CharDrawA(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 < Font_Raw; i++) //24
- {
- LCD_WriteRAMPrior();
-
- u=Cptr[i*2];
- for (j = 8; j>0; j--) //Font_Column/2
- {
- 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);
- }
- }
复制代码
显示图3所示效果的主程序为: - int main(void)
- {
- LCD_Init();
- LCD_Config();
- LCD_BackColorSet(Black);
- LCD_TextColorSet(Yellow);
- LCD_StringLineDisplay(Line3, " Holtek ");
- LCD_StringLineDisplay(Line4, " HT32 Series ");
- LCD_StringLineDisplay(Line5, " LCD Example ");
-
- LCD_CharDisplayA(Line1, 70, 0);
- LCD_CharDisplayA(Line1, 90, 1);
- LCD_CharDisplayA(Line1, 110, 2);
- LCD_CharDisplayA(Line1, 130, 3);
- LCD_CharDisplayA(Line1, 150, 4);
-
- LCD_PicDraw((144), (100), 48, 100, HT32_Table);
- while (1);
- }
复制代码
图3 汉字显示效果
图4 更改字库内容的显示效果
24*16点阵的字库适合制作显示界面,而16*16点阵字库更适合信息显示,在采用16*16点阵的中文字库的情况下,若配置相应显示函数则可产生图5所示的显示效果。 图5 不同规格字模显示效果
|