新聞中心

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

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

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


分析:
首先: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;//無(wú)鍵,有鍵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-無(wú)鍵,1~6-S1~S6鍵
}

程序流程圖:

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



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

評(píng)論


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

關(guān)閉