关于emwin下的汉字显示
Posted yll1
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于emwin下的汉字显示相关的知识,希望对你有一定的参考价值。
emwin本身是不支持直接显示汉字的,需要添加字库来协助显示,还需要选择编码(UTF-8)方式。
就字库的添加有两种:1、直接在项目代码中添加.c的字库(适合较小的字库);2、吧二进制字库文件烧写进flash里面在读取出来(位置字库法,适合较大的字库);
1、在项目中直接添加字库
(2)、使用U2C获得显示字的unicode编码;
(3)、添加进入项目,显示打印;
代码:
GUI_SetFont(&GUI_Font16); //选择字库
GUI_UC_SetEncodeUTF8(); //设置编码
GUI_DispStringAt("\\xe7\\x91\\x9e\\xe5\\xba\\xb7\\xe5\\xae\\x8f\\xe4\\xb8\\x9a", 3, 3); //在制定位置打印
2、从外部SPI flash读取(无文件系统)
(1)、使用FontCvt生成二进制字库文件,并且烧写进外部存储(这里生成的是XBF格式,使用SPI 串口烧写进SPI flash中。这个看具体需要,方法不同);
(2)、使用U2C获得显示字的unicode编码;
(3)、项目中添加代码GUI_XBF_CreateFont函数,打印实现;
代码:
回调函数:
static int _cbGetData(U32 Off, U16 NumBytes, void *pVoid, void *pBuffer)
spinorflashReadData(pBuffer, Off, NumBytes); //直接从spiflash中读取数据
//如果需要多个字库,把上面的Off改为Off+字库地址偏移就可以了。不能直接写字库地址偏移
return 0;
编码打印:
GUI_XBF_CreateFont(&XBF_Font16, &XBF_Data,GUI_XBF_TYPE_PROP, _cbGetData, (void *)0);
GUI_UC_SetEncodeUTF8();
GUI_DispStringAt("\\xe7\\x91\\x9e\\xe5\\xba\\xb7\\xe5\\xae\\x8f\\xe4\\xb8\\x9a", 3, 3);
3、从外部flash读取(有文件系统)
步骤与无文件系统一样,附代码:
static int __cbGetData(U32 Off, U16 NumBytes, void *pVoid, void *pBuffer)
FIL *FontFile;
FontFile = (FIL *)pVoid;
fr = f_lseek(FontFile, Off);
if(FR_OK != fr)
return 1;
fr = f_read(FontFile, pBuffer, NumBytes, &bw);
if(FR_OK != fr)
return 1;
return 0;
static void __ShowXBF(void)
fr = f_open(&Fontfile, "Font16.xbf", FA_OPEN_EXISTING | FA_READ);
if(FR_OK != fr)
GUI_DispDecAt(fr, 2, 3, 3);
return ;
GUI_XBF_CreateFont(&XBF_Font16, &XBF_Data, GUI_XBF_TYPE_PROP_AA4_EXT, __cbGetData, &Fontfile);
自己搞这个,不知转了多少个弯啊!!!
以上是关于关于emwin下的汉字显示的主要内容,如果未能解决你的问题,请参考以下文章
第3版emWin教程第32章 emWin6.x的矢量字体(支持汉字全字库,Unicode编码,QSPI Flash方案)
第3版emWin教程第4章 emWin上手之STM32H7 LTDC基础知识