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

概述
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);
}
}
运行结果

