例程16 四位數碼管
這次我們進行的實驗是使用arduino驅動一塊共陰四位數碼管。實驗的目的是:第一位顯示1,第二位顯示2,第三位顯示3,第四位顯示4,每次只顯示一位,顯示間隔0.5秒。
我們開始準備實驗用元器件:
四位數碼管*1
220Ω直插電阻*8
麵包板*1
麵包板跳線*1 扎
管腳順序:
4位數碼管總共有12個引腳,從正面看小數點朝下正放在面前時,左下角為1,其他管腳順序為逆時針旋轉。左上角為最大的12號管腳。
按照下圖連結好電路後,就可以開始編寫程式了。
2. 程式碼
//============================智宇科技=========================== // 例程16-四位數碼管 //=============================================================== #define SEG_A 2 //Arduino Pin2--->SegLed Pin11 #define SEG_B 3 //Arduino Pin3--->SegLed Pin7 #define SEG_C 4 //Arduino Pin4--->SegLed Pin4 #define SEG_D 5 //Arduino Pin5--->SegLed Pin2 #define SEG_E 6 //Arduino Pin6--->SegLed Pin1 #define SEG_F 7 //Arduino Pin7--->SegLed Pin10 #define SEG_G 8 //Arduino Pin8--->SegLed Pin5 #define SEG_H 9 //Arduino Pin9--->SegLed Pin3
#define COM1 10 //Arduino Pin10--->SegLed Pin12 #define COM2 11 //Arduino Pin11--->SegLed Pin9 #define COM3 12 //Arduino Pin12--->SegLed Pin8 #define COM4 13 //Arduino Pin13--->SegLed Pin6
unsigned char table[10][8] = { {0, 0, 1, 1, 1, 1, 1, 1}, //0 {0, 0, 0, 0, 0, 1, 1, 0}, //1 {0, 1, 0, 1, 1, 0, 1, 1}, //2 {0, 1, 0, 0, 1, 1, 1, 1}, //3 {0, 1, 1, 0, 0, 1, 1, 0}, //4 {0, 1, 1, 0, 1, 1, 0, 1}, //5 {0, 1, 1, 1, 1, 1, 0, 1}, //6 {0, 0, 0, 0, 0, 1, 1, 1}, //7 {0, 1, 1, 1, 1, 1, 1, 1}, //8 {0, 1, 1, 0, 1, 1, 1, 1} //9 };
void setup() { pinMode(SEG_A,OUTPUT); //設定為輸出引腳 pinMode(SEG_B,OUTPUT); pinMode(SEG_C,OUTPUT); pinMode(SEG_D,OUTPUT); pinMode(SEG_E,OUTPUT); pinMode(SEG_F,OUTPUT); pinMode(SEG_G,OUTPUT); pinMode(SEG_H,OUTPUT);
pinMode(COM1,OUTPUT); pinMode(COM2,OUTPUT); pinMode(COM3,OUTPUT); pinMode(COM4,OUTPUT); }
void loop() { Display(1,1); //第1位顯示1 delay(500); Display(2,2); //第2位顯示2 delay(500); Display(3,3); //第3位顯示3 delay(500); Display(4,4); //第4位顯示4 delay(500); }
void Display(unsigned char com,unsigned char num) { digitalWrite(SEG_A,LOW); //去除餘暉 digitalWrite(SEG_B,LOW); digitalWrite(SEG_C,LOW); digitalWrite(SEG_D,LOW); digitalWrite(SEG_E,LOW); digitalWrite(SEG_F,LOW); digitalWrite(SEG_G,LOW); digitalWrite(SEG_H,LOW);
switch(com) //選通位選 { case 1: digitalWrite(COM1,LOW); //選擇位1 digitalWrite(COM2,HIGH); digitalWrite(COM3,HIGH); digitalWrite(COM4,HIGH); break; case 2: digitalWrite(COM1,HIGH); digitalWrite(COM2,LOW); //選擇位2 digitalWrite(COM3,HIGH); digitalWrite(COM4,HIGH); break; case 3: digitalWrite(COM1,HIGH); digitalWrite(COM2,HIGH); digitalWrite(COM3,LOW); //選擇位3 digitalWrite(COM4,HIGH); break; case 4: digitalWrite(COM1,HIGH); digitalWrite(COM2,HIGH); digitalWrite(COM3,HIGH); digitalWrite(COM4,LOW); //選擇位4 break; default:break; }
digitalWrite(SEG_A,table[num][7]); //a查詢碼值表 digitalWrite(SEG_B,table[num][6]); digitalWrite(SEG_C,table[num][5]); digitalWrite(SEG_D,table[num][4]); digitalWrite(SEG_E,table[num][3]); digitalWrite(SEG_F,table[num][2]); digitalWrite(SEG_G,table[num][1]); digitalWrite(SEG_H,table[num][0]); }