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四位数码管模块

https://sourl.cn/NbKeBf

*/

#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开始。

物联沃分享整理
物联沃-IOTWORD物联网 » Arduino教程:使用TM1650四位数码管模块显示数字

发表评论