|
;動(dòng)態(tài)按鍵掃描程序,必須使用P2口,因?yàn)镻3口有下載線
;P3.7為蜂鳴器
;P0,P1兩個(gè)端口的燈共計(jì)16個(gè),分別由16個(gè)
;按鍵控制點(diǎn)亮
;--------清端口-------------------------------------
MOV P0,#0FFH;關(guān)燈
MOV P1,#0FFH;關(guān)燈
CLR P3.7;關(guān)蜂鳴器
;---------按鈕是否按下識(shí)別--------------------------
KAI:MOV P2,#00001111B;橫坐標(biāo)加1,縱坐標(biāo)加0
MOV A,P2;將按鍵值讀回到累加器A
CJNE A,#00001111B,SAO1;判斷按鍵是否按下
AJMP KAI
;---------讀取按鍵值------------------------------------------
SAO1:MOV B,A;將外部按鍵數(shù)據(jù)存入B寄存器,橫坐標(biāo)值
MOV P2,#11110000B;將縱坐標(biāo)值傳送到P3口
MOV A,P2;讀出縱坐標(biāo)值
ORL A,B;將橫縱坐標(biāo)值相加,和存入A中
MOV 40H,A;將第一次讀取的按鍵值存入到內(nèi)存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內(nèi)存單元
;-----兩次讀取的值比較確定是否一致----------------------
BIJIAO: CJNE A,40H,KAI
AJMP BBBB;將第一次與第二次讀取的值做比較,看是否一樣
;---------將按鍵值轉(zhuǎn)換為按鍵號(hào)碼-----------------------
PANDUAN:INC R7
AJMP AAAA
BBBB:MOV R7,#00D;按鍵號(hào)碼
MOV R6,#16D;需要判斷16個(gè)按鍵
AAAA:MOV A,R7
MOV DPTR,#TAB;裝入按鍵數(shù)據(jù)表
MOVC A,@A+DPTR
CJNE A,40H,CUO
AJMP ZHIXING
CUO:DJNZ R6,PANDUAN;按鍵值判斷16次限位
AJMP KAI
;---------功能執(zhí)行-------------------------------------
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
;--------等待按鈕釋放服務(wù)程序----------------------------
DENG:MOV P2,#11110000B
MOV A,P2
CJNE A,#11110000B,DENG
LJMP KAI
;-----蜂鳴器服務(wù)程序----------------------------------------
FENG:CPL P3.7
MOV R2,#5D
SS: LCALL YAN
DJNZ R2,SS
CPL P3.7
RET
;-----延時(shí)服務(wù)程序----------------------------
YAN:MOV R0,#250D
YANA:MOV R1,#100D
DJNZ R1,$
DJNZ R0,YANA
RET
;--------按鍵數(shù)據(jù)表---------------------------
TAB:DB 7EH,0BEH,0DEH,0EEH
DB 7DH,0BDH,0DDH,0EDH
DB 7BH,0BBH,0DBH,0EBH
DB 77H,0B7H,0D7H,0E7H
END
|
|