Arduino教程:使用TM1650四位数码管模块显示数字
相关资料链接
1.1 介绍:
这个模块主要由一个0.36英寸 红色共阳 4位数码管组成,它的驱动芯片是TM1650。使用时,我们只需要2根信号线即可使单片机控制4位8数码管,大大节约了控制板IO口资源。
模块兼容各种单片机控制板,如arduino系列单片机。使用时,我们可以在单片机上堆叠一个传感器扩展板。模块和自带导线连接,然后连接在传感器扩展板上,简单方便。同时,模块自带2个直径为4.8mm的定位孔,方便你将模块固定在其他设备。
GND:电源负极
VCC:电源正极,+5V
DIO:数据IO模块,可以接任意的数字引脚
CLK:时钟引脚,可以接任意的数字引脚
1.2 模块相关资料:
工作电压: |
5V(DC) |
|
工作电流: |
100mA |
|
最大功率: |
0.5W |
|
数码管显示颜色: |
红色 |
|
尺寸: |
47.6MM *23.8MM |
|
原理:TM1650 是一种带键盘扫描接口的 LED(发光二极管显示器)驱动控制专用电路。内部集成有 MCU输入输出控制数字接口、数据锁存器、LED 驱动、键盘扫描、辉度调节等电路。TM1650 性能稳定、质量可靠、抗干扰能力强,可适用于 24 小时长期连续工作的应用场合。TM1650 采用 2 线串行传输协议通讯(注意该数据传输协议不是标准的I2C协议)。该芯片只需要通过二个引脚与MCU通讯就可以完成数码管的驱动,可以节省MCU引脚资源。
TM1650采用的是IIC协议。使用SDA、SCL两条总线。 数据命令设置:0x48,这个是告诉TM1650,我们要用点亮数码管的功能,而不是按键扫描的功能 显示命令设置: 这里实际是一个字节数据,只是不同位部分代表不同功能。 bit[6:4]:设置数码管亮度,注意,000是最亮哦。 bit[3]:设置要不要显示小数点 bit[0]:是不是要开启数码管的显示
数码管显示 比如说,8级亮度,不显示小数点,那就是0x05 起始信号— 发送数据0x48 — 判断丛机应答 — 发送 数据0x05 — 判断丛机应答 — 终止信号 这样,数码管就打开显示了。 打开之后,在后面显示数字的时候,就不用重复发送数据0x48了,因为我们已经选好了数码管功能。 亮度和显示方式可以做成枚举,清晰,而且多个数据占一个地方,很节省空间
数码管关闭 起始信号— 发送数据0x48 — 判断丛机应答 — 发送 数据0x00 — 判断丛机应答 — 终止信号 这样,数码管就关闭显示了。
数码管显示数字 我们要显示数字,首先得告诉TM1650,显示的是哪个数码管的数字,下面的数据就对应好了哪个数码管: 然后我们就可以显示数字了,一个数据8个位,刚好对应8个段,1就是亮,0就是灭。 我的话,因为分不清哪个位对那个段,哈哈哈,所以我是循环按位点亮来理清哪个位对哪个段的。 比如点亮数码1显示8,那就是0x68,假设0x7f是8,哈哈哈,因为还有个位是小数点。 那就是: 起始信号— 发送数据0x68 — 判断丛机应答 — 发送 数据0x7f — 判断丛机应答 — 终止信号 然后,顺利的话,就会在数码管1亮起一个8。 将0~9对应的值,做成一个数组,通过数组下标确定就比较方便了。之后就可以将其完善成一个个小功能,用来显示数字、调节亮度、切换小数点、数码管切换了。
|
1.3实验器材:
|
|
|
|
控制板* 1 |
USB线*1 |
TM1650四位数码管*1 |
4P 转杜邦线母*1 |
1.4模块接线图:
1.5 实验代码:
/* TM1650四位数码管模块 */
#include "KETM1650.h" //导入TM1650的库文件 int item = 0; //要显示的值 KETM1650 tm_4display(6,5); //两线接口为A1, A0
void setup(){ tm_4display.init(); //初始化 tm_4display.setBrightness(3); //设置 亮度为3,范围(1~8) }
void loop(){ tm_4display.displayString(item);//四位数码管显示item值 item = item + 1; //自加一 if (item > 9999) { //加到超过9999时,清零 item = 0; } delay(100); //延时100毫秒 }
|
程序编译前需要导入库文件,否则编译不通过,具体操作参考
资料的第四小节:库文件的添加(若前面已添加,无需重复)
1.6代码说明
下面介绍一些常用的函数接口:
.init();初始化TM1650
.clear();清除数码管显示
.displayString(char *aString);显示字符串,*aString指向aString的字符串内容
.displayString(String sString);显示字符串,sString为字符串
.displayString(float value);显示小数,内容为float型
.displayString(double value);显示小数,内容为double型
.displayString(int value);显示整数,内容为int型
.displayOn();打开数码管显示
.displayOff();关闭数码管显示,与.clear方法不同的是,一旦关闭必须调用.displayOn();才能重新显示。
.setDot(unsigned int aPos, bool aState);显示小数点,aPos为小数点的位置(0~3)对应(1~4),aState为显示状态:1(true)点亮,2(false)熄灭。
.setBrightness(unsigned int iBrightness);设置数码管的亮度,iBrightness为亮度值(1~8),类型为unsigned int,当设置小于1时自动设置1,当设置大于8时自动设置为8。
细节请看代码注释。
1.7实验结果
烧录好测试代码,按照接线图连接好线,上电后,4位数码管从0开始显示的数字每10毫秒加1,直到大于9999又从0开始。