<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
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

    文章

    4296

    瀏覽量

    164866
  • 顯示模塊
    +關注

    關注

    1

    文章

    46

    瀏覽量

    23535
收藏 人收藏

    評論

    相關推薦

    如何將柔性傳感器與樹莓連接并在LCD屏幕上顯示其值

    在這個項目中,我們將學習如何將柔性傳感器與樹莓連接并在LCD屏幕上顯示其值。
    的頭像 發表于 12-31 09:33 ?3517次閱讀
    如何將柔性傳感器與<b class='flag-5'>樹莓</b>派<b class='flag-5'>連接</b><b class='flag-5'>并在</b>LCD屏幕上<b class='flag-5'>顯示</b>其值

    labview8七段數碼顯示

    網友奉獻的,表示感謝.七段顯示器你可以輸入任意的整數數字會自動轉成七段顯示器(Cluster Array)lv8.6:[hide][/hide]lv9.0:[hide] [/hide]
    發表于 12-12 11:11

    用簇實現七段數碼管顯示系統時間

    用簇實現七段數碼管顯示系統時間。
    發表于 08-14 17:52

    七段數碼管顯示

    共陽的四七段數碼管怎樣動態顯示數字啊,因為個人認為A、B C D E F G DP 都是分別公用的,個人認為四只數碼管只能顯示一樣的數字,不能顯示
    發表于 06-22 22:18

    樹莓晴雨表天氣時鐘

    ` 本帖最后由 348081236 于 2016-2-18 17:44 編輯 在本教程我將展示如何用樹莓2和BMP180 I2C 傳感器做一個簡單的Adafruit 4
    發表于 12-28 15:05

    七段數碼管顯示程序

    請問,如果用兩個74HC575驅動兩個七段數碼管,并將兩個數碼管的DS、SH_CP、ST_CP連在一起,只有使能端OE是分開的,那我怎么寫程序來選擇控制兩個數碼管顯示單片機上溫度傳感器采集的溫度值兩位數呢?求程序,謝謝!
    發表于 05-19 09:53

    七段顯示 7segment display

    請問這些設計圖哪里有問題??第一張不對 ? 求助?。。?!我設計 把學生號碼顯示七段顯示(7segment display)奇數=1 剩下的為0例如 我的學生號99801
    發表于 09-27 18:40

    如何在七段顯示顯示4個字符

    大家好,不,我不知道如何在七段顯示顯示4個字符;)我的問題是:為什么我必須將50MHz時鐘計算到1KHz? (因此,每
    發表于 05-15 12:42

    請問我如何才能將七段顯示器與Spartan 3e入門套件連接?

    今天我購買了4七段顯示器。我有共陰極和共陽極顯示器。我如何將它與我的Spatran 3e連接,
    發表于 06-05 08:40

    何用PIC16f887在復接七段顯示顯示一個四數字?

    伙計們,我試圖用PIC16f887在復接七段顯示顯示一個四數字。但是我不能使四數字在四個七段
    發表于 10-30 10:06

    七段數碼管顯示方法有哪幾種方式?其代碼怎樣去編寫?

    什么是七段數碼管?七段數碼管的結構是由哪些部分組成的?七段數碼管顯示方法有哪幾種方式?其代碼怎樣去編寫?
    發表于 07-14 06:57

    數碼管分為哪幾種?七段數碼管的顯示原理是什么?

    什么是七段數碼管?七段數碼管有哪些優點以及應用?數碼管分為哪幾種?七段數碼管的顯示原理是什么?
    發表于 07-19 07:57

    七段數碼管顯示電子鐘設計

    狀態監控16、七段數碼管顯示電子鐘17、閃爍燈18、電子秒表19、跑馬燈20、函數發生器21、環境溫度采集系統[直接添加扣+3098024513]...
    發表于 09-06 07:46

    如何利用51單片機實現七段數碼管的顯示?

    如何利用51單片機實現七段數碼管的顯示?
    發表于 10-21 06:54

    DIY一個大型七段顯示

    描述巨型模塊七段顯示器對于我正在進行的一個最近的項目,我需要一個大型七段顯示器。我可以找到一些現成的,大約兩三英寸高——但我需要更大的。出
    發表于 07-11 06:16
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>