<acronym id="xonnx"></acronym>
      <td id="xonnx"></td>
    1. <pre id="xonnx"></pre>

      1. 專注電子技術學習與研究
        當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

        51單片機矩陣鍵盤檢測源代碼(按鍵數碼管顯示0-F)

        作者:寒竹子   來源:本站原創   點擊數:  更新時間:2014年03月23日   【字體:

        本程序所用的原理圖下載: 點這里 ,單片機芯片使用的stc89c52;找到相應部分即可.這是一整個單片機開發板的電路圖其他的忽略.
        hex文件及其工程文件下載:http://www.thefapper.com/f/juzhen.rar  以下是通過測試的源代碼:
        /*
        *功能:使用矩陣按鍵使得按鍵按下時數碼管上顯示各自對應的數字(0 ~ F);
        *日期:2013-05-03-17:51;
        *作者:徐冉
        *特別說明:本程序代碼已經通過調試,僅供學習使用;
        *
        */
        /***********AT89C52-RC 單片機51hei 實驗板***********/
        /*****************51hei-開發板*********************/
        #include <reg52.h>
        typedef unsigned int uint;
        typedef unsigned char uchar;
        sbit wela = P2^7;
        sbit dula = P2^6;
        sbit FM = P2^3;
        uchar code table[] = {  
            0x3F,  //"0"
                        0x06,  //"1"
                        0x5B,  //"2"
                        0x4F,  //"3"
                        0x66,  //"4"
                        0x6D,  //"5"
                        0x7D,  //"6"
                        0x07,  //"7"
                        0x7F,  //"8"
                        0x6F,  //"9"
                        0x77,  //"A"
                        0x7C,  //"B"
                        0x39,  //"C"
                        0x5E,  //"D"
                        0x79,  //"E"
                        0x71,  //"F"
                        0x76,  //"H"
                        0x38,  //"L"
                        0x37,  //"n"
                        0x3E,  //"u"
                        0x73,  //"P"
                        0x5C,  //"o"
                        0x40,  //"-"
                        0x00,  //熄滅
                        0x00  //自定義
         };
        uchar key, temp;
        void display(uchar num);
        void Marix_keyscan();
        void delay(uint xms);
        void main()
        {
         dula = 1;
         P0 = 0x00;
         dula = 0;
         wela = 1;
         P0 = 0xea;
         wela = 0;
         while(1)
         {
          Marix_keyscan();
          display(key);
         }
        }
        void display(uchar num)
        {
         dula = 1;
         P0 = table[num];
         dula = 0;
        }
        void delay(uint xms)
        {
         uint i, j;
         for(i = xms; i > 0; i--)
           for(j = 125; j > 0; j--);
        }
        void Marix_keyscan()
        {
         P3 = 0xfe;
         temp = P3;
         temp &= 0xf0;
         if(temp != 0xf0)
         {
          delay(5);
          temp = P3;
          temp &= 0xf0;
          if(temp != 0xf0)
          {
           FM = 0;
           temp = P3;
           switch(temp)
           {
            case 0xee: key = 0;
            break;
            case 0xde: key = 1;
            break;
            case 0xbe: key = 2;
            break;
            case 0x7e: key = 3;
            break;
            default:
            break;
           }
           while(temp != 0xf0)
           {
            temp = P3;
            temp &= 0xf0;
           }
           delay(5);
           while(temp != 0xf0)
           {
            temp = P3;
            temp &= 0xf0;
           }
           FM = 1;
          }
         }
         P3 = 0xfd;
         temp = P3;
         temp &= 0xf0;
         if(temp != 0xf0)
         {
          delay(5);
          temp = P3;
          temp &= 0xf0;
          if(temp != 0xf0)
          {
           FM = 0;
           temp = P3;
           switch(temp)
           {
            case 0xed:key = 4;
            break;
            case 0xdd:key = 5;
            break;
            case 0xbd:key = 6;
            break;
            case 0x7d:key = 7;
            break;
            default:
            break;
           }
           while(temp != 0xf0)
           {
            temp = P3;
            temp &= 0xf0;
           }
           delay(5);
           while(temp != 0xf0)
           {
            temp = P3;
            temp &= 0xf0;
           }
           FM = 1;
          }
         }
         P3 = 0xfb;
         temp = P3;
         temp &= 0xf0;
         if(temp != 0xf0)
         {
          delay(5);
          temp = P3;
          temp &= 0xf0;
          if(temp != 0xf0)
          {
           FM = 0;
           temp = P3;
           switch(temp)
           {
             case 0xeb: key = 8;
            break;
            case 0xdb: key = 9;
            break;
            case 0xbb: key = 10;
            break;
            case 0x7b: key = 11;
            break;
            default:
            break;
           }
           while(temp != 0xf0)
           {
            temp = P3;
            temp &= 0xf0;
           }
           delay(5);
           while(temp != 0xf0)
           {
            temp = P3;
            temp &= 0xf0;
           }
           FM = 1;
          }
         }
         P3 = 0xf7;
         temp = P3;
         temp &= 0xf0;
         if(temp != 0xf0)
         {
          delay(5);
          temp = P3;
          temp &= 0xf0;
          if(temp != 0xf0)
          {
           FM = 0;
           temp = P3;
           switch(temp)
           {
            case 0xe7: key = 12;
            break;
               case 0xd7: key = 13;
            break;
            case 0xb7: key = 14;
            break;
            case 0x77: key = 15;
            break;
            default:
            break;
           }
           while(temp != 0xf0)
           {
            temp = P3;
            temp &= 0xf0;
           }
           delay(5);
              while(temp != 0xf0)
           {
            temp = P3;
            temp &= 0xf0;
           }
           FM = 1;
          }
         }
        }

        關閉窗口

        相關文章

        欧美性色欧美精品视频,99热这里只有精品mp4,日韩高清亚洲日韩精品一区二区,2020国自产拍精品高潮