📄 tt226.asm
字号:
ORG 0000H
AJMP START
ORG 000BH
LJMP EXT0
ORG 0010H
START: CLR RS1
CLR RS0 ;主程序采用第一组工作寄存器组
SETB P3.7 ;保证电话机挂机,555停止工作
CLR P0.5 ;停止定时
SETB P0.6
SETB P0.7
MOV 3EH,#10
MOV A,#09H
SSHO: MOV P2,#00H
LCALL BNHJ
LCALL DIS
MOV P2,#0FFH
LCALL DIS
DEC A
DJNZ 3EH,SSHO
CLR P0.4 ;上电自动启动密码
MOV P1, #0FFH ;所有外设停止工作
MOV 13H,#00H ;累计按下遥控器上“#”的次数
MOV 14H,#00H ;存放修改密码的标志
MOV 0EH,#0FFH
MOV 0FH,#00H
MOV 12H,#08H ;采用第4组工作寄存器组的标志
MOV 15H,#00H
MOV 16H,#00H
MOV 1AH,#00H ;累计输入密码的位数
MOV 1BH,#00H ;第5、6位新密码显示暂存
MOV 1CH,#00H ;第3、4位新密码显示暂存
MOV 1DH,#00H ;第1、2位新密码显示暂存
MOV 1EH,#00H
MOV 1FH,#4
MOV 26H,#00H
MOV 29H,#00H
MOV 60H,#00H ;存放进入遥控的标志
MOV 61H,#0FFH
MOV 62H,#00H ;存放累计振铃响的次数
MOV 37H,#00H
MOV 69H,#0FFH ;存放通过密码后输入的控制设备的代号
MOV 63H,#00H
MOV 64H,#55H
MOV 65H,#00H ;存放通过密码后的标志
MOV 66H,#03H ;存放输错密码的次数
MOV 68H,#6
MOV 72H,#00H
MOV 73H,#00H
MOV 74H,#00H
MOV 75H,#33H ;存放是否启动定时的标志
MOV 76H,#66H ;存放启动密码检测的标志
MOV 0AH,#06H ;原始密码位数为6位
MOV 38H,0AH ;比较用户密码的次数
MOV R1,#9AH
MOV @R1,#00H
MOV 30H,#0FFH
MOV 31H,#0FFH
MOV 32H,#0FFH
MOV 33H,#0FFH
MOV 34H,#0FFH
MOV 35H,#0FFH ;清除遥控输入密码
MOV 3DH,#00H
MOV 20H,#0FFH
MOV 21H,#0FFH
MOV 22H,#0FFH
MOV 23H,#0FFH
MOV 24H,#0FFH
MOV 25H,#0FFH ;清除密码
MOV 26H,#00H
MOV 27H,#00H
MOV 2AH,#01H
MOV 2BH,#02H
MOV 2CH,#03H
MOV 2DH,#04H
MOV 2EH,#05H
MOV 2FH,#06H ;6位用户密码
MOV 3AH,#20 ;20次50ms为1秒
MOV SP,#77H ;设置堆栈指针
MOV R3,#00H ;秒显示暂存
MOV R4,#00H ;分显示暂存
MOV R5,#00H ;时显示暂存
MOV 0BH,#10H ;定时次数显示暂存
MOV 0CH,#00H ;分定时显示暂存
MOV 0DH,#00H ;时定时显示暂存
MOV 6DH,#0F1H ;日显示暂存
MOV 6EH,#0F1H ;月显示暂存
MOV 6FH,#1FH ;星期显示暂存
MOV 67H,#5AH ;进入显示日期标志
MOV R1,#0EDH ;存放修改密码的标志
MOV @R1,#00H
INC R1
MOV @R1,#00H
MOV 02H,#10
MOV A,#00H
MOV 3BH,#8
MOV R1,#40H
BK0: MOV @R1,A
INC R1
INC R1
DJNZ 3BH,BK0
MOV 3BH,#8
MOV R1,#50H
BK1: MOV @R1,A
INC R1
INC R1
DJNZ 3BH,BK1
MOV 3BH,#8
MOV R1,#0A0H
BK2: MOV @R1,A
INC R1
INC R1
DJNZ 3BH,BK2
MOV 3BH,#8
MOV R1,#0B0H
BK3: MOV @R1,A
INC R1
INC R1
DJNZ 3BH,BK3
MOV 3BH,#8
MOV R1,#0C0H
BK4: MOV @R1,A
INC R1
INC R1
DJNZ 3BH,BK4
MOV 3BH,#8
MOV R1,#0D0H
BK5: MOV @R1,A
INC R1
INC R1
DJNZ 3BH,BK5
MOV A,#06H
MOV 3BH,#8
MOV R1,#41H
BK6: MOV @R1,A
INC R1
INC R1
DJNZ 3BH,BK6
MOV 3BH,#8
MOV R1,#0A1H
BK7: MOV @R1,A
INC R1
INC R1
DJNZ 3BH,BK7
MOV 3BH,#8
MOV R1,#0C1H
BK8: MOV @R1,A
INC R1
INC R1
DJNZ 3BH,BK8
MOV A,#12H
MOV 3BH,#8
MOV R1,#51H
BK9: MOV @R1,A
INC R1
INC R1
DJNZ 3BH,BK9
MOV 3BH,#8
MOV R1,#0B1H
BK10: MOV @R1,A
INC R1
INC R1
DJNZ 3BH,BK10
MOV 3BH,#8
MOV R1,#0D1H
BK11: MOV @R1,A
INC R1
INC R1
DJNZ 3BH,BK11 ;预设定时开始时间和结束时间
MOV A,#00H
MOV 3BH,#16
MOV R1,#80H
BK12: MOV @R1,A
INC R1
DJNZ 3BH,BK12 ;开始全部屏蔽定时
MOV A,#55H
MOV 3BH,#8
MOV R1,#91H
BK13: MOV @R1,A
INC R1
DJNZ 3BH,BK13
NOP
NOP
MOV TMOD,#01H
MOV TH0,#3CH
MOV TL0,#0B0H
MOV 1FH,#4 ;0.2ms循环次数
SETB TR0
MOV IE, #82H ;开放定时器T0中断
MOV 3BH,#15
CXSM: LCALL XSHI
NOP
NOP
NOP
NOP
MOV A,1EH
CJNE A,#0EEH,MYDH ;判断是否已启动电话遥控
MOV A,#0DEH
CJNE A,6AH,WQY ;判断目前是否处于调整定时时间状态,如果是则屏蔽电话遥控
NOP
NOP
AJMP MYDH
WQY: MOV A,14H
CJNE A,#0EAH,PUR ;如处于修改密码状态则屏蔽电话遥控
NOP
NOP
LJMP MYDH
PUR: MOV A,#0BFH
CJNE A,70H,HUYU ;判断目前是否处于单独启动/停止定时状态,如果是则屏蔽电话遥控
NOP
NOP
LJMP MYDH
HUYU: SETB P3.5
JB P3.5,MYDH ;判断是否有电话振铃信号
NOP
NOP
VHY: LCALL XSHI
SETB P3.5
JNB P3.5,VHY
MOV 63H,#9FH
MOV 28H,#6
MOV A,62H
INC A
MOV 62H,A
CJNE A,#08H,CXSM
DIANHUA: MOV 10H,#20H ;存放输入密码的首地址
MOV 62H,#00H
MOV 63H,#00H
NOP
NOP
LJMP DHCX ;转到电话控制程序
MYDH: MOV A,#0DEH
CJNE A,6AH,WRP ;判断目前是否处于调整定时时间状态,如果是则屏蔽遥控程序
NOP
NOP
AJMP DTS
WRP: MOV A,#0BFH
CJNE A,70H,KGU ;判断目前是否处于单独启动/停止定时状态,如果是则屏蔽遥控程序
NOP
NOP
LJMP DTS
KGU: SETB P3.6
JB P3.6,DTS
LCALL DIR
JB P3.6,DTS
MOV 16H,#7AH
NOP
NOP
LJMP YKSR ;转到遥控程序
DTS: MOV A,16H
CJNE A,#7AH,DYB
AJMP JFV
DYB: MOV A,14H
CJNE A,#0EAH,FCG ;如处于修改密码状态则屏蔽键盘
JFV: NOP
NOP
LJMP CXSM
FCG: MOV A,76H
CJNE A,#66H,NNY ;如处于启动密码状态则屏蔽键盘
NOP
NOP
LJMP CXSM
NNY: MOV P2,#00H
SETB P0.6
SETB P0.7
JNB P0.6,LP1
JNB P0.7,LP1 ;查询键盘是否有键按下
LCALL DIR
NOP
NOP
LJMP CXSM
LP1: LCALL DIR
MOV P2,#00H
SETB P0.6
SETB P0.7
JNB P0.6,LP2
JNB P0.7,LP2 ;为了提高可靠性再查询一次键盘是否有键按下
LCALL DIR
NOP
NOP
LJMP CXSM
LP2: MOV 3CH,#5
MOV P2,#0FEH ;指向第1列
SETB P0.6
SETB P0.7
JB P0.6,XIA1 ;判断是否是AN1(控制1#)按下
MOV A,#0DEH
CJNE A,6AH,QF1
MOV 02H,#10
MOV R3,#11H
NOP
NOP
LJMP DS0
QF1: MOV A,#0BFH
CJNE A,70H,QF11
MOV 02H,#10
MOV R3,#01H
NOP
NOP
LJMP DS2
QF11: CPL P1.0
NOP
NOP
LJMP DDBG ;转去等待键释放
XIA1: JB P0.7,XIA2 ;判断是否是AN9(控制2#)按下
MOV A,#0DEH
CJNE A,6AH,QF2
MOV 02H,#10
MOV R3,#21H
NOP
NOP
LJMP DS0
QF2: MOV A,#0BFH
CJNE A,70H,QF22
MOV 02H,#10
MOV R3,#02H
NOP
NOP
LJMP DS2
QF22: CPL P1.1
NOP
NOP
LJMP DDBG ;转去等待键释放
XIA2: MOV P2,#0FDH ;指向第2列
SETB P0.6
SETB P0.7
JB P0.6,XIA3 ;判断是否是AN2(控制3#)按下
MOV A,#0DEH
CJNE A,6AH,QF3
MOV 02H,#10
MOV R3,#31H
NOP
NOP
LJMP DS0
QF3: MOV A,#0BFH
CJNE A,70H,QF33
MOV 02H,#10
MOV R3,#03H
NOP
NOP
LJMP DS2
QF33: CPL P1.2
NOP
NOP
LJMP DDBG ;转去等待键释放
XIA3: JB P0.7,XIA4 ;判断是否是AN10(控制4#)按下
MOV A,#0DEH
CJNE A,6AH,QF4
MOV 02H,#10
MOV R3,#41H
NOP
NOP
LJMP DS0
QF4: MOV A,#0BFH
CJNE A,70H,QF44
MOV 02H,#10
MOV R3,#04H
NOP
NOP
LJMP DS2
QF44: CPL P1.3
NOP
NOP
LJMP DDBG ;转去等待键释放
XIA4: MOV P2,#0FBH ;指向第3列
SETB P0.6
SETB P0.7
JB P0.6,XIA5 ;判断是否是AN3(控制5#)按下
MOV A,#0DEH
CJNE A,6AH,QF5
MOV 02H,#10
MOV R3,#51H
NOP
NOP
LJMP DS0
QF5: MOV A,#0BFH
CJNE A,70H,QF55
MOV 02H,#10
MOV R3,#05H
NOP
NOP
LJMP DS2
QF55: CPL P1.4
NOP
NOP
LJMP DDBG ;转去等待键释放
XIA5: JB P0.7,XIA6 ;判断是否是AN11(控制6#)按下
MOV A,#0DEH
CJNE A,6AH,QF6
MOV 02H,#10
MOV R3,#61H
NOP
NOP
LJMP DS0
QF6: MOV A,#0BFH
CJNE A,70H,QF66
MOV 02H,#10
MOV R3,#06H
NOP
NOP
LJMP DS2
QF66: CPL P1.5
NOP
NOP
LJMP DDBG ;转去等待键释放
XIA6: MOV P2,#0F7H ;指向第4列
SETB P0.6
SETB P0.7
JB P0.6,XIA7 ;判断是否是AN4(控制7#)按下
MOV A,#0DEH
CJNE A,6AH,QF7
MOV 02H,#10
MOV R3,#71H
NOP
NOP
LJMP DS0
QF7: MOV A,#0BFH
CJNE A,70H,QF77
MOV 02H,#10
MOV R3,#07H
NOP
NOP
LJMP DS2
QF77: CPL P1.6
NOP
NOP
LJMP DDBG ;转去等待键释放
XIA7: JB P0.7,XIA8 ;判断是否是AN12(控制8#)按下
MOV A,#0DEH
CJNE A,6AH,QF8
MOV 02H,#10
MOV R3,#81H
DS0: MOV 3BH,#15
NOP
NOP
LJMP DYC1 ;转到显示定时时间
QF8: MOV A,#0BFH
CJNE A,70H,QF88
MOV 02H,#10
MOV R3,#08H
DS2: MOV 3BH,#15
NOP
NOP
LJMP DS3
QF88: CPL P1.7
NOP
NOP
LJMP DDBG ;转去等待键释放
XIA8: MOV P2,#0EFH ;指向第5列
SETB P0.6
SETB P0.7
JB P0.6,XIA9 ;判断是否是AN5(调整时间和日期)按下
MOV A,#0DEH
CJNE A,6AH,CNP
NOP
NOP
LJMP DDBG
CNP: MOV A,#0BFH
CJNE A,70H,CNP1
NOP
NOP
LJMP DDBG
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -