0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何用树莓派连接4位七段显示模块并在其上显示时间

科技观察员 来源:circuitdigest 作者:阿斯文斯·拉吉 2023-01-01 09:56 次阅读

我们都知道Raspberry Pi是一个基于ARM微处理器的精彩开发平台。凭借其高计算能力,它可以在电子爱好者或学生手中创造奇迹。只有当我们知道如何使其与现实世界交互并通过某些输出设备分析数据时,所有这些都是可能的。有许多传感器可以从实时世界中检测某些参数并将其传输到数字世界,我们在LCD屏幕或其他显示器中查看它们。但是,使用带有PI的LCD屏幕来显示少量数据总是不经济的。这是我们更喜欢使用 16x2 字母数字 LCD 显示器或 7 段显示器的地方。

今天我们将用树莓派连接 4 位七段显示模块并在其上显示时间。

尽管 16x2 字母数字 LCD 比 7 段显示器舒适得多,但在少数情况下,7 段显示器比 LCD 显示器更方便。LCD的缺点是字符大小小,如果您只是打算显示一些数值,那么对于您的项目来说将是矫枉过正的。7段在光线条件差的情况下也具有优势,可以从比普通LCD屏幕更宽的角度观看。所以,让我们开始了解它。

7 段和 4 位 7 段显示模块:

7段显示器中有七个段,每个段内部都有一个LED,通过点亮相应的段来显示数字。就像如果您希望 7 段显示数字“5”一样,您需要通过使它们相应的引脚变高来发光段 a、f、g、c 和 d。有两种类型的7段显示器:共阴极和共阳极,这里我们使用共阴极七段显示器。


pYYBAGOs8-OAFXXbAAAWC9KsOAg347.gif

现在我们知道如何在单个 7 段显示器上显示所需的数字字符。但是,很明显,我们需要一个以上的 7 段显示器来传达任何超过一位数字的信息。因此,在本教程中,我们将使用4 位 7 段显示模块,如下所示。

poYBAGOs8-WALcgsAABpEzb-Txk831.jpg

正如我们所看到的,有四个七段显示器连接在一起。我们知道每个 7 段模块将有 10 个引脚,对于 4 个七段显示器,总共会有 40 个引脚,任何人都会忙于将它们焊接在点板上,所以我强烈建议任何人购买模块或制作自己的 PCB 以使用 4 位 7 段显示器。其连接原理图如下所示:

poYBAGOs8-eAe7vPAABRASJcGTI318.gif

要了解4 位七段模块的工作原理,我们必须研究上述原理图,如图所示,所有四个显示器的 A 引脚都连接在一起,作为一个 A,对于 B,C 也是如此。直到DP。所以,基本上如果触发 A 打开,那么所有四个 A 都应该变高吧?

但是,这不会发生。我们还有从D0到D3(D0,D1,D2和D3)的另外四个引脚,可用于控制四个显示器中的哪个应该变高。例如:如果我需要我的输出只出现在第二个显示器上,那么只有D1应该设置为高电平,同时保持其他引脚(D0、D2和D3)为低电平。简单地说,我们可以使用从 D0 到 D3 的引脚选择哪个显示器必须处于活动状态,以及使用从 A 到 DP 的引脚显示哪个字符。

将 4 位 7 段模块与树莓派连接:

让我们看看如何,如何将这个 4 位 7 段模块与我们的 Raspberry Pi 连接起来。7 段模块有 16 个引脚,如下所示。您的模块可能更少,但不要担心它仍然会具有以下内容

7 或 8 段引脚(此处引脚从 1 到 8 开始)

接地引脚(此处为引脚 11)

4 位引脚(此处为引脚 13 至 16)

下面给出的是将4 位七段显示模块与树莓派连接来的树莓派数字时钟原理图:

pYYBAGOs8-iAJEBzAACrsQrk4J8408.png

下表还将帮助您进行连接并验证其是否符合上面显示的原理图。

S.No Rsp Pi GPIO 编号 RSP Pi 密码 7 段名称 7-Seg 引脚编号(在本模块中)
1 GPIO 26 引脚 37 段 A 1
2 GPIO 19 引脚 35 B段 2
3 通用信息总局 13 引脚 33 C段 3
4 GPIO 6 引脚 31 段 d 4
5 GPIO 5 引脚 29 段 e 5
6 GPIO 11 引脚 23 段 f 6
7 GPIO 9 引脚 21 段 g 7
8 GPIO 10 引脚 19 段 DP 8
9 GPIO 7 引脚 26 数字 1 13
10 GPIO 8 引脚 24 数字 2 14
11 GPIO 25 引脚 22 数字 3 15
12 GPIO 24 引脚 18 数字 4 16
13 11

pYYBAGOs8-yAJUCDAADerbCCqlw199.jpg

确定模块上的引脚,就可以继续连接了。在树莓派中发现 GPIO 引脚可能是一项具有挑战性的任务,因此我为您提供了这张 GPIO 引脚的图片。

对树莓派进行编程

在这里,我们使用Python编程语言来编程RPi。有很多方法可以对树莓派进行编程。在本教程中,我们使用Python 3 IDE,因为它是最常用的一个。

我们将讨论我们将在该项目的 PYHTON 程序中使用的一些命令,

首先,我们将从库中导入GPIO文件,下面的功能使我们能够对PI的GPIO引脚进行编程。我们还将“GPIO”重命名为“IO”,因此在程序中,每当我们想引用GPIO引脚时,我们都会使用“IO”一词。我们还导入了时间和日期时间,以从 Rsp Pi 读取时间值。

import RPi.GPIO as GPIO
import time, datetime

有时,当我们尝试使用的GPIO引脚可能正在执行其他一些功能时。在这种情况下,我们将在执行程序时收到警告。以下命令告诉 PI 忽略警告并继续程序。

IO.setwarnings(False)
我们可以参考 PIO 的 GPIO 引脚,可以通过板上的引脚编号或功能编号来引用。就像板上的“PIN 29”是“GPIO5”。所以我们在这里告诉要么我们要用“29”或“5”来表示这里的引脚。GPIO。BCM 表示我们将使用 5 表示 GPIO5 引脚 29。

IO.setmode (GPIO.BCM)
与往常一样,我们应该从初始化引脚开始,这里的段引脚和数字引脚都是输出引脚。出于编程目的,我们为段引脚形成数组,并在将它们声明为 GPIO 后将它们初始化为“0”。外

segment8 = (26,19,13,6,5,11,9,10)
for segment in segment8:
GPIO.setup(segment, GPIO.OUT)
GPIO.output(segment, 0)
同样,对于数字引脚,我们将其声明为输出引脚,并默认将它们设置为“0”

#Digit 1
GPIO.setup(7, GPIO.OUT)
GPIO.output(7, 0) #Off initially
#Digit 2
GPIO.setup(8, GPIO.OUT)
GPIO.output(8, 0) #Off initially
#Digit 3
GPIO.setup(25, GPIO.OUT)
GPIO.output(25, 0) #Off initially
#Digit 4
GPIO.setup(24, GPIO.OUT)
GPIO.output(24, 0) #Off initially

我们必须形成数组以在七段显示器上显示每个数字。要显示一个数字,我们必须控制所有 7 个段引脚(不包括点引脚),也就是说,它们必须关闭或打开。例如,为了显示数字 5,我们进行了以下安排

S.No Rsp Pi GPIO 编号 7 段名称 显示“5”的状态。
(0-> 关闭,1->打开)
1 GPIO 26 段 A 1
2 GPIO 19 B段 1
3 GPIO 13 C段 0
4 GPIO 6 段 d 1
5 GPIO 5 段 e 1
6 GPIO 11 段 f 0
7 GPIO 9 段 g 1

同样,我们有所有数字和字母的序列号。您可以自己编写或使用下面的图表。

