如何在您的專案中添加數字顯示器

在之前的專案中,我們已經展示了如何使用Arduino來控制LED矩陣。但是,如果您的專案只需要顯示數位,那麼最好使用七段數字顯示器。這些數字顯示器看起來像復古的數字鬧鐘,只需要七個LED就可以顯示出數位。本指南將向您展示如何完成這個工作。

 

七段LED數字顯示器的工作原理

七段數字顯示器是由7個LED組成的陣列,呈8字形,可以分別被點亮以顯示不同的數位(在某些情況下顯示的是字母)。通常會有第8個LED用作顯示小數點。一些模組帶有多個七段陣列。例如,一個4位七段數字顯示器可以用作時鐘。

為了簡單起見,在本指南中,我們只顯示一位元數位。七段數字顯示器可以採用以下兩種形式之一:共陽極和共陰極 。在共陽極配置中,所有LED都連接到電源,可以透過將LED選擇性地接地來對其進行控制。在共陰極配置中,情況剛好相反:所有LED都接地,然後透過選擇性地連接電源來對LED單獨進行控制。

您的數字顯示器的確切配置可能會有所不同,所以請查看模組上的標記並找到規格表,以確認數字顯示器連接的配置,以及哪些引腳對應於哪個LED。在本指南中,我們將使用5611AS,為共陰極配置。

為了成功運行代碼,您還需要SevSeg庫,可以在Github上找到資源。下載.zip檔後,進入Sketch > Include library > Add .ZIP library,然後選擇SevSeg庫。現在,您就可以將此庫導入到您的草圖中了。

所需部件

與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),以及電路中是否有電阻。segmentPin陣列指定了哪個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。連接好數字顯示器後,您可以上傳代碼並將其開啟。請嘗更改代碼以顯示不同的數位,然後查看您的顯示效果。