【K210+micropython】驱动HS420561k-32四位数码管显示数字

【K210+micropython】使用HS420561k-32四位数码管显示数字



相关知识准备


一、四位数码管

   四位数码管可分为:共阳和共阴两种。共阳极数码管是指数码管八段发光二极管的阳极(正极)都连在一起,而阴极对应的各段可分别控制;共阴极数码管是指数码管的八段发光二极管的阴极(负极)都连在一起,而阳极对应的各段分别控制。共阴级输入高电平有效,共阳级输入低电平有效。
   四位数码管引脚定义如下图:

             在这里插入图片描述

二、代码

1.驱动库

hs420561k32.py

import utime
from Maix import GPIO
from fpioa_manager import fm


number={
'0':
[0,0,0,0,0,0,1,1],#0
'1':
[1,1,1,1,0,0,1,1],#1
'2':
[0,0,1,0,0,1,0,1],#2
'3':
[0,0,0,0,1,1,0,1],#3
'4':
[1,0,0,1,1,0,0,1],#4
'5':
[0,1,0,0,1,0,0,1],#5
'6':
[0,1,0,0,0,0,0,1],#6
'7':
[0,0,0,1,1,1,1,1],#7
'8':
[0,0,0,0,0,0,0,1],#8
'9':
[0,0,0,0,1,0,0,1],#9
}


class HS420561K32:

    def __init__(self,pins):

        # 注册引脚
        fm.register(pins[0],fm.fpioa.GPIOHS0)     # a
        fm.register(pins[1],fm.fpioa.GPIOHS1)     # b
        fm.register(pins[2],fm.fpioa.GPIOHS2)     # c
        fm.register(pins[3],fm.fpioa.GPIOHS3)     # d
        fm.register(pins[4],fm.fpioa.GPIOHS4)    # e
        fm.register(pins[5],fm.fpioa.GPIOHS5)    # f
        fm.register(pins[6],fm.fpioa.GPIOHS6)    # g
        fm.register(pins[7],fm.fpioa.GPIOHS7)    # dp
        fm.register(pins[8],fm.fpioa.GPIOHS8)    # 1
        fm.register(pins[9],fm.fpioa.GPIOHS9)    # 2
        fm.register(pins[10],fm.fpioa.GPIOHS10)   # 3
        fm.register(pins[11],fm.fpioa.GPIOHS11)   # 4
        d1 = GPIO(GPIO.GPIOHS0,GPIO.OUT)
        d2 = GPIO(GPIO.GPIOHS1,GPIO.OUT)
        d3 = GPIO(GPIO.GPIOHS2,GPIO.OUT)
        d4 = GPIO(GPIO.GPIOHS3,GPIO.OUT)
        d5 = GPIO(GPIO.GPIOHS4,GPIO.OUT)
        d6 = GPIO(GPIO.GPIOHS5,GPIO.OUT)
        d7 = GPIO(GPIO.GPIOHS6,GPIO.OUT)
        d8 = GPIO(GPIO.GPIOHS7,GPIO.OUT)
        d9 = GPIO(GPIO.GPIOHS8,GPIO.OUT)
        d10= GPIO(GPIO.GPIOHS9,GPIO.OUT)
        d11 = GPIO(GPIO.GPIOHS10,GPIO.OUT)
        d12 = GPIO(GPIO.GPIOHS11,GPIO.OUT)

        #数码管a~g dp对应的开发板引脚
        self.d_Pins=[d1,d2,d3,d4,d5,d6,d7,d8]
        #数码管位段1 2 3 4对应的引脚
        self.w_Pins=[d9,d10,d11,d12]

    def display(self, num,dp):
        global number
        count=0
        for pin in self.d_Pins:#显示num的值
            pin.value(number[num][count])
            count+=1
        if dp==1:
            self.d_Pins[7].value(0)

    def clear(self):
        for i in self.w_Pins:
            i.value(0)
        for i in self.d_Pins:
            i.value(1)

    def showData(self, num):
        #分割出数值的百位、千位、个位和小数位的值
            d_num=num
            location=d_num.find('.')
            if location>0:
                    d_num=d_num.replace('.','')
                    while len(d_num)<4:
                            d_num='0'+d_num
                    for i in range(0,4):
                            utime.sleep_us(2000)
                            self.clear()
                            self.w_Pins[3-i].value(1)
                            if i==location-1:
                                    self.display(d_num[i],1)
                            else:
                                    self.display(d_num[i],0)
            if location<0:
                    for i in range(0,4):
                            utime.sleep_us(2000)
                            self.clear()
                            self.w_Pins[3-i].value(1)
                            self.display(d_num[i],0)


if __name__=="__main__":

    pins = [6,7,8,9,10,15,21,22,23,24,25,30]	# 引脚连接顺序对应abcdefg(dp)1234
    hs32 = HS420561K32(pins)
    utime.clock()

    while True:
        print(utime.ticks())
        num = str(utime.ticks()/1000)[:4]
        hs32.showData(num)

以上代码是根据博主TPYBoard的博文中TPYBoard驱动四位数码管的代码移植而来,并进行了简单的类封装。


遇到的问题和总结

  • 接线和注册引脚问题

    千万不可胡乱接线和注册引脚。

    从上表可知,最好使用第三列空着的引脚,也就是没有其他特殊功能的引脚。不然就会像我一样,最开始胡乱把1~10脚都接上且注册了GPIOHSx,然后上电运行,发现板子上的TXD灯十分的亮(最亮的那种,闪眼的红)。IDE终端里什么信息也没有,就像卡死一样,过几秒还会断开连接。。。

  • 74hc595驱动

    一块四位数码管需要12个引脚输入,多一位数码管需要多1个引脚输入。K210这种本来引脚数就不是十分充裕的控制器,其实最好不要采用直接连接的方式驱动,更好的办法是使用74hc595进行驱动。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值