poYBAGOs8-2AfgrpAABVFs9DcBE685.gif

有了这些数据,我们可以在 python 程序中为每个数字形成数组,如下所示。

null = [0,0,0,0,0,0,0]
zero = [1,1,1,1,1,1,0]
one = [0,1,1,0,0,0,0]
two = [1,1,0,1,1,0,1]
three = [1,1,1,1,0,0,1]
four = [0,1,1,0,0,1,1]
five = [1,0,1,1,0,1,1]
six = [1,0,1,1,1,1,1]
seven = [1,1,1,0,0,0,0]
eight = [1,1,1,1,1,1,1]
nine = [1,1,1,1,0,1,1]
如果您按照该程序进行操作,将有一个函数将每个字符显示在我们的 7 段显示器上,但是,让我们暂时跳过它并进入无限循环。从树莓派读取当前时间并在四个变量之间拆分时间值。例如,如果时间为 10.45,则变量 h1 将有 1,h2 将有 0,m1 将有 4v,m2 将有 5。

now = datetime.datetime.now()
hour = now.hour
minute = now.minute
h1 = hour/10
h2 = hour % 10
m1 = minute /10
m2 = minute % 10
print (h1,h2,m1,m2)
我们必须分别在四位数字上显示这四个变量值。要将变量值写入数字,我们可以使用以下行。在这里,我们通过使其变高来显示在数字 1 上,然后将调用函数 print_segment(变量)以在段显示上显示变量中的值。您可能想知道为什么我们在那之后会有延迟,为什么我们在此之后关闭此数字。

GPIO.output(7, 1) #Turn on Digit One
print_segment (h1) #Print h1 on segment
time.sleep(delay_time)
GPIO.output(7, 0) #Turn off Digit One
原因是,正如我们所知,我们一次只能显示一个数字,但是我们要显示四个数字,并且只有当所有四个数字都显示时,用户才能看到完整的四位数字。

那么,如何同时显示所有 4 位数字?

幸运的是,我们的 MPU 比人眼快得多,所以我们实际上要做的是:我们一次显示一个数字,但我们做得非常快,如上所示。

我们选择一位数字显示它等待 2ms(可变 delay_time),以便 MPU 和 7 段可以处理它,然后关闭该数字并移动到下一个数字并执行相同的操作,直到我们到达最后一个数字。人眼无法观察到这种 2ms 的延迟,所有四个数字似乎同时处于 ON 状态。

最后要学习的是了解print_segment(变量)函数的工作原理。在这个函数中,我们使用到目前为止声明的数组。因此,无论我们发送到此函数的任何变量都应该具有介于 (0-9) 之间的值,变量字符将接收此值并将其与实际值进行比较。此处将变量与“1”进行比较。同样,我们将与 0 到 9 的所有数字进行比较。如果是匹配项,我们使用数组并将每个值分配给其各自的段引脚,如下所示。

def print_segment(charector):
if charector == 1:
for i in range(7):
GPIO.output(segment8[i], one[i])

使用 Raspberry Pi 在 4 位 7 段上显示时间:

使用此处给出的原理图和代码进行连接并相应地对树莓派进行编程。完成所有操作后,只需启动程序,您应该会在七段显示中找到当前时间。但是,在此之前,您必须检查一些事情

确保您已将树莓派设置为当前时间,以防万一它在离线时间运行。

使用适配器而不是笔记本电脑/计算机为您的 Raspberry pi 供电,因为 7 段显示器消耗的电流量很高,并且您的 USB 端口无法获取它。

如果一切按预期工作,那么您应该在下面找到类似这样的内容。

poYBAGOs8-6AIVsTAADRGK4qArU319.jpg


import RPi.GPIO as GPIO

import time, datetime


now = datetime.datetime.now()


GPIO.setmode(GPIO.BCM)

GPIO.setwarnings(False)



#GPIO ports for the 7seg pins

