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

📄 hong.asm

📁 单片机典型系统设计实例精讲 第6章 红外遥控电子密码锁
💻 ASM
字号:
;**************************************************************
;*------------------ 红外遥控电子密码锁程序-------------------*
;*------------------------------------------------------------*
;*-----------------------MCS-51汇编语言----------------------*
;*------------------------------------------------------------*
;*-----------------------CPU: AT89C51-------------------------*
;*------------------------------------------------------------*
;*-----------------------程序名:MMS.asm-----------------------*
;*------------------------------------------------------------*
;*-----------------------设计人:  雷道仲----------------------*
;**************************************************************
ORG     0000H                  ;主程序
CLR     P1.7                   ;清零
MOV     R0, #00H                
CLR     P1.3                   ;关报警
CLR     P1.7                   ;P1.7清零(关锁)
CLR     P1.4                   ;关报警
MOV     R0,#00H                ;串行口初始化
MOV     52H,#02H               ;将立即数02h送52h
MOV     TMOD,#20H              ;设置T1工作为方式2
MOV     TL1,#0F4H              ;定时初始值送TL1
MOV     TH1,#0F4H              ;定时初始值送TH1
SETB    TR1                    ;启动定时器T1
MOV     SCON,#0D0H             ;定义串行口工作在方式3
MOV     PCON,#00
KEY:            JNB     P1.5,KEP1              ;选择密码57618
LJMP      KEP2 

***********************************密码57618程序
KEP1:           MOV     P2,#0FFH               ;关显示
           MOV     A,P0                   ;判断是否有键按下
           CPL     A                      ;对p0口的数据取反
           ANL     A,#0FFH                ;立即数ff与p0的数据相与
           JNZ     JP                     ;有键按下转至jp
           MOV     A, P1                  ;判断是否有键按下
           CPL     A                      ;将p1口的数据取反
                ANL     A,#07H                 ;累加器数据为零转遥控接收程序
           JZ      WAIT
           ACALL   D10MS                ;调用10秒延时
           MOV     A ,P1
           CPL     A
           ANL     A,#07H
           JZ      WAIT
 PP:           CJNE     A,  #01H,JP1
           MOV     P2,  #89H           ;显示字符”H”
          LJMP     K0P1
PP:           CJNE     A,  #02H,JP2
           MOV     P2,  #89H           ;显示字符”H”
          LJMP     K0P1
JP2:           CJNE     A,   #04H,KY
           MOV     P2,  #89H           ;显示字符”H”
JP3:            MOV     A,  P1
           ANL     A,   #07H
          CJNE     A,  #07H,JP3
          LJMP     LP1
K0P1:           MOV     A,  P1
           ANL     A,  #07H
          CJNE     A,  #07H,K0P1
          LJMP     KEP1
JP:            LCALL    D10MS
           MOV     A  ,P0
           CPL     A
           ANL     A,  #0FFH
           JZ      C6
          CJNE     A,  #01H,KEY02
           MOV     P2, #89H
          LJMP     KEY1
KEY02:         CJNE     A,  #02H,KEY03
           MOV     P2, #89
LJMP     KEY1
KEY02:         CJNE     A,  #02H,KEY03
           MOV     P2, #89H
          LJMP     KJP1
KEY03:         CJNE     A,  #04H,KEY04
           MOV     P2, #89
LJMP     KJP1
KEY04:         CJNE     A,  #08H,KEY05
           MOV     P2, #89H
          LJMP     KJP1
KEY05:         CJNE     A,  #10H,KEY06
           MOV     P2, #89H
          LJMP     KJP1
KEY06:         CJNE     A,  #08H,KEY07
           MOV     P2, #89H
          LJMP     KJP1
KEY07:         CJNE     A,  #10H,KEY08
           MOV     P2, #89H
          LJMP     KJP1
KEY08:         CJNE     A,  #10H,C6
           MOV     P2, #89H
          LJMP     KJP1
KJP1:           MOV     A,  P0
          CJNE     A,  #0FFH,KJP1
 C6:      LJMP     WAIT
  ;******************************************************************
KEY1:          LCALL    MP
          CJNE     A,  #02H,KEY03
           MOV     P2, #89H
KEY2:          LCALL    MP
          CJNE     A,  #04H,KEY02
           MOV     P2, #89H
KEY3:     LCALL    MP
          CJNE     A,  #08H,KEY02
           MOV     P2, #89H
KEY4:          LCALL    MP
          CJNE     A,  #10H,KEY02
           MOV     P2, #89H
