--- 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)