4 bits Segment Display(TM1637) CN

아두위키 : Arduwiki
ArduWiki (토론 | 기여)님의 2025년 3월 27일 (목) 19:43 판 (새 문서: {{#seo:|title=아두위키 : 아두이노 4비트 7세그먼트 가이드|title_mode=append|keywords=아두이노, 정보과학, 메이커학습, 수행평가, 4비트 7세그먼트, 아두이노 작품, 캡스톤작품, 아두이노 예제코드|description=아두이노로 4비트 7세그먼트를 제어하는 방법(기본정보, 회로, 예제 코드)을 소개합니다. 정보과학과 메이커수업에 활용가능합니다.}} 파일:4비트세그먼트대표이미지1....)
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)


概述

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” 即可轻松安装。

有关库的更多信息,请参阅 아두이노 라이브러리 文档。

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);
    }
}

运行结果