|
本帖最后由 weran 于 2024-7-22 09:25 编辑
本文章介绍如何显示中英文混合字符串,并且ASCII字符为半角经过缩进调整后显示。
一、效果演示
演示范例为中英文混合输出显示,简体中文汉字为GB2312编码方式、字型为宋体、大小 24x24,英文ASCII字符字型为Arial、大小 24x24、缩进之后显示。
二、字库的生成
1、中文字库的生产使用CharacterMatrix软件,先使用16x16汉字点阵字体生成当前字体内包含的所有字符共8177个字模,然后全选字模更改为字体设定为宋体,字体大小24x24,然后导出二进制文件(bin文件)。
2、ASCII字符字库生产使用CharacterMatrix软件;编辑/添加单写文字/输入所有ASCII字符;全选字模 ,设置/字模字体,设定合适的字体格式与大小;逐个调整字符使其全部进行左对齐;调整好之后导出代码(.h文件)。
中英文字库工程文件:
3、生成好的ASCII字库在开头添加一个字符大小(24*24/8)的空数据,并将文件调整为数组的格式。
4、将调整好的ASCII文件以头文件的方式引用到计算ASCII字符实际宽度的代码中并将输出的数组添加到ASCII字库文件中,可参考RA8889/RA8876显示缩进自定义ASCII字符方法这篇文章。
计算ASCII字符实际宽度的代码文件:
制作好的ASCII字库文件:
三、演示代码
- SPI_NOR_initial_DMA (0,Font_BUS,Font_CS,1,0);
- str="苏州菱致电子 @lcdvision.com.cn";
- Show_User_Def_String(str,songti24,24,3,60,100,1,color65k_yellow,color65k_blue);//后三个参数 汉字和ASCII字符的透明度、前景色、背景色
- //显存色深恢复初始化状态
- #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
复制代码
四、程序流程图
该流程为将生成的中文字库(.bin文件)烧录到FLASH中,ASCII字库添加到项目工程中头文件引用数组,中文汉字字节最高位为1,ASCII字符单字节高位为0,以此判断该字体为中汉字或ASCII字符 ,汉字通过识别该字体内码计算该字体在FLASH中的地址,然后通过线性DMA将数据写入显存再进行数据延展到屏幕显示;ASCII字符通过识别该字符内码计算该字符在数组中的地址,然后调用数组中的数据进行打点显示到屏幕上。
五、源代码下载
分享
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|