功能介绍
该模块是用TM1637驱动芯片对一个12脚的带时钟点的4位共阳数码管(0.36英寸)驱动的显示模块。其中时钟点不是每个模块都存在。在使用时,只需2根信号线即可用Arduino控制4位8段数码管。该模块可以显示数字和部分字母,时比较常用的一个显示模块。该模块的数码管亮度可以实现8级调节,模块的供电电压为5VDC。TM1637数码管显示模块实物图如图3.18.1所示。

图3.18.1 TM1637数码管显示模块实物图
接线说明
| Arduino | TM1637显示模块 | 说明 |
|---|---|---|
| VCC/+/5V | VCC/+/5V | 供电引脚 |
| GND/G/- | GND/G/- | 电源地线 |
| D3 | DIO | 接Arduino的任意数字引脚都可以,模块信号输出数据线 |
| D2 | CLK | 接Arduino的任意数字引脚都可以,模块信号输出时钟线 |
使用说明:
1.按照界限说明完成接线,注意供电引脚必须连接正确。
2(a).Arduino IDE编程
采用Arduino IDE编程时,需要用两个库文件,需要到“库管理器”中下载。在“库管理器”中搜索“TM1637”,在搜索得到的结果中安装“Grove 4-Digit Display”库。安装完成库文件后在“文件”—>“示例”中找到第三方库部分,选择“Grove 4-Digit Display”—>“Clock Display”打开就得到了示例程序,关于程序的解释请看参考程序的注释部分。在示例程序中第2行中引用了一个头文件“TimerOne.h”,所以还需要到“库管理器”中下载该库文件。在库管理器中搜索“TimerOne”,在搜索结果中选择“TimerOne”安装。
在没有安装“TimerOne”库的时候,编译Clock Display示例会提示出错,具体原因就是编译器没有找到库文件“TimerOne.h”,所以需要安装这个库文件。在实际使用TM1637显示模块时, “TimerOne.h”库不是必须,在此需要这个库只是为了使用定时器方式对时间变量的计算。
编译完成后,选择对应的Arduino主板型号和对应的串口端口号后上传程序到Arduino主板,此时TM1637模块将会显示“12:00”,而且时钟点会闪烁,过一分钟后将会显示为“12:01”,显示的数据将会随着时间的推移自动更新,这就是库文件“TimerOne.h”的功劳。
2(b).Mixly编程
采用Mixly编程时,TM1637程序模块在“显示器”—>“四位数码管”下,展开后会发现有TM1650和TM1637的程序模块,在此我们的模块是TM1637的驱动芯片,所以必须选择TM1637的程序模块,不然无法正常显示。TM1637相关的程序模块有5个,如图3.18.2所示。其功能依次是:1。设置TM1637模块连接的Arduino引脚,此模块为必须使用模块;2.设置TM1637模块的显示亮度;3.实现TM1637显示模块的显示/清屏/显示开/显示关功能;4实现TM1637显示简单的字符信息,比如“abcd”;5.实现TM1637显示时间信息以及时钟点是否开的设置,在此显示的实现信息需要用户通过代码实现更新。
图3.18.2 TM1637模块的Mixly编程模块示意图
参考程序:
Arduino IDE参考程序
#include <TimerOne.h>#include "TM1637.h"#define ON 1#define OFF 0int8_t TimeDisp[] = {0x00,0x00,0x00,0x00};unsigned char ClockPoint = 1;unsigned char Update;unsigned char halfsecond = 0;unsigned char second;unsigned char minute = 0;unsigned char hour = 12;#define CLK 2 //TM1637显示模块连接的引脚#define DIO 3TM1637 tm1637(CLK,DIO); //创建一个对象名字叫TM1637void setup(){tm1637.set(); //设置tm1637模块,默认就好tm1637.init(); //初始化tm1637模块,默认就好Timer1.initialize(500000); //定时器实现500ms的定时Timer1.attachInterrupt(TimingISR); //定时器每500ms去执行一次TimingISR函数}void loop(){if(Update == ON){TimeUpdate(); //调用更新实现函数tm1637.display(TimeDisp); //调用显示数码管}}/*定时器每500ms执行一次的函数体* 实现对时间变量minute(分)、hour(时)的计算* 计算完成的值通过数码管显示出来*/void TimingISR(){halfsecond ++;Update = ON;if(halfsecond == 2){second ++;if(second == 60){minute ++;if(minute == 60){hour ++;if(hour == 24)hour = 0;minute = 0;}second = 0;}halfsecond = 0;}ClockPoint = (~ClockPoint) & 0x01;}//更新时间函数体void TimeUpdate(void){if(ClockPoint)tm1637.point(POINT_ON);//判断是否显示时钟点,实现500ms闪烁一次else tm1637.point(POINT_OFF);TimeDisp[0] = hour / 10; //把hour的十位和各位分离开来TimeDisp[1] = hour % 10;TimeDisp[2] = minute / 10;//把minute的十位和各位分离开来TimeDisp[3] = minute % 10;Update = OFF;}
Mixly参考程序

以上参考程序实现让TM1637模块显示“12:30”3S时间,再显示“2345”3S时间,最后清除显示1S时间,如此循环。
