⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tt226.asm

📁 单片机智能控制
💻 ASM
📖 第 1 页 / 共 5 页
字号:
         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 + -