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