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

RA8889/RA8876显示繁体字及生僻字调用方法

[复制链接]

4

主题

0

回帖

336

积分

版主

积分
336
发表于 2024-4-10 16:19:56 | 显示全部楼层 |阅读模式
本帖最后由 weran 于 2024-7-22 09:28 编辑

一、实例效果图


当设计需要用到繁体字、生僻字时,可以使用GBK的字符集而且GBK内码完全兼容GB2312,同时支持繁体字并对生僻汉字和少数民族文字进行了扩充,总汉字数有2万多个。我这里使用高通字库软件生成GBK字库,高通字库软件会生成一个二进制文件和点阵编码范围列表文档。


点阵编码范围列表:

编码范围                    字符序号范围                每字节编码含字符数(高字节->次低字节)
  0xA1A1 - 0xA9FE            0 - 845                    *94, *1.

GBK扩充5区:
  0xA840 - 0xA9A0            846 - 1039               *97, *1.
  0xB0A1 - 0xF7FE            1040 - 7807              *94, *1.

GBK扩充3区:
  0x8140 - 0xA0FE            7808 - 13919            *191, *1.

GBK扩充4区:
  0xAA40 - 0xFDA0           13920 - 22067           *97, *1.
  0xFE40 - 0xFE4F            22068 - 22083            -, *1.

(扩充4区可以整合到一个调用, 即0xAA40 - 0xFEA0区)
GBK 扩充3区/4区的范围中, 剔除'xx7F'的码位字符, 可 低位 > 0x7F, 序号-1操作.
文件共有字符数: 22084 个.


二、演示代码

1、根据点阵编码范围列表文档编写出字体的索引代码
  1. /*****************************************************
  2. // 显示字符串函数
  3. // str:字符串
  4. // Font_Lib_Offset:汉字库在FLASH中地址偏移,宏定义预设
  5. // Font_Size:字型大小
  6. // Font_Gap:字符间距
  7. // x & y:字符串显示坐标
  8. ******************************************************/
  9. void Show_User_Def_String(char *str,unsigned long Font_Lib_Offset,unsigned short Font_Size,unsigned short Font_Gap,unsigned short x,unsigned short y)
  10. {
  11.   unsigned short i,len;
  12.         unsigned short hanziIndex;
  13.         unsigned char  hanziCode[200];        
  14.         
  15.         strcpy((char*)hanziCode,str);
  16.         len=strlen(&*hanziCode)/2;
  17.          
  18.         for(i=0;i<len;i++)
  19.         {
  20.                 if(hanziCode[2*i]>=0xA1 && hanziCode[2*i]<=0xA9 && hanziCode[2*i+1]>=0xA1)        //A3A1--A3FF
  21.                 {        
  22.                         hanziCode[2*i]-=0xA1;        //区码
  23.                         hanziCode[2*i+1]-=0xA1; //位码
  24.                         Font_Lib_Offset=0*Font_Size*Font_Size/8;
  25.                         hanziIndex=94*(hanziCode[2*i])+(hanziCode[2*i+1]);                  
  26.                 }

  27.                 if(hanziCode[2*i]>=0xB0 && hanziCode[2*i]<=0xF7 && hanziCode[2*i+1]>=0xA1)        //GBK扩充5区 常用字   0xB0A1 - 0xF7FE
  28.                 {        
  29.                         hanziCode[2*i]-=0xB0;        //区码
  30.                         hanziCode[2*i+1]-=0xA1; //位码
  31.                         Font_Lib_Offset=1040*Font_Size*Font_Size/8;
  32.                         hanziIndex=94*(hanziCode[2*i])+(hanziCode[2*i+1]);                  
  33.                 }
  34.                 if(hanziCode[2*i]>=0x81 && hanziCode[2*i]<=0xA0)        //GBK扩充3区 GBK编码包含字体  0x8140 - 0xA0FE
  35.                 {        
  36.                         hanziCode[2*i]-=0x81;        //区码
  37.                         hanziCode[2*i+1]-=0x40; //位码
  38.                         Font_Lib_Offset=7808*Font_Size*Font_Size/8;  
  39.                         hanziIndex=191*(hanziCode[2*i])+(hanziCode[2*i+1]);                  
  40.                 }

  41.                 if(hanziCode[2*i]>=0xAA && hanziCode[2*i]<=0xFD && hanziCode[2*i+1]<=0xA0)        //GBK扩充4区 偏僻字体 繁体   0xAA40 - 0xFDA0
  42.                 {        
  43.                         hanziCode[2*i]-=0xAA;        //区码
  44.                         hanziCode[2*i+1]-=0x40; //位码
  45.                         Font_Lib_Offset=13920*Font_Size*Font_Size/8;
  46.                         hanziIndex=97*(hanziCode[2*i])+(hanziCode[2*i+1]);                  
  47.                 }
  48.                
  49.                 Show_User_Def_Font(hanziIndex, Font_Lib_Offset, Font_Size, x+Font_Size*i+Font_Gap*(i-1)-4*i, y);
  50.         }
  51. }
复制代码
2、main.c演示代码
  1. SPI_NOR_initial_DMA (0,Font_BUS,Font_CS,1,0);  //FLASH<128Mb  BUS 1   CS 2

  2.                 BTE_Solid_Fill(display_address,canvas_image_width,0,0,0x01,LCD_Width,LCD_Height);                 
  3.                 User_Def_Font_Initial(32,1,color256_green,color256_yellow);
  4.                 //输出常用字 偏僻字 繁体字   32x32
  5.                 str="蘇州菱致電子液晶顯示齉龘龘靐齉齾甪直瓛";        //GBK编码,使用VSCode软件编辑文字  
  6.                 Show_User_Def_String(str,GBK_SongTi_32,32,4,100,200);

  7.                 #if defined (MCU_8bit_ColorDepth_8bpp)
  8.                         BTE_S0_Color_8bpp();
  9.                 #endif
  10.                 #if defined (MCU_8bit_ColorDepth_16bpp) || defined (MCU_16bit_ColorDepth_16bpp)        
  11.                         BTE_S0_Color_16bpp();
  12.                 #endif

  13.                 #if defined (MCU_8bit_ColorDepth_24bpp) || defined (MCU_16bit_ColorDepth_24bpp_Mode_1) || defined (MCU_16bit_ColorDepth_24bpp_Mode_2)        
  14.                         BTE_S0_Color_24bpp();
  15.                 #endif
  16.                
  17.                 BTE_Memory_Copy_Chroma_key(display_address,canvas_image_width,0,0,0,canvas_image_width,0,0,0x01,800,480);  
复制代码
三、程序流程图



四、源代码下载:




本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2025-1-18 15:47 , Processed in 0.118262 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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