1.png (39.06 KB, 下載次數(shù): 33)
下載附件
2022-5-15 19:35 上傳
2.png (38.4 KB, 下載次數(shù): 29)
下載附件
2022-5-15 19:35 上傳
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN: LCALL KEY_IN
MOV P1,A
LCALL DEL ; 延時去抖
AJMP MAIN
;======================================================================
; == == ==判斷有無按鍵,無按鍵直接返回 ===========
KEY_IN: MOV P2,#0FH ;置列線為低電平,讀行線狀態(tài)(低四位,無按鍵則全為1)
MOV A,P2 ;讀取中
ANL A,#0FH ;屏蔽高四位
MOV B,A
MOV P2,#0F0H ;置行線為低電平,讀列線狀態(tài)(低四位,無按鍵則全為1)
MOV A,P2
ANL A,#0F0H ;屏蔽低四位
ORL A,B ;高低四位重新組合
CJNE A,#0FFH,KEYSCAN
AJMP MAIN
;================================================================================
;//========= 鍵盤掃描程序 //================================
KEYSCAN:
MOV R1,#0 ;初始化列地址
MOV R3,#01111111B ;初始化掃描碼
LOOP: MOV A,R3
RL A
MOV R3,A ;保留掃描碼
MOV P2,A ;送掃描碼
MOV A,P2 ;讀鍵盤
ORL A,#0FH ;屏蔽低四位
CJNE A,#0FFH,NEXT31 ;A不等于FFH,說明該列有按鍵按下
INC R1 ;行地址加1,掃描下一行
CJNE R1,#4,LOOP ;行地址不等于4,繼續(xù)掃描下一行
SJMP EXTI ;沒有按鍵,返回
;================// //============================
NEXT31: JB ACC.4,NEXT32
MOV R2,#0 ;第1列有按鍵
SJMP NEXT5
NEXT32: JB ACC.5,NEXT33
MOV R2,#1 ;第2列有按鍵
SJMP NEXT5
NEXT33: JB ACC.6,NEXT34
MOV R2,#2 ;第3列有按鍵
SJMP NEXT5
NEXT34:
MOV R2,#3 ;第4列有按鍵
NEXT5: MOV A,R1 ;計算按鍵地址
RL A
RL A ;行地址乘4
ADD A,R2 ;加列地址
MOV DPTR,#KEYTAB
MOVC A,@A+DPTR
EXTI: MOV P2,#0FFH ;置鍵盤接口為高電平
RET
;===========// 延時子程序,0.1S延時 //====================
DEL: MOV R7,#1
DEL1: MOV R6,#200
DEL2: MOV R5,#248
HERE: DJNZ R5,HERE
DJNZ R6,DEL2
DJNZ R7,DEL1
RET
;==========//按鍵名稱碼,共陰數(shù)碼管//============================
KEYTAB: DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H
DB 7FH, 6FH, 77H, 7CH, 39H, 5EH, 79H, 71H
;====================================================================
END |