KEY5:           MOV     A,  P0
          CJNE     A,  #0FFH,KEY5
           MOV     P2  #0FFH
           MOV     R5, #30H
KEY6:           MOV     A,  P0
           CPL     A
           ANL     A,  #0FFH
           JNZ     BB2
           MOV     A,  P1
           CPL     A
           ANL     A,  #07H
           JZ      BB1
          LCALL    D10MS
MOV     A,   P1
CPL     A
ANL     A,   #07H
JZ 
CJNE      A,   #04H,B1
MOV     P2,  #89H  
LJMP      LP2
B1:           CJNE      A,   #01H,BL1
         MOV      P2,  #89H
        LJMP      K0P1
BL1:          CJNE      A,   #02H,BB1 
         MOV      P2,  #89H
        LJMP      K0P1
BB2:          LCALL     D10MS
         MOV      A,   P0
         CPL      A
         ANL      A,   #0FFH
         JZ       BB1
        LJMP      KEY02
BB1:           MOV      R7,  #0C8H
BB4:           MOV      R6,  #0F9H
         NOP
         NOP
BB5:           JNZ      R6,  BB5
        DJNZ      R7,  BB4
        DJNZ      R5,  KEY6
        LJMP      WAIT
 *****************************************************密码81675程序
KEP2:          MOV      P2,   #0FFH            ;关显示
         MOV      A,    P0
         CPL      A
         ANL      A,    #0FFH
         JNZ      HP
         MOV      A,    P1
         CPL      A
         ANL      A,    #07H
         JZ       C9
        LCALL     D10MS
         MOV      A,    P1
         CPL      A
         ANL      A,    #07H
         JZ       C9
BB:           CJNE      A,    #01H,HP1
         MOV      P2,   #89H
        LJMP      K1P1
HP1:          CJNE      A,    #02H,HP2
         MOV      P2,   #89H
        LJMP      K1P1
HP2:          CJNE      A,    #04H,C9
         MOV      P2,   #89H
HP3:           MOV      A,    P1
         ANL      A,    #07H
        CJNE      A,    #07H,HP3
         MOV      P2,   #0FFH
        LJMP      LP1
K1P1:          MOV      A,    P1
         ANL      A,    #07H
        CJNE      A,    #07H,K1P1
 C9:          LJMP      WAIT
 HP:          LCALL     D10MS
         MOV      A,    P0
         CPL      A
         ANL      A,    #0FFH
         JZ       C9
        CJNE      A,    #10H,K0Y02
         MOV      P2,   #89H
        LJMP      K0Y1
K0Y02:        CJNE      A,    #01H,K0Y03
         MOV      P2,   #89H
LJMP      K0UP1
K0Y03:        CJNE      A,    #02H, K0Y04
MOV     P2,   #89H
               LJMP     KUP1
 K0Y04:       CJNE      A,    #04H,K0Y05
MOV     P2,   #89H
              LJMP      KUP1
K0Y05:        CJNE      A,   #08H,K0Y06
MOV     P2,  #89H
        LJMP      KUP1
K0Y06:        CJNE      A,   #20H,K0Y07
MOV     P2,  #89H
         LJMP      KUP1
K0Y07:        CJNE      A,   #40H,K0Y08
MOV     P2,  #89H
         LJMP      KUP1
K0Y08:        CJNE      A,   #80H,U2
MOV     P2,  #89H
         LJMP      KUP1
KUP1:           MOV     A,   P0
         CJNE      A,   #0FFH,KUP1
U2:           LJMP      WAIT
K0Y1:         LCALL     MP
         CJNE      A,    #08H,K0Y02
          MOV      P2,   #89H
K0Y1:         LCALL     MP
         CJNE      A,    #08H, K0Y02
          MOV      P2,   #89H    
K0Y2:         LCALL     MP
         CJNE      A,    #04H,K0Y02
           MOV      P2,   #89H
K0Y3:         LCALL     MP
         CJNE      A,    #02H,K0Y02
               MOV      P2,   #89H
K0Y4:         LCALL     MP
         CJNE      A,    #01H,K0Y03
               MOV      P2,   #89H
K0Y6:          MOV      A,    P0
         CPL      A
         ANL      A,    #0FFH
         JNZ      PP2
         MOV      A,    P1
         CPL      A
         ANL      A,    #07H
         JZ       PPL
        LCALL     D10MS
         MOV      A,    P1
         CPL      A
         ANL      A,    #07H
         JZ       PP1
        CJNE      A,    #04H,Y1
         MOV      P2,   #89H
        LJMP      LP2
