硬汉嵌入式论坛

 找回密码
 立即注册
查看: 9009|回复: 12
收起左侧

[emWin] xbf字库 放到外置的SPI  FLASH中(有了这个,不用再考虑其它的外挂字库了)

[复制链接]

2

主题

12

回帖

22

积分

新手上路

积分
22
发表于 2014-5-10 21:41:35 | 显示全部楼层 |阅读模式
       这个贴其实是没必要发的,因为网上已有太多例子,都是讲如何使用xbf字库的,而且官方的文档里面也说得很明白。但是我想还是会有很多人不明白怎么用,我最开始也卡了好久。主要是没想明白这个XBF字库的实现方式。
       网上之所以找不到太多相关的资料,只有一个原因,就是太简单了,会的人没把这当回事。
      下面这几行代码,相信看过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);
IMAG0152.jpg

FontCvt_V520.rar (148 KB, 下载次数: 374)
回复

使用道具 举报

17

主题

132

回帖

183

积分

初级会员

积分
183
发表于 2014-5-11 02:56:48 | 显示全部楼层
FLASH不用文件系统吗?能提供个例程吗?
回复

使用道具 举报

2

主题

12

回帖

22

积分

新手上路

积分
22
 楼主| 发表于 2014-5-11 22:18:08 | 显示全部楼层
不用文件系统,W25X32的读取速度可到75M,我想大多数应用都夠了。而且可以很方便地更换字体,价格也便宜,没有理由不用。至于FLASH的读取,这不应该是个问题。
如果要更快的速度,可用SPIFI接口的FLASH。
回复

使用道具 举报

17

主题

132

回帖

183

积分

初级会员

积分
183
发表于 2014-5-12 01:45:04 | 显示全部楼层

Re:xbf字库 放到外置的SPI  FLASH中(有了这个,不用再考虑其它的

谢谢共享,前面做过SD卡加文件系统的字库,显示比较慢,一直在想如何不用文件系统调用FLASH字库,现在终于明白了。[s:151]
回复

使用道具 举报

4

主题

39

回帖

130

积分

初级会员

积分
130
发表于 2014-5-12 10:03:50 | 显示全部楼层

Re:xbf字库 放到外置的SPI  FLASH中(有了这个,不用再考虑其它的

学习下
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106678
QQ
发表于 2014-5-12 10:55:44 | 显示全部楼层
感谢分享,加精
回复

使用道具 举报

12

主题

134

回帖

170

积分

初级会员

积分
170
发表于 2014-12-13 14:40:27 | 显示全部楼层
学习了,好贴,正需要
回复

使用道具 举报

1

主题

7

回帖

1

积分

新手上路

积分
1
发表于 2015-6-5 17:40:28 | 显示全部楼层

Re:xbf字库 放到外置的SPI  FLASH中(有了这个,不用再考虑其它的

不错,很厉害。 有一个地方不是理解,就是SPI FLASH里面的字模数据和数据显示是怎么衔接起来的。在那个文件里呢,谢谢!
回复

使用道具 举报

1

主题

7

回帖

1

积分

新手上路

积分
1
发表于 2015-6-5 17:41:54 | 显示全部楼层

Re:xbf字库 放到外置的SPI  FLASH中(有了这个,不用再考虑其它的

楼主,可否共享下完整的代码呢,谢谢!
回复

使用道具 举报

3

主题

22

回帖

31

积分

新手上路

积分
31
发表于 2019-5-14 15:41:49 | 显示全部楼层
谢谢楼主无私的分享
回复

使用道具 举报

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2022-12-4 15:28:00 | 显示全部楼层
怎么将字库文件的数据下载到spi flash,不用sd卡的方式。我现在将字库烧进去了,调用字库,显示乱码
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106678
QQ
发表于 2022-12-5 01:43:39 | 显示全部楼层
qazwsx93101693 发表于 2022-12-4 15:28
怎么将字库文件的数据下载到spi flash,不用sd卡的方式。我现在将字库烧进去了,调用字库,显示乱码

先保证正确烧录进去了,

然后就是字库的编码问题了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-29 10:48 , Processed in 0.212048 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表