查看: 3661|回复: 0

独特的FireBeetle 点阵屏字库构造

[复制链接]
  • TA的每日心情
    奋斗
    2023-5-10 20:09
  • 签到天数: 1742 天

    连续签到: 1 天

    [LV.Master]伴坛终老

    发表于 2017-12-31 10:23: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个字符)两种字符库,若想实现汉字的显示,仿此结构构建相应的字库及显示函数也是可行的。
    回复

    使用道具 举报

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

    本版积分规则

    关闭

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



    手机版|小黑屋|与非网

    GMT+8, 2024-11-16 02:34 , Processed in 0.112151 second(s), 15 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.