在前面的單元實習中我們曾經介紹過LCD液晶顯示器的操作與使用。它可以直接以較高階的方式來輸入文字內容,也可以同時輸出2列各16個英文字母及數字,非常方便。不過,可惜的是它的亮度不足,有時候想要讓顯示的文數字可以做得醒目一點時就派不上用場。如果在只需要顯示數字的場合,同時也不需要太多位數的話,七段顯示器所而是比較好的選擇。
七段顯示器顧名思義就是使用7個LED線段,用來組合出0到9的數字,每一個線段型的LED都是一個獨立的LED燈號,可以透過接腳的通電與否決定它是亮還是滅,7個線段就有7個個別的接腳來加以控制。背面如下:
這些接腳對應到每一個LED燈號的腳位圖如下所示:
中間的共接點上下都是通的,如果是共陽極的7段顯示器,則其中一個共接點就要接上正電源,如果是共陰極的話,則是其中一個共接點要接上GND負極。其它的a~g等接腳,則依序接到Arduino板子上的數位輸出入接腳,在這個例子中,我們從D2開始接,從D2接a,D3接b,依此類位,接完之後,其連接線如下圖所示:
因為在這個例子中我們使用的是共陽極的7段顯示器,因此我們把Arduino的5V正電源接到麵包板上的正匯流排之後(別忘了麵包板上的負匯流排要接回Arduino板子上的GND,讓它們可以形成回路喔),再從麵包板上的正匯流排用一個限流電阻連接到7段顯示器正上方的共接點處,如下圖所示:
如此電路就算是接好了,以下是全體看起來的樣子:
對於Arduino而言,D2到D8都要設定為輸出接腳,而當此接腳輸出是HIGH(1)的時候,該輸出所連接到的LED燈號就不會亮(因為是共陽極,所以輸出是1時就不會亮,而輸出是0時就會亮,如果是共陰極的話就相反),我們只要適當地控制每一支腳輸出的內容,就可以組合出正確的數字。為了簡化程式的輸出內容,在這裡先定義一個用來組合出正確數字的輸出樣陣列,如下所示:
int digits[10][7] = { //a, b, c, d, e, f, g 0, 0, 0, 0, 0, 0, 1, // 0 1, 0, 0, 1, 1, 1, 1, // 1 0, 0, 1, 0, 0, 1, 0, // 2 0, 0, 0, 0, 1, 1, 0, // 3 1, 0, 0, 1, 1, 0, 0, // 4 0, 1, 0, 0, 1, 0, 0, // 5 0, 1, 0, 0, 0, 0, 0, // 6 0, 0, 0, 1, 1, 1, 1, // 7 0, 0, 0, 0, 0, 0, 0, // 8 0, 0, 0, 0, 1, 0, 0 // 9 };
有了以上的陣列,就可以透過以下這個 show函數簡單也顯示出所需要的數字:
int show(int d) { for(int i=2; i<9; i++) { digitalWrite(i, digits[d][i]); } }
完整的從0數到9的程式如下所示:
int digits[10][7] = { //a, b, c, d, e, f, g 0, 0, 0, 0, 0, 0, 1, // 0 1, 0, 0, 1, 1, 1, 1, // 1 0, 0, 1, 0, 0, 1, 0, // 2 0, 0, 0, 0, 1, 1, 0, // 3 1, 0, 0, 1, 1, 0, 0, // 4 0, 1, 0, 0, 1, 0, 0, // 5 0, 1, 0, 0, 0, 0, 0, // 6 0, 0, 0, 1, 1, 1, 1, // 7 0, 0, 0, 0, 0, 0, 0, // 8 0, 0, 0, 0, 1, 0, 0 // 9 }; void setup() { for(int i=2; i<9; i++) { pinMode(i, OUTPUT); digitalWrite(i, LOW); } } int show(int d) { for(int i=2; i<9; i++) { digitalWrite(i, digits[d][i]); } } void loop() { for(int i=0; i<10; i++) { show(i); delay(500); } }
以下是程式執行之後的樣子:
https://youtu.be/TEjwoqSytQk
(3388)
近期留言