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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 2個(gè)I/O 口檢測6個(gè)按鍵

          2個(gè)I/O 口檢測6個(gè)按鍵

          作者: 時(shí)間:2016-11-25 來源:網(wǎng)絡(luò) 收藏
          今天看到了用2個(gè)I/O口來檢測6個(gè)按鍵的方法,確實(shí)很霸道,特傳上來和大家一起分享。
          原理圖如下:


          分析:
          首先:IO1,IO2輸出高電平
          S1按下,IO2為低電平
          S2按下,IO1為低電平
          S3按下,IO1,IO2為0.7V(1N4148導(dǎo)通電壓),還是低電平。
          現(xiàn)在開始判別其他幾個(gè)按鍵了:
          1、IO1輸出低電平,讀IO2電平
          如果IO2為低電平,此時(shí)應(yīng)該是S4或者S6按下(S6按下時(shí),IO2為0.7V,依舊是低電平)。
          此時(shí)IO1輸出高電平,IO2輸出低電平,讀IO1電平
          當(dāng)S4按下時(shí),IO1為低電平。剩余的就只能是S6了。
          2、IO1輸出高電平,IO2輸出低電平
          讀IO1,S5按下時(shí),IO1為低電平。若IO1依舊為高電平,則是S6按下了。

          按鍵掃描程序:
          unsignedcharscan_key(void)
          {
          unsignedcharkeyval=0;//無鍵,有鍵1~6

          KEY_IO1=1;//釋放總線
          KEY_IO2=1;//釋放總線

          if(!KEY_IO1&&!KEY_IO2)
          keyval=3;//S3
          elseif(!KEY_IO1)
          keyval=2;//S2
          elseif(!KEY_IO2)
          keyval=1;//S1
          else
          {
          //開始掃描,也要考慮小毛賊的問題~~~
          KEY_IO1=0;//掃描
          if(!KEY_IO2)
          {
          //這時(shí)不能立即判定S4/S6
          KEY_IO1=1;//釋放總線
          KEY_IO2=0;//反向掃描
          if(!KEY_IO1)
          keyval=4;//S4~~~
          else
          keyval=6;//S6
          }
          else
          {
          //只能是S5了
          KEY_IO1=1;//釋放總線
          KEY_IO2=0;//反向掃描

          if(!KEY_IO1)
          keyval=5;//S5
          //elsekeyval=6;//S6//上面已判出了S6,這句是廢話
          }
          KEY_IO1=1;//釋放總線//已經(jīng)釋放~~~
          KEY_IO2=1;//釋放總線
          }
          returnkeyval;//返回鍵值0-無鍵,1~6-S1~S6鍵
          }

          程序流程圖:

          由于演示圖片是動(dòng)態(tài)的,此處無法進(jìn)行演示。



          關(guān)鍵詞: IO口檢測按

          評論


          技術(shù)專區(qū)

          關(guān)閉