日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > 單片機(jī) > 單片機(jī)
[導(dǎo)讀] 該 電路在程序處理時(shí),由處理器首先向I/O1~I(xiàn)/O3寫高電平,然后讀入。如果非全“1”,說明,K0~K6中有鍵按下,此時(shí)可根據(jù)讀入的端口狀態(tài)判斷鍵 的狀態(tài),如果讀入的結(jié)果為全“1”,則I/O1~I(xiàn)/O3輪流輸出低電平,再




該 電路在程序處理時(shí),由處理器首先向I/O1~I(xiàn)/O3寫高電平,然后讀入。如果非全“1”,說明,K0~K6中有鍵按下,此時(shí)可根據(jù)讀入的端口狀態(tài)判斷鍵 的狀態(tài),如果讀入的結(jié)果為全“1”,則I/O1~I(xiàn)/O3輪流輸出低電平,再讀入,這樣就可根據(jù)另外兩根I/O線的狀態(tài)來判別是K7~K15中的哪一個(gè)鍵 被按下。重復(fù)調(diào)用鍵盤處理子程序可將讀取的鍵值與上次的值進(jìn)行比較,甚至兩次讀數(shù)相同為止,這樣即可消除按鍵抖動(dòng)所造成的誤讀。該電路選用的單片機(jī)為

AT89C2051

,用C51語言編寫的按鍵電路處理程序如下:


#include


#define uchar unsigned char


uchar getkey(void);


uchar keyvol;


void main(void)


{


keyvol=getkey(); /*調(diào)用鍵處理函數(shù),返回的數(shù)據(jù)等于16表示同有鍵按下,0至15對(duì)應(yīng)k0至K15*/


}


以下為鍵盤處理子程序:


uchar getkey(void)


{


uchar x


P1=P1|0x07; /*I/O1至I/O3寫“1”*/


x=P1&0x07; /*讀入I/O1至I/O3并屏蔽其它位*/


if(x==0x07) /*判斷K0至K6是否按下并轉(zhuǎn)換鍵值*/

{
P1=P1&0xfe; /*

I/O1寫“0”*/


x=P1&0x07;


x=x/2+7;


if(x= =10)


{


P1=P1|0x07;


P1=P1&0xfd; /*I/O2寫“0”*/


x=P1&0x07;


x=(x+1)/2+10; /*屏蔽I/O2并轉(zhuǎn)換K10至K12的鍵值*/


if(x = =13)


{


P1=P1|0x07;


P1=P1&0xfb; /*I/O3寫“0”*/


x=P1&0x07;


x=x+13; /*屏蔽I/O3并轉(zhuǎn)換K13至K15的鍵值*/


}


}


}


return x;


}


利用該鍵盤電路并根據(jù)邏輯組合原理可推斷開n條I/O線可組合的按鍵數(shù)N為:


N=(2n-1)+(2 n-1 -1)n





個(gè)人覺得自己寫程序的時(shí)候有個(gè)地方需要注意:當(dāng)IO口賦值011,按k0之后IO讀數(shù)為000,按k13讀數(shù)也為000,所以如果檢測(cè)到到k0到k6,這幾個(gè)都沒按才可以繼續(xù)檢測(cè)k7到k15.


本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀
關(guān)閉