// 七段控制腳陣列,分別對應a~g段
const int seg7[] = {7, 8, 9, 10, 11, 12, 13};
//指撥開關 msb~lsb
const int dip[]={5,4,3,2};
//指撥開關 msb~lsb的權重
const byte weight[]={8,4,2,1};
int number;
// 七節顯示器編碼表 ,針對共陰七段顯示器使用
char TAB[]={ 0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x27,0x7F,0x67,0x77,0x7c,0x39,0x5E,0x79,0x71,0x00 };
int i; // 迴圈用的變數
void setup() {
// 初始化指定的數位腳位為輸出模式
for (i=0; i<7; i++)
pinMode(seg7[i], OUTPUT);
for (i=0; i<4; i++)
pinMode(dip[i], INPUT);
}
void loop() {
number=0;
for(i=0;i<4;i++){
//如果指撥開關為高態,則加上權重值。
if (digitalRead(dip[i])==HIGH){
number+=weight[i];}
}
OutPort(TAB[number]);
}
// 將指定值顯示在七段顯示器上,最低位元為a,依序為 abcdefg
void OutPort(byte dat) {
for (i=0; i<7; i++) {
if (dat % 2==0){ //共陽極當給定0輸入為高態,若為共陰則相反
digitalWrite(seg7[i], HIGH);} // 輸出dat的最低位元至指定腳位
else{
digitalWrite(seg7[i], LOW);}
dat=dat/2; // 除2,進行下一位元的處理
}
}