51單片機教程:單片機鍵盤接口程序設(shè)計
DELAY:
MOV R7,#100
D1: MOV R6,#100
DJNZ R6,$
DJNZ R7,D1
RET
;----------------------------------------延時程序,鍵盤處理中調(diào)用
KEYPROC:
MOV A,B ;從B寄存器中獲取鍵值
JB ACC.2,KeyStart ;分析鍵的代碼,某位被按下,則該位為1(因為在鍵盤程序中已取反)
JB ACC.3,KeyOver
JB ACC.4,KeyUp
JB ACC.5,KeyDown
AJMP KEY_RET
KeyStart:
SETB StartEnd ;第一個鍵按下后的處理
AJMP KEY_RET
KeyOver:
CLR StartEnd ;第二個鍵按下后的處理
AJMP KEY_RET
KeyUp: SETB UpDown ;第三個鍵按下后的處理
AJMP KEY_RET
KeyDown:
CLR UpDown ;第四個鍵按下后的處理
KEY_RET:RET
KEY:
CLR F0 ;清F0,表示無鍵按下。
ORL P3,#00111100B ;將P3口的接有鍵的四位置1
MOV A,P3 ;取P3的值
ORL A,#11000011B ;將其余4位置1
CPL A ;取反
JZ K_RET ;如果為0則一定無鍵按下
ACALL DELAY ;不然延時去鍵抖
ORL P3,#00111100B
MOV A,P3
ORL A,#11000011B
CPL A
JZ K_RET
MOV B,A ;確實有鍵按下,將鍵值存入B中
SETB F0 ;設(shè)置有鍵按下的標志
K_RET:
ORL P3,#00111100B ;此處循環(huán)等待鍵的釋放
MOV A,P3
ORL A,#11000011B
CPL A
JZ K_RET1 ;直到讀取的數(shù)據(jù)取反后為0說明鍵釋放了,才從鍵盤處理程序中返回
AJMP K_RET
K_RET1:
RET
D500MS: ;流水燈的延遲時間
PUSH PSW
SETB RS0
MOV R7,#200
D51: MOV R6,#250
D52: NOP
NOP
NOP
NOP
DJNZ R6,D52
DJNZ R7,D51
POP PSW
RET
DIY機械鍵盤相關(guān)社區(qū):機械鍵盤DIY
評論