4 bits Segment Display(TM1637) CN

아두위키 : Arduwiki


概述

TM1637 是一款用于控制 7 段显示器的驱动 IC,可以轻松与 Arduino 等微控制器连接使用。由于数字之间带有 ":" 符号,特别适用于实现数字时钟,也广泛应用于温度计、计数器等各种电子项目中。

规格

TM1637 模块规格

项目 规格
电源供应 3.3V ~ 5V
接口 I2C (TWI)
显示 7 段显示器(4 位数)
控制引脚 CLK(时钟)、DIO(数据)
温度范围 -20°C ~ 70°C
尺寸 42 * 29 * 12 (mm)

固定孔

项目 详细信息
孔数量 4 个 M2 螺丝孔
孔径 2.2mm

应用示例

电路连接

引脚 Arduino
GND GND
VCC 5V
DIO D3
CLK D2

使用 TM1637Display.h 库。

在库管理器中搜索 “TM1637” 即可轻松安装。

有关库的更多信息,请参阅 Arduino libraries 文档。

TM1637 库主要函数

函数 说明
TM1637Display(CLK, DIO, delay) 创建 TM1637 对象的构造函数,设置 CLK 和 DIO 引脚。
setBrightness(uint8_t b, OnOff) 设置亮度(0x00 ~ 0x0f)。
showNumberDec(int num, bool leading_zero) 以十进制显示数字。leading_zero 为 true 时会在前面补 0。
showNumberHex(uint8_t num, bool leading_zero) 以十六进制显示数字。
clear() 清除显示内容。
setSegments(const uint8_t segments[], uint8_t size) 显示自定义段。

1. 显示数字

以 0.5 秒间隔从 0 显示到 10。最多支持显示 4 位数。

showNumberDec(int num, bool leading_zero) 以十进制显示整数,leading_zero 为 true 时前面补 0。

如果将 showNumberDec 的 leading_zero 参数设置为 true,显示 1 时会变成 0001。

#include <TM1637Display.h>

#define CLK 2
#define DIO 3

TM1637Display display(CLK, DIO);

void setup() {
    display.setBrightness(0x0f);
}

void loop() {
    for (int i = 0; i <= 10; i++) {
        display.showNumberDec(i, false);
        delay(500);
    }
}

运行结果

2. 显示数字时钟

以 24 小时制方式显示小时与分钟。

showNumberDecEx 是 showNumberDec 的扩展版本,用于显示中间的冒号。

#include <TM1637Display.h>

#define CLK 2
#define DIO 3

TM1637Display display(CLK, DIO);

void setup() {
    display.setBrightness(0x0f);
}

void loop() {
    int hour = 12;
    int minute = 0;

    for (int i = 0; i < 60; i++) {
        display.showNumberDecEx(hour * 100 + minute, 0b11100000, true);
        delay(60000);
        minute = (minute + 1) % 60;
        if (minute == 0) hour = (hour + 1) % 24;
    }
}

运行结果

3. 使用 SetSegments 函数显示字符串

7 段显示器的位图如下所示:

使用 7 段显示器显示 GONG 文本如下图:

字符 G F E D C B A 二进制 十六进制
G 0 1 1 1 1 0 1 111101 3d
O 1 0 1 1 1 0 0 1011100 5c
N 1 0 1 0 1 0 0 1010100 54

找到对应字母的二进制位(亮为 1,灭为 0),然后转为十六进制即可。

#include <TM1637Display.h>

#define CLK 2
#define DIO 3
TM1637Display display(CLK, DIO);

byte data[] = {0x3d, 0x5c, 0x54, 0x3d};

void setup() {
  display.setBrightness(0x0f);
}

void loop() {
  display.setSegments(data);
}

运行结果

4. 字符滚动显示效果

当要显示的字符串超过 4 位时,实现左移滚动效果。

此处以 GONGZIPSA 为例,向左滑动显示:

#include <TM1637Display.h>

#define CLK 2
#define DIO 3
TM1637Display display(CLK, DIO);

// 显示字符的段数据
byte data[] = {0x3D, 0x5C, 0x54, 0x3D, 0x49, 0x30, 0x73, 0x6D, 0x77};

void setup() {
    display.setBrightness(0x0f);
}

void loop() {
    int stringLength = sizeof(data) / sizeof(data[0]);
    int displaySize = 4;

    for (int i = 0; i < stringLength + displaySize; i++) {
        byte displayData[displaySize] = {0, 0, 0, 0};

        for (int j = 0; j < displaySize; j++) {
            if (i + j >= 0 && i + j < stringLength) {
                displayData[j] = data[i + j];
            }
        }

        display.setSegments(displayData);
        delay(500);
    }
}

运行结果