|
本帖最后由 weran 于 2024-7-22 09:26 编辑
本文章介绍如何显示常用汉字,字库编码方式为GB2312,生成的字体字库烧录到FLASH中调用。
一、效果演示
演示范例为GB2312编码的字体字库,字型为楷体,字体大小32x32,可显示常用汉字和全角ASCII字符。
二、GB2312字库生成
使用CharacterMatrix软件生成字库,先使用16x16汉字点阵字体生成当前字体内包含的所有字符共8177个字模,然后全选字模更改为字体设定为宋体,字体大小32x32。
宋体32x32字库字模文件:
三、演示代码
- SPI_NOR_initial_DMA (0,Font_BUS,Font_CS,1,0);
- BTE_Solid_Fill(display_address,canvas_image_width,0,0,0x01,LCD_Width,LCD_Height); //目标显示区域填充底色0x01
-
- str="自建汉字库:楷体32x32演示";
- User_Def_Font_Initial(32,0,color256_blue,color256_yellow);
- Show_User_Def_String(str,songti32,32,0,20,54);
- str="菱致电子.瑞佑科技";
- User_Def_Font_Initial(32,1,color256_green,color256_yellow);
- Show_User_Def_String(str,songti32,32,4,20,104);
- str="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
- User_Def_Font_Initial(32,0,color256_black,color256_white);
- Show_User_Def_String(str,songti32,32,0,20,144);
- str="abcdefghijklmnopqrstuvwxyz";
- Show_User_Def_String(str,songti32,32,0,20,184);
- str="0123456789";
- Show_User_Def_String(str,songti32,32,0,20,224);
- //显存色深恢复初始化状态
- #if defined (MCU_8bit_ColorDepth_8bpp)
- BTE_S0_Color_8bpp();
- #endif
- #if defined (MCU_8bit_ColorDepth_16bpp) || defined (MCU_16bit_ColorDepth_16bpp)
- BTE_S0_Color_16bpp();
- #endif
- #if defined (MCU_8bit_ColorDepth_24bpp) || defined (MCU_16bit_ColorDepth_24bpp_Mode_1) || defined (MCU_16bit_ColorDepth_24bpp_Mode_2)
- BTE_S0_Color_24bpp();
- #endif
-
- 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);
五、源代码下载
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|