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

📄 sunliang2.asm

📁 电子报警器源程序,包含键盘程序,动态扫描
💻 ASM
字号:
        ORG   0000H
        LJMP  START
        ORG   0003H
        LJMP  SERVE0
        ORG   000BH
        LJMP  TIME
        ORG   0013H
        LJMP  SERVE1
        ORG   0200H
START:  MOV   SP,#08H
        MOV   IE,#83H
        MOV   IP,#80H
        MOV   TMOD,#01H
        MOV   R4,#1EH
        MOV   R5,#14H
        MOV   TH0,#0FEH
        MOV   TL0,#0CH
        MOV   P1,#00H
        MOV   P3,#0FFH
        MOV   2FH,#00H
        MOV   2EH,#00H
        MOV   44H,#00H
        MOV   45H,#00H
        MOV   46H,#00H
        MOV   47H,#00H
        MOV   50H,#64H
        MOV   51H,#14H
        MOV   52H,#1EH
        MOV   53H,#03H
        MOV   54H,#10H
        MOV   55H,#10H
        MOV   57H,#04H
        SETB  TR0                   ;启动密码计时
WAIT:   MOV   A,P3                  ;查询是否遥控开锁
        RLC   A
        RLC   A
        RLC   A
        JNC   XUNZ0
        MOV   P3,#0FFH
WAIT1:  JB    7FH,BJ
        MOV   P1,#0FH               ;查询是否按动键盘
        MOV   A,P1
        CJNE  A,#0FH,WAIT2
        LJMP  WAIT
WAIT2:  LCALL DELAY
        MOV   P1,#0FH
        MOV   A,P1
        CJNE  A,#0FH,MIMA1
        LJMP  WAIT
XUNZ0:  LJMP  XUN

        ORG   02A0H
MIMA1:  LCALL JP
        LCALL JPCL
        JNB   7EH,MIMA2
        LCALL JPS        
MIMA2:  LCALL DISUP
        JB    7FH,BJ
        JB    72H,XUNZ1
        MOV   A,P3                  ;查询是否遥控开锁
        RRC   A
        RRC   A
        RRC   A
        JNC   XUNZ1
        MOV   P3,#0FFH
        LJMP  MIMA1
BJ:     NOP                         ;报警
        LJMP  BJ
XUNZ1:  LJMP  XUN

        ORG   0300H
GMIMA:  LCALL JP                    ;修改密码
        LCALL JPCL
        JNB   7EH,GMIMA2
        LCALL JPS
GMIMA2: LCALL DISUP
        JB    72H,XUNZ2
        LJMP  GMIMA
XUNZ2:  LJMP  XUN

        ORG   0380H
XUN:    CLR   TR0                   ;已开锁,关闭密码计时
        SETB  EX1
        MOV   A,4AH                 ;处理电量数据
        MOV   B,#0AH
        MOV   48H,A
        MOV   49H,B
        LCALL DISUPS
        SETB  P1.7                  ;启动AD转换
        NOP
        CLR   P1.7
XUN1:   NOP                         ;等待转换结束
        LJMP  XUN1

        ORG   0500H
SERVE0: PUSH  PSW
        PUSH  A
        PUSH  B
        CLR   TR0                   ;修改密码,关闭密码计时
        SETB  70H                   ;标志位
        POP   DPH
        POP   DPL
        MOV   DPTR,#0300H
        PUSH  DPL
        PUSH  DPH
        POP   B
        POP   A
        POP   PSW
        RETI

        ORG   0540H
TIME:   PUSH  PSW
        PUSH  A
        PUSH  B
        JB    7FH,TIME1             ;判断使用状态
        DJNZ  50H,TIMEO             ;密码输入30秒计时
        MOV   50H,#64H
        DJNZ  51H,TIMEO
        MOV   51H,#14H
        DJNZ  52H,TIMEO
        SETB  7FH
        LJMP  TIMEO
TIME1:  CPL   P2.7                  ;警报脉冲
TIMEO:  MOV   TH0,#0FEH
        MOV   TL0,#0CH
        POP   B
        POP   A
        POP   PSW
        RETI

        ORG   0580H
SERVE1: PUSH  PSW                   ;AD转换信号
        PUSH  A
        PUSH  B
        MOV   A,P0
        MOV   4AH,A
        POP   DPH
        POP   DPL
        MOV   DPTR,#0380H
        PUSH  DPL
        PUSH  DPH
        POP   B
        POP   A
        POP   PSW
        RETI

        ORG   1000H
JP:     CLR   C                     ;扫描键盘
        MOV   54H,#10H              ;初始化当前数据单元
JP1:    MOV   P1,#03FH
        MOV   A,P1
        LCALL SAOM1
        JC    JPO
JP2:    MOV   P1,#05FH
        MOV   A,P1
        LCALL SAOM2
        JC    JPO
JP3:    MOV   P1,#06FH
        MOV   A,P1
        LCALL SAOM3
        JC    JPO
JPO:    RET

SAOM1:  CJNE  A,#037H,SAOM11         ;扫描键盘第一行
        MOV   54H,#0BH
        SETB  C
        LJMP  SAOM1O
SAOM11: CJNE  A,#03BH,SAOM12
        MOV   54H,#03H
        SETB  C
        LJMP  SAOM1O
SAOM12: CJNE  A,#03DH,SAOM13
        MOV   54H,#02H
        SETB  C
        LJMP  SAOM1O
SAOM13: CJNE  A,#03EH,SAOM1O
        MOV   54H,#01H
        SETB  C
        LJMP  SAOM1O
SAOM1O: RET
SAOM2:  CJNE  A,#057H,SAOM21         ;扫描键盘第二行
        MOV   54H,#0AH
        SETB  C
        LJMP  SAOM2O