Y1:           CJNE      A,    #01H,Y11
         MOV      P2,   #89H
        LJMP      K1P1
Y11:          CJNE      A,    #02H,PP1
         MOV      P2,   #89H
        LJMP      K1P1
PP2:          LCALL     D10MS
         MOV      A,    P0
         CPL      A
         ANL      A,    #0FFH
         JZ       PP1
        LJMP      K0Y02
PP1:           MOV      R7,   #0C8H
PP4:           MOV      R6,   #OF9H
         NOP
         NOP
PP5:          DJNZ      R6,   PP5
        DJNZ      R7,   PP4
        DJNZ      R5,   K0Y6
        LJMP      WAIT
    ;*******************************************************报警程序
LP1:          SETB      P1.4
         INC      R0
P019:          MOV      R3,   #05H
P020:          MOV      R7,   #0A0H
P018:         SETB      P1.3
        LCALL     P01A
         CLR      P1.3
        LCALL     P01A
        DJNZ      R7,    P018
        DJNZ      R3,    P020
         CLR      P1.3
        CJNE      R0,    #03H,P017
        LJMP      P019
P017:          CLR      P1.4
        LJMP      WAIT
;**********************************************开锁程序
LP2:          SETB      P1.7
        LCALL     T5S
         CLR      P1.7
         MOV      R0,    #00H
        LJMP      WAIT
;************************************************判断键是否释放
MP:            MOV      A,     P0
        CJNE      A,     #0FFH,  MP
         MOV      P2,    #0FFH
PM:            MOV      R5,    #30H
        LCALL     TP
               RET
         ;*********************************************判断是否有键按下
TP:            MOV      A,     P0
         CPL      A
         ANL      A,     #0FFH
         JNZ      AP
         MOV      A,     P1
         CPL      A
         ANL      A,     #07H
         JZ       TP3
        LCALL     D10MS
         MOV      A,     P1
         CPL      A
         ANL      A,     #07H
         JZ       TP3
        LCALL     D10MS
         MOV      A,     P1
         CPL      A
         ANL      A,     #07H
         JZ       TP3K
        CJNE      A,     #04H,C1
         MOV      P2,    #89H
C3:            MOV      A,      P1
         ANL      A,      #07H
        CJNE      A,      #07H,C3
         MOV      P2,     #0FFH
        LJMP      LP1
C1:           CJNE      A,      #01H,C2
         MOV      P2,     #0C0H
        LJMP      KCP1
C2:           CJNE      A,      #02H,U11
         MOV      P2,     #90HP
        LJMP      KCP1
KCP1:          MOV      A,      P1
         ANL      A,      #07H
CJNE      A,      #07H,KCP1
 U11:         LJMP      WAIT
 AP:          LCALL     D10MS
         MOV      A,      P0
         CPL      A
         ANL      A,      #0FFH
         JZ       TP3
         RET
    ;******************************************************400MS延时程序
TP3:           MOV      R7,    #0C8H
TP1:           MOV      R6,    #0F9H
         NOP
         NOP
TP2:          DJNZ      R6,    TP2
DJNZ      R7,    TP1
        DJNZ      R5,    TP           ;10S
        LJMP      WAIT
   ;**********************************************10MS延时程序
D10MS:         MOV      R7,    #05H
LOOP1:         MOV      R6,    #0F9H
         NOP
         NOP
LOOP2:        DJNZ      R6,    LOOP2
        DJNZ      R7,    LOOP1
         RET
    ;*************************************************** 延时程序
P01A:          MOV      R2,    #06H
        LCALL     DELY
         RET
DELY:         PUSH      02H
DEL2:         PUSH      02H
DEL3:         PUSH      02H
DEL4:         DJNZ      R2,    DEL4
        POP      02H
       DJNZ      R2,    DEL3
        POP      02H
       DJNZ      R2,    DEL2
        POP      02H
       DJNZ      R2,    DELY
        RET
    ;***************************************************5S延时程序
T5S:           MOV      R4,    #15H
TS1:           MOV      R3,    #64H
TS2:           MOV      R2,    #05H
TS3:           MOV      R1,    #0F9H
        NOP
        NOP
TS4:          DJNZ      R1,    TS4
DJNZ      R2,    TS3
DJNZ      R3,    TS2
DJNZ      R4,    TS1
               RET

⌨️ 快捷键说明

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