在〈mBlock & Arduino(7)七段顯示器之 HELLO!〉中談過七段顯示器的原理與運用,如果你需要多個位數,基本上可以自行連接多個七段顯示器,只是七段顯示器需要的腳位很多啊?Arduino 腳位不夠用怎麼辦?
兩位數七段顯示器
如果想要自行接線,設計出兩位數七段顯示器,若使用共陰極七段顯示器,可以如下設置電路:
這樣的電路,可以使用 10 個腳位,來控制兩個七段顯示器,其中 D3 到 D10,可分別控制七段顯示器上的 LED,而 D13 與 D12,可控制左邊與右邊的七段顯示器哪個要顯示,如果 D13 為高電位而 D12 為低電位,那麼右邊的七段顯示器會依 D3 到 D10 哪些腳位為高電位而顯示,如果 D13 為低電位而 D12 為高電位,那麼左邊的七段顯示器會依 D3 到 D10 哪些腳位為高電位而顯示。
這樣不是一次只能顯示一個七段顯示器嗎?沒錯!不過,只要 D13 與 D12 切換速度夠快,那麼就會像是同時點亮兩個七段顯示器!類似地,你可以銜接三位數、四位數等七段顯示器!
四位數七段顯示器
如果不想要自行接線路,那麼市面上有已經銜接好的二合一、四合一等各種位數的七段顯示器,以四合一的七段顯示器為例,由於每個七段顯示器會需要 8 個腳位控制其上的 LED,再加上各 4 個共陰或共陽腳位,因此基本上會有 12 個腳位,當然,如果還要附帶有「:」控制等腳位的話,就會有 12 個腳位以上。
我手邊這個四位數七段顯示器,就是基本的 12 腳位:
依上圖來看的話,下方有六個腳位,上方有六個腳位,最左下方的腳位編號是 1,依逆時針依序編號至 6,然後右上方是 7,依逆時針編號至左上方的 12:
當然,最重要的,是知道這些腳位,分別是控制哪個 LED,以及哪些腳位控制哪個七段顯示器,這在上圖是使用 0 到 3 以及 A 到 H(DP) 表示,0 表示最右邊的七段顯示器, 3 表示最左邊的七段顯示器,例如,當 3 為低電位而 0、1、2 為高電位時,那麼是控制最左邊的七段顯示器,至於 A 到 H(DP),如下圖表示:
因此,如果想要運用這個四位數七段顯示器,可以如下銜接電路:
使用 mBlock 控制七段顯示器
銜接好電路之後,那麼就可以寫程式來控制了,基本上就是用迴圈來逐個控制與顯示,我們稍微改寫一下〈mBlock & Arduino(7)七段顯示器之 HELLO!〉中的範例,以達到控制之目的:
其中 numbers
的內容一樣是:
執行程式之後的效果是 …
嗯?由於透過 mBlock 控制 Arduino 會有速度上的限制,因此,你看到的是四個數字輪流閃動,而不是看起來一起亮,不過,這當作瞭解四位數七段顯示器運作原理,倒是不錯的方式,如果想要看起來有同時顯示的效果,那麼可以在 Arduino IDE 中撰寫如下的程式,其運作原理與上面的程式是類似的:
#include <Arduino.h>
void set7Seg(int number, int pos);
const int pinState[9][7] = {
{0, 1, 1, 0, 0, 0, 0}, // 1
{1, 1, 0, 1, 1, 0, 1}, // 2
{1, 1, 1, 1, 1, 0, 1}, // 3
{0, 1, 1, 0, 0, 1, 1}, // 4
{1, 0, 1, 1, 0, 1, 1}, // 5
{1, 0, 1, 1, 1, 1, 1}, // 6
{1, 1, 1, 0, 0, 0, 0}, // 7
{1, 1, 1, 1, 1, 1, 1}, // 8
{1, 1, 1, 1, 1, 1, 0} // 9
};
void setup() {
for(int i = 3; i < 14; i++) {
pinMode(i, OUTPUT);
}
}
void loop() {
set7Seg(8, 4);
set7Seg(7, 3);
set7Seg(6, 2);
set7Seg(5, 1);
}
void set7Seg(int number, int pos) {
for(int i = 10; i < 14; i++) {
digitalWrite(i, 1);
}
for(int i = 0;i < 7;i++) {
digitalWrite(i + 3, pinState[number - 1][i]);
}
digitalWrite(pos + 9, 0);
delay(5);
}
在 set7Seg
中需要一點 delay
,這樣切換速度才不會太快,LED 看起來才會夠亮,將程式上傳至 Arduino 板子,效果會是這樣的 …