<acronym id="rolok"><li id="rolok"><em id="rolok"></em></li></acronym><delect id="rolok"><ruby id="rolok"></ruby></delect>
            專注電子技術學習與研究
            當前位置:單片機教程網 >> Arduino >> 瀏覽文章

            Arduino-數碼管和LED顯示十六進制數

            作者:快樂的堯   來源:不詳   點擊數:  更新時間:2014年08月02日   【字體:

            這個實驗更麻煩,因為要將電位器采樣值map到0~255后以16進制顯示,其中高位用數碼管顯示,低位用4個LED顯示(4位二進制)。

             
             
            這里主要學習了表格的使用方法。第一個參數是行數,第二個參數是列數。如果點亮數字“5”的話,則要讓table1中的第五行從右向左分別為a~h段輸出,讓b,e和h段不亮。
             
            另一個要點為把十進制的數(0~255)變成十六進制的數,分別取高低位進行顯示,變成兩位十六進制數。將該數右移4位(8位二進制數右移4位,左邊填0,即取高4位的值);再將二進制數“00001111”進行“與”運算,(即取低4位的值)。
             
              程序如下:
            #include  
             
            #define LED1 9
            #define LED2 10
            #define LED3 11
            #define LED4 12
             
            #define SEG_a 2 //IO命名
            #define SEG_b 3
            #define SEG_c 4
            #define SEG_d 5
            #define SEG_e 6
            #define SEG_f 7
            #define SEG_g 8
            #define Pot A0
            byte i;
            byte a;
            byte b;
            int PotBuffer = 0;
             
             
             
            //數碼管0-9數字碼值
            unsigned char table1[16][8] =         //表格1,16行8列
            {
            //     h        g       f       e       d       c       b       a
              {    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
              {    0, 1, 1, 1, 0, 1, 1, 1  }  ,        //A
              {    0, 1, 1, 1, 1, 1, 0, 0  }  ,
              {    0, 0, 1, 1, 1, 0, 0, 1  }  ,
              {    0, 1, 0, 1, 1, 1, 1, 0  }  ,
              {    0, 1, 1, 1, 1, 0, 0, 1  }  ,
              {    0, 1, 1, 1, 0, 0, 0, 1  }          //F
            };
             
            unsigned char table2[16][4] =        //表格2,16行4列
            {
            //  8     4     2      1
              { 0,    0, 0,     0}  , //0
              { 0,    0, 0,     1}  , //1  
              { 0,    0, 1,     0}  , //2
              { 0,    0, 1,     1}  , //3
              { 0,    1, 0,     0}  , //4
              { 0,    1, 0,     1}  , //5
              { 0,    1, 1,     0}  , //6
              { 0,    1, 1,     1}  , //7
              { 1,    0, 0,     0}  , //8
              { 1,    0, 0,     1}  , //9
              { 1,    0, 1,     0}  , //A
              { 1,    0, 1,     1}  , //B
              { 1,    1, 0,     0}  , //C
              { 1,    1, 0,     1}  , //D
              { 1,    1, 1,     0}  , //E
              { 1,    1, 1,     1}    //F
            } ;
              
            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(LED1,OUTPUT);
              pinMode(LED2,OUTPUT);
              pinMode(LED3,OUTPUT);
              pinMode(LED4,OUTPUT);
            }
             
            void loop()
            {
                PotBuffer = analogRead(Pot); //讀取AD值
                i = map(PotBuffer, 0, 1023, 0, 255);
                a = i >> 4;          //a=v右移4位(8位二進制數右移4位,左邊填0,即取高4位的值)
                b = i & 0b1111;      //v和二進制數“00001111”進行“與”運算,即取低4位的值)
                
                digitalWrite(SEG_a,table1[a][7]); //數碼管段a的輸出
                digitalWrite(SEG_b,table1[a][6]);  
                digitalWrite(SEG_c,table1[a][5]);
                digitalWrite(SEG_d,table1[a][4]);
                digitalWrite(SEG_e,table1[a][3]);
                digitalWrite(SEG_f,table1[a][2]);
                digitalWrite(SEG_g,table1[a][1]); //數碼管段g的輸出
                
                digitalWrite(LED4,table2[b][3]); // LED4(bit0)的輸出
                digitalWrite(LED3,table2[b][2]);
                digitalWrite(LED2,table2[b][1]);
                digitalWrite(LED1,table2[b][0]); // LED1(bit3)的輸出
             
                delay(50);
            }
             
            測試視頻(為了顯示精確,用了一個多圈電位器):
             
            關閉窗口

            相關文章

            国产农村精品一级毛片视频_亚洲Av无码专区国产乱码在线观看_亚洲综合国产Av_天天影视网天天综合色