外設(shè)鍵盤的工作原理
外設(shè)鍵盤的工作原理
有人知道外設(shè)鍵盤的工作原理嗎?沒有的話就跟小編來看看咯!以下就是學(xué)習(xí)啦小編做的整理,希望大家能喜!
外設(shè)鍵盤的簡介
鍵盤是一組按鍵的組合,它是最常用的單片機(jī)輸入設(shè)備,操作人員可以通過鍵盤輸入數(shù)據(jù)或命令,實(shí)現(xiàn)簡單的人機(jī)對(duì)話。單片機(jī)使用的鍵盤是一種常開型的開關(guān),通常鍵的兩個(gè)觸點(diǎn)處于斷開狀態(tài),按下鍵時(shí)它們才閉合。鍵盤分編碼和非編碼鍵盤,鍵盤的識(shí)別可用軟件識(shí)別也可用專用芯片識(shí)別。
MCS-51單片機(jī)擴(kuò)展鍵盤接口的方法用很多,從硬件結(jié)構(gòu)上,可通過單片機(jī)I/0接口擴(kuò)展鍵盤,也可通過擴(kuò)展I/O接口設(shè)計(jì)鍵盤,還有些用的是專用鍵盤芯片。
鍵盤的工作原理
鍵盤從結(jié)構(gòu)上分為獨(dú)立式鍵盤與矩陣式鍵盤。一般按鍵較少時(shí)采用獨(dú)立式鍵盤,按鍵較多時(shí)采用矩陣式鍵盤。
(1) 獨(dú)立式鍵盤。
在由單片機(jī)組成的測(cè)控系統(tǒng)及智能化儀器中,用的最多的是獨(dú)立式鍵盤。這種鍵盤具有硬件與軟件相對(duì)簡單的特點(diǎn),其缺點(diǎn)是按鍵數(shù)量較多時(shí),要占用大量口線。圖1是一個(gè)利用MCS-51單片機(jī)的P1口設(shè)計(jì)的非編碼鍵盤。
圖1 獨(dú)立式鍵盤
當(dāng)按鍵沒按下時(shí),CPU對(duì)應(yīng)的I/O接口由于內(nèi)部有上拉電阻,其輸入為高電平;當(dāng)某鍵被按下后,對(duì)應(yīng)的I/O接口變?yōu)榈碗娖健V灰诔绦蛑信袛郔/O接口的狀態(tài),即可知道哪個(gè)鍵處于閉合狀態(tài)。以下是非編碼鍵盤鍵處理子程序。
JNB P1.0, KEY00 ;轉(zhuǎn)按鍵1處理程序
JNB P1.1, KEY01 ;轉(zhuǎn)按鍵1處理程序
JNB P1.2, KEY02 ;轉(zhuǎn)按鍵1處理程序
JNB P1.3, KEY03 ;轉(zhuǎn)按鍵1處理程序
JNB P1.4, KEY04 ;轉(zhuǎn)按鍵1處理程序
JNB P1.5, KEY05 ;轉(zhuǎn)按鍵1處理程序
JNB P1.6, KEY06 ;轉(zhuǎn)按鍵1處理程序
JNB P1.7, KEY07 ;轉(zhuǎn)按鍵1處理程序
RET ;無鍵按下,返回
KEY00: …
RET
KEY01: …
RET
…
(2) 矩陣式鍵盤。
矩陣式鍵盤使用于按鍵數(shù)量較多的場(chǎng)合,它由行線與列線組成,按鍵位于行、列的交叉點(diǎn)上。一個(gè)3*3的行列結(jié)構(gòu)可以構(gòu)成一個(gè)有9個(gè)按鍵的鍵盤。同理,一個(gè)4*4的行列可以構(gòu)成一個(gè)16按鍵的鍵盤。很明顯,在按鍵數(shù)量較多的場(chǎng)合,與獨(dú)立式鍵盤相比,矩陣式鍵盤要節(jié)省很多I/0接口。
2.鍵盤按鍵識(shí)別方法
(1)掃描法。
下面以圖2的K2鍵按下為例,說明此鍵是如何識(shí)別出來的。
圖2 8031與鍵盤連接
掃描法有行掃描和列掃描兩種,無論采用哪種,無論采用哪種,其效果是一樣的,只是在程序中的處理方法有所區(qū)別。下面以列掃描法為例來介紹掃描法識(shí)別按鍵的方法。首先在鍵處理程序中將P1.4-P1.7依次按位變低,P1.4-P1.7在某一時(shí)刻只有一個(gè)為低。在某一位為低時(shí)讀行線,根據(jù)行線的狀態(tài)即可判斷出哪一個(gè)按鍵被按下。如2號(hào)鍵按下,當(dāng)列線P1.5為低時(shí),讀回的行線狀態(tài)中P1.0被拉低,由此可知K2鍵被按下。一般在掃描法中分兩步處理按鍵,首先是判斷有無鍵按下,如行線有一個(gè)為低,則有鍵按下。當(dāng)判斷有鍵按下時(shí),使列線依次變低,讀行線,進(jìn)而判斷出具體哪個(gè)鍵被按下。
(2)線反轉(zhuǎn)法。
掃描法是逐行或逐列掃描查詢,當(dāng)被按下的鍵處于最后一列時(shí),要經(jīng)過多次掃描才能最后獲得此按鍵所處的行列值。而線反轉(zhuǎn)法則顯的簡練,無論被按的鍵處于哪列,均可經(jīng)過兩步即能獲得此按鍵所在的行列值,仍以圖4.38為例來介紹線反轉(zhuǎn)法。
首先將行線P1.0-P1.3作為輸入線,列線P1.4-P1.7作為輸出線,并且輸出線輸出全為低電平,讀行線狀態(tài),則行線中電平為低的是按鍵所在的行。然后將列線作為輸入線,行線作為輸出線,并將輸出線輸出為低電平,讀列線狀態(tài),則列線是電平為低的是按鍵所在的列。綜合上述兩步結(jié)果,確定按鍵所在的行和列,從而識(shí)別出所按下的鍵。
假設(shè)10號(hào)鍵被按下,在第一步P1.3-P1.0全為低電平時(shí),讀P1.4-P1.7的值,則P1.5為低電平;在第二步P1.4-P1.7輸出全為低電平時(shí),讀P1.3-P1.0時(shí),P1.2為低電平。由此可判斷第3行第2列有鍵被按下,此鍵就是K10鍵。
3. 鍵盤的接口電路
設(shè)計(jì)MCS-51單片機(jī)鍵盤時(shí)可根據(jù)單片機(jī)系統(tǒng)的實(shí)際情況來靈活處理。在使用內(nèi)部有程序存儲(chǔ)器的單片機(jī)時(shí),如單片機(jī)的I/O接口夠用,可直接利用單片機(jī)的I/O接口連接鍵盤。如果I/O接口不夠用,可利用擴(kuò)展I/O接口連接鍵盤,有時(shí)也可使用專用的鍵盤接口芯片。
(1) 利用單片機(jī)的I/O接口連接鍵盤。
利用MCS-51單片機(jī)的I/O接口連接鍵盤時(shí)分兩種情況,一是當(dāng)P0、P1、P2、P3均為普通輸入/輸出時(shí),可使用任意I/0接口連接鍵盤;二是當(dāng)單片機(jī)系統(tǒng)擴(kuò)展程序存儲(chǔ)器、數(shù)據(jù)存儲(chǔ)器、I/O時(shí),由于P0、P2作為地址數(shù)據(jù)總線的使用,所以擴(kuò)展鍵盤時(shí)只能使用P1口、P3口。如圖2所示為利用MCS-51單片機(jī)的P1口設(shè)計(jì)的4*4矩陣鍵盤。
注意如果用P0口設(shè)計(jì)鍵盤,要給P0口各口線提供上拉電阻,其大小一般為2-10kn。
(2) 利用擴(kuò)展I/O接口設(shè)計(jì)鍵盤。
MCS-51單片機(jī)在總線擴(kuò)展凡是時(shí)由于P0口、P2口分別作為數(shù)據(jù)總線及地址總線,而P1口、P3口又有其他用途時(shí),擴(kuò)展鍵盤可利用擴(kuò)展的I/O接口。利用8255的PC口設(shè)計(jì)的4*4矩陣鍵盤如圖3所示,利用8255的PC口設(shè)計(jì)的編碼鍵盤,PC0-PC3為行輸入,PC4-PC7為列輸出。
圖3 8255與鍵盤連接圖
(3) 按鍵去抖。
由于通常的按鍵所用的開關(guān)是機(jī)械開關(guān),當(dāng)開關(guān)閉合、斷開時(shí)并不是馬上穩(wěn)定地接通和斷開,而是在閉合與斷開瞬間均伴隨有一連串的抖動(dòng)。
為了確保CPU對(duì)鍵的一次閉合僅做一次處理,必須要在程序或硬件上進(jìn)行防抖處理。為節(jié)省硬件,通常在單片機(jī)系統(tǒng)中,一般不采用硬件方法消除鍵的抖動(dòng),而是用軟件消抖方法。即檢測(cè)鍵閉合后延時(shí)5-10ms,讓前延抖動(dòng)消失后再一次檢測(cè)鍵的狀態(tài),如果仍保持閉合狀態(tài)電平,則確認(rèn)真正有鍵按下。當(dāng)檢測(cè)到按鍵釋放后,也要給5-10ms的延時(shí),待后延抖動(dòng)消失后才轉(zhuǎn)入該鍵處理程序。以下是具有消抖功能的鍵程序,只有按鍵按下再放開后才做一次鍵處理。
KEY_00:
JB P1.0, KEY_01 ;無鍵按下,查下一個(gè)鍵
LCALL DELAY ;延時(shí)10ms
JNB P1.0, $ ;鍵一直按下,等待
LCALL DELAY ;鍵松開,延時(shí)10ms
JB P1.0, KEY_00 ;一次按鍵完成,轉(zhuǎn)鍵盤處理程序
KEY_01: …
RET
(4) 鍵盤的編碼。
對(duì)于獨(dú)立式按鍵鍵盤,由于按鍵數(shù)目較少,可根據(jù)實(shí)際情況靈活編碼。對(duì)于矩陣式鍵盤,按鍵的位置由行號(hào)和列號(hào)唯一確定,所以分別對(duì)行號(hào)與列號(hào)進(jìn)行二進(jìn)制編碼,然后將兩值合成一個(gè)字節(jié),高4位是行號(hào),低4位是列號(hào)。如10號(hào)鍵被按下時(shí),列號(hào)讀回的值為1011,行號(hào)讀回的值為1101,此兩值合成為11011011=0DBH,據(jù)此值可轉(zhuǎn)到10號(hào)鍵處理程序。這種方式雖然簡單,但其離散性很大,在讀程序時(shí)必須要結(jié)合硬件電路。也可將讀回的鍵值按一定的方式運(yùn)算后,算出對(duì)應(yīng)的鍵值進(jìn)行散轉(zhuǎn),但這樣會(huì)增加程序的工作量,因而大多數(shù)單片機(jī)系統(tǒng)在鍵盤處理程序中只根據(jù)讀回的鍵值進(jìn)行散轉(zhuǎn)。
(5) 常用的專用鍵盤芯片。
無論是利用CPU的I/O接口擴(kuò)展鍵盤,還是利用擴(kuò)展I/O芯片擴(kuò)展鍵盤,由于均是用普通I/O接口擴(kuò)展,如果要在單片機(jī)的程序中設(shè)計(jì)專用的鍵盤程序,特別是矩陣式鍵盤,其程序相對(duì)復(fù)雜一些。因而在較復(fù)雜一些的單片機(jī)系統(tǒng)中可選用專用的鍵盤芯片設(shè)計(jì)鍵盤?,F(xiàn)常用的鍵盤擴(kuò)展芯片有Intel8279、CH451、ICM7218、PCF8574等。
(6) 單片機(jī)對(duì)鍵盤的控制方式。
在單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)中,為了節(jié)省硬件,無論是采用獨(dú)立式鍵盤還是采用矩陣式鍵盤,單片機(jī)對(duì)鍵盤的控制有以下3種方式。
i 程序控制掃描方式。
這種方式只有單片機(jī)空閑時(shí),才可調(diào)用鍵盤掃描子程序,查詢鍵盤的輸 入狀態(tài)是否改變。
ii 定時(shí)掃描方式。
單片機(jī)對(duì)鍵盤的掃描也可采用定時(shí)掃描方式,即單片機(jī)每隔一定的時(shí)間對(duì)鍵盤掃描一次。在這種方式中,通常采用單片機(jī)內(nèi)部的定時(shí)器,產(chǎn)生10ms的定時(shí)中斷,CPU響應(yīng)定時(shí)中斷請(qǐng)求后對(duì)鍵盤進(jìn)行掃描,以查詢鍵盤是否有鍵按下。
iii 中斷掃描方式。
雖然采用程序查詢與定時(shí)對(duì)鍵盤的掃描方式時(shí)的程序編制簡單,但一個(gè)單片機(jī)系統(tǒng)在運(yùn)行時(shí)的大多數(shù)時(shí)間里鍵盤基本是不工作的。為了進(jìn)一步提高CPU的工作效率,可采用中斷方式。當(dāng)鍵盤有鍵動(dòng)作時(shí)產(chǎn)生中斷,CPU響應(yīng)鍵盤中斷后,執(zhí)行鍵盤中斷程序,判別鍵盤按下鍵的鍵號(hào),并做相應(yīng)處理。