色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 一個(gè)經(jīng)典的按鍵掃描程序

          一個(gè)經(jīng)典的按鍵掃描程序

          作者: 時(shí)間:2016-11-17 來(lái)源:網(wǎng)絡(luò) 收藏
          按鍵是比較復(fù)雜??梢杂?strong>狀態(tài)機(jī)表示。

          每10mS執(zhí)行一次鍵盤(pán)掃描任務(wù)

          本文引用地址:http://cafeforensic.com/article/201611/315486.htm

          0、無(wú)鍵,若有鍵進(jìn)入狀態(tài)1

          1、第一次檢到有鍵。若有鍵進(jìn)入狀態(tài)2,同時(shí)將鍵值送緩沖區(qū)。 若無(wú)鍵進(jìn)入狀態(tài)0。

          2、若有鍵則計(jì)時(shí),按鍵超過(guò)300ms進(jìn)入狀態(tài)3,同時(shí)將鍵值送緩沖區(qū)。 若無(wú)鍵進(jìn)入狀態(tài)1。

          表示第一次按鍵后如果長(zhǎng)按鍵則300ms后認(rèn)為有一次按鍵。

          3、若有鍵則計(jì)時(shí),按鍵超過(guò)200ms則將鍵值送緩沖區(qū)。 若無(wú)鍵進(jìn)入狀態(tài)1。

          表示長(zhǎng)按鍵則以后每200ms后認(rèn)為有一次按鍵。

          void KeyScan() //每10mS執(zhí)行一次鍵盤(pán)掃描任務(wù)

          {

          switch(KeyState)

          {

          case 0:

          if(KeyIsKeyDown()) //有鍵

          {

          KeyState = 1;

          }

          break;

          case 1:

          if(KeyIsKeyDown()) //有鍵

          {

          KeyState = 2;

          KeyBufIn(); //將鍵值送緩沖區(qū)

          KeyStartRptCnt = 0;

          }

          else

          {

          KeyState = 0;

          }

          break;

          case 2:

          if(KeyIsKeyDown()) //有鍵

          {

          if(KeyStartRptCnt++ >= 30)

          {

          KeyState = 3;

          KeyRptCnt = 0;

          KeyBufIn();

          }

          }

          else

          {

          KeyState = 1;

          }

          break;

          case 3:

          if(KeyIsKeyDown()) //有鍵

          {

          if(KeyRptCnt++ >= 20)

          {

          KeyRptCnt = 0;

          KeyBufIn();

          }

          }

          else

          {

          KeyState = 1;

          }

          break;

          default:

          break;

          }

          }



          關(guān)鍵詞: 按鍵掃描狀態(tài)

          評(píng)論


          技術(shù)專(zhuān)區(qū)

          關(guān)閉