TFT显示汉字用字库调用的方法,单片机在FLASH中是如何查询汉字点阵数据的?.bin文件内部格式是什么样的?
我用STM32控制TFT显示汉字,事先将.bin格式的字库烧写进了片外FLASH中,然后资料上说要把汉字在.c文件上的ASCII码转化成汉字内码在FLASH中查询地址。什...
我用STM32控制TFT显示汉字,事先将.bin格式的字库烧写进了片外FLASH中,然后资料上说要把汉字在.c文件上的ASCII码转化成汉字内码在FLASH中查询地址。什么是汉字内码?
字库是.bin格式的,.bin内部的汉字点阵数据是如何排布的?数据和存储地址的关系是什么?比如说:我现在想找到“爱”这个字在FLASH中的首地址,我应该怎么用程序查询? 展开
字库是.bin格式的,.bin内部的汉字点阵数据是如何排布的?数据和存储地址的关系是什么?比如说:我现在想找到“爱”这个字在FLASH中的首地址,我应该怎么用程序查询? 展开
1个回答
展开全部
您好,以下是单片机实践团为您解答:
1、我们先分析使用内部flash的情况:
1)DrawSingle16Hz(30,100, "汽", Red,White,1);
2)函数:void DrawSingle16Hz(u16 x, u16 y, u8 *pHz, u16 LineColor,u16 FillColor, u8 Mod)
3)
typedef struct typFNT_GB16 /*16*16 汉字字模显示数据结构 */
{
char Msk[32];
char Index[2];
}gb16;
4)
gb16 const HzLib[] =
{
0x42,0x00,0x22,0x00,0x23,0xFC,0x04,0x00,0x97,0xF8,0x58,0x00,0x57,0xF0,0x10,0x10,
0x10,0x10,0x20,0x10,0xE0,0x10,0x20,0x10,0x20,0x0A,0x20,0x0A,0x20,0x06,0x20,0x02,
"汽",
0x02,0x00,0x02,0x00,0x7F,0xFC,0x04,0x00,0x04,0x80,0x08,0x80,0x10,0x80,0x3F,0xFC,
0x00,0x80,0x00,0x80,0xFF,0xFE,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,
"车",
}
5)关于字库就是3)&4)里面的东西,写好API函数后直接调用1)即可显示汉字,这是我STM32的处理思路。
2、接下来说说你的外部flash,其实也是一样的,只是有一些变化,内部flash的话编译生成的是程序的一部分,他会自己执行。外部的需要一个读取的过程,也就是读取3)&4)的内容。
我想问您的bin格式字库是怎么生成的,应该也是c的数组编译生成的吧,查找的时候并不是直接安照bin文件的flash地址进行一一对应的,而是通过c的逻辑查找的,不管是什么形式。至于你说的汉字内码这种方式是标准汉字库的做法,就比如3)中的Index或者4)中的具体汉字,只不过他是使用统一的内码来实现汉字表示的。
3、关于片外flash一般做字库都是使用spi型的flash来做的,这个涉及的过程就是查找并读取的过程,建议先搞清楚内部flash的过程。关于汉字内码参考:http://baike.baidu.com/view/1209513.htm
4、常在线,不明白的hi我。
1、我们先分析使用内部flash的情况:
1)DrawSingle16Hz(30,100, "汽", Red,White,1);
2)函数:void DrawSingle16Hz(u16 x, u16 y, u8 *pHz, u16 LineColor,u16 FillColor, u8 Mod)
3)
typedef struct typFNT_GB16 /*16*16 汉字字模显示数据结构 */
{
char Msk[32];
char Index[2];
}gb16;
4)
gb16 const HzLib[] =
{
0x42,0x00,0x22,0x00,0x23,0xFC,0x04,0x00,0x97,0xF8,0x58,0x00,0x57,0xF0,0x10,0x10,
0x10,0x10,0x20,0x10,0xE0,0x10,0x20,0x10,0x20,0x0A,0x20,0x0A,0x20,0x06,0x20,0x02,
"汽",
0x02,0x00,0x02,0x00,0x7F,0xFC,0x04,0x00,0x04,0x80,0x08,0x80,0x10,0x80,0x3F,0xFC,
0x00,0x80,0x00,0x80,0xFF,0xFE,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,
"车",
}
5)关于字库就是3)&4)里面的东西,写好API函数后直接调用1)即可显示汉字,这是我STM32的处理思路。
2、接下来说说你的外部flash,其实也是一样的,只是有一些变化,内部flash的话编译生成的是程序的一部分,他会自己执行。外部的需要一个读取的过程,也就是读取3)&4)的内容。
我想问您的bin格式字库是怎么生成的,应该也是c的数组编译生成的吧,查找的时候并不是直接安照bin文件的flash地址进行一一对应的,而是通过c的逻辑查找的,不管是什么形式。至于你说的汉字内码这种方式是标准汉字库的做法,就比如3)中的Index或者4)中的具体汉字,只不过他是使用统一的内码来实现汉字表示的。
3、关于片外flash一般做字库都是使用spi型的flash来做的,这个涉及的过程就是查找并读取的过程,建议先搞清楚内部flash的过程。关于汉字内码参考:http://baike.baidu.com/view/1209513.htm
4、常在线,不明白的hi我。
追问
首先非常感谢您详细的回答!我已经可以应用内部FLASH法显示汉字了。我看的历程里在从外部FLASH中查找字的时候并非是一个一个搜索的,而是通过一个计算公式直接算出地址的,该公式我现在没法打出来(历程在家里),十分抱歉。类似于:FLASH_read(x1+0x??|(x2+0x??))根据这个地址就读出所需汉字的字码了,其中x1\x2是汉字的高8位和低8位。说明上只是说是根据汉字内码的顺序查找的。.bin文件是他在网上下的。很神奇,神马字里面都有
追答
OK,既然解决了那就好,也学习下你的方法,百度知道利人利己啊
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询