关于emwin下的汉字显示

emwin本身是不支持直接显示汉字的,需要添加字库来协助显示,还需要选择编码(UTF-8)方式。

就字库的添加有两种:1、直接在项目代码中添加.c的字库(适合较小的字库);2、吧二进制字库文件烧写进flash里面在读取出来(位置字库法,适合较大的字库);

       1、在项目中直接添加字库

          (1)、使用FontCvt生成字库C文件;

          (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);
    
}
   自己搞这个,不知转了多少个弯啊!!!



  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值