《树莓派工程实战》第三节利用数码管实现倒计时功能,项目

发表时间:2021-05-11

第三节 用数码管实现倒计时功能

3.1 数码管简介

3.2 区分共阴和共阳,找到COM端

3.3 如何显示数字和字母

3.4 将数码管连接到树莓派

3.5 完成倒计时功能


在本节,我们将学习数码管的相关知识,并将其连接到树莓派上,实现倒计时功能。该项目涉及到的材料有:

  1. 树莓派 * 1
  2. 数码管 * 1
  3. 限流电阻 * 1
  4. 面包板 * 1
  5. 杜邦线若干

3.1 数码管简介

数码管按段数可分为7段数码管和8段数码管,8段数码管比7段数码管多一个LED单元,也就是多一个右下角的小数点(DP---Decimal Point)。

如果按LED连接方式可分为共阳数码管和共阴数码管。共阳数码管是指将所有LED的阳极都接到一起组成公共阳极COM端的数码管。在使用共阳数码管时应该给公共阳极COM高电平,其他引脚给低电平。

共阴数码管是指将所有LED的阴极接到一起组成公共阴极COM端的数码管,在使用共阴数码管时应该给公共阴极COM低电平,其他引脚给高电平。

我们再来巩固下,请看下下面这张图:

可以看出,这是一个8段的共阳数码管。数字编号为3和8的引脚为COM端,所以我们应该将这两个引脚接到高电平上,其他引脚给低电平。

3.2 区分共阴和共阳,找到COM端

如果你不知道自己数码管是共阳还是共阴的,我们可以用万用表很快地辨别出来:

  1. 将万用表打到二极管档
  2. 我们假定数码管是共阳的,于是先用红笔触碰一个引脚固定不变,然后黑笔挨个触碰其他引脚。如果没有发光,说明红笔所触碰的引脚不是COM端。
  3. 更换红笔触碰的引脚,然后黑笔再次挨个触碰。如果黑笔触碰不同的引脚会让数码管不同位置发光,那么就说明红笔所触碰的引脚为COM端,该数码管是共阳的。
  4. 如果步骤3中的现象没有出现,那么说明该数码管是共阴的。我们应该固定黑笔,而让红笔去触碰不同的引脚。

注:COM端有两个,当红笔固定在一个COM端,黑笔在触碰另一个COM端时,会短路,万用表会发出蜂鸣声。

我们当然也可以把数码管插在面包板上并通电,然后用杜邦线连接不同引脚进行辨别。笔者在网上发现了这个视频,讲解的很清楚,大家可以看下: 周末实验室《认识数码管,共阳极与共阴极数码管判别》

3.3 如何显示数字和字母

我们再来看下下面这个共阳极的数码管图:

在数码管的每个段上以及引脚上(除COM端引脚),都有一个字母。也就是说,如果我们想要a段灯管亮起,只需要给COM端高电平,同时给a引脚低电平即可。

从而我们可以引申出:如果想要让数码管显示字母E,那么只需要将灯管a,f,g,e,d亮起即可。也就是说给COM端高电平,同时给引脚a,f,g,e,d低电平。

3.4 将数码管连接到树莓派

笔者这里将COM端连到了18号GPIO引脚,数码管的g, f, a, b, e, d, c, h引脚分别连到了树莓派的8, 10, 12, 16, 22, 24, 26, 28号GPIO引脚上。

注:不用将两个COM端都连到树莓派上,另外记得加入限流电阻哦。

3.5 完成倒计时功能

代码编写如下:

import RPi.GPIO as GPIO
import time

# 设置编码方式
GPIO.setmode(GPIO.BOARD)

# 设置引脚
COM = 18
g = 8
f = 10
a = 12
b = 16
e = 22
d = 24
c = 26
h = 28

# 设置各个数字的显示方式
num0 = [a, f, b, e, c, d]
num1 = [f, e]
num2 = [a, b, g, e, d]
num3 = [a, b, g, c, d]
num4 = [f, g, b, c]
num5 = [a, f, g, c, d]
num6 = [a, f, g, e, c, d]
num7 = [a, b, c]
num8 = [a, f, b, g, e, c, d]
num9 = [a, f, g, b, c]

countdown = [num9, num8, num7, num6, num5, num4, num3, num2, num1, num0]

# COM端给高电平
GPIO.setup(COM, GPIO.OUT)
GPIO.output(COM, GPIO.HIGH)

for num in countdown:
    # 其他引脚给低电平
    for i in num:
        GPIO.setup(i, GPIO.OUT)
        GPIO.output(i, GPIO.LOW)

    time.sleep(1)
    GPIO.cleanup(num)

# 释放COM引脚
GPIO.cleanup(COM)

代码逻辑很简单:

1. 将树莓派引脚编号赋值给数码管的各个引脚,方便后面的代码编写。

2. 设置0-9各个数字的显示方式,记录给需要给低电平的的灯管引脚。

3. 因为是共阳数码管,所以给COM端高电平。接着从数字9到0依次循环,并给相应灯管低电平。等待一秒后,释放灯管所连接的树莓派引脚。

4. 最后释放COM端所连接的树莓派引脚。

注:GPIO.cleanup()函数可以传入一个列表和数字,表示释放特定的引脚。如果不传入,则释放所有引脚。

运行视频如下:

树莓派数码管倒计时

文章来源互联网,如有侵权,请联系管理员删除。邮箱:417803890@qq.com / QQ:417803890

微配音

Python Free

邮箱:417803890@qq.com
QQ:417803890

皖ICP备19001818号
© 2019 copyright www.pythonf.cn - All rights reserved

微信扫一扫关注公众号:

联系方式

Python Free