這篇文章來(lái)源于DevicePlus.com英語(yǔ)網(wǎng)站的翻譯稿。
在之前的項(xiàng)目中,我們已經(jīng)展示了如何使用Arduino來(lái)控制LED矩陣。但是,如果您的項(xiàng)目只需要顯示數(shù)字,那么最好使用七段數(shù)碼管。這些數(shù)碼管看起來(lái)像復(fù)古的數(shù)字鬧鐘,只需要七個(gè)LED就可以顯示出數(shù)字。本指南將向您展示如何完成這個(gè)工作。
七段數(shù)碼管是由7個(gè)LED組成的陣列,呈8字形,可以分別被點(diǎn)亮以顯示不同的數(shù)字(在某些情況下顯示的是字母)。通常會(huì)有第8個(gè)LED用作顯示小數(shù)點(diǎn)。一些模塊帶有多個(gè)七段陣列。例如, 一個(gè)4位七段數(shù)碼管可以用作時(shí)鐘
為了簡(jiǎn)單起見(jiàn),在本指南中,我們只顯示一位數(shù)字。七段數(shù)碼管可以采用以下兩種形式之一:共陽(yáng)極和共陰極 。在共陽(yáng)極配置中,所有LED都連接到電源,可以通過(guò)將LED選擇性地接地來(lái)對(duì)其進(jìn)行控制。在共陰極配置中,情況剛好相反:所有LED都接地,然后通過(guò)選擇性地連接電源來(lái)對(duì)LED單獨(dú)進(jìn)行控制。
您的數(shù)碼管的確切配置可能會(huì)有所不同,所以請(qǐng)查看模塊上的標(biāo)記并找到規(guī)格表,以確認(rèn)數(shù)碼管連接的配置,以及哪些引腳對(duì)應(yīng)于哪個(gè)LED。在本指南中,我們將使用5611AS,為共陰極配置。
為了成功運(yùn)行代碼,您還需要SevSeg庫(kù),可以在Github上找到資源。下載.zip文件后,進(jìn)入Sketch > Include library > Add .ZIP library然后選擇SevSeg庫(kù)。現(xiàn)在,您就可以將此庫(kù)導(dǎo)入到您的草圖中了。
所需部件
與LED矩陣一樣,該項(xiàng)目將需要相當(dāng)多的布線和電阻器。由于每個(gè)LED都需要有自己的電阻器以避免燒壞,所以請(qǐng)確保準(zhǔn)備足夠的電阻器。對(duì)于整個(gè)項(xiàng)目,您需要以下部件:
Arduino Uno |
七段LED數(shù)碼管 |
電線 |
8x 220 ohm電阻器 |
面包板 |
USB數(shù)據(jù)線 |
Arduino IDE |
由于接線會(huì)比較繁雜,請(qǐng)確保面包板上有足夠的空間放置所需要的所有電線和電阻器。一切準(zhǔn)備就緒后,我們開(kāi)始進(jìn)入下一環(huán)節(jié)。
代碼
因?yàn)槲覀兪褂昧薙evSeg庫(kù),所以該項(xiàng)目的代碼非常簡(jiǎn)單。首先,以下是您可以粘貼到IDE并上傳的完整代碼:
#include “SevSeg.h”
SevSeg digit;
void setup(){
byte numDigits = 1;
byte digitPins[] = {2, 3, 4, 5, 6, 7, 8, 9};
byte segmentPins[] = {6, 5, 2, 3, 4, 7, 8, 9};
bool resistorsOnSegments = true;
byte hardwareConfig = COMMON_CATHODE;
digit.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments);
digit.setBrightness(90);
}
void loop(){
for (int i = 0;i < 10;i++){
digit.setNumber(i);
digit.refreshDisplay();
delay(1000);
}
}
接下來(lái),我們從前兩行開(kāi)始查看一下代碼的各個(gè)部分。
#include “SevSeg.h”
SevSeg digit;
此處的第一行用于導(dǎo)入SevSeg.h庫(kù),讓您可以使用該庫(kù)中的所有命令。第二個(gè)用于創(chuàng)建一個(gè)SevSeg類型的對(duì)象,在本例中命名為“digit”,將用于控制您的數(shù)碼管。對(duì)于具有多個(gè)數(shù)字的模塊,您可以為每個(gè)數(shù)字添加一個(gè)對(duì)象,并分別進(jìn)行命名。
void setup(){
byte numDigits = 1;
byte digitPins[] = {2, 3, 4, 5, 6, 7, 8, 9};
byte segmentPins[] = {6, 5, 2, 3, 4, 7, 8, 9};
bool resistorsOnSegments = true;
byte hardwareConfig = COMMON_CATHODE;
digit.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments);
digit.setBrightness(90);
}
在本部分中,我們將對(duì)數(shù)碼管進(jìn)行設(shè)置。這里的大部分工作都是由digit.begin()函數(shù)來(lái)完成的。根據(jù)SevSeg庫(kù)文檔,此命令用于告訴Arduino您的數(shù)碼管具有哪些特征,例如位數(shù)(在本例中為1)、您用于尋址數(shù)碼管的Arduino引腳(引腳2-9),以及電路中是否有電阻。segmentPins數(shù)組指定了哪個(gè)Arduino引腳對(duì)應(yīng)于哪個(gè)段,包括從A到G以及最后的小數(shù)點(diǎn)。請(qǐng)參閱您的數(shù)碼管文檔以確認(rèn)哪些段與哪些引腳相對(duì)應(yīng)。
在傳遞給digit.begin函數(shù)之前,以上的每個(gè)參數(shù)都會(huì)被分配給一個(gè)變量,這有助于在之后對(duì)草圖進(jìn)行擴(kuò)展。最后,digit.setBrightness用來(lái)指定點(diǎn)亮LED的亮度。
void loop(){
for (int i = 0;i < 10;i++){
digit.setNumber(i);
digit.refreshDisplay();
delay(1000);
}
}
在loop()部分,我們將通過(guò)一個(gè)循環(huán)來(lái)執(zhí)行顯示工作,在該循環(huán)中將從0計(jì)數(shù)到9,然后再重新開(kāi)始。在每次迭代中,變量i將在用于在digit.setNumber 命令中告訴數(shù)碼管顯示哪個(gè)數(shù)字。SevSeg庫(kù)會(huì)自動(dòng)編譯這一命令,然后將正確的信號(hào)發(fā)送到正確的LED段(只要您在上一部分中正確分配了它們)。接下來(lái),調(diào)用digit.refreshDisplay來(lái)通知數(shù)碼管更新數(shù)字。
最后,我們添加了一個(gè) delay(1000)命令來(lái)使每個(gè)數(shù)字可以顯示一秒鐘。
接線
連接數(shù)碼管將會(huì)涉及很多的接線工作,不過(guò)其實(shí)該過(guò)程并不像看起來(lái)那么復(fù)雜。再次說(shuō)明,我們所使用的型號(hào)是5611AS,但如果您使用的是其他型號(hào),請(qǐng)查看您的數(shù)碼管規(guī)格。從數(shù)碼管的底部(有小數(shù)點(diǎn)LED的一側(cè))開(kāi)始,從左到右,引腳為1到5。在頂部,從左到右為引腳10到6。您可以將其視為從左下角開(kāi)始為引腳1,然后沿逆時(shí)針繞數(shù)碼管計(jì)數(shù)依次到引腳10。
對(duì)于該數(shù)碼管,您需要在Arduino與數(shù)碼管引腳之間連接8個(gè)電路,并且每個(gè)電路中間都有一個(gè)220歐姆電阻器。每個(gè)LED都需要一個(gè)電阻器來(lái)防止被燒壞。雖然您也可以在公共接地引腳后添加一個(gè)更高阻值的電阻器,但是這會(huì)導(dǎo)致不同數(shù)字顯示出不同級(jí)別的亮度,而該亮度取決于點(diǎn)亮的段數(shù)。
在下面每個(gè)連接中,都要使用面包板在Arduino和數(shù)碼管之間的電路中添加一個(gè)電阻器,并且將Arduino上的引腳連接到數(shù)碼管上相應(yīng)的引腳:
● 連接Arduino引腳2和數(shù)碼管引腳 4
● 連接Arduino引腳3和數(shù)碼管引腳 2
● 連接Arduino引腳4和數(shù)碼管引腳 1
● 連接Arduino引腳5和數(shù)碼管引腳 6
● 連接Arduino引腳6和數(shù)碼管引腳 7
● 連接Arduino引腳7和數(shù)碼管引腳 9
● 連接Arduino引腳8和數(shù)碼管引腳 10
● 連接Arduino引腳9和數(shù)碼管引腳 5
最后,數(shù)碼管每一側(cè)的兩個(gè)中間引腳——引腳3和8——應(yīng)該連接到Arduino上的GND。連接好數(shù)碼管后,您可以上傳代碼并將其開(kāi)啟。請(qǐng)嘗更改代碼以顯示不同的數(shù)字,然后查看您的顯示效果。
DevicePlus 編輯團(tuán)隊(duì)
設(shè)備升級(jí)版適用于所有熱愛(ài)電子和機(jī)電一體化的人。
審核編輯黃宇
-
led
+關(guān)注
關(guān)注
242文章
23286瀏覽量
661063 -
數(shù)碼管
+關(guān)注
關(guān)注
32文章
1882瀏覽量
91146 -
Arduino
+關(guān)注
關(guān)注
188文章
6470瀏覽量
187163
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論