emWin - 汉字字库生成及显示

使用了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. 差不多结束了,咱来看看最终的结果。


 

  • 6
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 18
    评论
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值