?
1 引言
鍵盤電路是單片機(jī)應(yīng)用系統(tǒng)最常用的人機(jī)接口,往往要占用較多的I/O端口, 現(xiàn)在有些很節(jié)約I/O資源的鍵盤電路,但它在鍵盤上使用的二極管較多,或有些使用的編碼芯片。利用本文介紹的電路,可以最大限度地減少鍵盤電路對I/O端口的點(diǎn)用 和器件。本電路特別適合一些直接搭焊、或需要導(dǎo)線延長鍵盤(如密碼鎖) 其節(jié)省寶貴的延長線數(shù)量。
2 硬件原理
這里以4根I/O線為例,普通接法只能接4個(gè)鍵,本文介紹的電路是在組合接法的基礎(chǔ)上增加了4個(gè)二極管。其軟件處理使用了端口掃描檢測方法,從而使按鍵數(shù)可達(dá)到12個(gè),同時(shí)由于采用了組合邏輯來直接對端口進(jìn)行讀取,因此極大地簡經(jīng)了程序的處理過程。下圖是該電路的電路原理圖。 也可以根據(jù)此原理圖類是做3線、5線等的鍵盤。
?
3 軟件過程和程序
檢測過程:先將口1執(zhí)低電平,然后讀取口2、3、4,如有低電平則端口對應(yīng)的按鍵被按下;如都是高電平,則將口2執(zhí)低,然后讀取口1、3、4,以此類推。
程序如下:
;端口定義
K1 BIT P1.0
K2 BIT P1.1
K3 BIT P1.2
K4 BIT P1.3
;******************************************
; 鍵盤掃描
;******************************************
KEY: SETB K2 ;一行
SETB K3
SETB K4
CLR K1
JB K2,KEY1
LCALL T1MS
JB K2,KEY1
MOV KEYZ,#01H
KT1: JNB K2,KT1
LJMP KEYOUT
KEY1: JB K3,KEY2
LCALL T1MS
JB K3,KEY2
MOV KEYZ,#02H
KT2: JNB K3,KT2
LJMP KEYOUT
KEY2: JB K4,KEY3
LCALL T1MS
JB K4,KEY3
MOV KEYZ,#03H
KT3: JNB K4,KT3
LJMP KEYOUT
KEY3: SETB K1 ;二行
CLR K2
JB K1,KEY4
LCALL T1MS
JB K1,KEY4
MOV KEYZ,#04H
KT4: JNB K1,KT4
LJMP KEYOUT
KEY4: JB K3,KEY5
LCALL T1MS
JB K3,KEY5
MOV KEYZ,#05H
KT5: JNB K3,KT5
LJMP KEYOUT
KEY5: JB K4,KEY6
LCALL T1MS
JB K4,KEY6
MOV KEYZ,#06H
KT6: JNB K4,KT6
LJMP KEYOUT
KEY6: SETB K2 ;三行
CLR K3
JB K1,KEY7
LCALL T1MS
JB K1,KEY7
MOV KEYZ,#07H
KT7: JNB K1,KT7
LJMP KEYOUT
KEY7: JB K2,KEY8
LCALL T1MS
JB K2,KEY8
MOV KEYZ,#08H
KT8: JNB K2,KT8
LJMP KEYOUT
KEY8: JB K4,KEY9
LCALL T1MS
JB K4,KEY9
MOV KEYZ,#09H
KT9: JNB K4,KT9
LJMP KEYOUT
KEY9: SETB K3 ;四行
CLR K4
JB K1,KEY10
LCALL T1MS
JB K1,KEY10
MOV KEYZ,#0AH
KT10: JNB K1,KT10
LJMP KEYOUT
KEY10: JB K2,KEY11
LCALL T1MS
JB K2,KEY11
MOV KEYZ,#0BH
KT11: JNB K2,KT11
LJMP KEYOUT
KEY11: JB K3,KEY
LCALL T1MS
JB K3,KEY
MOV KEYZ,#0CH
KT12: JNB K3,KT12
KEYOUT: RET
;********************************************
; 延時(shí)
;********************************************
T1MS: MOV R4,#0FEH ;1ms延時(shí)
T1MS0: NOP
NOP
DJNZ R4,T1MS0
RET