?? zmd.asm
字號:
SI_1 EQU 33H
SI_2 EQU 34H
SI_3 EQU 35H
SI_4 EQU 36H
;定義鍵狀態寄存位
keystate bit 7fh;有鍵時為1,無鍵時為0
ORG 0000H
ajmp main
org 0030h
MAIN: mov sp,#60H
clr keystate
main1:
LJMP KEY
; jnb keystate,mainend
mainend:ajmp main
;------------------------------------------------------KEY------------------------------------------
;鍵盤子程序:
KEY: lcall keytest
jnb keystate,kkk
ajmp eee
kkk: ajmp keyend
eee:
mov a,#01h
mov dptr,#8fffh
movx @dptr,a
movx a,@dptr
anl a,#0fh
key0: cjne a,#01h,key1
LJMP DISPLAY1
key1: cjne a,#02h,key2
LJMP DISPLAY2
key2: cjne a,#04h,key3
LJMP DISPLAY3
key3: cjne a,#08h,keynext1
LJMP DISPLAY4
keynext1:mov a,#02h
mov dptr,#8fffh
movx @dptr,a
movx a,@dptr
anl a,#0fh
key4: cjne a,#01h,key5
LJMP DISPLAY5
key5: cjne a,#02h,key6
LJMP DISPLAY6
key6: cjne a,#04h,key7
LJMP DISPLAY7
key7: cjne a,#08h,keynext2
LJMP DISPLAY8
keynext2:mov a,#04h
mov dptr,#8fffh
movx @dptr,a
movx a,@dptr
anl a,#0fh
key8: cjne a,#01h,key9
LJMP DISPLAY9
key9: cjne a,#02h,keyA
LJMP DISPLAYA
keyA: cjne a,#04h,keyB
LJMP DISPLAYB
keyB: cjne a,#08h,keynext3
LJMP DISPLAYC
keynext3:mov a,#08h
mov dptr,#8fffh
movx @dptr,a
movx a,@dptr
anl a,#0fh
keyC: cjne a,#01h,keyD
LJMP DISPLAYD
keyD: cjne a,#02h,keyE
LJMP DISPLAYE
keyE: cjne a,#04h,keyF
LJMP DISPLAYF
keyF: cjne a,#08h,keynext4
LJMP DISPLAYG
keynext4:
clr keystate
keyend: LJMP DISPLAY0
ret
;鍵盤測試程序,返回結果在keystate中
keytest: mov a,#0ffh
mov dptr,#8fffh
movx @dptr,a
movx a,@dptr
anl a,#0fh
jz keytest0
setb keystate
jmp keytest1
keytest0: clr keystate
keytest1: ret
;--------------------------------------------------------------KEY結束---------------------------------------------
;-------------------------------------------------------NOKEY時的花樣------------------------------------------
;--------------------DISPLAY0----------------------
SHOW:
MOV R2,#150
SH01: MOV R4,#0
SH00: MOV A,R5
ADD A,R4
MOV DPTR,#TAB0
MOVC A,@A+DPTR
MOV DPTR,#8FFFH
MOVX @DPTR,A
MOV A,R4
MOV DPTR,#DATA0
MOVC A,@A+DPTR
MOV DPTR,#9FFFH
MOVX @DPTR,A
CALL DELAY
INC R4
CJNE R4,#8,SH00
DJNZ R2,SH01
CLR keystate
CALL keytest
JB keystate,SHOWEND
RET
SHOWEND:LJMP MAIN
DISPLAY0:
MOV R5,#0
D00:CALL SHOW
INC R5
CJNE R5,#7,D00
CLR keystate
CALL keytest
JB keystate,DISPLAY0END
; CALL DELAY0
D01:CALL SHOW
INC R5
CJNE R5,#15,D01
CLR keystate
CALL keytest
JB keystate,DISPLAY0END
JMP DISPLAY0
DISPLAY0END: LJMP MAIN
;--------------------------------------------------
TAB0:
DB 0,0,0,0,0,0,0
DB 01H,02H,04H,08H,10H,20H,40H,80H
DB 0,0,0,0,0,0,0
DATA0:
DB 0FH,80H,3FH,38H,38H,79H,76H,39H
;---------------------------------------------------------------------------------------------------------
;-------------------------------------------------------按01鍵時的花樣------------------------------------------
;--------------------DISPLAY1----------------------
DISPLAY1:
MOV SI_2,#29H ;#29H,控制TAB表中的移位
D12: MOV SI_1,#50 ;#50,控制刷新次數,即停留在沒一狀態的時間
D11: MOV SI_3,#08 ;#08控制每次顯示的位數
D10: MOV A,SI_2
ADD A,SI_3
MOV DPTR,#TAB1
MOVC A,@A+DPTR
MOV DPTR,#8FFFH
MOVX @DPTR,A
MOV A,SI_2
ADD A,SI_3
MOV DPTR,#DATA1
MOVC A,@A+DPTR
MOV R0,A
MOV DPTR,#9FFFH
MOVX @DPTR,A
LCALL DELAY
DJNZ SI_3,D10
DJNZ SI_1,D11
CALL keytest
JB keystate,DISPLAY1END
DJNZ SI_2,D12
;RET
JMP DISPLAY1
DISPLAY1END: LJMP MAIN
;--------------------------------------------------
TAB1:
DB 00H,00H,00H,00H
DB 00H,00H,00H,00H
DB 80H,80H,80H,80H
DB 40H,40H,40H,40H
DB 20H,20H,20H,20H
DB 10H,10H,10H,10H
DB 08H,08H,08H,08H
DB 04H,04H,04H,04H
DB 02H,02H,02H,02H
DB 01H,01H,01H,01H
DB 00H,00H,00H,00H
DATA1:
DB 00H,00H,00H,00H
DB 00H,00H,00H,00H
DB 10H,40H,04H,80H
DB 10H,40H,04H,80H
DB 10H,40H,04H,80H
DB 10H,40H,04H,80H
DB 10H,40H,04H,80H
DB 10H,40H,04H,80H
DB 10H,40H,04H,80H
DB 10H,40H,04H,80H
DB 00H,00H,00H,00H
;---------------------------------------------------------------------------------------------------------
;-------------------------------------------------------按02鍵時的花樣------------------------------------------
;--------------------DISPLAY2----------------------
SHOW2:
MOV R2,#150
SH21: MOV R4,#0
SH20: MOV A,R5
ADD A,R4
MOV DPTR,#TAB0
MOVC A,@A+DPTR
MOV DPTR,#8FFFH
MOVX @DPTR,A
MOV A,R4
MOV DPTR,#DATA2
MOVC A,@A+DPTR
MOV DPTR,#9FFFH
MOVX @DPTR,A
CALL DELAY
INC R4
CJNE R4,#8,SH20
DJNZ R2,SH21
CLR keystate
CALL keytest
JB keystate,SHOW2END
RET
SHOW2END:LJMP MAIN
DISPLAY2:
MOV R5,#0
D20:CALL SHOW2
INC R5
CJNE R5,#7,D20
CLR keystate
CALL keytest
JB keystate,DISPLAY2END
D21:CALL SHOW2
INC R5
CJNE R5,#15,D21
CLR keystate
CALL keytest
JB keystate,DISPLAY2END
JMP DISPLAY2
DISPLAY2END: LJMP MAIN
;--------------------------------------------------
DATA2:
DB 7DH,4FH,4FH,07H,6DH,3FH,4FH,3FH
;---------------------------------------------------------------------------------------------------------
;-------------------------------------------------------按03鍵時的花樣------------------------------------------
;--------------------DISPLAY1----------------------
DISPLAY3:
MOV SI_2,#120 ;#29H,控制TAB表中的移位
D32: MOV SI_1,#50 ;#50,控制刷新次數,即停留在沒一狀態的時間
D31: MOV SI_3,#08 ;#08控制每次顯示的位數
D30: MOV A,SI_2
ADD A,SI_3
MOV DPTR,#TAB3
MOVC A,@A+DPTR
MOV DPTR,#8FFFH
MOVX @DPTR,A
MOV A,SI_2
ADD A,SI_3
MOV DPTR,#DATA3
MOVC A,@A+DPTR
MOV R0,A
MOV DPTR,#9FFFH
MOVX @DPTR,A
LCALL DELAY
DJNZ SI_3,D30
DJNZ SI_1,D31
CALL keytest
JB keystate,DISPLAY3END
DJNZ SI_2,D32
;RET
JMP DISPLAY3
DISPLAY3END: LJMP MAIN
;--------------------------------------------------
TAB3:
DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H
DB 80H,80H,80H,80H,80H,80H
DB 40H,40H,40H,40H,40H,40H
DB 20H,20H,20H,20H,20H,20H
DB 10H,10H,10H,10H,10H,10H
DB 08H,08H,08H,08H,08H,08H
DB 04H,04H,04H,04H,04H,04H
DB 02H,02H,02H,02H,02H,02H
DB 01H,01H,01H,01H,01H,01H
DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H
DB 01H,01H,01H,01H,01H,01H
DB 02H,02H,02H,02H,02H,02H
DB 04H,04H,04H,04H,04H,04H
DB 08H,08H,08H,08H,08H,08H
DB 10H,10H,10H,10H,10H,10H
DB 20H,20H,20H,20H,20H,20H
DB 40H,40H,40H,40H,40H,40H
DB 80H,80H,80H,80H,80H,80H
DB 00H,00H,00H,00H,00H,00H,00H
DATA3:
DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H
DB 10H,20H,01H,02H,04H,80H
DB 10H,20H,01H,02H,04H,80H
DB 10H,20H,01H,02H,04H,80H
DB 10H,20H,01H,02H,04H,80H
DB 10H,20H,01H,02H,04H,80H
DB 10H,20H,01H,02H,04H,80H
DB 10H,20H,01H,02H,04H,80H
DB 10H,20H,01H,02H,04H,80H
DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H
DB 80H,04H,02H,01H,20H,10H
DB 80H,04H,02H,01H,20H,10H
DB 80H,04H,02H,01H,20H,10H
DB 80H,04H,02H,01H,20H,10H
DB 80H,04H,02H,01H,20H,10H
DB 80H,04H,02H,01H,20H,10H
DB 80H,04H,02H,01H,20H,10H
DB 80H,04H,02H,01H,20H,10H
DB 00H,00H,00H,00H,00H,00H,00H
;---------------------------------------------------------------------------------------------------------
;-------------------------------------------------------按04鍵時的花樣------------------------------------------
;--------------------DISPLAY4----------------------
DISPLAY4:
MOV SI_2,#19 ;#29H,控制TAB表中的移位
D42: MOV SI_1,#100 ;#50,控制刷新次數,即停留在沒一狀態的時間
D41: MOV SI_3,#03 ;#08控制每次顯示的位數
D40: MOV A,SI_2
ADD A,SI_3
MOV DPTR,#TAB4
MOVC A,@A+DPTR
MOV DPTR,#8FFFH
MOVX @DPTR,A
MOV A,SI_2
ADD A,SI_3
MOV DPTR,#DATA4
MOVC A,@A+DPTR
MOV R0,A
MOV DPTR,#9FFFH
MOVX @DPTR,A
LCALL DELAY2
DJNZ SI_3,D40
DJNZ SI_1,D41
CALL keytest
JB keystate,DISPLAY4END
DJNZ SI_2,D42
;RET
JMP DISPLAY4
DISPLAY4END: LJMP MAIN
;--------------------------------------------------
TAB4: DB 40H,80H,80H,80H,80H,40H,20H,10H,08H,04H,02H,01H,01H,01H,01H,02H,04H,08H,10H,20H,40H,80H,80H
DATA4:DB 48H,48H,50H,60H,41H,41H,41H,41H,41H,41H,41H,41H,42H,44H,48H,48H,48H,48H,48H,48H,48H,48H,50H
;---------------------------------------------------------------------------------------------------------
;-------------------------------------------------------按05鍵時的花樣------------------------------------------
;--------------------DISPLAY5----------------------
DISPLAY5:
MOV R3,#01H
D50: MOV A,R3
MOV DPTR,#8FFFH
MOVX @DPTR,A
MOV DPTR,#9FFFH
MOV A,#01H
MOVX @DPTR,A
LCALL DELAY0
CLR keystate
CALL keytest
JB keystate,DISPLAY5END
MOV A,R3
MOV DPTR,#8FFFH
MOVX @DPTR,A
MOV DPTR,#9FFFH
MOV A,#40H
MOVX @DPTR,A
LCALL DELAY0
CLR keystate
CALL keytest
JB keystate,DISPLAY5END
MOV A,R3
MOV DPTR,#8FFFH
MOVX @DPTR,A
MOV DPTR,#9FFFH
MOV A,#08H
MOVX @DPTR,A
LCALL DELAY0
MOV A,R3
JB ACC.7,DEND5
CLR keystate
CALL keytest
JB keystate,DISPLAY5END
MOV A,R3
RL A
MOV R3,A
AJMP D50
DEND5:
JMP DISPLAY5
DISPLAY5END: LJMP MAIN
;---------------------------------------------------------------------------------------------------------
;-------------------------------------------------------按06鍵時的花樣------------------------------------------
;--------------------DISPLAY6----------------------
DISPLAY6:
MOV R3,#80H
D60: MOV A,R3
MOV DPTR,#8FFFH
MOVX @DPTR,A
MOV DPTR,#9FFFH
MOV A,#63H
MOVX @DPTR,A
LCALL DELAY0
CLR keystate
CALL keytest
JB keystate,DISPLAY6END
MOV A,R3
MOV DPTR,#8FFFH
MOVX @DPTR,A
MOV DPTR,#9FFFH
MOV A,#5CH
MOVX @DPTR,A
LCALL DELAY0
MOV A,R3
JB ACC.0,DEND6
CLR keystate
CALL keytest
JB keystate,DISPLAY6END
MOV A,R3
RR A
MOV R3,A
AJMP D60
DEND6:
JMP DISPLAY6
DISPLAY6END: LJMP MAIN
;---------------------------------------------------------------------------------------------------------
;-------------------------------------------------------按07鍵時的花樣------------------------------------------
;--------------------DISPLAY7----------------------
DISPLAY7:
MOV R3,#80H
MOV R0,#30H
MOV @R0,#00H
D70A:
MOV A,R3
MOV DPTR,#8FFFH
MOVX @DPTR,A
MOV A,@R0
MOV DPTR,#DATA7
MOVC A,@A+DPTR
MOV DPTR,#9FFFH
MOVX @DPTR,A
LCALL DELAY0
MOV A,R3
JB ACC.0,D70B
CLR keystate
CALL keytest
JB keystate,DISPLAY7END
MOV A,R3
RR A
MOV R3,A
MOV A,@R0
INC A
INC R0
MOV @R0,A
AJMP D70A
D70B:
MOV A,R3
MOV DPTR,#8FFFH
MOVX @DPTR,A
MOV A,@R0
MOV DPTR,#DATA7
MOVC A,@A+DPTR
MOV DPTR,#9FFFH
MOVX @DPTR,A
LCALL DELAY0
MOV A,R3
JB ACC.7,DEND7
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -