功能介绍
该模块是用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 0
int8_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 3
TM1637 tm1637(CLK,DIO); //创建一个对象名字叫TM1637
void 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时间,如此循环。