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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > MSP430G2553測(cè)試程序(長(zhǎng)短按鍵識(shí)別)

          MSP430G2553測(cè)試程序(長(zhǎng)短按鍵識(shí)別)

          作者: 時(shí)間:2016-11-11 來(lái)源:網(wǎng)絡(luò) 收藏
          //原始狀態(tài)P1.6亮,P1.0暗,利用狀態(tài)機(jī)進(jìn)行按鍵檢測(cè),短按鍵情況下并釋放的瞬間P1.0翻轉(zhuǎn),P1.6翻轉(zhuǎn)

          //長(zhǎng)按鍵P1.0,P1.6按照10Hz的頻率閃爍
          // MSP430G2xx3
          // -----------------
          // /|| XIN|-
          // | | |
          // --|RST XOUT|-
          // P1.3|KEY P1.6|-->LED
          // | P1.0|-->LED
          // 作者h(yuǎn)ttp://jiwm.blog.163.com
          // Built with IAR Embedded Workbench Version: 5.40
          //******************************************************************************
          #include "msp430g2553.h"
          #define NOKEY 0 //未按下?tīng)顟B(tài)
          #define PUSH_KEY 1 //短按狀態(tài)
          #define LONG_KEY 2 //長(zhǎng)按狀態(tài)
          unsigned char KEY=0; //按鍵狀態(tài)處理
          void main(void)
          {
          WDTCTL = WDTPW + WDTHOLD; // 關(guān)閉看門狗
          BCSCTL1= CALBC1_1MHZ; //1M內(nèi)部時(shí)鐘
          DCOCTL = CALDCO_1MHZ;
          P1DIR |=BIT6+BIT0; // 設(shè)置 P1.6,P1.0為輸出
          P1OUT|=BIT0; //設(shè)置初值,P1.0亮
          P1OUT&=~BIT6; //設(shè)置初值,P1.6不亮
          P1REN|=BIT3; //配置上拉電阻
          TACCTL0 |= CCIE; // CCR0 interrupt enabled
          TACCR0 =2500; //計(jì)到2.5K,約20ms
          TACTL = TASSEL_2+ID_3+MC_1+TACLR; //設(shè)置TIMERA的時(shí)鐘源為SMCLK(1M),8分頻后(125K),計(jì)數(shù)模式為up,到CCR0再自動(dòng)從0開(kāi)始計(jì)數(shù)
          _BIS_SR(GIE); //開(kāi)總中斷
          TACCTL0 |= CCIE; // CCR0 interrupt enabled
          while(1)
          {
          switch(KEY) //按鍵動(dòng)作
          { case 1: //短按狀態(tài)時(shí)進(jìn)行按鍵處理
          {P1OUT^=BIT0; //翻轉(zhuǎn)
          P1OUT^=BIT6; //翻轉(zhuǎn)
          KEY=0;}
          break;
          case 2: //長(zhǎng)按初始狀態(tài)
          {P1OUT|=BIT0; //設(shè)置初值,P1.0亮
          P1OUT|=BIT6; //設(shè)置初值,P1.6亮
          KEY=0;}
          break; //必須要,需要退出循環(huán)
          case 3: //長(zhǎng)按狀態(tài)時(shí)進(jìn)行按鍵處理
          {P1OUT^=BIT0; //翻轉(zhuǎn)
          P1OUT^=BIT6; //翻轉(zhuǎn)
          KEY=0;}
          break;
          }
          }
          }

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

          /************************************************
          定時(shí)中斷響應(yīng)
          *************************************************/
          // Timer A0 interrupt service routine
          #pragma vector=TIMER0_A0_VECTOR
          __interrupt void Timer_A (void)

          { //TACCTL0&=~ CCIE; //關(guān)中斷
          static unsigned char KEY_State=0; //按鍵的狀態(tài)變量
          static unsigned char i,j=0; //計(jì)數(shù),用于處理時(shí)間
          switch(KEY_State) //處理按鍵狀態(tài)
          {case NOKEY: //未按鍵時(shí)進(jìn)行按鍵處理
          if ((P1IN&BIT3)==0)
          {KEY_State=PUSH_KEY; //按下按鍵后,進(jìn)入短按狀態(tài)
          }
          break; //必須要,需要退出循環(huán)
          case PUSH_KEY: //短按狀態(tài)時(shí)進(jìn)行按鍵處理
          if((P1IN&BIT3)!=0) //釋放按鍵,認(rèn)為是一次短按,加以處理
          { KEY=1; //按鍵賦值
          KEY_State=NOKEY; //回到未按狀態(tài)
          }
          else
          {
          if (i<100)
          { //KEY=0; //KEY返回0,接收下一次數(shù)據(jù)
          i++; //計(jì)數(shù),以實(shí)現(xiàn)長(zhǎng)按鍵,約2秒
          }
          else
          {
          i=0;
          KEY=2; //輸出長(zhǎng)按初始狀態(tài)
          KEY_State=LONG_KEY; //長(zhǎng)按狀態(tài)
          }
          }
          break;

          case LONG_KEY: //長(zhǎng)按狀態(tài)時(shí)進(jìn)行按鍵處理
          if((P1IN&BIT3)!=0) //釋放按鍵,退出
          { KEY=0; //按鍵賦值
          KEY_State=NOKEY; //回到未按狀態(tài)
          }
          else
          {
          if (j<5)
          {
          j++; //計(jì)數(shù),以實(shí)現(xiàn)長(zhǎng)按鍵狀態(tài)計(jì)時(shí),約0.1秒
          }
          else
          {j=0; //重新計(jì)數(shù)
          KEY=3; //長(zhǎng)按狀態(tài)的處理
          }
          }
          break;

          }
          TACCTL0|= CCIE; //開(kāi)中斷
          }



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