1.双CH595驱动电路图
SCLK引脚用来控制位移
RCLK引脚用来控制锁存
SDI引脚传输数据
2.说明
这是我在学习完C51之后,学习使用基于micropython 控制esp32单片机。
用的是一块小拓展板,搭载双CH595。
接线的话,应该有基础的同学都知道怎么接,就不放接线图了。
3.静态数码管
3.1代码
Nixie.py
from machine import Pin
sclk = Pin(15, Pin.OUT);
rlck = Pin(2, Pin.OUT);
sdi = Pin(4, 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])
代码比较简单、通用,也是点亮数码管的基础操作
注:该代码是静态数码管(即一次点亮一位),利用循环可达到动态数码管(即点亮后消影,马上点亮下一位)
3.2.效果
send_data(2,2)
3.3.该扩展板原理图
链接:https://pan.baidu.com/s/14swwGloVDbz5M_omYVHRkA?pwd=trnf
提取码:trnf
4.动态数码管
4.1代码
from machine import Pin
import time
sclk = Pin(15, Pin.OUT);
rlck = Pin(2, Pin.OUT);
sdi = Pin(4, 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()
说明:后面发现寄存器数据满了就会溢出,可以等下一个CH595接受数据后再锁存,这样不会有“影子”
效果: