# 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。