当前位置:   article > 正文

物联网开发笔记(82)- 使用Micropython开发ESP32开发板之控制74HC595四位共阳数码管模块_esp32使用python开发74hc595

esp32使用python开发74hc595

一、目的

        这一节我们学习如何使用我们的ESP32开发板来控制74HC595四位共阳数码管模块。

                

 二、环境

        ESP32 + Thonny + 74HC595 4位共阳数码管模块+ 几根杜邦线 + Win10

接线方法:

三、示例代码1

  1. from machine import Pin
  2. # import utime
  3. # 准备数据引脚
  4. pin_sclk = Pin(18, Pin.OUT); pin_sclk.off() # 上升跳变时锁存
  5. pin_rlck = Pin(5, Pin.OUT); pin_rlck.off() # 上升跳变时数据位移
  6. pin_dio = Pin(23, Pin.OUT); pin_dio.off() # 待移入数据位
  7. mapper = { # 共阳方式段码对照
  8. '0': 0xC0, '1': 0xF9, '2': 0xA4, '3': 0xB0,
  9. '4': 0x99, '5': 0x92, '6': 0x82, '7': 0xF8,
  10. '8': 0x80, '9': 0x90, 'A': 0x88, 'B': 0x83,
  11. 'C': 0xA7, 'D': 0xA1, 'E': 0x86, 'F': 0x8E,
  12. }
  13. def jump_up(pin):
  14. pin.on() # 产生跳变
  15. # utime.sleep_ms(1)
  16. pin.off() # 保持一段时间后关闭
  17. def send_data(num, is_position=False, has_point=False):
  18. '向位称寄存器送数据'
  19. if is_position: # 位码处理( 1~4位)
  20. value = {1:0x01, 2:0x02, 3:0x04, 4:0x08}.get(num, 0)
  21. else: # 段码处理
  22. value = mapper.get(str(num), 0)
  23. value = value & 0x7F if has_point else value # 共阳方式
  24. # value = (~value | 0x80) if has_point else ~value # 共阴方式
  25. for i in range(8):
  26. pin_dio.value(1 if (value << i) & 0x80 else 0) # 从最高位开始送数据
  27. jump_up(pin_sclk) # 每送完一位后就让位移寄存器跳变一下
  28. num = 0
  29. step = 1
  30. while True:
  31. # 显示千位
  32. send_data(int(num/1000))
  33. send_data(4, is_position=True)
  34. jump_up(pin_rlck)
  35. # 显示百位
  36. send_data(int(num / 100 % 10))
  37. send_data(3, is_position=True)
  38. jump_up(pin_rlck)
  39. # 显示十位
  40. send_data(int(num / 10 % 10))
  41. send_data(2, is_position=True)
  42. jump_up(pin_rlck)
  43. # 显示个位
  44. send_data(int(num % 10))
  45. send_data(1, is_position=True)
  46. jump_up(pin_rlck)
  47. if step%100==0:
  48. num += 1
  49. if num>9999: num=0
  50. step += 1

显示效果

 四、示例代码2

  1. from machine import Pin
  2. sclk = Pin(18, Pin.OUT);
  3. rlck = Pin(5, Pin.OUT);
  4. sdi = Pin(23, Pin.OUT);
  5. ghc595_buf=[0x01,0x02,0x04,0x08]
  6. number=[0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
  7. 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00]
  8. def up(pin):#一个上升沿
  9. pin.off()
  10. pin.on()
  11. def write_data(data):
  12. for i in range(8):
  13. sdi.value(1 if data & (0x80>>i) else 0)
  14. up(sclk)#移位寄存器时钟上升沿将端口数据送入寄存器中
  15. up(rlck)#存储寄存器时钟上升沿将前面写入到寄存器的数据输出
  16. def send_data(num,location):
  17. write_data(~number[num])
  18. write_data(ghc595_buf[location-1])
  19. send_data(2,2)

显示效果

 五、示例代码3

  1. from machine import Pin
  2. import time
  3. sclk = Pin(18, Pin.OUT);
  4. rlck = Pin(5, Pin.OUT);
  5. sdi = Pin(23, Pin.OUT);
  6. ghc595_buf=[0x01,0x02,0x04,0x08]
  7. number=[0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
  8. 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00]
  9. number_buf=[1,2,3,4]#显示缓存区
  10. def up(pin):#一个上升沿
  11. pin.off()
  12. pin.on()
  13. def write_data(data):
  14. for i in range(8):
  15. sdi.value(1 if data & (0x80>>i) else 0)
  16. up(sclk)#移位寄存器时钟上升沿将端口数据送入寄存器中
  17. #up(rlck)#存储寄存器时钟上升沿将前面写入到寄存器的数据输出
  18. def send_data(num,location):
  19. write_data(~number[num])
  20. up(rlck)
  21. write_data(ghc595_buf[location-1])
  22. up(rlck)
  23. def display():
  24. for i in range(4):
  25. #send_data(16,i+1)
  26. write_data(~number[number_buf[i]])
  27. write_data(ghc595_buf[i])
  28. up(rlck)
  29. while True:
  30. 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://item.taobao.com/item.htm?spm=a1z09.2.0.0.51c12e8d2gIEga&id=522572326758&_u=4p01rchca48icon-default.png?t=N176https://item.taobao.com/item.htm?spm=a1z09.2.0.0.51c12e8d2gIEga&id=522572326758&_u=4p01rchca48

资料下载链接:

下载链接: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位共阳

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/211516
推荐阅读
相关标签
  

闽ICP备14008679号