# Arduino筆記 07. 七段顯示器(7-Segment Display) ## 實驗項目: 連接LED 七段顯示器與Arduino板 ## 學習重點: 1. 了解七段顯示器與LED工作原理相同。 3. 七段顯示器分成共陽極與共陰極兩種,連接電源方不同。共陰極表所有LED的接地端相連,因此,LED的另一端接高電位時就會發光。 4. 利用二維陣列來顯示字元 0~9。 ## 實驗電路: {%youtube 2jDtplf78Ls %} ![](https://i.imgur.com/rQixjvQ.png) > 注意: 元件上每個針腳對應LED位置(不同廠商可能不同)。本人購買元件為共陰極,其中接腳com(共陰),d,e 與上圖不同,需調整如紅字更正。 ![](https://i.imgur.com/czQivlx.png) | LED 位置 | a | b | c | d | e | f | g | | ---------- | --| --| --| --| --| --| --| | arduino腳位 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | ## 程式碼: 同樣作數字循環顯示,程式寫法有多種, 1. 寫法一. (本人編輯) ```cpp= byte pin; byte num[10][7] = { {1,1,1,1,1,1,0}, // diplay number '0' (共陰極 '1'表示給高電壓,'0'表給低電壓) {0,1,1,0,0,0,0}, // diplay number '1' {1,1,0,1,1,0,1}, // diplay number '2' {1,1,1,1,0,0,1}, // diplay number '3' {0,1,1,0,0,1,1}, // diplay number '4' {1,0,1,1,0,1,1}, // diplay number '5' {1,0,1,1,1,1,1}, // diplay number '6' {1,1,1,0,0,0,0}, // diplay number '7' {1,1,1,1,1,1,1}, // diplay number '8' {1,1,1,1,0,1,1}, // diplay number '9' }; void setup() { for (pin = 2; pin < 9; pin++) { pinMode(pin, OUTPUT); //initialize digital pin 2~8 as an output digitalWrite(pin, HIGH); //單一LED測試 delay(200); digitalWrite(pin, LOW); delay(200); } } void loop() { for (int i = 0; i < 10; i++) //循環顯示數字 0~9 { for (int j = 0; j < 7; j++) { digitalWrite(j+2, num[i][j]); } delay(1000); //每個字元顯示1秒 } //以下可作為LED與Arduino腳位對接是否正確之測試確認. // digitalWrite(2, HIGH); // digitalWrite(3, HIGH); // digitalWrite(4, HIGH); // digitalWrite(5, HIGH); // digitalWrite(6, HIGH); // digitalWrite(8, HIGH); // digitalWrite(7, HIGH); } ``` 2. 寫法二. ## 延伸學習: 1. (問題) DP LED無法顯示?? 2. 利用積體電路(74HC595)簡化電路。 3. 從Serail port讀取keyboard輸入的數字並顯示於LED。 ```cpp= //從Serail port讀取keyboard輸入的數字並顯示於LED byte pin; byte num[10][7] = { {1,1,1,1,1,1,0}, // diplay number '0' {0,1,1,0,0,0,0}, // diplay number '1' {1,1,0,1,1,0,1}, // diplay number '2' {1,1,1,1,0,0,1}, // diplay number '3' {0,1,1,0,0,1,1}, // diplay number '4' {1,0,1,1,0,1,1}, // diplay number '5' {1,0,1,1,1,1,1}, // diplay number '6' {1,1,1,0,0,0,0}, // diplay number '7' {1,1,1,1,1,1,1}, // diplay number '8' {1,1,1,1,0,1,1}, // diplay number '9' }; void seven_led(int i){ for (int j = 0; j < 7; j++) { digitalWrite(j+2, num[i][j]); } } void setup() { for (pin = 2; pin < 9; pin++) { pinMode(pin, OUTPUT); //initialize digital pin 2~8 as an output digitalWrite(pin, HIGH); //單一LED測試 delay(200); digitalWrite(pin, LOW); delay(200); } Serial.begin(9600); // opens serial port, sets data rate to 9600 bps } void loop() { char receivedChar; while (Serial.available() > 0) { receivedChar = Serial.read(); switch (receivedChar){ case '0': seven_led(0); break; case '1': seven_led(1); break; case '2': seven_led(2); break; case '3': seven_led(3); break; case '4': seven_led(4); break; case '5': seven_led(5); break; case '6': seven_led(6); break; case '7': seven_led(7); break; case '8': seven_led(8); break; case '9': seven_led(9); break; } } } ``` ## 參考資料: * Arduino 互動設計入門動手做7-1。