回答

收藏

[原创] 独特的FireBeetle 点阵屏字库构造

DFROBOT DFROBOT 4460 人阅读 | 0 人回复 | 2017-12-31

要在点阵屏上显示字符信息就必须为其提供相应的字库,对于FireBeetle 点阵屏来说它的字库构造是较为独特的。一般来说字库分为2类,一类是点阵式字库,另一类是矢量字库。就微控器来讲多是采用点阵字库,FireBeetle 点阵屏的字库也属点阵字库,其结构如下:
const byte FONT_5X4 [] PROGMEM = {
0b00000000, //
0b11101000, // !
0b11000000, 0b00000000, 0b11000000, // "
0b01010000, 0b11111000, 0b01010000, 0b11111000, 0b01010000, // #
0b00000000, 0b00000000, 0b00000000, 0b00000000, // $
0b11001000, 0b11010000, 0b00100000, 0b01011000, 0b10011000, // %
0b01010000, 0b10101000, 0b10011000, 0b01011000, // &
0b11000000, // '
。。。
0b10000001, 0b11111111, // ]
0b01000000, 0b10000000, 0b01000000, // ^
0b00000001, 0b00000001, 0b00000001, 0b00000001, // _
};
下面是常规的点阵字库,对比一下是否差别很大。
const unsigned char font6x8[][6] =
{
    { 0x00, 0x00, 0x00,0x00, 0x00, 0x00 },   // sp
    { 0x00, 0x00, 0x00,0x2f, 0x00, 0x00 },   // !
    { 0x00, 0x00, 0x07,0x00, 0x07, 0x00 },   // "
    { 0x00, 0x14, 0x7f,0x14, 0x7f, 0x14 },   // #
    { 0x00, 0x24, 0x2a,0x7f, 0x2a, 0x12 },   // $
    { 0x00, 0x62, 0x64,0x08, 0x13, 0x23 },   // %
    。。。
    { 0x00, 0x1C, 0xA0,0xA0, 0xA0, 0x7C },   // y
    { 0x00, 0x44, 0x64,0x54, 0x4C, 0x44 },   // z
    { 0x14, 0x14, 0x14,0x14, 0x14, 0x14 }    // horiz lines
};
经分析才发现FireBeetle 点阵屏的字库是一种压缩型点阵字库,它在使用时还要配合相应的参数来工作,其形式如下:
intFONT_5X4_END [] = {
1,2, 5, 10, 14, 19, 23, 24,
26,28, 31, 36, 38, 41, 42, 46,
49,52, 56, 59, 63, 66, 70, 74,
78,82, 83, 85, 88, 91, 94, 98,
103,107, 110, 114, 117, 120, 123, 127,
131,134, 137, 141, 144, 149, 154, 158,
161,166, 169, 173, 176, 180, 185, 190,
193,196, 200, 202, 206, 208, 211, 214
};
5*4的点阵字符库为例,其一个字符通常要占用4个字节。但对于一些字符来说,其需要点亮的点阵却很少,以较少的字节就可显示出该字符。例如“!”的关键字节只需一个字节,其内容为0b11101000
显示的形式为:
*     
*     
*     
      
*     
而对于笔画较复杂的字符,则需要较多的字节来表示,如“#”就需要5个字节,其内容如下:
0b01010000, 0b11111000, 0b01010000, 0b11111000, 0b01010000
显示的形式为:
*  *     
* * * * *   
*  *     
* * * * *   
*  *     
因而在FireBeetle 点阵屏的字库中只存储关键的字节,对于为零的字节则不予存储。为了在显示过程中,明确要读取的字节数,就需借助辅助参数来解决。
以数组FONT_5X4_END [] = {1,2, 5, 10, 14, 19, 23, 24,。。。}为例,其第一个字符占1个字节,第二个字符占1个字节(2-1),第三个字符占3个字节(5-2),第四个字符占5个字节(10-5)。这便是FireBeetle 点阵屏的压缩型字库结构和显示原理,在编写相应程序的情况下即可显示字符的再现。
通过程序的分析可知,FireBeetle点阵屏提供了FONT_5X464个字符)和FONT_8X464个字符)两种字符库,若想实现汉字的显示,仿此结构构建相应的字库及显示函数也是可行的。
分享到:
回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条