CH595 驱动数码管

 先上原理图

我手里的是型号SR410361K的 4段数码管是共阳的(低电平驱动),先发送数据,然后发送片选

共阴 共阳的图如下:

 如何测量呢?

  • 首先将数字万用表档位调节到蜂鸣器/二极管档,红表笔和黑表笔接在数码管任意 2 个脚上,组合可以有很多种,但总有一个 LED 会发光的,找到一个就可以啦。

  • 然后红表笔不动,黑表笔逐个接触剩余的引脚,如果能看到数码管不同的发光段被点亮,则此数码管为共阳极。

  • 相反黑表笔不动,红表笔逐个接触剩余的引脚,如果能看到数码管不同的发光段被点亮,则此数码管为共阴极。

此判断方法,还可以通过接触数码管的所有引脚,来判断此数码管所有的发光段是否可以正常点亮。

软件驱动的话,需要取字模,有相关人做了上位机,大家可以去找找,如下图,这样想要什么显示,进行勾选选择即可。

 使用rp2040 micropython 驱动测试代码如下:

from machine import Pin
import utime

pin_sclk = Pin(13, Pin.OUT); pin_sclk.off()  # 上升跳变时锁存
pin_rlck = Pin(12, Pin.OUT); pin_rlck.off()  # 上升跳变时数据位移
pin_dio = Pin(11, 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,
}

'''
0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,
mapper = {  # 共阴方式段码对照
    '0': 0x3F, '1': 0x06, '2': 0x5B, '3': 0x4F,
    '4': 0x66, '5': 0x6D, '6': 0x7D, '7': 0x07,
    '8': 0x7F, '9': 0x6F, 'A': 0x77, 'B': 0x7C,
    'C': 0x39, 'D': 0x5E, 'E': 0x79, 'F': 0x71,
}
'''
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,5:0x10,6:0x20,7:0x40,8:0x80}.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  # 共阴方式
    #print("value")
    #print(value)
    for i in range(8):
        pin_dio.value(1 if (value << i) & 0x80 else 0)  # 从最高位开始送数据
        jump_up(pin_sclk)  # 每送完一位后就让位移寄存器跳变一下




step=0
num =0


while True:
    send_data(int(5))
    send_data(1,is_position=True)
    jump_up(pin_rlck)

    send_data(int(6))
    send_data(2,is_position=True)
    jump_up(pin_rlck)
    send_data(int(7))
    send_data(3,is_position=True)
    jump_up(pin_rlck)
    send_data(int(8))
    send_data(4,is_position=True)
    jump_up(pin_rlck)

    send_data(int(1))
    send_data(5,is_position=True)
    jump_up(pin_rlck)

    send_data(int(2))
    send_data(6,is_position=True)
    jump_up(pin_rlck)
    send_data(int(3))
    send_data(7,is_position=True)
    jump_up(pin_rlck)
    send_data(int(4))
    send_data(8,is_position=True)
    jump_up(pin_rlck)
    # 显示千位
#     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(int(6))
    #send_data(2, is_position=True)
    #jump_up(pin_rlck)
    # 显示个位
    #send_data(int(num % 10))
    #send_data(int(5))
    #send_data(1, is_position=True)
    #jump_up(pin_rlck)
   
    #send_data(1,is_position=True)
    #send_data(int(num % 10))
    #jump_up(pin_rlck)

#     if step%100==0:
#         num += 1
#         if num>9999: num=0
#     step += 1

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

谢娘蓝桥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值