資源描述:
《片機獨立式按鍵、矩形按鍵的應(yīng)用》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、第八章常規(guī)按鍵的應(yīng)用硅谷芯微技術(shù)貢獻(xiàn)網(wǎng)址:www.threeway.cc鍵盤分編碼鍵盤和非編碼鍵盤。鍵盤上閉合鍵的識別由專用硬件編碼器實現(xiàn),并產(chǎn)生鍵編碼號或鍵值的稱為編碼鍵盤,如BCD碼鍵盤、ASCLL碼鍵盤等;而靠軟件來識別的稱為非編碼鍵盤;在單片機組成的測控系統(tǒng)及智能化儀器中,用的最多的是非編碼鍵盤。非編碼鍵盤有分為:獨立式非編碼鍵盤和行列式非編碼鍵盤(矩陣鍵盤)。無論是何種按鍵,其功能實現(xiàn)都是分為三個步驟:鍵盤的分類8.1.獨立按鍵8.1.1.獨立按鍵原理單片機中除了P0接口,其它I/O接口內(nèi)部都有上拉電阻。上圖所示P1.0-P1.2接了4個按鍵,當(dāng)沒有按下按鍵時對應(yīng)的I/O接口為高
2、電平。當(dāng)按下按鍵時,對應(yīng)管腳會變?yōu)榈碗娖健R虼酥灰獧z測到對應(yīng)管腳是否為低電平就知道此按鍵是否被按下。8.1.2.按鍵消抖當(dāng)某個按鍵被按下,由于其觸點的機械特性,會抖動約20mS,才會穩(wěn)定下來,如圖所示的波形。如果在此期間去檢測,很可能產(chǎn)生誤判,所以檢測到有鍵被按下并延時20ms避開抖動期,然后才去檢測是哪個被按下。另外手松開也有抖動,所以很有可能在剛才判斷時,有按鍵,等延時20ms之后,就沒有按鍵了。為了提高效率,應(yīng)在延時20ms后再次判斷一下,是否有鍵被按下。掃描按鍵式獨立按鍵中斷式獨立按鍵掃描式獨立按鍵,這種接法只是將每個按鍵連接在了I/O口上,在編寫程序時只需要不斷的掃描I/O口電平
3、的變化就可以了,如果I/O口有電平變化,說明有按鍵按下,則此時只需要按按鍵判別的順序進(jìn)行判斷,這種方法的缺點是,CPU要不斷的掃描I/O的電平,占用CPU的時間,較為好的方法是上圖所示的中斷方案,在這種連接中,當(dāng)有按鍵按下時,7408就會在P3.2口產(chǎn)生一個低電平,觸發(fā)中斷,所以此時,單片機不需要不斷的掃描I/O口上是否有電平的變化,只需要在產(chǎn)生中斷后進(jìn)行按鍵處理就可以了,這種方案的缺點是要多占用一個單片機的中斷,且要在硬件連接上較為復(fù)雜。ORG0000HLJMPMAINORG0030HMAIN:MOVP1,#0FFHMOVA,P1CJNEA,#0FFH,L_PRESSLJM
4、PMAINL_PRESS:LCALLDELAY20MS;消抖MOVP1,#0FFHMOVA,P1CJNEA,#0FFH,L_TUREPRESSLJMPMAINL_TUREPRESS:CJNEA,#11111110BLCALLKEY0;KEY0服務(wù)程序LJMPL_EXITCJNEA,#11111101BLCALLKEY1;KEY1服務(wù)程序LJMPL_EXIT………..CJNEA,#11111110BLCALLKEY7;KEY7服務(wù)程序L_EXIT:LJMPMAIN8.1.3.獨立按鍵流程圖與軟件實現(xiàn)8.2矩陣按鍵8.2.1.矩陣按鍵的原理在矩陣式鍵盤中,每條水平線
5、和垂直線在交叉處不直接連通,而是通過一個按鍵加以連接。這樣,一個端口(如P1口)就可以構(gòu)成4*4=16個按鍵,比之直接將端口線用于鍵盤多出了一倍,而且線數(shù)越多,區(qū)別越明顯,比如再多加一條線就可以構(gòu)成20鍵的鍵盤,而直接用端口線則只能多出一鍵(9鍵)。由此可見,在需要的鍵數(shù)比較多時,采用矩陣法來做鍵盤是合理的。矩陣式結(jié)構(gòu)的鍵盤顯然比獨立鍵盤要復(fù)雜一些。8.2.2.矩陣按鍵檢測硬件電路如上圖單片機的P1口用作鍵盤I/O口,鍵盤的行線接到P1口的低4位,鍵盤的列線接到P1口的高4位。4根行線和4根列線形成16個相交點。每個交點為一個按鍵,每個按鍵賦一個鍵值,從左到右從上到下依次為0-15。檢測當(dāng)
6、前是否有鍵被按下。檢測的方法是P1.4-P1.7輸出全“0”,P1.0-P1.3設(shè)置為1讀取P1.0-P1.3的狀態(tài),若P1.0-P1.3為全“1”,則無鍵閉合,否則有鍵閉合?;蛘邔⒘性O(shè)為輸入,行設(shè)為輸出。L_LOOP:MOVP1,#0FHMOVA,P1CJNEA,#0FH,L_PRESS;判斷是否有按鍵LJMPL_EXIT8.2.3.計算鍵值若有鍵被按下,判斷是哪一個鍵閉合。方法是對鍵盤的行線進(jìn)行掃描。然后進(jìn)行列線掃描。在列輸出行輸入時(即列P1.4-P1.7全為0,行P1.0-P1.3全為1)讀取P1.0-P1.3,若全為“1”,則表示沒有鍵閉合,否則有鍵閉合。由此得到閉合鍵的行值,然
7、后行輸出列輸入時(即列P1.4-P1.7全為1,行P1.0-P1.3全為0)讀取P1.4-P1.7,由此得到閉合鍵的列值。最后可采用計算法或查表法將閉合鍵的行值和列值轉(zhuǎn)換成所定義的鍵值。按照上面所賦的鍵值標(biāo)示,鍵值=行*4+列。如果鍵值標(biāo)示有所改變那么此公式就要相應(yīng)的發(fā)生改變。計算行:行全部輸出高電平,列全部輸出低電平,讀回數(shù)據(jù),如果P1.0-P1.3某行變?yōu)榈碗娖骄椭涝撔猩厦嬗邪存I。代碼如左下:計算列:行全部輸出低電