物联网开发笔记(23)- 使用Micropython开发ESP32开发板之控制4位数码管_4位数码管cln引脚

83 阅读5分钟

收集整理了一份《2024年最新物联网嵌入式全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升的朋友。 img img

如果你需要这些资料,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

在Wokwi中的4位数码管,有14个针脚,多了CLN(时钟模式)和COM引脚:

4位数码管显示原理:利用到的是人的视觉暂留机制,对数码管进行动态扫描。

我找到了一个不错的博客介绍,大家可以看下,讲的比较清楚:

MicroPython-On-ESP8266——数码管的使用,四位数码管及动态扫描显示_fatway的博客-CSDN博客_esp8266驱动数码管

 四、下面举个例子给大家演示一下4位数码管的使用方法

先上代码,使用Thonny IED开发

main.py

import machine
import time

# 定义每个数码管
led1 = machine.Pin(5, machine.Pin.OUT)
led2 = machine.Pin(18, machine.Pin.OUT)
led3 = machine.Pin(19, machine.Pin.OUT)
led4 = machine.Pin(21, machine.Pin.OUT)

# 数码管列表
number_led_list = [led1, led2, led3, led4]

# 定义数码管的8个LED段
a = machine.Pin(13, machine.Pin.OUT)
b = machine.Pin(12, machine.Pin.OUT)
c = machine.Pin(14, machine.Pin.OUT)
d = machine.Pin(27, machine.Pin.OUT)
e = machine.Pin(26, machine.Pin.OUT)
f = machine.Pin(25, machine.Pin.OUT)
g = machine.Pin(33, machine.Pin.OUT)
h = machine.Pin(32, machine.Pin.OUT)

# 将数码管对应的引脚对象存储到列表
led_list = [a, b, c, d, e, f, g, h]

# 定义每个数字的显示,此处为共阳(如果你连接的是共阴极的数码管,请改为注释的值)
number_dict = {
    0: "00000011",  # 0: "11111100", 
    1: "10011111",  # 1: "01100000",
    2: "00100101",  # 2: "11011010", 
    3: "00001101",  # 3: "11110010",
    4: "10011001",  # 4: "01100110",
    5: "01001001",  # 5: "10110110", 
    6: "01000001",  # 6: "10111110",
    7: "00011111",  # 7: "11100000",
    8: "00000001",  # 8: "11111110",
    9: "00001001",  # 9: "11110110", 
}

# 定义显示数字的函数
def show_number(number):
    if number_dict.get(number):  # 通过字典number_dict的键number获取到对应键的值
        i = 0   # 定义一个变量i,用于控制显示不同的数字
        for num in number_dict.get(number):  # 此时就是对应的value,即类似的"01110111"
            if num == "1":  # 控制数码管8个LED段的显示
                led_list[i].value(0) 
            else:
                led_list[i].value(1)
            # print("此时显示的数码管的LED段是", i)  # 打印出为a, b, c, d, e, f, g, h # 此处打印会导致4位数码管闪烁
            i += 1
            
# 定义数码管的亮灭状态            
def led_light_on(i):
    # 全部数码管设置为1,即全灭的状态
    for led in number_led_list:
        led.value(1)  # (如果你连接的是共阴极的数码管,请改为0)
    # 将指定数码管设置为0,即亮的状态
    number_led_list[i].value(0) # (如果你连接的是共阴极的数码管,请改为1)

# 定义显示数字的函数
def show_4_number(number):
    if 0 <= number <= 9999:  # 判断显示数字的范围
        i = 0  # 定义一个变量i,用于控制不同的数码管。
        for num in "%04d" % number:  # 循环显示4位数字,即一个数字一个数字的依次显示。动态刷新
            print(num)  
            show_number(int(num))  # 调用show_number函数显示数字,注意num为字符格式要转为整型格式
            led_light_on(i)  # 调用led_light_on函数,点亮指定的数码管
            time.sleep_ms(5)  # 设置刷新的时间,此处可以根据实际情况调节
            print("此时数码管是", i)  # 打印出为0,1,2,3
            i += 1
            
# 显示4位数字
for i in range(0001, 10000):  
    for j in range(10): # 调节每个数字的显示频率
        show_4_number(i)  # 显示指定数字

五、演示效果(实际效果)

 六、如果你需要在WOKWI上仿真,请参考如下链接:

收集整理了一份《2024年最新物联网嵌入式全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升的朋友。 img img

如果你需要这些资料,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!