在前面的單元實習中我們曾經介紹過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

(1484)