void main(void)
{
while(1)
{
if(P3_7==0)//判斷是否有按下,為0則按下
{
delay10ms();//延時(shí)10MS,去抖動(dòng)
if(P3_7==0)//再次判斷,如果還為0則真的按下了。
{
count++;//每按下一次就加1
if(count==16)//加到16返回0
{
count=0;
}
P1=~count;//P1口把按下的次數(shù)輸出,如第一次就是11111110,第二次就是11111101:十六進(jìn)制轉(zhuǎn)成IO口的二進(jìn)制
while(P3_7==0);//直到按鍵放開(kāi)才判斷下一次按鍵
}
}
}
當(dāng)鍵盤(pán)中按鍵數(shù)量較多時(shí),為了減少對(duì) I/O 口的占用,通常將按鍵排列成矩陣形式,也稱為行列鍵盤(pán),這是一種常見(jiàn)的連接方式。矩陣式鍵盤(pán)接口見(jiàn)圖 9-7 所示,它由行線和列線組成,按鍵位于行、列的交叉點(diǎn)上。當(dāng)鍵被按下時(shí),其交點(diǎn)的行線和列線接通,相應(yīng)的行線或列線上的電平發(fā)生變化,MCU 通過(guò)檢測(cè)行或列線上的電平變化可以確定哪個(gè)按鍵被按下。
圖 9-7 為一個(gè) 4 x 3 的行列結(jié)構(gòu),可以構(gòu)成 12 個(gè)鍵的鍵盤(pán)。如果使用 4 x 4 的行列結(jié)構(gòu),就能組成一個(gè) 16 鍵的鍵盤(pán)。很明顯,在按鍵數(shù)量多的場(chǎng)合,矩陣鍵盤(pán)與獨(dú)立式按鍵鍵盤(pán)相比可以節(jié)省很多的 I/O 口線。
矩陣鍵盤(pán)不僅在連接上比單獨(dú)式按鍵復(fù)雜,它的按鍵識(shí)別方法也比單獨(dú)式按鍵復(fù)雜。在矩陣鍵盤(pán)的軟件接口程序中,常使用的按鍵識(shí)別方法有行掃描法和線反轉(zhuǎn)法。這兩種方法的基本思路是采用循環(huán)查循的方法,反復(fù)查詢按鍵的狀態(tài),因此會(huì)大量占用 MCU 的時(shí)間,所以較好的方式也是采用狀態(tài)機(jī)的方法來(lái)設(shè)計(jì),盡量減少鍵盤(pán)查詢過(guò)程對(duì) MCU 的占用時(shí)間。
增加這兩句的目的是當(dāng)按鍵所在端口發(fā)生狀態(tài)改變后執(zhí)行,以提高讀鍵的效率。另外,有些場(chǎng)合是閉合按鍵執(zhí)行,而在松開(kāi)按鍵執(zhí)行時(shí)你提到的多余語(yǔ)句顯得更妙。
比如可以設(shè)計(jì)這樣的功能:
1、按下K1——執(zhí)行功能1,舉例:建立一個(gè)標(biāo)志。在定時(shí)器中斷中調(diào)整初值,輸出頻率不斷增加。
2、松開(kāi)K1——執(zhí)行功能2,舉例:清除該標(biāo)志,定時(shí)器中斷中鎖定初值。
同樣實(shí)現(xiàn)上述功能,用問(wèn)題中給出的程序,只需要掃描一遍P3判斷,2個(gè)功能實(shí)際只需各執(zhí)行1次條件語(yǔ)句。而按照您的思路,沒(méi)有這句話,那么需要主程序反復(fù)遍歷K1按鍵的按下和松開(kāi),并且還需另外設(shè)個(gè)標(biāo)志,以防止按鍵功能被重復(fù)執(zhí)行。這樣一來(lái),條件語(yǔ)句中的內(nèi)容將會(huì)反復(fù)執(zhí)行,效率降低。
當(dāng)然這個(gè)參考程序也有去抖動(dòng)的設(shè)計(jì)缺陷。比如,擴(kuò)展這兩句可以改善:
if(P3!=key_val){ i++;i%=10;if(i==0){key_val=P3;……}}
綜上,該做法可以提高讀鍵效率,更容易識(shí)別按鍵的按下和松開(kāi)時(shí)刻。
void main(void){while(1){if(P3_7==0)//判斷是否有按下,為0則按下{delay10ms();//延時(shí)10MS,去抖動(dòng)if(P3_7==0)//再次判斷,如果還為0則真的按下了。
{count++;//每按下一次就加1if(count==16)//加到16返回0{count=0;}P1=~count;//P1口把按下的次數(shù)輸出,如第一次就是11111110,第二次就是11111101:十六進(jìn)制轉(zhuǎn)成IO口的二進(jìn)制while(P3_7==0);//直到按鍵放開(kāi)才判斷下一次按鍵}}}。
聲明:本網(wǎng)站尊重并保護(hù)知識(shí)產(chǎn)權(quán),根據(jù)《信息網(wǎng)絡(luò)傳播權(quán)保護(hù)條例》,如果我們轉(zhuǎn)載的作品侵犯了您的權(quán)利,請(qǐng)?jiān)谝粋€(gè)月內(nèi)通知我們,我們會(huì)及時(shí)刪除。
蜀ICP備2020033479號(hào)-4 Copyright ? 2016 學(xué)習(xí)鳥(niǎo). 頁(yè)面生成時(shí)間:3.074秒