新聞中心

2個I/O 口檢測6個按鍵

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


分析:
首先:IO1,IO2輸出高電平
S1按下,IO2為低電平
S2按下,IO1為低電平
S3按下,IO1,IO2為0.7V(1N4148導(dǎo)通電壓),還是低電平。
現(xiàn)在開始判別其他幾個按鍵了:
1、IO1輸出低電平,讀IO2電平
如果IO2為低電平,此時應(yīng)該是S4或者S6按下(S6按下時,IO2為0.7V,依舊是低電平)。
此時IO1輸出高電平,IO2輸出低電平,讀IO1電平
當(dāng)S4按下時,IO1為低電平。剩余的就只能是S6了。
2、IO1輸出高電平,IO2輸出低電平
讀IO1,S5按下時,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)
{
//這時不能立即判定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鍵
}

程序流程圖:

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



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

評論


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

關(guān)閉