找回密码
 立即注册
搜索
热搜: RA8889 RA8876 RA8875
查看: 556|回复: 0

RA8889/RA8876显示自定义常用汉字

[复制链接]

4

主题

0

回帖

268

积分

版主

积分
268
发表于 2024-4-15 17:08:18 | 显示全部楼层 |阅读模式
本帖最后由 weran 于 2024-7-22 09:26 编辑

本文章介绍如何显示常用汉字,字库编码方式为GB2312,生成的字体字库烧录到FLASH中调用。

一、效果演示
演示范例为GB2312编码的字体字库,字型为楷体,字体大小32x32,可显示常用汉字和全角ASCII字符。



二、GB2312字库生成
使用CharacterMatrix软件生成字库,先使用16x16汉字点阵字体生成当前字体内包含的所有字符共8177个字模,然后全选字模更改为字体设定为宋体,字体大小32x32。



宋体32x32字库字模文件:



三、演示代码
  1.         SPI_NOR_initial_DMA (0,Font_BUS,Font_CS,1,0);

  2.         BTE_Solid_Fill(display_address,canvas_image_width,0,0,0x01,LCD_Width,LCD_Height);                //目标显示区域填充底色0x01
  3.         
  4.         str="自建汉字库:楷体32x32演示";        
  5.         User_Def_Font_Initial(32,0,color256_blue,color256_yellow);        
  6.         Show_User_Def_String(str,songti32,32,0,20,54);

  7.         str="菱致电子.瑞佑科技";        
  8.         User_Def_Font_Initial(32,1,color256_green,color256_yellow);        
  9.         Show_User_Def_String(str,songti32,32,4,20,104);

  10.         str="ABCDEFGHIJKLMNOPQRSTUVWXYZ";        
  11.         User_Def_Font_Initial(32,0,color256_black,color256_white);        
  12.         Show_User_Def_String(str,songti32,32,0,20,144);
  13.         str="abcdefghijklmnopqrstuvwxyz";        
  14.         Show_User_Def_String(str,songti32,32,0,20,184);
  15.         str="0123456789";        
  16.         Show_User_Def_String(str,songti32,32,0,20,224);

  17.         //显存色深恢复初始化状态
  18.         #if defined (MCU_8bit_ColorDepth_8bpp)
  19.                 BTE_S0_Color_8bpp();
  20.         #endif
  21.         #if defined (MCU_8bit_ColorDepth_16bpp) || defined (MCU_16bit_ColorDepth_16bpp)        
  22.                 BTE_S0_Color_16bpp();
  23.         #endif
  24.         #if defined (MCU_8bit_ColorDepth_24bpp) || defined (MCU_16bit_ColorDepth_24bpp_Mode_1) || defined (MCU_16bit_ColorDepth_24bpp_Mode_2)        
  25.                 BTE_S0_Color_24bpp();
  26.         #endif
  27.         
  28.         BTE_Memory_Copy_Chroma_key(display_address,canvas_image_width,0,0,0,canvas_image_width,0,0,0x01,800,480); //目的图层写好的文字透明搬移到显示层,剔除底色0x01
复制代码


四、程序流程图


该方法为将生成的字库二进制文件烧录到FLASH中,通过识别汉字内码计算该字体在FLASH中的地址,然后通过线性DMA将数据写入显存再进行数据延展到屏幕显示。
字体地址计算方法:

GB2312编码方式字体的内码为双字节编码,习惯上称第一个字节为“高字节”,即所谓的区码。第二个字节为“低字节”,即所谓的位码。其编码范围是高位 0xa1~0xfe 低位也是 0xa1~0xfe,且GB2312将代码表分为94个区,每个区94 个位。

改字体在FLASH中的地址=94*(区码-0xA1)+(位码-0xA1);



五、源代码下载





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

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

本版积分规则

QQ|Archiver|手机版|小黑屋|Lcdvision Technology ( 苏ICP备10203891号 )

GMT+8, 2024-11-21 16:42 , Processed in 0.063969 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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