;動態按鍵掃描程序,必須使用P2口,因為P3口有下載線
;P3.7為蜂鳴器
;P0,P1兩個端口的燈共計16個,分別由16個
;按鍵控制點亮
;--------清端口-------------------------------------
MOV P0,#0FFH;關燈
MOV P1,#0FFH;關燈
CLR P3.7;關蜂鳴器
;---------按鈕是否按下識別--------------------------
KAI:MOV P2,#00001111B;橫坐標加1,縱坐標加0
MOV A,P2;將按鍵值讀回到累加器A
CJNE A,#00001111B,SAO1;判斷按鍵是否按下
AJMP KAI
;---------讀取按鍵值------------------------------------------
SAO1:MOV B,A;將外部按鍵數據存入B寄存器,橫坐標值
MOV P2,#11110000B;將縱坐標值傳送到P3口
MOV A,P2;讀出縱坐標值
ORL A,B;將橫縱坐標值相加,和存入A中
MOV 40H,A;將第一次讀取的按鍵值存入到內存40H單元
;---------------------------------------------------------------
LCALL YAN
;--------二次按鍵值讀取-----------------------------------------
SAO2:MOV P2,#00001111B
MOV A,P2
CJNE A,#00001111B,SAO3
AJMP KAI
;-------------------------------------------------------
SAO3:MOV B,A
MOV P2,#11110000B
MOV A,P2
ORL A,B;再次讀取的按鍵值相加
MOV 41H,A;將第二次讀出的按鍵值存入41H內存單元
;-----兩次讀取的值比較確定是否一致----------------------
BIJIAO: CJNE A,40H,KAI
AJMP BBBB;將第一次與第二次讀取的值做比較,看是否一樣
;---------將按鍵值轉換為按鍵號碼-----------------------
PANDUAN:INC R7
AJMP AAAA
BBBB:MOV R7,#00D;按鍵號碼
MOV R6,#16D;需要判斷16個按鍵
AAAA:MOV A,R7
MOV DPTR,#TAB;裝入按鍵數據表
MOVC A,@A+DPTR
CJNE A,40H,CUO
AJMP ZHIXING
CUO:DJNZ R6,PANDUAN;按鍵值判斷16次限位
AJMP KAI
;---------功能執行-------------------------------------
ZHIXING:CJNE R7,#1D,JIAN2
CPL P0.0
LCALL FENG
LJMP DENG
JIAN2:CJNE R7,#2D,JIAN3
CPL P0.1
LCALL FENG
LJMP DENG
JIAN3:CJNE R7,#3D,JIAN4
CPL P0.2
LCALL FENG
LJMP DENG
JIAN4:CJNE R7,#4D,JIAN5
CPL P0.3
LCALL FENG
LJMP DENG
JIAN5:CJNE R7,#5D,JIAN6
CPL P0.4
LCALL FENG
LJMP DENG
JIAN6:CJNE R7,#6D,JIAN7
CPL P0.5
LCALL FENG
LJMP DENG
JIAN7:CJNE R7,#7D,JIAN8
CPL P0.6
LCALL FENG
LJMP DENG
JIAN8:CJNE R7,#8D,JIAN9
CPL P0.7
LCALL FENG
LJMP DENG
JIAN9:CJNE R7,#9D,JIAN10
CPL P1.0
LCALL FENG
LJMP DENG
JIAN10:CJNE R7,#10D,JIAN11
CPL P1.1
LCALL FENG
LJMP DENG
JIAN11:CJNE R7,#11D,JIAN12
CPL P1.2
LCALL FENG
LJMP DENG
JIAN12:CJNE R7,#12D,JIAN13
CPL P1.3
LCALL FENG
LJMP DENG
JIAN13:CJNE R7,#13D,JIAN14
CPL P1.4
LCALL FENG
LJMP DENG
JIAN14:CJNE R7,#14D,JIAN15
CPL P1.5
LCALL FENG
LJMP DENG
JIAN15:CJNE R7,#15D,JIAN16
CPL P1.6
LCALL FENG
LJMP DENG
JIAN16: CPL P1.7
LCALL FENG
LJMP DENG
;--------等待按鈕釋放服務程序----------------------------
DENG:MOV P2,#11110000B
MOV A,P2
CJNE A,#11110000B,DENG
LJMP KAI
;-----蜂鳴器服務程序----------------------------------------
FENG:CPL P3.7
MOV R2,#5D
SS: LCALL YAN
DJNZ R2,SS
CPL P3.7
RET
;-----延時服務程序----------------------------
YAN:MOV R0,#250D
YANA:MOV R1,#100D
DJNZ R1,$
DJNZ R0,YANA
RET
;--------按鍵數據表---------------------------
TAB:DB 7EH,0BEH,0DEH,0EEH
DB 7DH,0BDH,0DDH,0EDH
DB 7BH,0BBH,0DBH,0EBH
DB 77H,0B7H,0D7H,0E7H
END
|