
4位7段数码管由一个12管脚的4位7段共阳极数码管和一个控制芯片TM1637构成。另一边是数码管的图标标志。此产品可以应用在时间显示,跑表显示以及其他需要显示数字的设备上。

| 引脚名称 | 描述 |
|---|---|
| VCC | VCC(电源输入正极) |
| GND | GND(电源输入负极) |
| SDA | 双向数据通信引脚 |
| SCL | 时钟信号通信引脚 |
供电电压:3.3V / 5V
连接方式:PH2.0 4P座子
安装方式:双螺丝固定

示例程序(UNO开发板):点击下载
#include <SevenSegmentTM1637.h>
SevenSegmentTM1637 display(9,10);
void setup(){
display.begin();
display.setBacklight(20);
}
void loop(){
//数码管30秒倒计时
for (int i = 30; i >= 0; i = i + (-1)) {
display.clear();
display.print(String(i));
delay(1000);
}
}
示例程序(ESP32开发板—基于Python语言,不能用Arduino IDE上传代码):
from machine import Pin
from time import sleep_us
TM1637_CMD1 = 64 # 0x40 数据命令
TM1637_CMD2 = 192 # 0xC0 地址命令
TM1637_CMD3 = 128 # 0x80 显示控制命令
TM1637_DELAY = 10 # 10us延迟,用于clk/dio脉冲之间
# 数码管段码对应表 (0-15分别对应0-F)
_SEGMENTS = (0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71)
# TM1637显示类
class TM1637():
"""
@brief 初始化函数
@param clk:clk引脚定义
@param dio:dio引脚定义
@param intensity:亮度 默认7
@param number:数码管位数,默认4位
"""
def __init__(self, clk, dio, intensity=7, number = 4):
self.clk = clk
self.dio = dio
self._intensity = intensity%8
self._LED = number
self._ON = 8
self.dbuf = [0, 0, 0, 0]
self.clk.init(Pin.OUT, value=0)
self.dio.init(Pin.OUT, value=0)
sleep_us(TM1637_DELAY)
self.clear()
"""@brief 发送起始信号"""
def _start(self):
self.dio(0)
sleep_us(TM1637_DELAY)
self.clk(0)
sleep_us(TM1637_DELAY)
"""@brief 发送停止信号"""
def _stop(self):
self.dio(0)
sleep_us(TM1637_DELAY)
self.clk(1)
sleep_us(TM1637_DELAY)
self.dio(1)
"""发送数据命令:自动地址递增,普通模式"""
def _write_data_cmd(self):
# automatic address increment, normal mode
self._start()
self._write_byte(TM1637_CMD1)
self._stop()
"""发送显示控制命令:设置显示开关和亮度"""
def _write_dsp_ctrl(self):
# display on, set brightness
self._start()
self._write_byte(TM1637_CMD3 | self._ON | self._intensity)
self._stop()
"""
向TM1637写入一个字节
param b: 要写入的字节
"""
def _write_byte(self, b):
for i in range(8):
self.dio((b >> i) & 1)
sleep_us(TM1637_DELAY)
self.clk(1)
sleep_us(TM1637_DELAY)
self.clk(0)
sleep_us(TM1637_DELAY)
self.clk(1)
sleep_us(TM1637_DELAY)
self.clk(0)
sleep_us(TM1637_DELAY)
"""打开显示"""
def on(self):
self._ON = 8
self._write_data_cmd()
self._write_dsp_ctrl()
"""关闭显示"""
def off(self):
self._ON = 0
self._write_data_cmd()
self._write_dsp_ctrl()
"""
@brief 设置或获取亮度
:param val: 亮度值(1-8),None则返回当前亮度
:return: 当前亮度值
"""
def intensity(self, val=None):
if val is None:
return self._intensity
val = max(0, min(val, 8))
if val == 0:
self.off()
else:
self._ON = 8
self._intensity = val-1
self._write_data_cmd()
self._write_dsp_ctrl()
"""
@brief 向指定位置写入数据
:param bit: 位置(0-3)
:param dat: 要显示的段码
"""
def _dat(self, bit, dat):
self._write_data_cmd()
self._start()
self._write_byte(TM1637_CMD2 | (bit%self._LED))
self._write_byte(dat)
self._stop()
self._write_dsp_ctrl()
"""清屏,所有位置显示空白"""
def clear(self):
self._dat(0, 0)
self._dat(1, 0)
self._dat(2, 0)
self._dat(3, 0)
self.dbuf = [0, 0, 0, 0]
"""
@brief 在指定位置显示单个数字或字符
:param num: 要显示的数字(0-15对应0-F)
:param bit: 位置(0-3)
"""
def showbit(self, num, bit = 0):
self.dbuf[bit%self._LED] = _SEGMENTS[num%16]
self._dat(bit, _SEGMENTS[num%16])
"""
@brief 打开时钟点
@param show: True显示,False隐藏
"""
def showDP(self, bit = 1, show = True):
bit = bit%self._LED
if show:
self._dat(bit, self.dbuf[bit] | 0x80)
else:
self._dat(bit, self.dbuf[bit] & 0x7F)
"""
@brief显示整数或小数
@param num: 要显示的数字(整数或小数)
"""
def shownum(self, num):
self.clear()
DP=False
if isinstance(num,float):
num=int(num*10)
DP=True
if num < 0:
self._dat(0, 0x40) # '-'
num = -num
elif num >= 1000:
self.showbit((num // 1000) % 10)
self.showbit(num % 10, 3)
if num >= 10:
self.showbit((num // 10) % 10, 2)
if num >= 100:
self.showbit((num // 100) % 10, 1)
if DP:
self.showDP(2)
"""
@brief 显示十六进制数
@param num: 要显示的十六进制数
"""
def showhex(self, num):
if num < 0:
self._dat(0, 0x40) # '-'
num = -num
else:
self.showbit((num >> 12) % 16)
self.showbit(num % 16, 3)
self.showbit((num >> 4) % 16, 2)
self.showbit((num >> 8) % 16, 1)
def ShowTime(self, H, M,DPshow = True):
H_1 = H // 10 % 10
H_2 = H % 10
M_1 = M // 10 % 10
M_2 = M % 10
self.showbit(H_1, 0)
self.showbit(H_2, 1)
self.showbit(M_1, 2)
self.showbit(M_2, 3)
if(DPshow == True):
self.showDP(show = True)
else:
self.showDP(show = False)
tm1637 = TM1637(clk=Pin(Pin(14)), dio=Pin(Pin(15)))
import time
tm1637.intensity(val=20)
while True:
tm1637.shownum(9654)
time.sleep(3)
tm1637.clear()
time.sleep(3)
tm1637.ShowTime(66,33,True)
time.sleep(3)
示例程序(UNO开发板):点击下载

示例程序(ESP32开发板):点击下载

Arduino环境搭建
准备配件:
电路接线图:

Micropython环境搭建
准备配件:
电路接线图:
首先找到Arduino库文件夹:


把库文件复制到Arduino IDE软件目录下的libraries文件夹中即可:


库文件:点击下载
安装库文件请点击这里:参考链接
视频教程:点击查看

上传程序到 Arduino UNO 开发板之后,会看到数码管开始30秒倒计时;同时了解到四段七位数码管相当于几个LED灯点亮和熄灭达到我们想要的效果。