📄 source1.asm
字号:
ORG 0000H
LJMP START
ORG 000BH
LJMP PIT0
ORG 001BH
LJMP PIT1
ORG 0100H
START:MOV SP,#60H
MOV R0,#50H
MOV R7,#06H
ML1:MOV @R0,#00H
INC R0
DJNZ R7,ML1
MOV 30H,#06H ;初始密码6位
MOV 31H,#06H
MOV 32H,#06H
MOV 33H,#05H
MOV 34H,#02H
MOV 35H,#01H
MOV 4CH,#00H ;定时单元
MOV 4DH,#00H
MOV 4EH,#00H
MOV 4FH,#00H
CLR P1.4 ;开关控制
CLR P1.5 ;判断有效DTMF信号
SETB ET0
SETB ET1
SETB EA
MOV TMOD,#61H
MOV SCON,#00H
MOV TH1,#0FAH
MOV TL1,#0FAH
MOV TH0,#17H
MOV TL0,#0B8H
MOV 36H,#10
SETB TR1
ML0:LCALL XIANSHI
JNB P2.7,K7
JNB P2.6,K6
JNB P2.5,K5
JNB P2.4,K4
SJMP ML0
K7:LCALL DELAY1
JNB P2.7,KK7 ;打开开关1
LJMP ML0
K6:LCALL DELAY1
JNB P2.6,KK6 ;关闭开关1
LJMP ML0
K5:LCALL DELAY1
JNB P2.5,KK5 ; 打开开关2
LJMP ML0
K4:LCALL DELAY1
JNB P2.4,KK4 ; 关闭开关2
LJMP ML0
DELAY1:MOV R4,#250
II:MOV R5,#250
DJNZ R5,$
DJNZ R4,II
RET
KK7:MOV R7,#04H
MOV R0,#50H ;调用语音提示
YY:MOV @R0,#00H
INC R0
DJNZ R7,YY
CLR P2.1
SETB TR0
LCALL RING2 ;开关1已打开
LJMP ML0
KK6:SETB P2.1
CLR TR0
LCALL RING2 ;开关1已闭合
LJMP ML0
KK5:CLR P2.0
LCALL RING2 ;开关2已打开
LJMP ML0
KK4:SETB P2.0
LCALL RING2 ;开关2已闭合
LJMP ML0
PIT1:SETB P1.4 ;摘机
LCALL RING2 ;请输入密码
CLR TR1 ;停止计数
MOV R3,#03H
IN:MOV R0,#40H
MOV R2,#06H
TO2:JNB P1.5,TO2
MOV A,P1
ANL A,#0FH
MOV @R0,A
INC R0
NN:JB P1.5,NN
LCALL RING1
DJNZ R2,TO2
MOV R2,#06H ;检验密码、
MOV R0,#30H
MOV R1,#40H
CMP:MOV A,@R1
XRL A,@R0
INC R0
INC R1
JZ AAA
LJMP QQ ;密码错误
AAA:DJNZ R2,CMP
LJMP LL ;密码正确
QQ:DJNZ R3,IN1
LJMP RRET ;挂机
IN1:LCALL RING3 ;密码错误重新输入
LJMP IN
LL:LCALL RING0
PP:JNB P1.5,PP
MOV A,P1
ANL A,#0FH
RL A ;左移一位相当于乘二
MOV DPTR,#TAB1
JMP @A+DPTR
TAB1:AJMP LL
AJMP ONE ; 关闭开关1
AJMP TWO ; 打开开关1
AJMP THREE ; 关闭开关2
AJMP FOUR ; 打开开关2
AJMP FIVE ; 修改密码
AJMP SIX ; 定时
AJMP RRET ;退出
AJMP LL
AJMP LL
AJMP LL
RRET:CLR P1.4
SETB TR1
RETI
ONE:CLR P2.1 ; 开关1已关闭
MOV R7,#06H
MOV R0,#50H
XX:MOV @R0,#00H
INC R0
DJNZ R7,XX
SETB TR0
LCALL RING2
LJMP PP
TWO:SETB P2.1
CLR TR0
LCALL RING2 ; 开关1已打开
LJMP PP
THREE:CLR P2.0
LCALL RING2 ;开关2已关闭
LJMP PP
FOUR:SETB P2.0
LCALL RING2 ;开关2已打开
LJMP PP
FIVE:SETB RS1 ;当前工作寄存器第二工作区
CLR RS0
LCALL RING2
MOV R2,#06H
MOV R1,#40H
WPIN0:JNB p1.5,WPIN0 ;等待INT0中断
MOV A,P1
ANL A,#0FH
MOV @R1,A
INC R1 ;单元40到45
EEE:JB P1.5,EEE
LCALL RING1
DJNZ R2,WPIN0 ;第一次密码输入完毕
LCALL RING2 ;请再次输入密码
MOV R2,#06H
MOV R1,#46H
WPIN1:JNB P1.5,WPIN1 ;等待INT0中断
MOV A,P1
ANL A,#0FH
MOV @R1,A
INC R1
GGG:JB P1.5,GGG
LCALL RING1
DJNZ R2,WPIN1 ;第二次输入完毕
MOV R2,#06H
MOV R0,#46H
MOV R1,#40H
READ1:MOV A,@R1
XRL A,@R0
JNZ BBB
JZ CCC
BBB:LCALL RING3 ;两次输入不相付,请重新输入
LJMP FIVE
CCC:INC R0
INC R1
DJNZ R2,READ1 ;判断输入密码是否为6位,否跳转READ1
MOV R0,#40H
MOV R1,#30H
MOV R2,#06H
DDD:MOV A,@R0
MOV @R1,A
INC R0
INC R1
DJNZ R2,DDD
LCALL RING2 ;新密码已建立
LJMP PP
SIX: LCALL RING2
MOV R2,#04H ;四位包括时 分
MOV R1,#4FH
SS:JNB P1.5,SS
MOV A,P1
ANL A,#0FH
MOV 38H,A
XRL A,#0AH
JNZ SSS
MOV A,#00H
SJMP HH
SSS:MOV A,38H
HH:MOV @R1,A
DEC R1
HHH:JB P1.5,HHH
LCALL RING1
DJNZ R2,SS
LCALL RING2 ;定时成功
LJMP PP
PIT0: PUSH PSW
PUSH ACC
SETB PSW.3
MOV TH0,#17H
MOV TL0,#0B8H
MOV A,36H
DEC A
MOV 36H,A
JNZ RET0
MOV 36H,#10
MOV R0,#51H
ACALL DAAD1
MOV A,R2
XRL A,#60H
JNZ RET0
ACALL CLR0
MOV R0,#53H
ACALL DAAD1
MOV 37H,R2
MOV A,55H ;判断定时是否到
XRL A,4FH
JNZ EE
MOV A,54H ;判断定时是否到
XRL A,4EH
JNZ EE
MOV A,53H ;判断定时是否到
XRL A,4DH
JNZ EE
MOV A,52H ;判断定时是否到
XRL A,4CH
JNZ EE
SETB P2.1
CLR TR0
LCALL RING2
LJMP RET0
EE: MOV R2,37H
MOV A,R2
XRL A,#60H
JNZ RET0
ACALL CLR0
MOV R0,#55H
ACALL DAAD1
RET0:POP ACC
POP PSW
RETI
DAAD1:MOV A,@R0
DEC R0
SWAP A
ORL A,@R0
ADD A,#01H
DA A
MOV R2,A
ANL A,#0FH
MOV @R0,A
MOV A,R2
INC R0
ANL A,#0F0H
SWAP A
MOV @R0,A
RET
CLR0:CLR A
MOV @R0,A
DEC R0
MOV @R0,A
RET
XIANSHI: MOV R7,#06H
MOV R0,#55H
DL0: MOV A,@R0
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV SBUF,A
DL1:JNB TI,DL1
CLR TI
DEC R0
DJNZ R7,DL0
MOV R4,#100
LOOP: MOV R5,#30
LOP: DJNZ R5,LOP
DJNZ R4,LOOP
RET
TAB : DB 11H,0D7H,32H,92H,0D4H
DB 98H,18H,0D3H,10H,90H
RING1:MOV R6,#70 ; 嘀嘀一长声
MM:MOV R7,#70
WW:MOV R5,#50
CPL P2.2
DJNZ R5,$
DJNZ R7,WW
DJNZ R6,MM
RET
RING0:CLR P0.6
SETB P0.6
RET
RING2:MOV R3,#02 ; 嘀嘀 两声
FF:MOV R6,#20
VV:MOV R5,#70
KK:MOV R7,#20
CPL P2.2
DJNZ R7,$
DJNZ R5,KK
DJNZ R6,VV
LCALL DELAY2 ;0。5秒延时
DJNZ R3,FF
RET
DELAY2:MOV R5,#250
OO:MOV R4,#250
DJNZ R4,$
DJNZ R5,OO
RET
RING3:MOV R3,#03 ; 嘀嘀 两声
FFF:MOV R6,#20
VVV:MOV R5,#70
KKK:MOV R7,#20
CPL P2.2
DJNZ R7,$
DJNZ R5,KKK
DJNZ R6,VVV
LCALL DELAY2 ;0。5秒延时
DJNZ R3,FFF
RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -