<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 課程設(shè)計:矩陣鍵盤(c51,使用掃描法實(shí)現(xiàn))

          課程設(shè)計:矩陣鍵盤(c51,使用掃描法實(shí)現(xiàn))

          作者: 時間:2016-11-18 來源:網(wǎng)絡(luò) 收藏
          //可以比較一下和以前發(fā)表的一篇用反轉(zhuǎn)法實(shí)現(xiàn)的不同(感覺一下那個更簡單)

          //這種方法是用只用P3口的前高四位來比較,看改變了么(由于比較倉促,沒有proteus仿真,不過這是個比較經(jīng)典的方法,網(wǎng)上有很多這個代碼,源自郭天祥的視頻和書籍)

          本文引用地址:http://www.ex-cimer.com/article/201611/315828.htm

          #include

          #define uchar unsigned char

          #define uint unsigned int

          sbit wela=P2^7;

          sbit dula=P2^6;

          uchar num,num1;

          unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,

          0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

          void delay(uint xms)

          {

          uint x,y;

          for(x=xms;x>0;x--)

          for(y=111;y>0;y--);

          }

          void display(uchar num)

          {

          dula=1;

          P1=table[num];

          dula=0;

          //delay(10);

          }

          void matrixkeyscan()

          {

          uchar temp,key;

          P3=0xfe;//第一行

          temp=P3;

          temp=temp&0xf0;

          if(temp!=0xf0)

          {

          delay(10);

          temp=P3;

          temp=temp&0xf0;

          if(temp!=0xf0)

          {

          temp=P3;

          switch(temp)

          {

          case 0xee:

          key=0;

          break;

          case 0xde:

          key=1;

          break;

          case 0xbe:

          key=2;

          break;

          case 0x7e:

          key=3;

          break;

          }

          while(temp!=0xf0)

          {

          temp=P3;

          temp=temp&0xf0;

          }

          display(key);

          }

          }

          P3=0xfd;//第二行

          temp=P3;

          temp=temp&0xf0;

          if(temp!=0xf0)

          {

          delay(10);

          temp=P3;

          temp=temp&0xf0;

          if(temp!=0xf0)

          {

          temp=P3;

          switch(temp)

          {

          case 0xed:

          key=4;

          break;

          case 0xdd:

          key=5;

          break;

          case 0xbd:

          key=6;

          break;

          case 0x7d:

          key=7;

          break;

          }

          while(temp!=0xf0)

          {

          temp=P3;

          temp=temp&0xf0;

          }

          display(key);

          }

          }

          P3=0xfb;//第三行

          temp=P3;

          temp=temp&0xf0;

          if(temp!=0xf0)

          {

          delay(10);

          temp=P3;

          temp=temp&0xf0;

          if(temp!=0xf0)

          {

          temp=P3;

          switch(temp)

          {

          case 0xeb:

          key=8;

          break;

          case 0xdb:

          key=9;

          break;

          case 0xbb:

          key=10;

          break;

          case 0x7b:

          key=11;

          break;

          }

          while(temp!=0xf0)

          {

          temp=P3;

          temp=temp&0xf0;

          }

          display(key);

          }

          }

          P3=0xf7;//第四行

          temp=P3;

          temp=temp&0xf0;

          if(temp!=0xf0)

          {

          delay(10);

          temp=P3;

          temp=temp&0xf0;

          if(temp!=0xf0)

          {

          temp=P3;

          switch(temp)

          {

          case 0xe7:

          key=12;

          break;

          case 0xd7:

          key=13;

          break;

          case 0xb7:

          key=14;

          break;

          case 0x77:

          key=15;

          break;

          }

          while(temp!=0xf0)

          {

          temp=P3;

          temp=temp&0xf0;

          }

          display(key);

          }

          }

          }

          void main()

          {

          dula=0;

          wela=1;

          P1=0x00;

          wela=0;

          //dula=0;

          while(1)

          {//dula=0;

          matrixkeyscan();

          }

          }



          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();