功能介绍

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

参考程序:

Arduino IDE参考程序

  1. #include <TimerOne.h>
  2. #include "TM1637.h"
  3. #define ON 1
  4. #define OFF 0
  5. int8_t TimeDisp[] = {0x00,0x00,0x00,0x00};
  6. unsigned char ClockPoint = 1;
  7. unsigned char Update;
  8. unsigned char halfsecond = 0;
  9. unsigned char second;
  10. unsigned char minute = 0;
  11. unsigned char hour = 12;
  12. #define CLK 2 //TM1637显示模块连接的引脚
  13. #define DIO 3
  14. TM1637 tm1637(CLK,DIO); //创建一个对象名字叫TM1637
  15. void setup()
  16. {
  17. tm1637.set(); //设置tm1637模块,默认就好
  18. tm1637.init(); //初始化tm1637模块,默认就好
  19. Timer1.initialize(500000); //定时器实现500ms的定时
  20. Timer1.attachInterrupt(TimingISR); //定时器每500ms去执行一次TimingISR函数
  21. }
  22. void loop()
  23. {
  24. if(Update == ON)
  25. {
  26. TimeUpdate(); //调用更新实现函数
  27. tm1637.display(TimeDisp); //调用显示数码管
  28. }
  29. }
  30. /*定时器每500ms执行一次的函数体
  31. * 实现对时间变量minute(分)、hour(时)的计算
  32. * 计算完成的值通过数码管显示出来
  33. */
  34. void TimingISR()
  35. {
  36. halfsecond ++;
  37. Update = ON;
  38. if(halfsecond == 2){
  39. second ++;
  40. if(second == 60)
  41. {
  42. minute ++;
  43. if(minute == 60)
  44. {
  45. hour ++;
  46. if(hour == 24)hour = 0;
  47. minute = 0;
  48. }
  49. second = 0;
  50. }
  51. halfsecond = 0;
  52. }
  53. ClockPoint = (~ClockPoint) & 0x01;
  54. }
  55. //更新时间函数体
  56. void TimeUpdate(void)
  57. {
  58. if(ClockPoint)tm1637.point(POINT_ON);//判断是否显示时钟点,实现500ms闪烁一次
  59. else tm1637.point(POINT_OFF);
  60. TimeDisp[0] = hour / 10; //把hour的十位和各位分离开来
  61. TimeDisp[1] = hour % 10;
  62. TimeDisp[2] = minute / 10;//把minute的十位和各位分离开来
  63. TimeDisp[3] = minute % 10;
  64. Update = OFF;
  65. }

Mixly参考程序

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