使用了emWin之后,除了画图形或bmp之外,另外一个大头就是显示字符了。字符包括ASCII码,当然最重要的就是汉字显示了。
这里就介绍如何生成自定义的汉字字库,以及如何显示在TFT屏幕上。
硬件准备:GG DK3750或支持emWin的设备
软件准备: GG DK3750 -> Example -> guidemo, FontCvt.exe, U2C.exe
1. 打开Simplicity Studio目录下的reptile\emwin\exe文件夹,安装SetupFontCvt_V516.exe。
2. 安装完毕之后,双击打开Font converter for emWin, 点击File - > New,在弹出来的窗口中,选择Standard, Encoding 选择16 Bit UNICODE。点击OK。
3. 在字体窗口,选择合适的字体,这里选择常用的宋体。字形选择常规,大小一般选择16。最常用的汉字大小就是16*16像素的。
4. 默认生成的字库,是包含所有UNICODE字符的字库,那个可是很大的。记得应该是差不多800KB字节吧。这里先使用一些技巧,只产生我们需要的汉字的字库以及ASCII码的字库。
5. 点击Edit -> Disable all characters。 失能所有的字符.
6. 因为要显示英文,因此点击Edit -> Enable range of characters, 在弹出来的窗口中,选择范围0 ~ 7F。
7. 使用网络工具,查询需要的字符的UINCODE地址,然后右键,选择Toggle characters。
8. 用网络工具,查询如下的字串 "挪威能微公司上海办事处"
9. File -> Save,保存类型选择为C-files(*.c)。此处暂时命名为Songti16.c。到此,字符我们已经准备好了,接下来就是如何显示了。
10. emWin如何显示呢,需要将汉字转成emWin能识别的字串,才能显示。
11. 打开记事本,里面写入要显示的字串,例如这里写入 挪威能微公司上海办事处
12. 点击保存,保存的时候,编码要选择为UTF-8格式。
13. 打开U2C.exe, 载入12步创建的Txt档,然后点击Convert,产生相应的.c文档。
产生的内容:
"\xe6\x8c\xaa\xe5\xa8\x81\xe8\x83\xbd\xe5\xbe\xae\xe5\x85\xac\xe5\x8f\xb8\xe4\xb8\x8a\xe6\xb5\xb7\xe5\x8a\x9e\xe4\xba\x8b\xe5\xa4\x84"
14. 打开GG DK3750 -> example -> guidemo,用include包含Songti16.c。
15. 在main.c创建一个字符串,内容就是原先C文件里面的内容。
static const char * _apStrings[] = {
"\xe6\x8c\xaa\xe5\xa8\x81\xe8\x83\xbd\xe5\xbe\xae\xe5\x85\xac\xe5\x8f\xb8\xe4\xb8\x8a\xe6\xb5\xb7\xe5\x8a\x9e\xe4\xba\x8b\xe5\xa4\x84"
};
16.源代码如下:
#include "Songti16.c"
static const char * _apStrings[] = {
"\xe6\x8c\xaa\xe5\xa8\x81\xe8\x83\xbd\xe5\xbe\xae\xe5\x85\xac\xe5\x8f\xb8\xe4\xb8\x8a\xe6\xb5\xb7\xe5\x8a\x9e\xe4\xba\x8b\xe5\xa4\x84"
};
static const char * _apStringsE[] = {
"Energy Micro AS"
};
int main(void)
{
GUI_Init();
GUI_Clear();
unsigned long i;
GUI_SetFont(&GUI_FontSongti16);
GUI_UC_SetEncodeUTF8();
GUI_SetColor(GUI_YELLOW);
for (i = 0; i < GUI_COUNTOF(_apStrings); i++) {
GUI_DispStringAt(_apStrings[i], 70, 0);
GUI_DispNextLine();
}
GUI_SetColor(GUI_DARKCYAN);
for (i = 0; i < GUI_COUNTOF(_apStrings); i++) {
GUI_DispStringAt(_apStringsE[i], 70, 50);
GUI_DispNextLine();
}
while(1);
}
17. 差不多结束了,咱来看看最终的结果。