📄 dl050301.asm
字号:
T0 EQU 00B4H
T1 EQU 00B5H
WR EQU 00B6H
RD EQU 00B7H
INT1 EQU 00B3H
SPEEDERRTIMER EQU 1FH
SPEEDERR EQU 50H
ORG 0000H
SJMP MAIN
MOV R7,A
MOV R7,A
MOV R7,A
MOV R7,A
MOV R7,A
MOV R7,A
MOV R7,A
MOV R7,A
MOV R7,A
LJMP TIMER0
MOV R7,A
MOV R7,A
MOV R7,A
MOV R7,A
MOV R7,A
LJMP DROPOWER
MOV R7,A
MOV R7,A
MOV R7,A
MOV R7,A
MOV R7,A
LJMP TIMER1
MOV R7,A
MOV R7,A
MOV R7,A
MOV R7,A
MOV R7,A
MOV R7,A
MOV R7,A
MOV R7,A
MOV R7,A
MOV R7,A
MOV R7,A
MOV R7,A
MOV R7,A
MOV R7,A
MOV R7,A
MOV R7,A
MOV R7,A
MOV R7,A
MAIN:
;***************INITAIL VARIABLE BEGIN********************
MOV SP,#66H
CLR P2.0
CLR P2.1
CLR SPEEDERR
CLR 59H
CLR 58H
CLR 79H
CLR 69H
CLR 7FH ;7F=1,SET STATE,ELSE DEMONSTRATE
CLR 7EH ;GLEAM mark;7E=0,light,else dark.
CLR 7DH ;time>2s
CLR 7AH
CLR 78H ;KEY ALWAYS DOWN.;78=0->keyup
CLR 70H; PULLSPEED<PACKSPEED,70H=1;THEN HL3 CAN GLEAM
;NOTE:70H(PERMIT),7E(LIGHT OR DARK).
SETB 6FH ;first set,6F=1
CLR 73H
CLR 6EH
CLR 64H
SETB 71H
MOV C, P1.0
MOV 60H, C ;START
CLR RD
LCALL DELAY100MS
LCALL DELAY100MS
SETB RD
MOV A, #00H
MOV 37H, A ; ,0<37H<30,GLEAM TIME
MOV 31H, A ; LEDSHIFT 0=<31H<4
MOV 30H, A
MOV 5AH, #0FFH
MOV 50H,A ;KEY SET RESET DOWN TIME ,SUBTITUTE FOR 64H,CAUSE OF "DUIZHAN"
MOV 5DH, A ;KEY EFFECT TIME,BEEP LEN
MOV 5FH, A ;FIRST SET TIME
MOV 50H, A
MOV 51H,A ;SET OR RESET CONTRO TIME
MOV 52H,A ; OUT PULSE L
MOV 53H,A ;OUT PULSE H
;MOV 5BH,A ;STEP PER STAGE
MOV 5CH,A ;SETTIME
MOV 63H,A ;
MOV SPEEDERRTIMER,A
;**********INITIAL VARIABLE END*******************
;********************INITIAL DATA BUFFER BEGIN************
RD24WC02F:
MOV R0, #40H
MOV R2, #10H
MOV R3, #04H
LCALL RD24WC02
FBYTE012:
MOV 41H,#00H
MOV 42H,#00H
MOV 43H,#0EH
FBYTE0:
MOV A, 40H
CLR C
SUBB A, #0AH
JC RD24WC02P
MOV 40H,#00H
RD24WC02P:
MOV R0, #44H
MOV R2, #14H
MOV R3, #04H
LCALL RD24WC02
PBYTE0:
MOV A, 44H
CLR C
SUBB A, #08H
JC PBYTE1
MOV 44H, #00H
PBYTE1:
MOV A, 45H
CLR C
SUBB A, #0AH
JC PBYTE2
MOV 45H, #00H
PBYTE2:
MOV A, 46H
CLR C
SUBB A, #0AH
JC PBYTE3
MOV 46H, #00H
PBYTE3:
MOV A, 47H
CLR C
SUBB A, #0AH
JC DATAPRO
MOV 47H, #00H
DATAPRO:
LCALL DATAPROCESS
BAGCONT:
MOV R0, #48H
MOV R2, #30H
MOV R3, #08H
LCALL RD24WC02
MOV 48H, #0AH
MOV A, 49H
CLR C
SUBB A, #0AH
JC H2
MOV 49H, #00H
H2:
MOV A, 4AH
CLR C
SUBB A, #0AH
JC H1
MOV 4AH, #00H
H1:
MOV A, 4BH
CLR C
SUBB A, #0AH
JC L4
MOV 4BH, #00H
L4:
MOV A, 4CH
CLR C
SUBB A, #0AH
JC L3
MOV 4CH, #00H
L3:
MOV A, 4DH
CLR C
SUBB A, #0AH
JC L2
MOV 4DH, #00H
L2:
MOV A, 4EH
CLR C
SUBB A, #0AH
JC L1
MOV 4EH, #00H
L1:
MOV A, 4FH
CLR C
SUBB A, #0AH
JC INITIALCPU
MOV 4FH, #00H
;******************INITIAL DATA BUFFER END***********
;******************INITIAL CPU BEGIN**************
INITIALCPU:
MOV 89H, #11H
SETB EA
SETB 77H ;77H=1 STARTORCURSOR in effect(set finish)else in vain(in setting).
;AT THAT MOMENT START OR CUR MAKE NO EFFECT TO OUT DEVICE.
SETB PX1
SETB EX1
CLR IT0
SETB ET0
SETB ET1
MOV DPTR, #0034H
INC 0A2H
MOV DPTR, #0078H
INC 0A2H
MOV A, 82H
CJNE A, #78H, SEARCHCYCLE
LJMP SEARCHCYCLE
;**************INITIAL CPU END******************
;**************CYCLE BEGIN (FOREVER)**********************
SEARCHCYCLE:
MOV A,30H
CJNE A,#00H,DEMOF ;DEMONSTRATE BAG LOW
MOV R0,#4CH
SJMP DEMOLED
;IF 30H=2,DEMONSTRATE FREQUENCY
DEMOF:
CJNE A,#01H,DEMOP
MOV R0, #40H
SJMP DEMOLED
;IF 30H!=2,DEMONSTRATE PULSE
DEMOP:
CJNE A,#02H,DEMOBAGH
MOV R0,#44H
SJMP DEMOLED
DEMOBAGH:
MOV R0,#48H ;H
DEMOLED:
LCALL DEMO ;DEMONSTRATE SUBROUTINE
JB INT1,INTERTIME
SETB 64H
INTERTIME:
JNB 64H,BEEPTIME
INC 5CH
MOV A,5CH
JNZ BEEPTIME
CLR 64H
BEEPTIME:
JB RD, HANDTIME
INC 5DH ;KEY DOWN TIME AND BEEP LENGTH
MOV A, 5DH
CJNE A, #0AH, HANDTIME
MOV 5DH, #00H
SETB RD
HANDTIME:
JNB 69H,SEARCHKEY;BEEP LEN
INC 51H
MOV A,51H
CJNE A,#64H,SEARCHKEY
MOV 51H,#00H
CLR 69H
SEARCHKEY:
JB 78H, ALWAYSDOWN ;SOMEKEY IS ALWAYS DOWN->SEARCH AGAIN
JB 7DH, L026EH ;78H=0->KEYUP,7D=1->TIME(2S) IS ENOUGH
MOV A, 90H
ANL A, #0F8H
CJNE A, #0F8H,SOMEKEYDOWN
MOV 50H, #00H
SJMP SEARCHCYCLE
SOMEKEYDOWN:
INC 5FH
MOV A, 5FH
CJNE A, #0AH, TIMELESS;
MOV 5FH, #00H
MOV A, 90H
ANL A, #0F8H
CJNE A, #0F8H,TIMEENOUGH
MOV 50H,#00H
LJMP SEARCHCYCLE ; TIMEENOUGH &THIS KEY IS DOWN
TIMEENOUGH:
JNB 6FH, KEYRESET;6F=1,FIRST SET ,IF NOTFIRSTSET OR P1.6=1->
JB P1.6, KEYRESET
INC 50H
MOV A, 50H
CJNE A, #0AH, TIMELESS
MOV 50H, #00H
SJMP OTHERKEY
KEYRESET:
JB P1.7, OTHERKEY ;NOT RESET,GOTO OTHERKEY
INC 50H
MOV A, 50H
RESETTIME:
CJNE A, #0CH, TIMELESS ;TIMELESS->TIMELESS
MOV 50H, #00H
OTHERKEY:
MOV 5EH, 90H
LCALL KEYPROCESS
SETB 7DH
CLR RD
L026EH:
INC 5FH
MOV A, 5FH
CJNE A, #0AH, L0288H
MOV 5FH, #00H
CLR 7DH
SETB 78H
TIMELESS:
LJMP SEARCHCYCLE
ALWAYSDOWN:
MOV A, 90H
ANL A, #0F8H
CJNE A, #0F8H, L0288H
CLR 78H
L0288H:
LJMP SEARCHCYCLE ;RETURN TO SEARCH
;**************DEFINE KEY DOWN BEGIN********************
KEYPROCESS:
MOV A, 5EH
JB 0E0H.7, IFKEYSET
LJMP KEYRESETPRO
IFKEYSET:
JB 0E0H.6, IFKEYSEL
LJMP KEYSETPRO
IFKEYSEL:
JB 0E0H.5, IFKEYUP
LJMP KEYSELPRO
IFKEYUP:
JB 0E0H.4, IFKEYDOWN
LJMP KEYUPPRO
IFKEYDOWN:
JB 0E0H.3, OUTKEYPRO
LJMP KEYDOWNPRO
OUTKEYPRO:
RET
;************DEFINE KEY DOWN OVER *********************
;************KEY SET DOWN PROCESS BEGIN****************
KEYSETPRO:
JNB 6FH, SETSTART ;FIRST SET 6F=1
CLR 6FH
SETB 7FH ;CONTRO DISPLAY OR SET
CLR 69H
CLR TR0
CLR P2.0
CLR SPEEDERR
MOV SPEEDERRTIMER,#00H
SETB 7BH
CLR 7AH
CLR 59H
CLR 58H
CLR P2.1
CLR 77H
CLR 70H
CLR 73H
SETB RD
MOV 30H,#00H;FIRSET 30=1,PLAY PULSE
SETSTART:
MOV 31H,#01H
MOV A,30H
CJNE A,#02H,SETF;30H=0,GOTO SETF
MOV 30H,#00H
MOV 31H,#00H
SETB 6FH
SETB 77H
MOV 5AH,#0FFH
MOV R0, #44H
MOV R2, #14H
MOV R3, #04H
LCALL WR24WC02
LCALL DATAPROCESS
CLR 7FH
RET
SETF:
INC 30H
MOV A, 30H
CJNE A,#01H,SETP
;30H=1,PULSE,HL1 LIT
SJMP HL1
SETP:
CJNE A,#03H,SETF2; 30H=2,FREQUENCY
MOV 30H,#01H
CLR 73H
HL1:
MOV 5AH,#0F7H
RET
SETF2:
CJNE A,#02H,OUTSET
MOV 5AH,#7FH
MOV R0, #40H
MOV R2, #10H
MOV R3, #04H
LCALL WR24WC02
OUTSET:
RET
;***********KEY SET DOWN PROCESS END*************
;***********KEY SELECT DOWN PROCESS BEGIN***************
KEYSELPRO:
JNB 7FH, PLAYSHIFT
INC 31H
MOV A,30H
CJNE A,#01H,PSELSHIFT
MOV A,31H
CJNE A, #02H, OUTSELF
MOV 31H, #01H
OUTSELF:
RET
PSELSHIFT:
CJNE A,#02H,OUTSELP
MOV A,31H
CJNE A,#05H,OUTSELP
MOV 31H,#01H
OUTSELP:
RET
PLAYSHIFT:
CLR 69H
INC 30H
SHIFTOP:
MOV A,30H
CJNE A,#01H,SHIFTOF
ANL 5AH, #0F7H
RET
SHIFTOF:
CJNE A,#02H,OUTSEL
ORL 5AH, #0EEH
ANL 5AH,#07FH
RET
OUTSEL:
MOV 30H,#00H
ORL 5AH,#0EEH
RET
;***********KEY SELECT DOWN PROCESS END***************
;***********KEY UP PROCESS BEGIN***************
UPDISPLAY:
LJMP HDISPLAY
KEYUPPRO:
JNB 7FH, UPDISPLAY
MOV A,30H
CJNE A,#01H, ADDP
MOV A, 31H
CJNE A, #01H, ADDF2
INC 40H
MOV A, 40H
CJNE A, #0AH, OUTADDF1
MOV 40H, #00H
OUTADDF1:
RET
ADDF2:
CJNE A, #02H, OUTADDF
INC 41H
MOV A, 41H
CJNE A, #0AH,OUTADDF
MOV 41H, #00H
OUTADDF:
RET
ADDP:
CJNE A,#02H,OUTADDP
MOV A, 31H
CJNE A, #01H, ADDP2
INC 44H
MOV A, 44H
CJNE A, #08H, OUTADDP1
MOV 44H, #00H
OUTADDP1:
RET
ADDP2:
CJNE A, #02H,ADDP3
INC 45H
MOV A, 45H
CJNE A, #0AH, OUTADDP2
MOV 45H, #00H
OUTADDP2:
RET
ADDP3:
CJNE A, #03H,ADDP4
INC 46H
MOV A, 46H
CJNE A, #0AH, OUTADDP3
MOV 46H, #00H
OUTADDP3:
RET
ADDP4:
CJNE A, #04,OUTADDP
INC 47H
MOV A, 47H
CJNE A, #0AH, OUTADDP
MOV 47H, #00H
OUTADDP:
RET
HDISPLAY:
JB 79H,L046AH
JBC 69H,OUTH
MOV A,30H
CJNE A,#00H,ISH
SJMP INVERSE
ISH:
CJNE A,#03H,OUTH
INVERSE:
CPL 73H
JB 73H,TOH
MOV 30H,#00H
RET
TOH:
MOV 30H,#03H
OUTH:
RET
L046AH:
LCALL L05DFH
CLR 69H
RET
;***********KEY DOWN PROCESS BEGIN***************
INHAND:
LJMP TEST
KEYDOWNPRO:
JNB 7FH, INHAND
MOV A,30H
CJNE A ,#01H, DECP
DECF:
MOV A, 31H
CJNE A, #01H, DECF2
DEC 40H
MOV A, 40H
CJNE A, #0FFH, OUTDECF1
MOV 40H, #09H
OUTDECF1:
RET
DECF2:
CJNE A, #02H, OUTDECF
DEC 41H
MOV A, 41H
CJNE A, #0FFH,OUTDECF
MOV 41H, #09H
OUTDECF:
RET
DECP:
CJNE A,#02H,OUTDECP
MOV A, 31H
CJNE A, #01H, DECP2
DEC 44H
MOV A, 44H
CJNE A, #0FFH, OUTDECP1
MOV 44H, #07H
OUTDECP1:
RET
DECP2:
CJNE A, #02H,DECP3
DEC 45H
MOV A, 45H
CJNE A, #0FFH, OUTDECP2
MOV 45H, #09H
OUTDECP2:
RET
DECP3:
CJNE A, #03H,DECP4
DEC 46H
MOV A, 46H
CJNE A, #0FFH, OUTDECP3
MOV 46H, #09H
OUTDECP3:
RET
DECP4:
CJNE A, #04,OUTDECP
DEC 47H
MOV A, 47H
CJNE A, #0FFH, OUTDECP
MOV 47H, #09H
OUTDECP:
RET
OUT:
RET
TEST:
MOV 52H,#00H
MOV 53H,#00H
MOV A,5AH
JNB 0E0H.0,NOACTION
NOP
NOP
CLR SPEEDERR
MOV SPEEDERRTIMER,#00H
JB 70H,NOACTION
SETB 79H
CLR 7AH
SETB 77H
CLR P2.1
MOV 51H,#00H
CLR TR1
LJMP CTLOUT
NOACTION:
RET
;***********KEY DOWN PROCESS END**************
;***********KEY RESET DOWN PROCESS BEGIN***************
KEYRESETPRO:
MOV A,30H
JZ CLRCONT
CJNE A,#03H,OUTRESET
CLRCONT:
MOV A, #00H
MOV 48H, #0AH
MOV 49H, A
MOV 4AH, A
MOV 4BH, A
MOV 4CH, A
MOV 4DH, A
MOV 4EH, A
MOV 4FH, A
MOV R0, #48H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -