想利用emwin在stm32的液晶屏上显示汉字,但是能够直接显示的只是英文,所以需要自己手动一波操作来完成汉字显示。从网上搜过类似的文章,但是自己操作得跟人家的不同,最主要的就是对方电脑的记事本有Unicode编码方式,而我的没有,后来琢磨出UTF-16LE编码方式也行,算是解决问题了。进行了许多失败的尝试,最终成功显示汉字,也给需要的人看看。
下面分两步讲解:
1.字库部分
使用工具:FontCvt.exe,记事本
首先确定自己需要的汉字,然后使用记事本编辑即可。
之后,另存为Unicode或UTF-16LE的编码方式,我的是UTF-16LE,这里就保存为UTF-16LE了。
汉字已经准备好了,现在就来使用FontCvt工具来生成==.c文件==,方法如下
最后,生成song24.c文件就完成字库的制作了。
2.程序部分
(1)将生成好的.c文件添加到Keil工程里,然后调用字体,以下面我使用GUIBuider生成的一个界面为例:
首先,在该界面的.c文件中加入定义:
extern GUI_CONST_STORAGE GUI_FONT GUI_Fontsong24;
如图所示:
之后,使用句柄与回调函数:
case WM_INIT_DIALOG:
GUI_UC_SetEncodeUTF8();
hItem = pMsg->hWin;
FRAMEWIN_SetFont(hItem,&GUI_Fontsong24);
FRAMEWIN_SetText(hItem, "汉字显示");
FRAMEWIN_SetTitleHeight(hItem, 32);
FRAMEWIN_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER);
hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_0);
BUTTON_SetFont(hItem, &GUI_Fontsong24);
BUTTON_SetText(hItem, "汉字显示");
break;
(2)更改相关.c文件的编码方式
这些相关的.c文件分别是main.c文件、制作的字库文件以及使用该字体的.c文件,将它们的编码方式更改为UTF8即可,方式和上面的UTF-16LE一样。我就是因为没有将使用song24字体的界面文件firstpageDLG.c更改为UTF8,害得多费了几个小时o(╥﹏╥)o。
(3)编译属性更改:
也就是加- -locale=english就可了(前面是两个短横线,中间无空格)。
最后,展示结果O(∩_∩)O
参考:
https://blog.youkuaiyun.com/weixin_42157650/article/details/86634119