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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > AVR main.c/基于狀態(tài)機的按鍵

          AVR main.c/基于狀態(tài)機的按鍵

          作者: 時間:2016-11-25 來源:網(wǎng)絡 收藏
          /**********************************************************************
          * 文件名稱: main.c/基于狀態(tài)機的按鍵
          * 程序作者: Kevin Chin
          * 程序版本: V1.0
          * 編制日期: 2010/07/14
          * 功能描述: 按一個K20(PD7),LED燈亮(PB1),松開熄滅
          * 編譯器:WinAVR-20090313
          * 芯片:ATmega16,外部11.0592MHZ晶振
          * 技術支持:http://bbs.cepark.com
          **********************************************************************/
          #include<avr/io.h>
          #include

          #defineKEY_Value PIND&0x80//定義按鍵所在的引腳PD7

          #defineLED_OPEN PORTB&=~(_BV(PB1))//PB1口的LED燈點亮

          #defineLED_CLOSE PORTB|=_BV(PB1)//PB1口的LED燈熄滅

          #defineKEY_STATE_0 0//狀態(tài)0

          #defineKEY_STATE_1 1//狀態(tài)1

          #defineKEY_STATE_2 2//狀態(tài)2


          uint8_tKeyScane(void)//按鍵掃描函數(shù)

          {
          staticuint8_tkeystate=0,keyreturn=0;//定義靜態(tài)變量

          uint8_tkeypress;


          keypress=KEY_Value;//讀取按鍵的狀態(tài)賦給keypress


          switch(keystate)
          {
          caseKEY_STATE_0:if(!keypress)//如果是狀態(tài)1并且按鍵按下去了。

          {
          keystate=KEY_STATE_1;//狀態(tài)切換到1

          keyreturn=0;
          }
          break;
          caseKEY_STATE_1:if(!keypress)//如果10ms后按鍵按下狀態(tài)再次確認

          {
          keystate=KEY_STATE_2;//按鍵狀態(tài)切換到2

          keyreturn=1;//返回值為1

          }
          elsekeystate=KEY_STATE_0;
          break;
          caseKEY_STATE_2:if(keypress)//判斷按鍵是否松開

          {
          keystate=KEY_STATE_0;//切換到狀態(tài)0

          keyreturn=0;
          }
          break;
          default:break;
          }

          returnkeyreturn;//返回鍵值


          }

          intmain(void)
          {

          uint8_tkeydata;

          PORTB=0xff;
          DDRB=0xff;

          PORTD=0x80;
          DDRD=0x00;

          while(1)
          {
          _delay_ms(10);//延時10ms

          keydata=KeyScane();//調(diào)用按鍵掃描函數(shù)


          if(keydata)//如果按鍵掃描函數(shù)返回為1,執(zhí)行下面的語句

          {
          LED_OPEN;//LED點亮

          }
          elseLED_CLOSE;//LED熄滅

          }
          }


          評論


          技術專區(qū)

          關閉
          看屁屁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); })();