赞
踩
一、目的
这一节我们学习如何使用我们的ESP32开发板来控制74HC595四位共阳数码管模块。
二、环境
ESP32 + Thonny + 74HC595 4位共阳数码管模块+ 几根杜邦线 + Win10
接线方法:
三、示例代码1
- from machine import Pin
- # import utime
-
- # 准备数据引脚
- pin_sclk = Pin(18, Pin.OUT); pin_sclk.off() # 上升跳变时锁存
- pin_rlck = Pin(5, Pin.OUT); pin_rlck.off() # 上升跳变时数据位移
- pin_dio = Pin(23, Pin.OUT); pin_dio.off() # 待移入数据位
-
- mapper = { # 共阳方式段码对照
- '0': 0xC0, '1': 0xF9, '2': 0xA4, '3': 0xB0,
- '4': 0x99, '5': 0x92, '6': 0x82, '7': 0xF8,
- '8': 0x80, '9': 0x90, 'A': 0x88, 'B': 0x83,
- 'C': 0xA7, 'D': 0xA1, 'E': 0x86, 'F': 0x8E,
- }
-
- def jump_up(pin):
- pin.on() # 产生跳变
- # utime.sleep_ms(1)
- pin.off() # 保持一段时间后关闭
-
- def send_data(num, is_position=False, has_point=False):
- '向位称寄存器送数据'
- if is_position: # 位码处理( 1~4位)
- value = {1:0x01, 2:0x02, 3:0x04, 4:0x08}.get(num, 0)
- else: # 段码处理
- value = mapper.get(str(num), 0)
- value = value & 0x7F if has_point else value # 共阳方式
- # value = (~value | 0x80) if has_point else ~value # 共阴方式
- for i in range(8):
- pin_dio.value(1 if (value << i) & 0x80 else 0) # 从最高位开始送数据
- jump_up(pin_sclk) # 每送完一位后就让位移寄存器跳变一下
-
- num = 0
- step = 1
- while True:
- # 显示千位
- send_data(int(num/1000))
- send_data(4, is_position=True)
- jump_up(pin_rlck)
- # 显示百位
- send_data(int(num / 100 % 10))
- send_data(3, is_position=True)
- jump_up(pin_rlck)
- # 显示十位
- send_data(int(num / 10 % 10))
- send_data(2, is_position=True)
- jump_up(pin_rlck)
- # 显示个位
- send_data(int(num % 10))
- send_data(1, is_position=True)
- jump_up(pin_rlck)
-
- if step%100==0:
- num += 1
- if num>9999: num=0
- step += 1
-
显示效果
四、示例代码2
- from machine import Pin
-
- sclk = Pin(18, Pin.OUT);
- rlck = Pin(5, Pin.OUT);
- sdi = Pin(23, Pin.OUT);
-
- ghc595_buf=[0x01,0x02,0x04,0x08]
- number=[0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
- 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00]
-
- def up(pin):#一个上升沿
- pin.off()
- pin.on()
-
- def write_data(data):
- for i in range(8):
- sdi.value(1 if data & (0x80>>i) else 0)
- up(sclk)#移位寄存器时钟上升沿将端口数据送入寄存器中
- up(rlck)#存储寄存器时钟上升沿将前面写入到寄存器的数据输出
-
- def send_data(num,location):
-
- write_data(~number[num])
- write_data(ghc595_buf[location-1])
-
- send_data(2,2)
显示效果
五、示例代码3
- from machine import Pin
- import time
-
- sclk = Pin(18, Pin.OUT);
- rlck = Pin(5, Pin.OUT);
- sdi = Pin(23, Pin.OUT);
-
- ghc595_buf=[0x01,0x02,0x04,0x08]
- number=[0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
- 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00]
- number_buf=[1,2,3,4]#显示缓存区
- def up(pin):#一个上升沿
- pin.off()
- pin.on()
-
- def write_data(data):
- for i in range(8):
- sdi.value(1 if data & (0x80>>i) else 0)
- up(sclk)#移位寄存器时钟上升沿将端口数据送入寄存器中
- #up(rlck)#存储寄存器时钟上升沿将前面写入到寄存器的数据输出
-
- def send_data(num,location):
-
- write_data(~number[num])
- up(rlck)
- write_data(ghc595_buf[location-1])
- up(rlck)
-
- def display():
- for i in range(4):
- #send_data(16,i+1)
- write_data(~number[number_buf[i]])
- write_data(ghc595_buf[i])
- up(rlck)
-
- while True:
- display()
显示效果
六、参考资料
MicroPython-On-ESP8266——数码管的使用,2片HC595驱动四位数码管_嗑烤队长的博客-CSDN博客_micropython 4位数码管MicroPython-On-ESP8266——数码管的使用,2片HC595驱动四位数码管1. 背景前面在使用四位数码管时,需要用来12个GPIO接口,结果咱micropython能驱动的esp8266开发板只有9个口能用,导致只能驱动两位数码管。还好动态扫描的机制是用到了。这回来学习第三个数码管,由两片72HC595位移寄存器芯片驱动的四位数码管。2. 位移寄存器芯片74HC595先了解一下这个74HC595芯片(收下简称595)是个什么东西又是如何工作的。2.1. 595原理图https://blog.csdn.net/fatway/article/details/121276336ESP32 with Mricropython 两片hc595驱动的数码管 *学习心得_liubin_cn的博客-CSDN博客_hc595驱动用的是一块小拓展板,搭载双CH595。SCLK引脚用来控制位移。RCLK引脚用来控制锁存。https://blog.csdn.net/liubin_cn/article/details/128672388
七、购买地址
某宝购买链接:
资料下载链接:
下载链接:https://pan.baidu.com/s/1-Fikj7zqFbh2xSRPmTXTmQ 提取码:recu |
宝贝特点:
1.采用2片595驱动数码管,需要单片机3路IO口,根据数码管动态扫描原理进行显示;
2.宽工作电压3.3V到5V;
3.PCB板尺寸:40mm*22mm
4.数码管型号:0.36 4位共阳
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。