FireBeetle 点阵屏具有24×8个显示点,在显示汉字时其分辨率相对来说差一些,因此在其例程中未配置汉字显示功能,那如何来为其增添汉字显示功能呢? 这主要需2个部分,一个是构建小字库;另一个是配置相应的显示函数。 1. 构建小字库 使用字模提取构建软件PCtoLCD2002即可构建供显示需要的小字库,受点阵屏分辨率的限制,这里构建的字模为8*8点阵。 提取的界面如图1所示,数据的提取格式则如图2所示。
图1字模提取
图2 提取格式
提取的字模内容如下: //元(0) 旦(1) 快(2) 乐(3) {0x7C,0x00,0xFE,0x28,0x28,0x24,0xE2,0x00},/*"元",0*/ /* (8 X 8 , 等线 )*/ {0x7C,0x44,0x7C,0x44,0x7C,0x00,0xFF,0x00},/*"旦",1*/ /* (8 X 8 , 等线 )*/ {0x24,0xF6,0xAD,0xF4,0x24,0x54,0x88,0x00},/*"快",2*/ /* (8 X 8 , 等线 )*/ {0x7C,0x12,0x12,0xFE,0x54,0x94,0x1A,0x00},/*"乐",3*/ /* (8 X 8 , 等线 )*/ 2. 配置显示函数 配合小字库的显示函数如下: - //汉字显示函数,其中参数p为显示位置取0或1,n为显示汉字的编号取值为0~3。
- void hzxs(uint8_t p,uint8_t n){
- p=p*8;
- n=n*8;
- for(uint8_t x=0; x<8; x++)
- {
- for(uint8_t y=0; y<8; y++)
- {
- if(FONT_8X8 [n+x]&(0x01<<y)) ht1632c.setPixel(p+y,x);
- //matrix[x] |= 0x80>>y;
- ht1632c.writeScreen();
- //
- }
- }
- }
复制代码- void clrxs(){
- for(uint8_t x=0; x<24; x++){
- for(uint8_t y=0; y<8; y++){
- ht1632c.clrPixel(x,y);
- ht1632c.writeScreen();
- }
- }
- }
复制代码3. 应用实例 元旦刚过,这里就后补一个显示“元旦快乐”的示例,其程序如下: - #include "DFRobot_HT1632C.h"
- #define DATA 6
- #define CS 2
- #define WR 7
- byte FONT_8X8 []={
- //元(0) 旦(1) 快(2) 乐(3)
- 0x7C,0x00,0xFE,0x28,0x28,0x24,0xE2,0x00,/*"元",0*/
- /* (8 X 8 , 等线 )*/
- 0x7C,0x44,0x7C,0x44,0x7C,0x00,0xFF,0x00,/*"旦",1*/
- /* (8 X 8 , 等线 )*/
- 0x24,0xF6,0xAD,0xF4,0x24,0x54,0x88,0x00,/*"快",2*/
- /* (8 X 8 , 等线 )*/
- 0x7C,0x12,0x12,0xFE,0x54,0x94,0x1A,0x00,/*"乐",3*/
- /* (8 X 8 , 等线 )*/
- };
- DFRobot_HT1632C ht1632c = DFRobot_HT1632C(DATA, WR,CS);
- void setup() {
- ht1632c.begin();
- ht1632c.isLedOn(true);
- ht1632c.clearScreen();
- hzxs(0,0);
- hzxs(1,1);
- delay(1000);
- clrxs();
- hzxs(0,2);
- hzxs(1,3);
- }
- void loop() {
- }
复制代码
图3 显示效果
|