树莓派 4位数码管时间显示

树莓派:4B

python 3.7

网上有很多种对于数码管的驱动程序,这种代码是我能找到最简洁的。

老练的代码就意味着不好懂,所以我做了详尽的注释。

在前辈的代码基础上做了修改,原始程序调试过程中有很多bug,无法直接使用。

源代码地址:树莓派驱动4位数码管显示时间 | 树莓派实验室 (nxez.com)

 1.接线

 

2.代码

import RPi.GPIO as GPIO
import time, random

"""
Display date to LED lights
There are four lights, it displays 4 number
共阳极
"""
 
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM) #采用BCM模式

pins = [26, 19, 13, 6, 5, 11, 9,10] #GPIO ports 数码管单段对应的GPIO针脚号
sels = [21, 20, 16, 12] #GPIO ports to select led, there are four led lights数码管4个位
nums = [0x3f, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7d, 0x07, 0x7f, 0x6f,0x80] #数字0~9对应的16进制,参照excel表格

#指定N脚状态,高或者低 
def setp(n, status='on'):
    if status == 'on':
        GPIO.output(n, GPIO.HIGH)
    else:
        GPIO.output(n, GPIO.LOW)
        
#初始化引脚,所有置high
for i in pins + sels:
    GPIO.setup(i, GPIO.OUT) #设置所有相关引脚都为输出引脚
    setp(i, 'on')
#初始化引脚,所有位置low 关闭所有显示
for i in sels:
    setp(i, 'off')
  
#
#     __A_
#    |     |    |  0 ->  011 1111 -> 0x3f
#  F |     | B  |  1 ->  010 0001 -> 0x21
#    |__G__|    |  2 ->  111 0110 -> 0x76
#    |     |    |  4 ->  ...
#  E |     | C  |        ...
#    |__D__| DP |  9 ->  ...      -> 0x5f
 
#刷新数码管
def flush(sel, n):
    setp(sels[sel], 'on')
    n = int(n)
    n = nums[n]
    for i in sels:
        if i != sels[sel]: #若非选定位,全部置低熄灭
            setp(i, 'off')
#点亮数字
    for i in range(7):
        if (n & (1 << i)):
            setp(pins[i], 'off')
#     time.sleep(0.5)
#熄灭数字,为显示下一个做准备
    for i in range(7):
        if (n & (1 << i)):
            setp(pins[i], 'on')
 
try:
    while True:
        t = time.gmtime() #获取当前时间
#         print("%d : %d" % (t.tm_min ,t.tm_sec))
        flush(3, t.tm_min / 10) #分的十位
        flush(2, t.tm_min % 10) #分的个位
        flush(1, t.tm_sec / 10) #秒的十位
        flush(0, t.tm_sec % 10) #秒的个位

except:
    GPIO.cleanup()

如果要显示其他的字符,往表格中填入。excel表格放不了,就把公式贴进来。

显示 DP G F E D C B A 二进制 十六进制
0 0 0 1 1 1 1 1 1 00111111 3F
1 0
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值