独特的FireBeetle 点阵屏字库构造
要在点阵屏上显示字符信息就必须为其提供相应的字库,对于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[] ={ { 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_5X4(64个字符)和FONT_8X4(64个字符)两种字符库,若想实现汉字的显示,仿此结构构建相应的字库及显示函数也是可行的。
页:
[1]