帮助文档

HS-F15P 四位时钟数码管

目 录 (点击目录列表可以跳转到相应位置)

  1. 介绍
  2. 原理图
  3. 模块参数
  4. 电路板尺寸
  5. ArduinoIDE 示例程序
  6. 米思齐 Mixly 示例程序(图形化语言)
  7. Arduino测试环境搭建
  8. 添加Arduino库文件
  9. 添加MicroPython库文件
  10. 视频教程
  11. 测试结论

1、介绍 点这里回到目录

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


2、原理图 点这里回到目录

HS-F15P 四位时钟数码管


3、模块参数 点这里回到目录

引脚名称 描述
VCC VCC(电源输入正极)
GND GND(电源输入负极)
SDA 双向数据通信引脚
SCL 时钟信号通信引脚
  • 供电电压:3.3V / 5V

  • 连接方式:PH2.0 4P座子

  • 安装方式:双螺丝固定


4、电路板尺寸 点这里回到目录

HS-F15P 四位时钟数码管


5、Arduino IDE示例程序 点这里回到目录

示例程序(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)
​

6、米思齐 Mixly 示例程序(图形化语言) 点这里回到目录

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

HS-F15P 四位时钟数码管

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

HS-F15P 四位时钟数码管


7、测试环境搭建 点这里回到目录

Arduino环境搭建

准备配件:

  • HELLO STEM UNO R3 开发板 *1
  • HELLO STEM UNO EXP1 扩展板 *1
  • USB type-c 数据线 *1
  • TM637四位时钟数码管模块(HS-F15P)*1
  • 1P母对母杜邦线 *4条 或 2P母对母杜邦线 *2条

电路接线图:

HS-F15P 四位时钟数码管

Micropython环境搭建

准备配件:

  • ESP32EA MOC 开发板 *1
  • ESP32-EXP1 扩展板 *1
  • USB type-c 数据线 *1
  • TM637四位时钟数码管模块(HS-F15P)*1
  • PH2.0 4P端子线 *1

电路接线图:


8、添加 Arduino库文件和MicroPython环境库文件 点这里回到目录

首先找到Arduino库文件夹:

HS-F12P RGB-LED条形灯HS-F15P 四位时钟数码管

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

HS-F15P 四位时钟数码管HS-F12P RGB-LED条形灯

库文件:点击下载


9、添加MicroPython环境库文件点这里回到目录

安装库文件请点击这里:参考链接


10、视频教程 点这里回到目录

视频教程:点击查看


11、测试结论 点这里回到目录

HS-F15P 四位时钟数码管

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


点这里回到目录