segment8 = (26,19,13,6,5,11,9,10)




for segment in segment8:

GPIO.setup(segment, GPIO.OUT)

GPIO.output(segment, 0)



#Digit 1

GPIO.setup(7, GPIO.OUT)

GPIO.output(7, 0) #Off initially

#Digit 2

GPIO.setup(8, GPIO.OUT)

GPIO.output(8, 0) #Off initially

#Digit 3

GPIO.setup(25, GPIO.OUT)

GPIO.output(25, 0) #Off initially

#Digit 4

GPIO.setup(24, GPIO.OUT)

GPIO.output(24, 0) #Off initially



null = [0,0,0,0,0,0,0]

zero = [1,1,1,1,1,1,0]

one = [0,1,1,0,0,0,0]

two = [1,1,0,1,1,0,1]

three = [1,1,1,1,0,0,1]

four = [0,1,1,0,0,1,1]

five = [1,0,1,1,0,1,1]

six = [1,0,1,1,1,1,1]

seven = [1,1,1,0,0,0,0]

eight = [1,1,1,1,1,1,1]

nine = [1,1,1,1,0,1,1]



def print_segment(charector):

if charector == 1:

for i in range(7):

GPIO.output(segment8[i], one[i])


if charector == 2:

for i in range(7):

GPIO.output(segment8[i], two[i])


if charector == 3:

for i in range(7):

GPIO.output(segment8[i], three[i])


if charector == 4:

for i in range(7):

GPIO.output(segment8[i], four[i])


if charector == 5:

for i in range(7):

GPIO.output(segment8[i], five[i])


if charector == 6:

for i in range(7):

GPIO.output(segment8[i], six[i])


if charector == 7:

for i in range(7):

GPIO.output(segment8[i], seven[i])


if charector == 8:

for i in range(7):

GPIO.output(segment8[i], eight[i])


if charector == 9:

for i in range(7):

GPIO.output(segment8[i], nine[i])


if charector == 0:

for i in range(7):

GPIO.output(segment8[i], zero[i])



return;


while 1:


now = datetime.datetime.now()

hour = now.hour

minute = now.minute

h1 = hour/10

h2 = hour % 10

m1 = minute /10

m2 = minute % 10

print (h1,h2,m1,m2)




delay_time = 0.001 #delay to create virtual effect





GPIO.output(7, 1) #Turn on Digit One

print_segment (h1) #Print h1 on segment

time.sleep(delay_time)

GPIO.output(7, 0) #Turn off Digit One


GPIO.output(8, 1) #Turn on Digit One

print_segment (h2) #Print h1 on segment

GPIO.output(10, 1) #Display point On

time.sleep(delay_time)

GPIO.output(10, 0) #Display point Off

GPIO.output(8, 0) #Turn off Digit One


GPIO.output(25, 1) #Turn on Digit One

print_segment (m1) #Print h1 on segment

time.sleep(delay_time)

GPIO.output(25, 0) #Turn off Digit One


GPIO.output(24, 1) #Turn on Digit One

print_segment (m2) #Print h1 on segment

time.sleep(delay_time)

GPIO.output(24, 0) #Turn off Digit One



#time.sleep(1)



声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • lcd
    lcd
    +关注

    关注

    34

    文章

    4426

    浏览量

    167441
  • 显示模块
    +关注

    关注

    1

    文章

    50

    浏览量

    23568
