firebeetle 24×8 led点阵屏是萤火虫系列的配件产品,与常规点阵屏不同的是它直接用led发光二极管来构建显示阵列,而非用点阵模块来构建。
为了节省i/o口,该点阵屏是采用高性能的led驱动芯片ht1632c来进行控制。对每个led都有独立的寄存器,故可分别驱动每个led灯。它内置了256khz的rc时钟,在低功耗模式下,可关闭rc时钟,使功耗仅为5ua。
点阵屏的外观如图1和图2所示,尽管显示屏的引脚较多,但在使用时所涉及的引脚并不很多。
点阵屏的性能如下:
· 工作电压: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库,安装后即可见到对应库以供使用。
若以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);}
实现显示效果的配置程序为:
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种方法。
本文系21ic论坛蓝v作者jinglixixi原创撰写
PCB电源供电系统设计可能遇到的技术挑战?
TPA2050D4 模拟输入音频子系统 集成立体声D类功率放
今日传感财经:医疗传感器概念报跌;气体传感器概念报跌;影像传感器概念报跌
苹果iPhone新机将发表,产能利用将满载
外贴式液位计
在Arduino下如何直接以LED组建点阵屏
WT2003H4-16S语音芯片:扭蛋机新潮音乐,娱乐升级无限
亚马逊发布智能家居新功能,高通推出下一代Wi-Fi和光纤技术
国星光电以紫外LED为新增长点,全力推动LED供应链恢复
O.S. Engines发动机的特点
简单了解一下贴片电阻的阻值识别方法
基于UHF RFID电子标签系统简介与系统设计技术分析
linux多线程机制-线程同步
拆机看乾坤 原来台电T10主板大面积覆盖散热片
TE Connectivity推出数据传输速率和灵活性更高的CDFP连接器、笼和电缆组件
HTC联合Valve 为Vive Cosmos Elite用户免费提供兑换码
应用于英飞凌EVAL_MA5302MS参考设计中的数字功放电感
什么是手机音乐业务?
Rogers颁年度大奖,肯定世强09业绩
安捷伦示波器贵吗_价格大概多少