300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 物联网开发笔记(23)- 使用Micropython开发ESP32开发板之控制4位数码管

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

时间:2018-10-19 21:13:43

相关推荐

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

上一节我们讲解了如何控制单个数码管,这一节我们来一起学一下如何控制4位数码管。

一、目的

使用MicroPython开发ESP32控制4位数码管

二、环境

ESP32+数码管+Thonny IDE+电阻(200-300欧姆的色环电阻即可+面包板(非必须)+十几根杜邦线(母对母4个和母对公8个)

此处建议使用真实硬件环境(当然WOKWI仿真也可,但是由于网络问题我没有看到成功的结果,你可以试下)

接线原理图:

我实际的接线图:

三、4位数码管介绍

4位数码管可以同时显示4个数字或字母(A-F),我们知道单个数码管一般有10个针脚,那个4位数码管一般有12个针脚,除了a-g和DP(DotPoint)是一样的,还有四个针脚分别用来控制每个数码管。

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

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

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

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

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

先上代码,使用Thonny IED开发

main.py

import machineimport 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,3i += 1# 显示4位数字for i in range(0001, 10000): for j in range(10): # 调节每个数字的显示频率show_4_number(i) # 显示指定数字

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

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

Wokwi Arduino and ESP32 Simulator/projects/345318630016156244如果你成功仿真了,请留言谢谢。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。