收藏 人收藏

    评论

    相关推荐

    如何将柔性传感器与树莓连接并在LCD屏幕显示其值

    在这个项目中,我们将学习如何将柔性传感器与树莓连接并在LCD屏幕显示其值。
    的头像 发表于 12-31 09:33 3932次阅读
    如何将柔性传感器与<b class='flag-5'>树莓</b><b class='flag-5'>派</b><b class='flag-5'>连接</b><b class='flag-5'>并在</b>LCD屏幕<b class='flag-5'>上</b><b class='flag-5'>显示</b>其值

    七段显示 7segment display

    请问这些设计图哪里有问题??第一张不对 ? 求助!!!!我设计 把学生号码显示七段显示(7segment display)奇数=1 剩下的为0例如 我的学生号99801
    发表于 09-27 18:40

    如何在七段显示显示4个字符

    大家好,不,我不知道如何在七段显示显示4个字符;)我的问题是:为什么我必须将50MHz时钟计算到1KHz? (因此,每
    发表于 05-15 12:42

    七段LED显示译码器,七段LED显示译码器原理分析

    七段LED显示译码器,七段LED显示译码器原理分析 分段式 数码由分布在同一平面上若干发光的笔画组成,如半导体
    发表于 03-08 16:44 2.4w次阅读

    七段显示器控制电路四数_使用译码器驱动

    七段显示器控制电路四数_使用译码器驱动
    发表于 04-25 13:00 148次下载
    <b class='flag-5'>七段</b><b class='flag-5'>显示</b>器控制电路四<b class='flag-5'>位</b>数_使用译码器驱动

    如何以10进位显示8数的七段显示器?

    七段显示器在DE2可当成Verilog的控制台,做为16进位的输出结果。简单的使用开关当成2进位输入,并用8数的七段显示
    发表于 05-10 08:28 2963次阅读

    七段式LED显示屏的使用

    单片机的方法。您将创建一个从0(00h)到15(0Fh)的十六进制计数器,并在七段LED显示显示该值。
    的头像 发表于 12-06 14:41 1.5w次阅读
    <b class='flag-5'>七段</b>式LED<b class='flag-5'>显示</b>屏的使用

    巨型模块七段显示器开源项目

    电子发烧友网站提供《巨型模块七段显示器开源项目.zip》资料免费下载
    发表于 07-11 11:37 0次下载
    巨型<b class='flag-5'>模块</b>化<b class='flag-5'>七段</b><b class='flag-5'>显示</b>器开源项目

    定制设计的七段显示

    电子发烧友网站提供《定制设计的七段显示器.zip》资料免费下载
    发表于 08-01 09:56 0次下载
    定制设计的<b class='flag-5'>七段</b><b class='flag-5'>显示</b>器

    4511 7七段显示模块

    电子发烧友网站提供《4511 7七段显示模块.zip》资料免费下载
    发表于 08-18 15:11 0次下载
    4511 7<b class='flag-5'>位</b><b class='flag-5'>七段</b><b class='flag-5'>显示</b><b class='flag-5'>模块</b>

    带LED的七段显示

    电子发烧友网站提供《带LED的七段显示器.zip》资料免费下载
    发表于 11-23 09:16 0次下载
    带LED的<b class='flag-5'>七段</b><b class='flag-5'>显示</b>器

    使用ATmega328的七段显示驱动程序

    电子发烧友网站提供《使用ATmega328的七段显示驱动程序.zip》资料免费下载
    发表于 12-16 10:57 1次下载
    使用ATmega328的<b class='flag-5'>七段</b><b class='flag-5'>显示</b>驱动程序

    Snap Circuits七段显示

    电子发烧友网站提供《Snap Circuits七段显示器.zip》资料免费下载
    发表于 12-23 16:48 0次下载
    Snap Circuits<b class='flag-5'>七段</b><b class='flag-5'>显示</b>器

    七段显示器开源分享

    电子发烧友网站提供《七段显示器开源分享.zip》资料免费下载
    发表于 01-31 14:09 1次下载
    <b class='flag-5'>七段</b><b class='flag-5'>显示</b>器开源分享

    在HLS的七段显示显示光传感器的输出

    电子发烧友网站提供《在HLS的七段显示显示光传感器的输出.zip》资料免费下载
    发表于 06-16 11:38 1次下载
    在HLS的<b class='flag-5'>七段</b><b class='flag-5'>显示</b>器<b class='flag-5'>上</b><b class='flag-5'>显示</b>光传感器的输出