找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3964|回复: 1
收起左侧

Stm32使用Emwin显示汉子的方法,不使用外部储存

[复制链接]
ID:242058 发表于 2020-2-7 18:26 | 显示全部楼层 |阅读模式
EMWIN中显示中文

该方法使用的FONTCVT工具生成子库的方式,针对少量中文的显示会很方便。
步骤一
:创建文本文档并将需要支持的中文汉子输入到文档中。汉子是按照编码来获取的,所以相同汉子不需要重复输入。如下图所示:
clipboard.png

步骤二:
修改文本文档的编码方式并保存,此处修改编码方式使用的notepad++,修改为下图的编码格式(UCS-2-Little Endianb编码)。编码方式不对时,会出现下图的提示,文件会导入失败。修改完编码格式后文件就准备就绪了。
2.png

3.png

步骤三:
下面进行字库软件的配置,打开FontCvt软件按下图进行设置显示中文,Encodeing必须选择"16 Bit UNICODE";字体选择也必须是包含中文的(微软雅黑、宋体等均可)。软件打开后,默认包含所有文字。点击“Edit-> Disable all characters”菜单,不包含任何字体。(Tips:白色背景为选中文字,灰色背景为未选中文件)
4.png


5.png


6.png

步骤四:
下面开始导入字库文件,也就是步骤一、二产生的Txt文件。 回到FontCvtST.exe软件,单击“Edit->Read pattern file ...”后,选中txt文本文档
(Tips:如果弹出“The following character codes found in ...”的对话框,是因为txt文档的编码方式没有选择对)
7.png

步骤五:
单击“File -> Save As ...” 生成一个“yahei20.c”的文件,将该文件添加到我们的工程里。添加到工程后,如下图所示,再c文件的开头会有一个字库文件extern GUI_CONST_STORAGE GUI_FONT GUI_Fontyahei20;
8.png


9.png

步骤六:
使用字库文件方法如下图所示,有两种情况,如果keil工程的编码格式为UTF-8,此时想要显示中文只需要直接输入中文就可以调用,如下所示
10.png

  1. extern GUI_CONST_STORAGE GUI_FONT GUI_Fontyahei20;  //声明字体
  2. int main(void)
  3. {
  4.         SetSysClockInternal(); //使用内部时钟
  5.         SysTick_Init();
  6.         NVIC_Configuration();
  7.         PeriIO_Init();
  8.         OLED_Config();
  9.         I2C_GPIO_Init();
  10.         uart1_init(115200);
  11.         BME280_init();

  12.         RCC_AHBPeriphClockCmd(RCC_AHBPeriph_CRC,ENABLE);//开启CRC用于emwin
  13.         WM_SetCreateFlags(WM_CF_MEMDEV);
  14.         GUI_Init();
  15.         
  16.         GUI_SetFont(&GUI_Fontyahei20);
  17.         GUI_UC_SetEncodeUTF8();         
  18.         GUI_DispStringAt("压强",0,20);  //通过keil软件自己的编码来显示汉子
  19.         GUI_DispStringAt("温度",20,20);
  20.         GUI_DispStringAt("湿度",40,20);
  21. }
复制代码


如果keil工程的编码格式不是UTF-8,想要显示汉子,需要先通过U2C软件得到汉子的UTF8编码,然后通过编码值来显示汉子。比如想要显示汉子“压强”,新建文本文档,输入汉子“压强”,保存文件为UTF-8格式,然后通过软件U2C打开刚刚保存的文件,点击转换会在同路径下生成一个同名的.c文件。然后点击close。打开.c文件里面就是汉子对应的编码值,如压强生成的编码值就是"\xe5\x8e\x8b\xe5\xbc\xba"。显示汉子时只需要将上面的压强汉子换成对应的编码值即可,如下代码所示
11.png


12.png


13.png

  1. extern GUI_CONST_STORAGE GUI_FONT GUI_Fontyahei20;  //声明字体
  2. int main(void)
  3. {

  4.         SetSysClockInternal(); //使用内部时钟
  5.         SysTick_Init();
  6.         NVIC_Configuration();
  7.         PeriIO_Init();
  8.         OLED_Config();
  9.         I2C_GPIO_Init();
  10.         uart1_init(115200);
  11.         BME280_init();
  12.         
  13.         RCC_AHBPeriphClockCmd(RCC_AHBPeriph_CRC,ENABLE);//开启CRC用于emwin
  14.         WM_SetCreateFlags(WM_CF_MEMDEV);
  15.         GUI_Init();
  16.         
  17.         GUI_SetFont(&GUI_Fontyahei20);
  18.         GUI_UC_SetEncodeUTF8();
  19.         GUI_DispStringAt("\xe5\x8e\x8b\xe5\xbc\xba",0,20);  //通过编码值显示汉子,显示压强
  20. }
复制代码



该说明使用工具如下,可以在附件中下载


clipboard.png

工具.zip

241.89 KB, 下载次数: 22, 下载积分: 黑币 -5

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:108573 发表于 2020-2-9 10:17 | 显示全部楼层
正在学习emwin,这种方式我在模拟器上测试了,确实很方便。谢谢楼主分享
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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