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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 51單片機(jī)學(xué)習(xí)之5-獨(dú)立按鍵和矩陣鍵盤

          51單片機(jī)學(xué)習(xí)之5-獨(dú)立按鍵和矩陣鍵盤

          作者: 時(shí)間:2016-11-30 來源:網(wǎng)絡(luò) 收藏

          第一步,我們先確定列,給P3口賦值0xF0=11110000,那么P37、P36、P35、P34都被置1,P33、P32、P31、P30都被置0,當(dāng)S6被按下時(shí),由于S6按鈕的一邊P31為0,所以跟S6另一邊相連的P35被拉低,即等于0。如下圖

          此時(shí)得到列的值P3=11010000=0xD0,在程序中只需要判斷P3是否等于0xF0,不等說明有按鍵按下。

          第二步,不改變高四位的狀態(tài):1101將低四位全部置1(P3=P3|0x0F)。這時(shí)候就變成了11011111,由于單片機(jī)掃描列的時(shí)候速度非??欤浆F(xiàn)在掃描行的時(shí)候,按鍵仍處在按下狀態(tài)(人的反應(yīng)沒有單片機(jī)快)。S6被按下,由于與S6相連的P35為低電平(即0),所以P31由高電平(即1)變成低電平(即0)如下圖

          此時(shí)得到的值為P3=11011101=S6被按下。這就是檢測原理。

          完整程序:

          #include

          #defineuintunsignedint

          #defineucharunsignedchar

          sbitLed=P1^0;

          sbitLed1=P1^1;

          voiddelay(uintz);

          /********主函數(shù)********/

          voidmain()

          {

          ucharKey_Temp;

          ucharKey;//Key鍵值

          while(1)

          {

          Key=0;//清0

          P3=0xF0;

          Key_Temp=P3;

          Key_Temp&=0xF0;//只取高四位這句需要,因?yàn)?1IO只是準(zhǔn)雙向要使其具備輸入功能需要用置1

          if(0xF0!=Key_Temp)//判斷是否有按鍵按下

          {

          delay(10);//延時(shí)一段時(shí)間跳過抖動(dòng)的時(shí)間

          Key_Temp=P3&0xF0;//先取P3然后和0xF0與運(yùn)算得到高四位

          if(0xF0!=Key_Temp)//再次判斷是否確實(shí)按下

          {

          P3=Key_Temp|0x0F;//保留高四位將低四位全部置1并輸出

          Key=P3;//再讀入

          }

          }

          switch(Key)

          {

          case0xEE:Led=0;break;//S1

          case0xDE:Led1=0;break;

          case0xBE:break;

          case0x7E:break;

          case0xED:break;

          case0xDD:break;

          case0xBD:break;

          case0x7D:break;

          case0xEB:break;

          case0xDB:break;

          case0xBB:break;

          case0x7B:break;

          case0xE7:break;

          case0xD7:break;

          case0xB7:break;

          case0x77:break;//S16

          default:

          Led=Led1=1;

          }

          }

          }

          voiddelay(uintz)

          {

          uintx,y;

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

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

          }


          上一頁 1 2 下一頁

          評論


          技術(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); })();