單片機(jī)的鍵盤接口
一、一維直讀方式
每個(gè)獨(dú)立的按鍵接到單片機(jī)的一根I/O端口引線上,如圖1。直接讀入I/O端口(MOV A,P1)便可判斷出所按下的鍵(有鍵按下對(duì)應(yīng)的P1.X=0,否則為1)。
這種方式的硬件簡(jiǎn)單,但占用的I/O引線較多,N位I/O引線只能構(gòu)成N個(gè)鍵的鍵盤,適用于按鍵較少的系統(tǒng)。
二、硬件編碼方式
將第一種方式的鍵信號(hào)先送人編碼器,再由單片機(jī)的I/O引線讀入,如圖2。這種方式克服了一維直讀方式占用接口多的缺點(diǎn),若由N位I/O引線,使用相應(yīng)的編碼器,理論上最多可構(gòu)成2N個(gè)鍵的鍵盤,但需要增加硬件編碼電路。
本文引用地址:http://www.ex-cimer.com/article/201706/353718.htm三、行列式方式
由N條I/O線組成行,M條I/O線組成列,行列引線的交點(diǎn)上設(shè)置一個(gè)按鍵,如圖3。行為輸入端口,列為輸出端口。讀鍵狀態(tài)采用掃描方式,先判斷是否有鍵按下:列線輸出全“0”,讀入列信號(hào),若全為“1”則無鍵按下,否則有鍵按下。再判斷按下的為哪個(gè)鍵:列輸出線逐位輸出“0”,讀入行輸入端口,從而判斷出按下的鍵所在的行與列,由此計(jì)算鍵值。這種方式占用的I/O引線較少,若N位I/O形成方陣,則最多可構(gòu)成N2/4個(gè)鍵的鍵盤,而且不需增加硬件電路,只是軟件相對(duì)復(fù)雜一些。這是一種最常用的鍵盤接口方式。
四、二維直讀方式
鍵盤排布依舊采用行列式方式,每個(gè)鍵有兩個(gè)觸點(diǎn),如圖4。有鍵按下,該鍵對(duì)應(yīng)的行線與列線同時(shí)變?yōu)?ldquo;0”,否則為“1”,因此鍵的狀態(tài)可以通過直接讀人I/O端口據(jù)其兩位來反映。這種方式具有獨(dú)立式和行列式方式的優(yōu)點(diǎn),但缺點(diǎn)是要求按鍵含有兩個(gè)觸點(diǎn)。該方式同行列式方式一樣,若N位I/O形成方陣,則最多可構(gòu)成N2/4個(gè)鍵的鍵盤。
五、交互方式
在這種方式中,N位I/O線既作為輸入行線又作為輸出列線,輸入與輸出交互使用,在行列每一個(gè)獨(dú)立的交點(diǎn)上設(shè)置一個(gè)按鍵,如圖5。N位I/O引線,最多可構(gòu)成N(N-1)/2個(gè)鍵的鍵盤,比行列式方式占用的I/O引線少,但這種方式要求I/O線必須是可位控的雙向或準(zhǔn)雙向I/O口。如8031的P1口,8155的PC口。鍵盤讀鍵方式與行列式方式相似,I/O端口逐位輸出“0”(其他各位送“1”),再讀入該端口,依次查 詢除送出低電平以外的其他各位。為低則有鍵按下。從讀鍵方式我們可以看到:該方式鍵值有重碼,例如:第i行、第j列有鍵按下,在此方式中第i行同時(shí)為第i列,第j行同時(shí)為第i列,也可認(rèn)為按下的鍵是第j行,第i列的從而形成重碼。
六、雙交互方式
該方式與交互方式相似,但在交互方式中鍵值有重碼,如圖6。第i行、第j列與第i行、第i列的鍵不獨(dú)立,為此在I/O引線作列線時(shí)加入二極管隔離,這樣使左下角和右下角交叉點(diǎn)不再重復(fù),除對(duì)角線上外,每個(gè)交點(diǎn)上都可設(shè)一個(gè)按鍵,從而使鍵盤的容量比交互方式增加了一倍,即:N位I/O引線,最多可構(gòu)成N(N-1)容量的鍵盤。鍵掃描程序及鍵值的計(jì)算與交互方式相同。
以上各種鍵盤接口,均使用單片機(jī)本身的并行I/O端口加以說明。若單片機(jī)I/O端口不夠使用時(shí),一般可擴(kuò)展并行I/O芯片,如:8255,8155等,軟件編程與鍵值的求法可把握上述基本原理自行設(shè)計(jì)。另外,也可選用專用的鍵盤接口芯片進(jìn)行鍵盤接口的設(shè)計(jì),如:8279。但上述幾種方式是較基本,簡(jiǎn)單亦是較常用的,可根據(jù)具體情況來選用設(shè)計(jì)自己的鍵盤接口。
評(píng)論