TPY102四位数码管1.0

别来无恙 提交于 2020-01-24 23:13:50
# main.py -- put your code here!
"""
四位数码管1.0
适用于:四位七段数码管,共阳
输入num类型:字符串str
马玉华,2019.12.28
"""
import pyb
from pyb import Pin

# 数码管a~g dp对应的开发板引脚'X1', 'X2', 'X3', 'X4', 'X5', 'X6', 'X7', 'X8',用于控制每一位上七个数码管加一个小数点的高低电平。
d_Pins = [Pin(i, Pin.OUT_PP) for i in ['X1', 'X2', 'X3', 'X4', 'X5', 'X6', 'X7', 'X8']]
# 数码管位段1 2 3 4对应的引脚'Y9','Y10','Y11','Y12'  ,  'Y9','Y10','Y11','Y12'对应个位十位百位千位。当1234中的一个为高电平,其他的为低电平时,高电平那一位的七段数码管可以进行编辑
w_Pins = [Pin(i, Pin.OUT_PP) for i in ['Y9', 'Y10', 'Y11', 'Y12']]

# 共阳数码管,每位上的七个数码管共一个阳极(1234中一个),控制的是负极的高低电平,给负极低电平点亮数码管。
# 要想亮四个数码管,就需要四位循环闪烁亮,人眼看不出来就相当于四个都亮了。也可用udelay让四个都亮
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
}


def display(num):  # 用于显示一位上的七段数码管
    count = 0
    for pin in d_Pins:  # 一个循环点亮七段中的一段,遍历完所有的pin以后就可以将一位上的七段数码管点亮。
        pin.value(number[num][count])  # number[num]取出要显示数字的引脚高低电平,一次循环中设置一个电平,即点亮七段中的一段
        count += 1


def clear():  # 在显示w位上的七段数码管时,先清除数字,熄灭数码管
    for i in w_Pins:
        i.value(0)
    for i in d_Pins:
        i.value(1)


def four_num_without_dot(num):
    while len(num) < 4:  # 如果不是四位数,在前面补上0
        num = '0' + num
    for i in range(0, 4):
        clear()  # 显示之前先所有位都不给电
        w_Pins[-i - 1].value(1)  # 然后再给对应的1234位上电,abc...才能在这一位上导通点亮对应位上的数码管    #通过循环显示个位、十位、百位、千位
        display(num[i])  # 调用display显示一位上的七段数码管
        pyb.udelay(2000) # 此处如果使用delay的话,就会先显示2然后0然后1然后9.使用udelay,可以延迟上一个程序,还可以进行下面的程序运行,udelay时间不超过2000微秒。
        #如果不要这行延迟程序,相当于四个数码管闪烁着亮,要的话相当于都在亮

def display_dot():   #专门用于显示小数点
    clear()
    w_Pins[-location].value(1)
    d_Pins[7].value(0)
    pyb.udelay(1900)


def showData(num):    # 确定是小数还是整数
    global location
    location = num.find('.')  # 返回字符在字符串中的索引号,若找不到返回-1

    #没有小数点
    if location < 0:
        four_num_without_dot(num)  # 显示四个数字
    #有小数点
    if location > 0:
        num = num.replace('.', '')  # 用''替换小数点,相当于去掉小数点
        four_num_without_dot(num)   #显示四个数字
        display_dot()          #显示小数点


while True:
    num = '2019'
    showData(num)

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!