📄 main15.asm
字号:
MOV 35H,A
TAKEOVER1: LCALL L_DELAY2MS
DJNZ R5,TAKEOVER1
LCALL SEL8
MOV A,P1
CJNE A,35H,TAKETEST
NOKEYTA: LCALL SEL8
NOKEYT: MOV A,P1
LCALL L_PLAY5LED
CJNE A,#0FFH,NOKEYTA
MOV R5,#2H
NOKEYTB: LCALL L_DELAY2MS
DJNZ R5,NOKEYTB
LCALL SEL8
MOV A,P1
CJNE A,#0FFH,NOKEYTA
MOV A,35H
AJMP TAKE
;*************************TAKE DTAT OVER**********************
;**************************SET PASSWORD***********************
SETKEY: LCALL KEY_TEST5
CJNE A,#4H,SKTS1
AJMP START
SKTS1: CJNE A,#2H,SKTS2
AJMP STORE
SKTS2: CJNE A,#1H,SETKEY
SETKEY1: LCALL KEY_TEST1
CJNE A,NUM1,INPUTERROR1
LCALL L_KEYBEEP
LCALL KEY_TEST1
CJNE A,NUM2,INPUTERROR1
LCALL L_KEYBEEP
LCALL KEY_TEST1
CJNE A,NUM3,INPUTERROR1
LCALL L_KEYBEEP
LCALL KEY_TEST1
CJNE A,NUM4,INPUTERROR1
LCALL L_KEYBEEP
LCALL KEY_TEST1
CJNE A,NUM5,INPUTERROR1
LCALL L_KEYBEEP
LCALL KEY_TEST1
CJNE A,NUM6,INPUTERROR1
LCALL L_KEYBEEP
AJMP SETKEY2
INPUTERROR1: MOV R4,#030H
INPUTERRORAA: LCALL L_PLAYERRO
DJNZ R4, INPUTERRORAA
AJMP SETKEY
;-------------------------INPUT NEW---------------------------
SETKEY2: MOV R0,#26H ;
MOV R1,#6H ;
SETKEY3: LCALL KEY_TEST2 ; INPUT NEW PASSWORD
MOV @R0,A ;
INC R0
LCALL L_KEYBEEP ;
DJNZ R1,SETKEY3 ;
;----------------------INPUT AGAIN-----------------------------
SETKEYA1: LCALL KEY_TEST1
CJNE A,26H,INPUTERRORA1
LCALL L_KEYBEEP
LCALL KEY_TEST1
CJNE A,27H,INPUTERRORA1
LCALL L_KEYBEEP
LCALL KEY_TEST1
CJNE A,28H,INPUTERRORA1
LCALL L_KEYBEEP
LCALL KEY_TEST1
CJNE A,29H,INPUTERRORA1
LCALL L_KEYBEEP
LCALL KEY_TEST1
CJNE A,2AH,INPUTERRORA1
LCALL L_KEYBEEP
LCALL KEY_TEST1
CJNE A,2BH,INPUTERRORA1
LCALL L_KEYBEEP
AJMP SETKEYB
INPUTERRORA1: MOV R4,#030H
INPUTERRORA11: LCALL L_PLAYERRO
DJNZ R4, INPUTERRORA11
AJMP SETKEY2
;---------------------STORE PASSWORD---------------------------
SETKEYB: MOV R1,#20H
MOV R0,#26H
MOV R4,#3H
WRITESN: CLR CS
CLR SCK
MOV A,#06H
ACALL L_W_BETY
SETB CS
CLR CS
CLR SCK
MOV A,#02H
ACALL L_W_BETY
MOV A,R1
ACALL L_W_BETY
MOV R2,#2H
WRITESN1: MOV A,@R0
MOV @R1,A
ACALL L_W_BETY
INC R0
INC R1
DJNZ R2,WRITESN1
SETB CS
LCALL L_DELAY2MS
LCALL L_DELAY2MS
LCALL L_DELAY2MS
DJNZ R4,WRITESN
LCALL L_DELAY2MS
LCALL L_DELAY2MS
LCALL L_DELAY2MS
WRITESNB: CLR CS
CLR SCK
MOV A,#06H
ACALL L_W_BETY
SETB CS
CLR CS
CLR SCK
MOV A,#02H
ACALL L_W_BETY
MOV A,R1
ACALL L_W_BETY
; MOV R2,#2H
;WRITESNB1: MOV A,@R0
; MOV @R1,A
; ACALL L_W_BETY
; INC R0
; INC R1
; DJNZ R2,WRITESNB1
MOV A,#12H
ACALL L_W_BETY
MOV A,#34H
ACALL L_W_BETY
SETB CS
AJMP SETKEY
;*************************************************************
RETURN: CJNE A,#2H,RETURNA
AJMP START
RETURNA: AJMP USER2
;HHHHHHHHHHHHHHHHHHHHHH--MAIN END--HHHHHHHHHHHHHHHHHHHHHHHHHHH
;HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
;*******************L_LEDTEST********************************
L_LEDTEST:
self_check: mov b,#0 ;B寄存器赋值,作用是给A寄存器换值(A寄存器使用率太高)
mov r1,#8h ;设定循环次数
zj: mov dptr,#showtab
mov a,b
movc a,@a+dptr
mov LED1,a ;r0放字段码
mov LED2,a
mov LED3,a
mov LED4,a
mov LED5,a
mov p0,led1
lcall sel1
lcall delay
LCALL SEL8
MOV A,P1
JNB ACC.7, L_LEDTESTEND
mov p0,led2
lcall sel2
lcall delay
LCALL SEL8
MOV A,P1
JNB ACC.7, L_LEDTESTEND
mov p0,led3
lcall sel3
lcall delay
LCALL SEL8
MOV A,P1
JNB ACC.7, L_LEDTESTEND
mov p0,led4
lcall sel4
lcall delay
LCALL SEL8
MOV A,P1
JNB P1.7, L_LEDTESTEND
mov p0,led5
lcall sel5
lcall delay
LCALL SEL8
MOV A,P1
JNB P1.7, L_LEDTESTEND
inc b
djnz r1,zj
ajmp self_check
delay: mov r2,#04H
delay1: mov r3,#0FFH
delay2: mov r4,#0FFH
delay3: djnz r4,delay3
djnz r3,delay2
djnz r2,delay1
ret
showtab: db 01h,02h,04h,08h,10h,20h,40h,80h ;字段码
L_LEDTESTEND: RET
;*******************L_LEDTEST END*****************************
;HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
;******************L_BEEPTEST*********************************
L_BEEPTEST: NOP
RET
;***********************L_BEEPTEST END***********************
;HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
;***********************L_KEYTEST*****************************
L_KEYTEST: MOV LED1,#0
MOV LED2,#72H
MOV LED3,#0F2H
MOV LED4,#0DCH
MOV LED5,#0
LCALL SEL8
MOV A,P1
JNB ACC.7, L_PLAYKEYEND
JNB ACC.0, L_PLAYKEY1
JNB ACC.1, L_PLAYKEY2
JNB ACC.2, L_PLAYKEY3
JNB ACC.3, L_PLAYKEY4
AJMP L_KEYTEST
L_PLAYKEY1: MOV LED5,#0CH
LCALL L_PLAY5
LCALL L_KEYBEEP
AJMP L_KEYTEST
L_PLAYKEY2: MOV LED5,#0B6H
LCALL L_PLAY5
LCALL L_KEYBEEP
AJMP L_KEYTEST
L_PLAYKEY3: MOV LED5,#9EH
LCALL L_PLAY5
LCALL L_KEYBEEP
AJMP L_KEYTEST
L_PLAYKEY4: MOV LED5,#0CCH
LCALL L_PLAY5
LCALL L_KEYBEEP
AJMP L_KEYTEST
L_KEYBEEP: CLR P2.3
LCALL L_DELAY65MS
SETB P2.3
L_PLAYKEYEND: RET
;--------------------------------------------------------------
L_DELAY65MS:
MOV R7,#80H
L_DELAY65MS1: MOV R6,#0FFH
L_DELAY65MS2: DJNZ R6,L_DELAY65MS2
DJNZ R7,L_DELAY65MS1
RET
;**********************L_KEYTEST END **************************
;HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
;********************L_ADTEST**********************************
L_ADTEST:
;*******************初始化程序*********************
CSH: MOV LED1,#080H
MOV LED2,#080H
MOV LED3,#080H
MOV LED4,#080H
MOV LED5,#080H
KKK1: MOV IE,#81H
LCALL L_PLAY5LED
MOV IE,#0H
LCALL SEL8
MOV A,P1
JNB ACC.7, L_ADEND
LCALL SEL7
AJMP KKK1
L_ADEND: RET
;*******************采样中断子程序******************
PINT0: CLR EA
PUSH PSW
MOV R0,#ADH
AD1: CLR P2.0
CLR P2.1
MOV A,P1
SETB P2.1
JB ACC.4,AD3 ;判断输入是否溢出?OR=1.4=1溢出
ANL A,#0FH
MOV @R0,A
INC R0
CLR P2.2
MOV A,P1
SETB P2.2
SETB P2.0
MOV @R0,A
AD2: LCALL CHULI
AD4: POP PSW
SETB EA
RETI
AD3: LCALL L_KEYBEEP
AJMP AD4
CHULI: MOV A,ADH
ANL A,#0FH
MOV DPTR,#L_TAB
MOVC A,@A+DPTR
MOV LED3,A
MOV A,ADL
SWAP A
ANL A,#0FH
MOV DPTR,#L_TAB
MOVC A,@A+DPTR
MOV LED4,A
MOV A,ADL
ANL A,#0FH
MOV DPTR,#L_TAB
MOVC A,@A+DPTR
MOV LED5,A
RET
;*********************L_ADTEST END************************
;HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
;*****************WATCH DOG TEST****************
L_WDOGTEST:
;*****************DEFINE**************************************
L_W_AD EQU 2FH ;WATCH DOG ADDRESS
L_R_AD EQU 3FH ;RAM ADDRAESS
CS EQU P3.4
SCK EQU P3.5
SI EQU P3.6
SO EQU P3.7
;***************MAIN*********************************
L_KEY: ACALL KEY_TEST
CJNE A,#1H, L_KEY1
ACALL L_READ
ACALL L_W_PLAY
LCALL L_TESTKEY
JNB ACC.7,L_KEY0
AJMP L_KEY
L_KEY1:
CJNE A,#2H, L_KEY2
ACALL L_WRITE
LCALL L_TESTKEY
JNB ACC.7,L_KEY0
L_KEY2: AJMP L_KEY
L_KEY0 : RET
;***********WATCH DOG WRITE PROGRAM***************************
L_WRITE: CLR CS
MOV A,#06H
ACALL L_W_BETY
SETB CS
CLR CS
MOV A,#02H
ACALL L_W_BETY
MOV A,#L_W_AD
ACALL L_W_BETY
MOV A,#L_R_AD
ACALL L_W_BETY
SETB CS
RET
;****************END*******************************************
;************ WATCH DOG READ PROGRAM***************************
L_READ: CLR CS
MOV A, #3H
ACALL L_W_BETY
MOV A,#L_W_AD
ACALL L_W_BETY
ACALL L_R_BETY
SETB CS
RET
;******************END***************************************
;*****************ZI-PROGRAM*****************************
L_W_BETY:
MOV R7,#8H
L_W_BETY1: ;CLR SCK
RLC A
MOV SI,C
CLR SCK
SETB SCK
DJNZ R7,L_W_BETY1
RET
;*****************************
L_R_BETY: MOV R7,#8H
L_R_BETY1: SETB SCK
CLR SCK
MOV C,SO
RLC A
DJNZ R7,L_R_BETY1
RET
;*******************END********************************
;HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
;***************DELAY PROGRAM***************************
L_DELAY2MS:
MOV R7,#06H
L_DELAY2MS1: MOV R6,#0FFH
L_DELAY2MS2: DJNZ R6,L_DELAY2MS2
DJNZ R7,L_DELAY2MS1
RET
;******************END************************************
;****************PLAY PROGRAM******************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -