const int seg7[] = { 6, 7, 8, 9, 10, 11, 12 }; // 七段控制腳陣列,分別對應a ~ g 段
const int scan[] = { 2, 3, 4, 5 }; // 四位數掃描端控制腳陣列,對應個、十、百、千位數
int delaytime = 5; // 宣告延遲時間的變數名稱,預設為 5 ms
char TAB[] = { 0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x27, 0x7F, 0x67, 0x00 }; // 七段顯示器編碼表
int ii, jj; // 迴圈用的變數
// 此 setup 程序只有在微控制器按 reset 時執行一次
void setup() {
for (ii = 0; ii < 7; ii++) pinMode(seg7[ii], OUTPUT);// 初始化指定的數位腳位為輸出模式
for (ii = 0; ii < 4; ii++) pinMode(scan[ii], OUTPUT); // 初始化scan[ii] 腳位為輸出模式
Serial.begin(9600);// 設定序列埠的鮑率為 9600 bps
}
// 此 loop 程序會一直重複執行
void loop() {
if (Serial.available()) { // 判斷序列埠緩衝區有無資料
// 從序列埠緩衝區讀取一個有效的整數資料( 設NL 為結尾符號)
delaytime = Serial.readStringUntil('\n').toInt();
Serial.print(delaytime); // 在序列埠監控視窗中顯示訊息
Serial.println(" ms");
}
OutPort(TAB[5]); // 千位數顯示5
digitalWrite(scan[0], 0); // 指定的掃描端電晶體 ON,但因為沒接電晶體,共陰選到要為0(LOW)
delay(delaytime); // 顯示一小段時間
digitalWrite(scan[0], 1); // 指定的掃描端電晶體 OFF
OutPort(TAB[2]); // 百位數顯示2
digitalWrite(scan[1], 0); // 指定的掃描端電晶體 ON
delay(delaytime);
digitalWrite(scan[1], 1); // 指定的掃描端電晶體 OFF
OutPort(TAB[4]); // 十位數顯示4
digitalWrite(scan[2], 0); // 指定的掃描端電晶體 ON
delay(delaytime);
digitalWrite(scan[2], 1); // 指定的掃描端電晶體 OFF
OutPort(TAB[8]); // 個位數顯示0
digitalWrite(scan[3], 0); // 指定的掃描端電晶體 ON
delay(delaytime);
digitalWrite(scan[3], 1); // 指定的掃描端電晶體 OFF
}
// 將指定值顯示在七段顯示器上,最低位元為a,依序為 abcdefg
void OutPort(byte dat) {
for (jj = 0; jj < 7; jj++) {
digitalWrite(seg7[jj], dat % 2); // 輸出dat 的最低位元至指定腳位
dat = dat / 2; // 除2,進行下一位元的處理
}
}