#申请原创#
FireBeetle 24×8 LED点阵屏是萤火虫系列的配件产品,与常规点阵屏不同的是它直接用LED发光二极管来构建显示阵列,而非用点阵模块来构建。 为了节省I/O口,该点阵屏是采用高性能的LED驱动芯片HT1632C来进行控制。对每个LED都有独立的寄存器,故可分别驱动每个LED灯。它内置了256KHz的RC时钟,在低功耗模式下,可关闭RC时钟,使功耗仅为5uA。 点阵屏的外观如图1和图2所示,尽管显示屏的引脚较多,但在使用时所涉及的引脚并不很多,见图3所示。 图1 点阵屏正面 图2 点阵屏背面 图3显示所用引脚
点阵屏的性能如下: · 工作电压:3.3V · 显示颜色:白色 · HT1632C驱动芯片 · 内置256KHzRC时钟 · 低功耗:5uA · 工作电流:6mA~100mA · 串行数据通信 · 支持Arduino库 · 支持滚屏显示 · 接口方式:FireBeetle系列兼容 · 工作温度:-40℃~+85℃ · 模块尺寸:24 ×58(mm)/0.94 x 2.28(inches) · 安装孔尺寸:内径3.1mm/外径6mm 要驱动该点阵屏有2种方式,一种是以常规的Arduino开发板来驱动,另一种则是以ESP32-E Arduino开发板来驱动。 对于常规的Arduino开发板驱动,在使用前安装对应的FireBeetleLEDMatrix-master库,安装后即可见到对应库以供使用。 以Arduino开发板驱动点阵屏的测试连接如图4所示,可实现的显示效果如图5至图7所示。 图4 测试连接 图5数字显示效果 图6 字符显示效果 图7 动态滚屏效果 若以ESP32-EArduino开发板来驱动,则无法直接进行编译和上传,为此只好以I/O口驱来编程实现。 按点阵屏的原理图可知,为了便于使用片选信号CS是可供选择的,选择的对象可以是CS1~CS4中的任意一个,选取时只需将S1对应的开关接通即可。而CS1~CS4所对应的引脚则是D2~D5,编程时是以A4来控制串行。 图8 点阵屏片选控制 图9 片选开关 为此,点阵屏与开发板的连接关系定义为: #define cs1 A4 #define rd D3 #define wr D7 #define dat D2 实现HT1632C初始化的函数为: void HT1632C_Init(void) { digitalWrite(cs1, HIGH); #define SYS_DIS 0x00 //关闭系统震荡 #define SYS_EN 0x01 //打开系统震荡 #define LED_OFF 0x02 //关闭LED显示 #define LED_ON 0x03 //打开LED显示 #define BLINK_OFF 0x08 //关闭闪烁 #define BLINK_ON 0x09 //打开闪烁 #define SLAVE_MODE 0x10 //从模式 #define RC_MASTER_MODE 0x18 //内部RC时钟 #define COM_OPTION 0x24 //24:16COM,NMOS。C:COM,PMOS。 #define PWM_DUTY 0xAE //PWM亮度控制 digitalWrite(wr, HIGH); digitalWrite(dat, HIGH); HT1632C_Write_CMD(SYS_DIS); //关闭HT1632C内部RC时钟 HT1632C_Write_CMD(COM_OPTION); //选择HT1632C工作模式,COM,NMOS模式 HT1632C_Write_CMD(RC_MASTER_MODE); //选择内部RC时钟 HT1632C_Write_CMD(SYS_EN); //打开HT1632C内部RC时钟 HT1632C_Write_CMD(PWM_DUTY); //PWM亮度设置 HT1632C_Write_CMD(BLINK_OFF); //关闭闪烁 HT1632C_Write_CMD(LED_ON); //打开LED显示 } 实现清屏处理的函数为: void HT1632C_clr(void) { unsigned char i; digitalWrite(cs1, LOW); HT1632C_Write(0xa0,3); HT1632C_Write(0x00,7); for(i=0;i<48;i++) HT1632C_Write(0,8); digitalWrite(cs1, HIGH); } 向HT1632C发送数据的函数为: voidHT1632C_Write(unsigned char Data,unsigned char cnt) { unsigned char i; for(i=0;i<cnt;i++) { digitalWrite(wr, LOW); if(Data & 0x80) digitalWrite(dat, HIGH); else digitalWrite(dat, LOW); Data<<=1; digitalWrite(wr, HIGH); } } 向HT1632 C写入命令的函数为: void HT1632C_Write_CMD(unsignedchar cmd) { digitalWrite(cs1, LOW); HT1632C_Write(0x80,3); HT1632C_Write(cmd,9); digitalWrite(cs1, HIGH); } 向HT1632 C写入数据的函数为: void HT1632C_Write_DATA(unsignedchar Addr,unsigned char p,unsigned char cnt) { unsigned char i; digitalWrite(cs1, LOW); HT1632C_Write(0xa0,3); HT1632C_Write(Addr<<1,7); for(i=0;i<cnt;i++) { HT1632C_Write(p,8); } digitalWrite(cs1, HIGH); } ESP32-E Arduino开发板驱动点阵屏的测试连接如图10所示,可实现的显示效果如图12至图13所示。 图10 测试连接 实现图10显示效果的配置程序为: void setup() { unsigned char temp=0xAA; pinMode(LED_BUILTIN, OUTPUT); pinMode(cs1, OUTPUT); pinMode(rd, OUTPUT); pinMode(wr, OUTPUT); pinMode(dat,OUTPUT); HT1632C_Init(); HT1632C_clr(); HT1632C_Write_DATA(0x00,temp,48); } 经程序的编译与上传,其界面如图11所示。 图11 完成程序上传 实现图12所示三角形绘制的程序如下: { unsigned char i,b; digitalWrite(cs1, LOW); HT1632C_Write(0xa0,3); HT1632C_Write(0x00,7); b=1; for(i=0;i<24;i++) { if(i%8==0) b=1; else b=(b<<1)+1; HT1632C_Write(b,8); HT1632C_Write(b,8); } digitalWrite(cs1, HIGH); } 图12绘制三角形 实现图13所示数值显示的程序如下: voidsetup() { unsigned char temp=0xFF; pinMode(LED_BUILTIN, OUTPUT); pinMode(cs1, OUTPUT); pinMode(rd, OUTPUT); pinMode(wr, OUTPUT); pinMode(dat,OUTPUT); HT1632C_Init(); HT1632C_clr(); HT1632C_Write_C(58,8); HT1632C_Write_C(26,6); HT1632C_Write_C(26,4); } 对于的字符显示函数为: voidHT1632C_Write_C(unsigned char Addr,unsigned char p) { unsigned char i; digitalWrite(cs1, LOW); HT1632C_Write(0xa0,3); //ID:101 HT1632C_Write(Addr<<1,7); for(i=0;i<8;i++) { HT1632C_Write(dot[p*8-i],8); HT1632C_Write(dot[p*8-i],8); } digitalWrite(cs1, HIGH); } 图13 数值显示 所使用的字模由工具软件PCtoLCD2002来提取,其提取的格式定义如图15所示。 图14字模提取 图15字模格式定义 相应的字库格式为: unsignedchar dot[]= { 0x00,0x38,0x44,0x44,0x44,0x44,0x38,0x00,/*"0",0*/ 0x00,0x48,0x48,0x7C,0x40,0x40,0x00,0x00,/*"1",1*/ 0x00,0x48,0x64,0x64,0x64,0x54,0x6C,0x00,/*"2",2*/ 0x00,0x28,0x44,0x4C,0x4C,0x54,0x34,0x00,/*"3",3*/ 0x00,0x10,0x28,0x24,0x64,0x7E,0x00,0x00,/*"4",4*/ 0x00,0x3C,0x54,0x54,0x54,0x54,0x24,0x00,/*"5",5*/ 0x00,0x38,0x54,0x54,0x54,0x54,0x20,0x00,/*"6",6*/ 0x00,0x0C,0x04,0x74,0x14,0x0C,0x04,0x00,/*"7",7*/ 0x00,0x2C,0x54,0x54,0x54,0x54,0x2C,0x00,/*"8",8*/ 0x00,0x08,0x54,0x54,0x54,0x74,0x38,0x00,/*"9",9*/ };
这样我们要驱动FireBeetle 24×8 LED点阵屏的显示,就有了2种方法。
|