418|0

447

帖子

0

资源

一粒金砂(高级)

【ESK32-360测评】+TFT屏显示功能及扩展(3)

本帖最后由 jinglixixi 于 2020-8-9 00:02 编辑

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 & (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所示。

稍感遗憾的是该软件提取的字模是以字节为单位的,无法直接生成以字为单位的字模,为先解决汉字显示函数,只好先手工完成数据格式的转换。

image-20200808235518-1.png

图1 字模提取的设置

 

image-20200808235518-2.png

图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);
}

image-20200808235518-3.png

图3 汉字显示效果

 

image-20200808235518-4.png

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

 

24*16点阵的字库适合制作显示界面,而16*16点阵字库更适合信息显示,在采用16*16点阵的中文字库的情况下,

若配置相应显示函数则可产生图5所示的显示效果。

image-20200808235518-5.png

图5不同规格字模显示效果


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

关闭
站长推荐上一条 1/5 下一条

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表