過去的實做中沒有對七段顯示器進行深入研究,隨着實做的內容及種類越來越多,沒有用這個常見的元件來進行實做,好像缺少些什麼。接下來的幾篇文章,如何用七段 LED顯示數字,從基本的認識到實際的應用,順便記錄一下實做的過程。
---- 2021.04.05 ----
今天使用 Pico 實作相同的控制七段顯示器倒數計時時,發現所有接腳都沒有接上電阻,其實這是不對的,短時間也許沒問題,但時間一長,可能會燒壞 LED 燈管,找個時間更新一下。
-------------------------
七段顯示器在面板儀表中最受歡迎,它可以顯示數值0-9或英文A-F,它的成本低。七段顯示器有兩種類型:共陰極(Common Cathode, CC)與共陽極(Common Anode, CA)。共陽極的七段顯示器的正極(或陽極)為八個發光二極體的共有正極,其他接點為獨立發光二極體的負極(或陰極),使用者只需把正極接電,不同的負極接地就能控制七段顯示器顯示不同的數字。共陰極的七段顯示器與共陽極的只是接駁方法相反而已。兩種類型的內部結構幾乎相同。不同之處在於 LED 和公共端com的極性。下圖左方表格是共陰極的七段顯示器接腳顯示狀態,右方是共陽極的接腳顯示狀態:
七段顯示器內部構造都是由 8 個 LED 發光二極體所組成,其中七個是筆劃,另外一個是小數點,如下圖所示,依順時針方向分別為 A, B, C, D, E, F, G 以及小數點 DP (decimal point):
七段顯示如何工作呢?要顯示的十進制數字,特定的一組LED被點亮。要打開和關閉顯示器的特定部分,請將相應的引腳設置為HIGH或LOW,就像使用常規LED一樣。例如,要顯示數字 4,我們將需要點亮對應於B, C, F和G的四個LED段。因此,可以使用如上圖所示的七段顯示來顯示從0到9的各種數字和從A到F的字元。
• 七段LED顯示器 x 1
• 麵包板 x 1
• 連接線 x n
Pin 1 -> A
Pin 2 -> B
Pin 3 -> C
Pin 4 -> D
Pin 5 -> E
Pin 6 -> F
Pin 7 -> G
---- 2021.04.05 ----
今天使用 Pico 實作相同的控制七段顯示器倒數計時時,發現所有接腳都沒有接上電阻,其實這是不對的,短時間也許沒問題,但時間一長,可能會燒壞 LED 燈管,找個時間更新一下。
-------------------------
[七段顯示器]
七段顯示器(英語:Seven-segment display)為常用顯示數字的電子元件。因為藉由七個發光二極體以不同組合來顯示數字,所以稱為「七劃管」、「七段數碼管」、「七段顯示器」,由於所有燈管全亮時所表示的是「8」,所以又稱「8字管」、「8字顯示器」。多數七段顯示器還會在右下角附加一個表示小數點的燈管,因此也稱八段管。[維基百科]七段顯示器在面板儀表中最受歡迎,它可以顯示數值0-9或英文A-F,它的成本低。七段顯示器有兩種類型:共陰極(Common Cathode, CC)與共陽極(Common Anode, CA)。共陽極的七段顯示器的正極(或陽極)為八個發光二極體的共有正極,其他接點為獨立發光二極體的負極(或陰極),使用者只需把正極接電,不同的負極接地就能控制七段顯示器顯示不同的數字。共陰極的七段顯示器與共陽極的只是接駁方法相反而已。兩種類型的內部結構幾乎相同。不同之處在於 LED 和公共端com的極性。下圖左方表格是共陰極的七段顯示器接腳顯示狀態,右方是共陽極的接腳顯示狀態:
七段顯示器內部構造都是由 8 個 LED 發光二極體所組成,其中七個是筆劃,另外一個是小數點,如下圖所示,依順時針方向分別為 A, B, C, D, E, F, G 以及小數點 DP (decimal point):
七段顯示如何工作呢?要顯示的十進制數字,特定的一組LED被點亮。要打開和關閉顯示器的特定部分,請將相應的引腳設置為HIGH或LOW,就像使用常規LED一樣。例如,要顯示數字 4,我們將需要點亮對應於B, C, F和G的四個LED段。因此,可以使用如上圖所示的七段顯示來顯示從0到9的各種數字和從A到F的字元。
[材料]
• Arduino UNO R3 x 1• 七段LED顯示器 x 1
• 麵包板 x 1
• 連接線 x n
[接線圖]
Arduino Pin 與 七段顯示器的接腳對應關係:Pin 1 -> A
Pin 2 -> B
Pin 3 -> C
Pin 4 -> D
Pin 5 -> E
Pin 6 -> F
Pin 7 -> G
[程式一]
依照數字顯示的接腳,設定各腳的顯示狀態,顯示數字0到1:void setup() { // 設定 Pin 1-7 爲 output for(int x = 1; x < 8; x++) { pinMode(x,OUTPUT); } } void loop() { // 共陽七段顯示器,若爲共陰極的顯示器,則將原本爲 LOW 改爲 HIGH,HIGH 改成 LOW //ZERO digitalWrite(1, LOW); digitalWrite(2, LOW); digitalWrite(3, LOW); digitalWrite(4, LOW); digitalWrite(5, LOW); digitalWrite(6, LOW); digitalWrite(7, HIGH); delay(1000); //ONE digitalWrite(1, HIGH); digitalWrite(2, LOW); digitalWrite(3, LOW); digitalWrite(4, HIGH); digitalWrite(5, HIGH); digitalWrite(6, HIGH); digitalWrite(7, HIGH); delay(1000); //TWO digitalWrite(1, LOW); digitalWrite(2, LOW); digitalWrite(3, HIGH); digitalWrite(4, LOW); digitalWrite(5, LOW); digitalWrite(6, HIGH); digitalWrite(7, LOW); delay(1000); //THREE digitalWrite(1, LOW); digitalWrite(2, LOW); digitalWrite(3, LOW); digitalWrite(4, LOW); digitalWrite(5, HIGH); digitalWrite(6, HIGH); digitalWrite(7, LOW); delay(1000); //FOUR digitalWrite(1, HIGH); digitalWrite(2, LOW); digitalWrite(3, LOW); digitalWrite(4, HIGH); digitalWrite(5, HIGH); digitalWrite(6, LOW); digitalWrite(7, LOW); delay(1000); //FIVE digitalWrite(1, LOW); digitalWrite(2, HIGH); digitalWrite(3, LOW); digitalWrite(4, LOW); digitalWrite(5, HIGH); digitalWrite(6, LOW); digitalWrite(7, LOW); delay(1000); //SIX digitalWrite(1, LOW); digitalWrite(2, HIGH); digitalWrite(3, LOW); digitalWrite(4, LOW); digitalWrite(5, LOW); digitalWrite(6, LOW); digitalWrite(7, LOW); delay(1000); //SEVEN digitalWrite(1, LOW); digitalWrite(2, LOW); digitalWrite(3, LOW); digitalWrite(4, HIGH); digitalWrite(5, HIGH); digitalWrite(6, HIGH); digitalWrite(7, HIGH); delay(1000); //EIGHT digitalWrite(1, LOW); digitalWrite(2, LOW); digitalWrite(3, LOW); digitalWrite(4, LOW); digitalWrite(5, LOW); digitalWrite(6, LOW); digitalWrite(7, LOW); delay(1000); //NINE digitalWrite(1, LOW); digitalWrite(2, LOW); digitalWrite(3, LOW); digitalWrite(4, LOW); digitalWrite(5, HIGH); digitalWrite(6, LOW); digitalWrite(7, LOW); delay(1000); }
[程式二]
利用八位元Bit運算方式來控制顯示LED的明滅,結果會跟[程式一]一樣,可是明顯程式短很多:int i; int j; const byte num[10]={ B11000000, //0 B11111001, //1 B10100100, //2 B10110000, //3 B10011001, //4 B10010010, //5 B10000010, //6 B11111000, //7 B10000000, //8 B10010000 //9 }; const int seg[]={2,3,4,5,6,7,8,9}; //abcdefgp void setup() { for(i=0;i<8;i++) pinMode(seg[i],OUTPUT); } void loop() { for(i=0;i<10;i++) { for(j=0;j<8;j++) { if(bitRead(num[i],j)) digitalWrite(seg[j],HIGH); else digitalWrite(seg[j],LOW); } delay(1000); } }
[實作結果]
[參考資料]
- 維基百科:七段顯示器
- Instructables: 7 Segment Display
張貼留言