找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1487|回复: 0
打印 上一主题 下一主题
收起左侧

ESK32-360开发板TFT屏显示功能及扩展(3)

[复制链接]
跳转到指定楼层
楼主
本帖最后由 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,
        。。。
};

相应的字符显示函数为:
  1. void LCD_CharDraw(u32 X_Location, u32 Y_Location, u16 *Cptr)
  2. {
  3.   u32 xid = X_Location;
  4.   u32 i = 0, j = 0;
  5.   LCD_StarterSet(X_Location, Y_Location);
  6.   for (i = 0; i < Font_Raw; i++)         //  24
  7.   {
  8.     LCD_WriteRAMPrior();
  9.     for (j = 0; j < Font_Column; j++)    //  16
  10.     {
  11.       if ((Cptr[i] & (1 << j)) == 0x00)
  12.       {
  13.         LCD_WriteRAM(Color_Back);
  14.       }
  15.       else
  16.       {
  17.         LCD_WriteRAM(Color_Text);
  18.       }
  19.     }
  20.     xid++;
  21.     LCD_StarterSet(xid, Y_Location);
  22.   }
  23. }
复制代码
通过分析可知,它所使用的是16*24的点阵字模,字符宽为16个像素点,高为24个像素点。
为此我们也可以通过字模提取软件来为其配置相应的中文字库,以实现专用汉字的显示。

1)字模的提取
使用PCtoLCD2002完美版软件来提取字模,对提取字模的相关设置如图1所示,提取后字模见图2所示。
稍感遗憾的是该软件提取的字模是以字节为单位的,无法直接生成以字为单位的字模,为先解决汉字显示函数,只好先手工完成数据格式的转换。


图1  字模提取的设置



2  提取字模


随后用提取的字模替换一个指定字符的字模,再调用字符显示函数加以测试,可见到显示正确,
这样我们就可以放手解决单字节数据格式的问题了。
2)配置汉字显示函数
经改造相应的汉字显示函数为:
  1. void LCD_CharDisplayA(u32 Line_Num, u32 Column, u8 Ascii)
  2. {
  3.   LCD_CharDrawA(Line_Num, Column, (u8 *)&ASCII_FontA_Table[Ascii * 48]);
  4. }

  5. void LCD_CharDrawA(u32 X_Location, u32 Y_Location, u8 *Cptr)
  6. {
  7.   u32 xid = X_Location;
  8.   u32 i = 0, j = 0;
  9.   u16 u = 0;
  10.   LCD_StarterSet(X_Location, Y_Location);

  11.   for (i = 0; i < Font_Raw; i++)  //24
  12.   {
  13.     LCD_WriteRAMPrior();
  14.    
  15.                    u=Cptr[i*2];
  16.                    for (j = 8; j>0; j--) //Font_Column/2
  17.         {
  18.           if ((u & (1 << (j-1))) == 0x00)
  19.           {
  20.               LCD_WriteRAM(Color_Back);
  21.           }
  22.           else
  23.           {
  24.               LCD_WriteRAM(Color_Text);
  25.           }
  26.         }
  27.    
  28.                    u=Cptr[i*2+1];
  29.                    for (j = 8; j>0; j--)
  30.         {
  31.           if ((u & (1 << (j-1))) == 0x00)
  32.           {
  33.              LCD_WriteRAM(Color_Back);
  34.           }
  35.           else
  36.           {
  37.              LCD_WriteRAM(Color_Text);
  38.           }
  39.         }
  40.         xid++;
  41.                   
  42.         LCD_StarterSet(xid, Y_Location);
  43.   }
  44. }
复制代码

显示图3所示效果的主程序为:
  1. int main(void)
  2. {
  3.   LCD_Init();
  4.   LCD_Config();
  5.   LCD_BackColorSet(Black);
  6.   LCD_TextColorSet(Yellow);
  7.   LCD_StringLineDisplay(Line3, "       Holtek       ");
  8.   LCD_StringLineDisplay(Line4, "     HT32 Series    ");
  9.   LCD_StringLineDisplay(Line5, "     LCD Example    ");

  10.   LCD_CharDisplayA(Line1, 70, 0);
  11.   LCD_CharDisplayA(Line1, 90, 1);
  12.   LCD_CharDisplayA(Line1, 110, 2);
  13.   LCD_CharDisplayA(Line1, 130, 3);
  14.   LCD_CharDisplayA(Line1, 150, 4);

  15.   LCD_PicDraw((144), (100), 48, 100, HT32_Table);
  16.   while (1);
  17. }
复制代码


3 汉字显示效果



4  更改字库内容的显示效果


24*16点阵的字库适合制作显示界面,而16*16点阵字库更适合信息显示,在采用16*16点阵的中文字库的情况下,若配置相应显示函数则可产生图5所示的显示效果。

5 不同规格字模显示效果

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表