---
tags: Arduino
---
# Arduino 基礎(七段顯示器)輸入輸出
## 一、七段顯示器
### (一)類型
#### 以線路構造而言,可分成共陽極與共陰極兩種
#### 1、共陽極(Common Anode)七段顯示器
##### (1) LED的陽極接在一起,並接到+Vcc端
##### (2) 控制電位為低電位0時,則LED發亮
#### 2、共陰極(Common Cathode)七段顯示器
##### (1) LED的陰極接在一起,並接到接地端
##### (2) 控制電位為高電位1時,則LED發亮
## 二、構造與腳位編號
### (一)圖示:
![](https://i.imgur.com/pXScesF.png)
#### 1、【缺點】若同時需要使用多顆七段顯示器,將會佔用大量的I/O 腳位
#### 2、【改善】四合一七段顯示器
![](https://i.imgur.com/ROy3005.jpg)
## 三、實作模擬
### (一)七段顯示器依序顯示數字0~9
#### 1、程式碼
```cpp=
//定義變數
int a=2; //seg_a接到D2
int b=3; //seg_b接到D3
int c=4; //seg_c接到D4
int d=5; //seg_d接到D5
int e=6; //seg_e接到D6
int f=7; //seg_f接到D7
int g=8; //seg_g接到D8
int dp=9; //seg_dp接到D9
void setup() { //將連接七段顯示器的接腳
pinMode(a, OUTPUT); //都設為Output
pinMode(b, OUTPUT);
pinMode(c, OUTPUT);
pinMode(d, OUTPUT);
pinMode(e, OUTPUT);
pinMode(f, OUTPUT);
pinMode(g, OUTPUT);
pinMode(dp, OUTPUT);
digitalWrite(dp, 0); // 關閉小數點
}
void loop() //依序顯示0-9
{
digitalWrite(a, 1); // 顯示“0”
digitalWrite(b, 1);
digitalWrite(c, 1);
digitalWrite(d, 1);
digitalWrite(e, 1);
digitalWrite(f, 1);
digitalWrite(g, 0);
delay(1000); //顯示“0”維持1秒鐘
digitalWrite(a, 0); // 顯示“1”
digitalWrite(b, 1);
digitalWrite(c, 1);
digitalWrite(d, 0);
digitalWrite(e, 0);
digitalWrite(f, 0);
digitalWrite(g, 0);
delay(1000); //顯示“1”維持1秒鐘
digitalWrite(a, 1); // 顯示“2”
digitalWrite(b, 1);
digitalWrite(c, 0);
digitalWrite(d, 1);
digitalWrite(e, 1);
digitalWrite(f, 0);
digitalWrite(g, 1);
delay(2000); //顯示“2”維持1秒鐘
digitalWrite(a, 1); // 顯示“3”
digitalWrite(b, 1);
digitalWrite(c, 1);
digitalWrite(d, 1);
digitalWrite(e, 0);
digitalWrite(f, 0);
digitalWrite(g, 1);
delay(1000); //顯示“3”維持1秒鐘
digitalWrite(a, 0); // 顯示“4”
digitalWrite(b, 1);
digitalWrite(c, 1);
digitalWrite(d, 0);
digitalWrite(e, 0);
digitalWrite(f, 1);
digitalWrite(g, 1);
delay(1000); //顯示“4”維持1秒鐘
digitalWrite(a, 1); // 顯示“5”
digitalWrite(b, 0);
digitalWrite(c, 1);
digitalWrite(d, 1);
digitalWrite(e, 0);
digitalWrite(f, 1);
digitalWrite(g, 1);
delay(1000); //顯示“5”維持1秒鐘
digitalWrite(a, 1); // 顯示“6”
digitalWrite(b, 0);
digitalWrite(c, 1);
digitalWrite(d, 1);
digitalWrite(e, 1);
digitalWrite(f, 1);
digitalWrite(g, 1);
delay(1000); //顯示“6”維持1秒鐘
digitalWrite(a, 1); // 顯示“7”
digitalWrite(b, 1);
digitalWrite(c, 1);
digitalWrite(d, 0);
digitalWrite(e, 0);
digitalWrite(f, 0);
digitalWrite(g, 0);
delay(1000); //顯示“7”維持1秒鐘
digitalWrite(a, 1); // 顯示“8”
digitalWrite(b, 1);
digitalWrite(c, 1);
digitalWrite(d, 1);
digitalWrite(e, 1);
digitalWrite(f, 1);
digitalWrite(g, 1);
delay(1000); //顯示“8”維持1秒鐘
digitalWrite(a, 1); // 顯示“9”
digitalWrite(b, 1);
digitalWrite(c, 1);
digitalWrite(d, 1);
digitalWrite(e, 0);
digitalWrite(f, 1);
digitalWrite(g, 1);
delay(1000); //顯示“9”維持1秒鐘
}
```
#### 2、圖示:
![](https://i.imgur.com/5Ffh8mP.png)
### (二)七段顯示器依序顯示數字0~9(使用副程式)
#### 1、程式碼
```cpp=
//定義變數
int a=2; //seg_a接到D2
int b=3; //seg_b接到D3
int c=4; //seg_c接到D4
int d=5; //seg_d接到D5
int e=6; //seg_e接到D6
int f=7; //seg_f接到D7
int g=8; //seg_g接到D8
int dp=9; //seg_dp接到D9
//使用陣列指令將0-9編碼存在陣列內
byte seven_seg[10][7] = {
{ 1,1,1,1,1,1,0 }, // 對應數字0
{ 0,1,1,0,0,0,0 }, // 對應數字1
{ 1,1,0,1,1,0,1 }, // 對應數字2
{ 1,1,1,1,0,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,0,1,1 } // 對應數字9
};
void setup() { //將連接七段顯示器的接腳
pinMode(a, OUTPUT); //都設為Output
pinMode(b, OUTPUT);
pinMode(c, OUTPUT);
pinMode(d, OUTPUT);
pinMode(e, OUTPUT);
pinMode(f, OUTPUT);
pinMode(g, OUTPUT);
pinMode(dp, OUTPUT);
digitalWrite(dp, 0); // 關閉小數點
}
void loop() {
for (byte digit = 0; digit <10; ++digit) { //顯示10個數字
delay(1000);
CodeWrite(digit); //呼叫CodeWrite副程式
}
delay(2000); //延遲2秒鐘
}
void CodeWrite(byte digit) { // 從0開始依序顯示
byte pin = 2;
for (byte seg = 0; seg < 7; ++seg) { //針對digit對應的數字
digitalWrite(pin, seven_seg[digit][seg]); //pin腳輸出對應a,b,….,g的狀態
++pin;
}
}
```
#### 2、圖示:
![](https://i.imgur.com/hm3X88A.png)
### (三)七段顯示器顯示今天日期(2021-06-30)
#### 1、程式碼
```cpp=
//定義變數
int a=2; //seg_a接到D2
int b=3; //seg_b接到D3
int c=4; //seg_c接到D4
int d=5; //seg_d接到D5
int e=6; //seg_e接到D6
int f=7; //seg_f接到D7
int g=8; //seg_g接到D8
int dp=9; //seg_dp接到D9
//使用陣列指令將0-9編碼存在陣列內
byte seven_seg[10][7] = {
{ 1,1,1,1,1,1,0 }, // 對應數字0
{ 0,1,1,0,0,0,0 }, // 對應數字1
{ 1,1,0,1,1,0,1 }, // 對應數字2
{ 1,1,1,1,0,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,0,1,1 } // 對應數字9
};
void setup() { //將連接七段顯示器的接腳
pinMode(a, OUTPUT); //都設為Output
pinMode(b, OUTPUT);
pinMode(c, OUTPUT);
pinMode(d, OUTPUT);
pinMode(e, OUTPUT);
pinMode(f, OUTPUT);
pinMode(g, OUTPUT);
pinMode(dp, OUTPUT);
digitalWrite(dp, 0); // 關閉小數點
}
void loop() {
byte digit;
digit = 2;
delay(1000);
CodeWrite(digit);
digit = 0;
delay(1000);
CodeWrite(digit);
digit = 2;
delay(1000);
CodeWrite(digit);
digit = 1;
delay(1000);
CodeWrite(digit);
digit = 0;
delay(1000);
CodeWrite(digit);
digit = 6;
delay(1000);
CodeWrite(digit);
digit = 3;
delay(1000);
CodeWrite(digit);
digit = 0;
delay(1000);
CodeWrite(digit); //呼叫CodeWrite副程式
delay(2000); //延遲2秒鐘
}
void CodeWrite(byte digit) { // 從0開始依序顯示
byte pin = 2;
for (byte seg = 0; seg < 7; ++seg) { //針對digit對應的數字
digitalWrite(pin, seven_seg[digit][seg]); //pin腳輸出對應a,b,….,g的狀態
++pin;
}
}
```
#### 2、圖示:
![](https://i.imgur.com/viAYEV9.png)