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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于stm32的獨(dú)立按鍵掃描方式

          基于stm32的獨(dú)立按鍵掃描方式

          作者: 時(shí)間:2016-11-19 來(lái)源:網(wǎng)絡(luò) 收藏
          這兩天完成了一個(gè)stm32的工程,在解決按鍵時(shí)寫(xiě)出了一個(gè)獨(dú)立按鍵的掃描函數(shù),應(yīng)該有前輩已經(jīng)出來(lái)了,的其實(shí)質(zhì)就是普通的掃描方式修改的,優(yōu)點(diǎn)是將按鍵相關(guān)參數(shù)封裝為一個(gè)結(jié)構(gòu)體,每加一個(gè)按鍵都不需要在函數(shù)中增加語(yǔ)句,廢話少說(shuō),先看掃描函數(shù)

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

          //*
          // Function: 掃描按鍵
          // Returns: u8 :按鍵id值
          //*
          u8 KeyScan()
          {
          static u8 keyUp=1;//按鍵按松開(kāi)標(biāo)志
          u8 i,count,upCount=0;
          count=sizeof(buttons)/sizeof(Button);
          for (i=0;i{
          if (keyUp && (GPIO_ReadInputDataBit(buttons[i].ButtonPort,buttons[i].ButtonPin)==0))
          {
          keyUp = 0;
          delay_ms(10);
          if (GPIO_ReadInputDataBit(buttons[i].ButtonPort,buttons[i].ButtonPin)==0)
          {
          return buttons[i].ButtonId;
          }
          }
          else if ((GPIO_ReadInputDataBit(buttons[i].ButtonPort,buttons[i].ButtonPin)==1))
          {
          upCount++; //記錄有多少個(gè)按鍵松開(kāi)了
          }
          }
          if (upCount == count)//按鍵松開(kāi)數(shù)等于總按鍵數(shù)
          {
          keyUp = 1;
          }
          return ButtonNone;// 無(wú)按鍵按下
          }

          通俗易懂吧。接下來(lái)看結(jié)構(gòu)體原型

          typedef struct
          {
          GPIO_TypeDef* ButtonPort;//按鍵端口
          uint16_t ButtonPin;//按鍵引腳
          u8ButtonId;//按鍵ID
          }Button;

          使用方法

          Button buttons[]={{GPIOB,GPIO_Pin_5,ButtonFunction},
          {GPIOB,GPIO_Pin_6,ButtonUp},
          {GPIOB,GPIO_Pin_1,ButtonDown},
          {GPIOB,GPIO_Pin_0,4}};

          一般的結(jié)構(gòu)體初始化方法,前兩個(gè)參數(shù)大家都懂,最后一個(gè)可以定義一個(gè)枚舉,當(dāng)然也可以自己賦值,注意別重復(fù)和定義為0了,因?yàn)?一般用來(lái)當(dāng)作沒(méi)有按鍵的返回值。如今要加減按鍵就只需在上面的數(shù)組中處理。當(dāng)然別忘了端口的初始化,這個(gè)就不說(shuō)了。

          分析一下優(yōu)缺點(diǎn),

          優(yōu)點(diǎn):便于擴(kuò)展,每加減一個(gè)按鍵都不用修改主要的按鍵掃描函數(shù),如果端口初始化函數(shù)寫(xiě)得好的話連端口初始化函數(shù)都可以不用管。

          缺點(diǎn):如果按鍵過(guò)多,會(huì)損失不少時(shí)間,主要原因是循環(huán)結(jié)構(gòu)



          關(guān)鍵詞: stm32獨(dú)立按鍵掃描方

          評(píng)論


          技術(shù)專(zhuān)區(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); })();