2019年8月17日 星期六

Arduino 控制七段顯示器

七段顯示器 (7-Segment Display) 的模組編號是 5011BS
七段顯示器是一種很方便顯示 0 至 9 數字A 至 F 字母 (b 及 d 會使用小寫,避免 B 與 8 相似 及 D 與 0 相似)
能顯示 0 至 F 即是可以表達十六進制資料
軟件編寫程式顯示 0 至 F 就很簡單,但控制硬件顯示 0 至 F 是否簡單?

見下文
見下文
七段顯示器 的外觀
七段顯示器 共有 10支引腳

見下文
電子迴路元件圖示

編寫 Arduino 程式前先了解 七段顯示器 的引腳編排及用途

引腳編排及用途

引腳10引腳9引腳8引腳7引腳6
用途左上電源右上
左下電源右下
正(有字印刷)引腳1引腳2引腳3引腳4引腳5

引腳編號用途
1左下 LED 接地線
2下 LED 接地線
3電源線
4右下 LED 接地線D
5點 LED 接地線
6右上 LED 接地線
7上 LED 接地線
8電源線
9左上 LED 接地線
10中 LED 接地線

LED 位置 (模擬及示範效果)

左上右上右下左下

接通線路前必須先接駁電阻,否則 LED 會燒毀
只有一個 LED 正極接駁或負極接駁並沒有分別,但超過一個 LED 便會有分別

正極接駁

見下文
只需要在電源輸出接駁一個電阻便可以避免燒毀所有 LED ,成本較低,但每個 LED 亮度會因為著亮的 LED 越多而越暗

負極接駁

見下文
每個 LED 的負極都接駁一個電阻來避免燒毀對應的 LED ,成本較高,但每個 LED 亮度都會一致

見下文
在下的接駁方式

見下文
七段顯示器 的正面

見下文
跳線 接駁至 Arduino 2號 至 10號 引腳

見下文
在下為了方便設置,在下使用 麵包板 (Breadboard) 接駁

測試

const byte powerPin = 10;
const byte ledPins[8] = {9, 8, 7, 6, 2, 3, 4, 5};
const byte LENGTH = sizeof(ledPins) / sizeof(byte);
byte i = 0;

void setup(){
    pinMode(powerPin, OUTPUT);
    digitalWrite(powerPin, LOW);
    for (byte ledPin : ledPins){
        pinMode(ledPin, OUTPUT);
        digitalWrite(ledPin, HIGH);
    }
}

void loop(){
    i %= LENGTH * 2;
    digitalWrite(ledPins[i % LENGTH], i < LENGTH ? LOW : HIGH);
    i++;
    delay(1000 / LENGTH);
}

正極引腳 pinMode 設定為 OUTPUT , digitalWrite 設定為 HIGH ,讓電源接通
負極引腳 pinMode 設定為 OUTPUT , digitalWrite 設定為 LOW 時,成為接地點,電路便會接通
電源線引腳設定為 LOW 或 接地線引腳設定 HIGH 便不是完整電路,LED 便會熄滅

實際效果

見下文
有外光效果

見下文
無外光效果

十六進制編排

使用 七段顯示器 亮著對應 LED 顯示 十六進制數字及字母
十六進制數值引腳A引腳B引腳C引腳D引腳E引腳F引腳G引腳H結果
十六進制數值引腳A引腳B引腳C引腳D引腳E引腳F引腳G引腳H結果
0XOOOXOOO
1XXXOXOXX
2OXOOXXOO
3OXOOXOOX
4OOXOXOXX
5OOOXXOOX
6OOOXXOOO
7XXOOXOXX
8OOOOXOOO
9OOOOXOOX
AOOOOXOXO
bOOXXXOOO
CXOOXXXOO
dOXXOXOOO
EOOOXXXOO
FOOOXXXXO

編寫不同的組合便可以顯示不同的數字及字母

十六進制效果

見下文
每次著亮對應 LED 前都先將所有 LED 先熄滅,編程大致與在上方的例子相似

總結

初初試玩 七段顯示器 因為太期待,忘記接駁電阻,只是輕輕接通電源,便立即燒毀幾個 LED ,因此在下再次強調一定要接駁電阻
購買另一個,在香港可以到 深水埗鴨寮街 的電子零件店購買,在下是以 港幣$5 購入
不過購入另一個後發現,新舊模組有分別

見下文
新的模組,引腳A 及 引腳B 是電源線,其他 LED 引腳 是接地線,稱為 共陽 (Common Anode)

見下文
舊的模組,引腳A 及 引腳B 是接地線,其他 LED 引腳 是電源線,稱為 共陰 (Common Cathode)

因此接駁正負極時會有分別
編寫程式時,亦要將 電源線引腳 及 接地線引腳 的設定互換位置

另外
如果是 共陽 的 七段顯示器,若不需要控制電源,不一定使用 數碼引腳類比引腳 ,可以直接使用 Arduino 的 電源引腳
如果是 共陰 的 七段顯示器,亦可以直接使用 Arduino 的 接地引腳

沒有留言 :

張貼留言