SAOM21: CJNE  A,#05BH,SAOM22
        MOV   54H,#06H
        SETB  C
        LJMP  SAOM2O
SAOM22: CJNE  A,#05DH,SAOM23
        MOV   54H,#05H
        SETB  C
        LJMP  SAOM2O
SAOM23: CJNE  A,#05EH,SAOM2O
        MOV   54H,#04H
        SETB  C
        LJMP  SAOM2O
SAOM2O: RET
SAOM3:  CJNE  A,#067H,SAOM31         ;扫描键盘第三行
        MOV   54H,#00H
        SETB  C
        LJMP  SAOM3O
SAOM31: CJNE  A,#06BH,SAOM32
        MOV   54H,#09H
        SETB  C
        LJMP  SAOM3O
SAOM32: CJNE  A,#06DH,SAOM33
        MOV   54H,#08H
        SETB  C
        LJMP  SAOM3O
SAOM33: CJNE  A,#06EH,SAOM3O
        MOV   54H,#07H
        SETB  C
        LJMP  SAOM3O
SAOM3O: RET

JPCL:   XCH   A,55H                  ;处理数据,查看备用数据单元所存的数据是否已改变(初试数据为10H)
        CJNE  A,#10H,JPCL1           ;若已改变,指针跳往JPCL1继续查看
        MOV   A,54H                  ;若未改变,将当前数据单元所存数据送入备用数据单元
        CLR   71H                    ;并清理数据相同记录次数,然后跳出
        LJMP  JPCLE
JPCL1:  CJNE  A,54H,JPCL2            ;查看备用数据单元与当前数据单元所存数据是否相同
        SETB  71H                    ;是则记录数据相同次数,否则指针跳往JPCL2继续查看
        LJMP  JPCLE
JPCL2:  JB    71H,JPCL3              ;查看是否已有数据相同次数
        MOV   A,#10H                 ;没有则说明上次数据改变是由抖动引起的
        LJMP  JPCLE
JPCL3:  XCH   A,54H                  ;查看当前数据单元所存数据是否为初始数值
        CJNE  A,#10H,JPCL4           ;不是则说明当前数据改变是由抖动引起
        XCH   A,54H                  ;是则说明一次按键活动结束,应记录数据
        MOV   56H,A
        MOV   A,#10H
        SETB  7EH
        LJMP  JPCLE
JPCL4:  XCH   A,54H
JPCLE:  XCH   A,55H
        RET

JPS:    MOV   A,56H                  ;再次处理数据
        CJNE  A,#10H,JPS1            ;检查是否为错误数据
        LJMP  JPSE
JPS1:   CJNE  A,#0AH,JPS2            ;清零键
        MOV   44H,#00H
        MOV   45H,#00H
        MOV   46H,#00H
        MOV   47H,#00H
        MOV   57H,#04H
        LJMP  JPSE
JPS2:   CJNE  A,#0BH,JPS3            ;确认键
        JB    70H,JPS21              ;判断当前状态
        MOV   A,44H                  ;密码验证状态
        CJNE  A,40H,BJZ
        MOV   A,45H
        CJNE  A,41H,BJZ
        MOV   A,46H
        CJNE  A,42H,BJZ
        MOV   A,47H
        CJNE  A,43H,BJZ
        SETB  72H
        LJMP  JPSE
JPS21:  MOV   40H,44H                ;修改密码状态
        MOV   41H,45H
        MOV   42H,46H
        MOV   43H,47H
        CLR   70H
        SETB  72H
        LJMP  JPSE
BJZ:    MOV   A,53H                  ;密码错误输入计数(3次)
        CJNE  A,#00H,BJZ1
        SETB  7FH
        LJMP  JPSE
BJZ1:   DEC   53H
        LJMP  JPSE
JPS3:   MOV   A,57H                  ;数字键
        CJNE  A,#00H,JPS31           ;只许输入四位密码
        LJMP  JPSE
JPS31:  MOV   44H,45H
        MOV   45H,46H
        MOV   46H,47H
        MOV   47H,56H
        MOV   56H,#00H
        DEC   57H
JPSE:   CLR   7EH
        RET

DISUP:  MOV   DPTR,#TAB            ;显示子程序1,密码显示用(4位)
        MOV   A,44H
        MOVC  A,@A+DPTR
        MOV   P2,A
        CLR   P3.0
        LCALL DELAY
        SETB  P3.0
        MOV   DPTR,#TAB
        MOV   A,45H
        MOVC  A,@A+DPTR
        MOV   P2,A
        CLR   P3.1
        LCALL DELAY
        SETB  P3.1
        MOV   A,46H
        MOVC  A,@A+DPTR
        MOV   P2,A
        CLR   P3.6
        LCALL DELAY
        SETB  P3.6
        MOV   A,47H
        MOVC  A,@A+DPTR
        MOV   P2,A
        CLR   P3.7
        LCALL DELAY
        SETB  P3.7
        RET

DISUPS: MOV   A,48H                ;显示子程序2,电量显示用(2位)
        MOVC  A,@A+DPTR
        MOV   P2,A
        CLR   P3.6
        LCALL DELAY
        SETB  P3.6
        MOV   A,49H
        MOVC  A,@A+DPTR
        MOV   P2,A
        CLR   P3.7
        LCALL DELAY
        SETB  P3.7
        RET

DELE:   MOV   4EH,#4               ;延时程序
LOOP1:  MOV   4FH,#200
LOOP2:  NOP
        NOP
        NOP
        DJNZ  4FH,LOOP2
        DJNZ  4EH,LOOP1
        RET

DELAY:  LCALL DELE
        LCALL DELE
        RET

TAB:    DB    3FH,06H,5BH,4FH,66H
        DB    6DH,7DH,07H,7FH,6FH
        END



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -