jinglixixi 发表于 2018-1-4 09:38:52

FireBeetle 点阵屏的中文显示

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 &(0x01<<y))ht1632c.setPixel(p+y,x);
//matrix |= 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 显示效果

sacq12 发表于 2018-1-4 11:32:49

拜读,顶~~~

jinglixixi 发表于 2018-1-5 10:17:59

sacq12 发表于 2018-1-4 11:32 static/image/common/back.gif
拜读,顶~~~

感谢支持!
页: [1]
查看完整版本: FireBeetle 点阵屏的中文显示