1. 程式人生 > >例程16 四位數碼管

例程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]); }