sqqdfny 发表于 2019-5-22 11:49

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

下面这几行代码,相信看过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

上传例程的图片和字符转换的软件
页: [1]
查看完整版本: [emWin] xbf字库 放到外置的SPI FLASH中