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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > msp430矩陣式按鈕驅(qū)動(dòng)程序

          msp430矩陣式按鈕驅(qū)動(dòng)程序

          作者: 時(shí)間:2016-11-23 來(lái)源:網(wǎng)絡(luò) 收藏
          寫(xiě)這個(gè)程序的時(shí)候,完全沒(méi)有參考,全部是建立在匯編語(yǔ)言的基礎(chǔ)上,一步步的搬移到c語(yǔ)言上的。但是測(cè)試后,感覺(jué)效果還是十分理想,所以拿出來(lái)與眾位分享了,希望對(duì)一些朋友有所幫助~

          #include "msp430x14x.h"
          unsigned char LineScan[4]={0xef,0xdf,0xbf,0x7f}; //列值列舉

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

          void ADD()
          {
          P4OUT+=1;
          }

          void SUB()
          {
          P4OUT-=1;
          }

          unsigned int key_check(void) //檢測(cè)是否有按鍵按下
          {
          unsigned char temp;
          P1DIR=0xf0; //定義P1.4~P1.7為輸出
          temp=P1IN & 0x0f;
          if(temp!=0x0f)
          return 1;
          else
          return 0;
          }

          unsigned char scan_key(void) //掃描對(duì)應(yīng)按鍵的鍵號(hào)
          {
          P1DIR=0xf0;
          unsigned char count;
          unsigned char i,temp,m,n; //m為列的值,n為行的值
          unsigned int flag=0;
          for(i=0;i<4;i++) //列掃描
          {
          P1OUT=LineScan[i]; //獲取掃描的列
          temp=P1IN&0x0f;

          if(temp==0x07) //為第一行
          {n=0; //記錄按下按鈕的行
          flag=1; //標(biāo)志檢測(cè)出來(lái)
          break;}
          else if(temp==0x0b) //為第二行
          {n=1;
          flag=1;
          break;}
          else if(temp==0x0d) //為第三行
          {n=2;
          flag=1;
          break;}
          else if(temp==0x0e) //為第四行
          {n=3;
          flag=1;
          break;}
          }
          if(flag==1)
          {m=i;
          flag=0;
          count=n*4+m;
          switch(count)
          {
          case 0: {;break;}
          case 1: {;break;}
          case 2: {;break;}
          case 3: {;break;}
          case 4: {;break;}
          case 5: {;break;}
          case 6: {;break;}
          case 7: {;break;}
          case 8: {;break;}
          case 9: {;break;}
          case 10:{;break;}
          case 11:{SUB();break;}
          case 12:{;break;}
          case 13:{;break;}
          case 14:{;break;}
          case 15:{ADD();break;}
          }
          return;
          }
          else
          return;
          }

          void Delay(char wDelay) //延時(shí)子程序
          {
          while(wDelay!=0)
          wDelay--;
          }

          int main( void )
          {
          WDTCTL = WDTPW + WDTHOLD;
          P4DIR =0xff;
          P4OUT=0X00;
          while(1)
          {
          if(key_check())
          {Delay(10000);
          if(key_check())
          {
          scan_key();
          while(key_check());
          P1OUT=0x0f;
          }
          }
          }
          }



          評(píng)論


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