?? 0-9999記時+4x4鍵盤.txt
字號:
0-9999記時+4X4鍵盤
@@@@@
程序由于是第一次寫,有點長....
MAIN:
MOV TMOD,#01H ;以定時數器方式,開啟T0,記數500采用16位計數器
MOV TL0,#0CH
MOV TH0,#FEH
SETB TR0
MOV R1,#002H
MOV 56H,#000H
MOV 55H,#000H
MOV 47H,#001H
MOV 46H,#001H
MOV 45H,#001H
MOV 44H,#002H
MOV 43H,#00BH
MOV 42H,#00BH
MOV 41H,#00BH
MOV 40H,#009H
DJNZ 44H,LOOP
XZ1: LCALL XFH1
INC 45H
LJMP LOOP
XZ2: LCALL XFH2
INC 46H
LJMP WZ1
XZ3: LCALL XFH3
INC 47H
LJMP WZ2
WZ3:
MOV 42H,#00AH
MOV A,47H
SUBB A,#001H
JZ XZ3
WZ2:
MOV 41H,#00AH
MOV A,46H
SUBB A,#001H
JZ XZ2
WZ1:
MOV 40H,#00AH
MOV A,45H
SUBB A,#001H
JZ XZ1
LOOP:
MOV R2,#200
D3:
LCALL KEY
CJNE A,#00H,T1
DISFH:
JBC TF0,LP1
SJMP DISFH
LP1:
LCALL LP2
LCALL DIS1
LCALL DIS2
LCALL DIS3
LCALL DIS4
DJNZ R2,D3
DJNZ 40H,LOOP
DJNZ 41H,WZ1
DJNZ 42H,WZ2
DJNZ 43H,WZ3
LJMP MAIN
T1:
LCALL DIS
MOV 55H,#00H
AJMP DISFH
LJMP MAIN
XFH1:
MOV 41H,#009H
RET
XFH2:
MOV 42H,#009H
RET
XFH3:
MOV 43H,#009H
RET
DIS1:
MOV DPTR,#TAB
MOV A,#00BH
SUBB A,40H
MOVC A,@A+DPTR
MOV P2,#11110111B
MOV P0,A
MOV P0,#0FFH
MOV P2,#0FFH
RET
DIS2:
MOV DPTR,#TAB
MOV A,#00BH
SUBB A,41H
MOVC A,@A+DPTR
MOV P2,#11111011B
MOV P0,A
MOV P0,#0FFH
MOV P2,#0FFH
RET
DIS3:
MOV DPTR,#TAB
MOV A,#00BH
SUBB A,42H
MOVC A,@A+DPTR
MOV P2,#11111101B
MOV P0,A
MOV P0,#0FFH
MOV P2,#0FFH
RET
DIS4:
MOV DPTR,#TAB
MOV A,#00BH
SUBB A,43H
MOVC A,@A+DPTR
MOV P2,#11111110B
MOV P0,A
MOV P0,#0FFH
MOV P2,#0FFH
RET
KEY:
MOV P1,#00FH
MOV A,P1
CJNE A,#00FH,YJAX
MOV A,#000H
RET
YJAX:
QDH:
ORL A,#0F0H
H1: CJNE A,#11111110B,H2
MOV R0,#000H
AJMP QDL
H2: CJNE A,#11111101B,H3
MOV R0,#004H
AJMP QDL
H3: CJNE A,#11111011B,H4
MOV R0,#008H
AJMP QDL
H4: CJNE A,#11110111B,JS2
MOV R0,#00CH
LJMP QDL
QDL:
MOV P1,A
MOV A,P1
ANL A,#0F0H
L1: CJNE A,#11100000B,L2
MOV A,#000H
ADD A,R0
AJMP JG
L2: CJNE A,#11010000B,L3
MOV A,#001H
ADD A,R0
AJMP JG
L3: CJNE A,#10110000B,L4
MOV A,#002H
ADD A,R0
AJMP JG
L4: CJNE A,#01110000B,JS2
MOV A,#003H
ADD A,R0
AJMP JG
JS2: MOV A,#000H ;當不只一個鍵掃下的時候,將A清0結束
RET
JG:
INC A
MOV R0,A
MOV A,#00BH
SUBB A,R0
MOV 56H,A
MOV A,R0
XD:
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV 52H,A
MOV A,R1
CJNE A,#002H,PD ;R2值是否為2,為2則保值改0
MOV 57H,52H ;按鍵按下,保留鍵值,將R1賦予0
MOV R1,#00H
SJMP JS1
PD: MOV A,57H ;若有不同鍵按下時,將R1賦予2
CJNE A,52H,PD2
MOV A,#000H ;若為相同值則返回,且不輸出信號
SJMP JS1
PD2: MOV R1,#002H ;若R1被賦予2,則下次輸出信號
JS1:
RET ;這樣的設計目的為,一次按鍵只有一個信號輸出
DIS:
MOV A,52H
CJNE A,#C6H,XD1
MOV 49H,#04H ;功能鍵1
MOV 55H,A
AJMP SS
XD1:
CJNE A,#A1H,XD2
MOV 49H,#03H ;功能鍵2
MOV 55H,A
AJMP SS
XD2:
CJNE A,#86H,XD4
MOV 49H,#02H ;功能鍵3
MOV 55H,A
AJMP SS
XD4:
CJNE A,#8EH,XD5
MOV 49H,#01H ;功能鍵4
MOV 55H,A
AJMP SS
XD5:
CJNE A,#88H,XD6
MOV 49H,#00H ;功能鍵5
MOV 55H,A
AJMP SS
XD6:
CJNE A,#83H,TX1
MOV 49H,#FFH ;功能鍵6
MOV 55H,A
AJMP SS
TX1:
MOV A,55H
CJNE A,#00H,GS
RET
GS: ;修改數字
MOV A,49H
GS1:
CJNE A,#001H,GS2
MOV 40H,56H ;第一位
AJMP SS
GS2:
CJNE A,#002H,GS3
MOV 41H,56H ;第二位
AJMP SS
GS3:
CJNE A,#003H,GS4
MOV 42H,56H ;第三位
AJMP SS
GS4:
CJNE A,#004H,GS5
MOV 43H,56H ;第四位
AJMP SS
GS5:
AJMP SS
SS: ;選中位閃爍
MOV 51H,#0AH
MOV 48H,#0AH
XDJG:
MOV R3,#FFH
X1:
LCALL KEY ;鍵盤掃描
CJNE A,#00H,T2
X2: JBC TF0,JP3
SJMP X2
JP3:
MOV TL0,#0CH
MOV TH0,#FEH
MOV A,48H
MOV B,#02H
DIV AB
MOV 50H,B
MOV A,50H
CJNE A,#00H,TX
S0:
LCALL DIS1
LCALL DIS2
LCALL DIS3
LCALL DIS4
AJMP S5
TX: ;判斷選擇的是哪位
MOV A,49H
S11:
CJNE A,#001H,S12
AJMP S1
S12:
CJNE A,#002H,S13
AJMP S2
S13:
CJNE A,#003H,S14
AJMP S3
S14:
CJNE A,#004H,S15
AJMP S4
S15:
CJNE A,#000H,S16
AJMP S0
S16:
AJMP JS
S1:
LCALL DIS2
LCALL DIS3
LCALL DIS4
AJMP S5
S2:
LCALL DIS1
LCALL DIS3
LCALL DIS4
AJMP S5
S3:
LCALL DIS1
LCALL DIS2
LCALL DIS4
AJMP S5
S4:
LCALL DIS1
LCALL DIS2
LCALL DIS3
S5:
DJNZ R3,X1
DEC 48H
DJNZ 51H,XDJG
LJMP SS
T2:
LCALL DIS ;調用DIS
JS:
RETLP2: MOV TL0,#0CH
MOV TH0,#FEH
RET
TAB DB FFH,C0H,F9H,A4H,B0H,99H,92H,82H,F8H,80H,90H,88H,83H,C6H,A1H,86H,8EH
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -