[资料分享]

[emWin] xbf字库 放到外置的SPI FLASH中

[复制链接]
1732|1
手机看帖
扫描二维码
随时随地手机跟帖
sqqdfny|  楼主 | 2019-5-22 11:49 | 显示全部楼层 |阅读模式
下面这几行代码,相信看过emWin手册的人,都不会陌生。
static GUI_FONT xbfFont;                       /* GUI_FONT structure in RAM */
static GUI_XBF_DATA XBF_Data;        /* GUI_XBF_DATA structure in RAM */

static int _cbGetData(U32 Off, U16 NumBytes, void * pVoid, void * pBuffer)
{
    W25XxxReadData(FONT_BASE_ADDR + Off, pBuffer, NumBytes);
    return (0);
}

void CreateXBF_Font(void)
{
    GUI_XBF_CreateFont(&xbfFont,                              /* Pointer to GUI_FONT structure */
                                              &XBF_Data,                         /* Pointer to GUI_XBF_DATA structure */
                                              GUI_XBF_TYPE_PROP,    /* Font type to be created */
                                              _cbGetData,                         /* Pointer to callback function */
                                              NULL);                                  /* Pointer to be passed to callback */
}

//===================================================================
GUI_FONT * SetFont_Xbf(void)
{
    return ((GUI_FONT *)GUI_SetFont(&xbfFont));
}
//===================================================================


FONT_BASE_ADDR  这是XBF文件在FLASH中的起始地址
W25XxxReadData    这是从FLASH中读取数据的函数
关键是这个函数  static int _cbGetData(U32 Off, U16 NumBytes, void * pVoid, void * pBuffer)
Off  是XBF文件的内部偏移
pVoid 是GUI_XBF_CreateFont的最后一个参数,在这里我们不用这个参数。
pBuffer 读回来的数据就到这里了,剩下的就是emWin的事了。



附件给一个可用的FontCvt版本,我从网上找的,已经验证过的,不敢藏私,分享给大家用。用这个文件生成一个XBF文件,把文件下载到FLASH中就可以了。

emWin的字库采用的索引表的方式查找字符,在调用GUI_XBF_CreateFont创建XBF字库时,会读取字库的索引信息填充xbfFont,XBF_Data这两个结构体。

最后上一个简单的例程。

CreateXBF_Font();                                                    //创建XBF字体
GUI_UC_SetEncodeUTF8();                                      //一定要设置这个

GUI_SetFont(GUI_FONT_6X8_ASCII);
GUI_DispStringAt("GUI Start Succ!", 7, 4);

SetFont_Xbf();                                                         //然后像使用其它字体一样,设置XBF字库为当前字体
GUI_DispStringAt("汉字显示测试OK!", 4, 20);         //用起来就是这么简单
GUI_DispStringAt("123ABC四五六七.", 4, 40);

使用特权

评论回复

相关帖子

sqqdfny|  楼主 | 2019-5-22 12:00 | 显示全部楼层
上传例程的图片和字符转换的软件
2ab6923468a.jpeg

FontCvt_V520.rar

147.56 KB

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

21

帖子

1

粉丝