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

📄 eletronicpasswordlock.asm

📁 电子密码锁程序
💻 ASM
字号:
;******************************************
;******************************************
;**********电子密码锁程序******************
;******************************************
;******************************************
      FLAG BIT 00H
      TIMERS EQU 6BH                           ;输入密码的位数
      TIMERS1 EQU 6AH                          ;密码错误的次数
;**************密码缓冲区***********
      PS1 EQU 69H
      PS2 EQU 68H
      PS3 EQU 67H
      PS4 EQU 66H
      PS5 EQU 65H
      PS6 EQU 64H
      PS7 EQU 63H
;**************已设密码存储区********
      AT1 EQU 62H
      AT2 EQU 61H
      AT3 EQU 60H
      AT4 EQU 5FH
      AT5 EQU 5EH
      AT6 EQU 5DH
      AT7 EQU 5CH
;**************口资源定义区**********
      SPK EQU P3.3                            ;扬声器
      SR EQU P2.2                             ;输入键
      QR EQU P2.3                             ;确认键
      L1 EQU P0.0                             ;SR指示
      L2 EQU P0.1                             ;QR指示
      L3 EQU P0.2                             ;开锁指示
      L4 EQU P0.3                             ;锁定指示
;***************主程序****************
      ORG 0000H
      AJMP MAIN
      org 0030H
      TABLE:DB 3fH,06H,5bH,4fH,66H,6dH,7dH,07H,7fH,6fH
      ORG 0050H
MAIN: LCALL INITPS                           ;初始化
      NOP
      MOV P2,#0FFH
      MOV AT1,#05H                           ;设定密码
      MOV AT2,#00H
      MOV AT3,#01H
      MOV AT4,#02H
      MOV AT5,#09H
      MOV AT6,#03H
      MOV AT7,#01H
      MOV 6CH,#00H
      MOV R1,#PS1
      LCALL DISPLAY
;*************按键扫描程序*************
CH_KEY: LCALL   DISPLAY
        LCALL KS
        JNZ LK1
        AJMP CH_KEY
  LK1:  LCALL T12MS
        ACALL KS
        JNZ LK2
        LJMP CH_KEY

  LK2:
        MOV 6DH,A
  NOKEY:
       LCALL KS
       JZ AJSB
       LJMP  NOKEY
  KS:  PUSH PSW

       NOP
       MOV A,P2
       CPL A
       ANL A,#0FFH
       NOP
       POP PSW
       RET
;************按键识别程序************
 AJSB: MOV A,6DH
       JNB  ACC.3,ABC
       CLR  L1
       LCALL T100MSD
       LCALL T100MSD
       LCALL T100MSD

       SETB  L1
       MOV  @R1,6CH
       MOV  6CH,#00H
       LCALL DISPLAY
       INC TIMERS
       MOV A,TIMERS
       CJNE A,#07H,UNEQUAL
       LJMP DYL
 UNEQUAL:
       DEC R1
       LJMP CH_KEY
ABC:   JNB ACC.2,CH_KEY
       CLR  L2
       LCALL T100MSD
       LCALL T100MSD
       LCALL T100MSD

       SETB L2
       INC 6CH
       MOV R6,6CH
       CJNE R6,#0AH,UNFULL
       MOV 6CH,#00H
UNFULL:
       LCALL DISPLAY
       LJMP CH_KEY

;************密码比较子程序*********
  DYL: PUSH PSW


       MOV TIMERS,#00H
       MOV R5,#07H
       MOV R0,#PS1
       MOV R1,#AT1
   D1: CLR C
       MOV A,@R0
       SUBB A,@R1
       JNZ WRONG                         ;密码错误
       DEC R0
       DEC R1
       DJNZ R5,D1
       NOP
       LCALL OPEN_LOCK                   ;跳转到开锁
       AJMP EXIT2
 WRONG: LCALL WRONG1

 EXIT2: NOP


        POP PSW
        RET
OPEN_LOCK: CLR L3                        ;开锁灯亮五秒
           LCALL INITPS

           LCALL DELAY5S
           SETB L3
           AJMP CH_KEY
 WRONG1: INC TIMERS1
         MOV R7,TIMERS1
         CLR C
         CJNE R7,#03H,D0
     D0: JC NEXT1
         CLR L4                          ;锁定指示灯亮
         LCALL WARN2S
         LCALL WARN2S
         LCALL WARN2S
         LCALL WARN2S
         LCALL WARN2S
         LCALL WARN2S
         LCALL WARN2S
         LCALL WARN2S
         LCALL WARN2S
         LCALL WARN2S
         LCALL CLOSE_KEY                ;锁定按键八秒
         MOV TIMERS1,#00H
         LJMP NEXT2
  NEXT1: LCALL WARN2S
         LCALL WARN2S
  NEXT2: LCALL WARN2S
         MOV TIMERS,#00H                  ;密码输入次数清零
         MOV R7,#07H
         MOV R1,#PS1
         MOV A,#00H
   INIT: MOV @R1,A
         DEC R1
         DJNZ R7,INIT
         MOV R1,#PS1
         NOP
         AJMP CH_KEY
CLOSE_KEY: MOV R2,#8
     LOOP: LCALL DELAY1S
           DJNZ R2,LOOP
           NOP
           SETB L4                        ;解锁指示(即锁键指示灯灭)
           RET
;****************报警子程序*******************
 WARN2S: PUSH PSW
         MOV R6,#20                       ;调用20次BP
   WARN: LCALL BP
         DJNZ R6,WARN
         NOP
         NOP

         POP PSW
         NOP
         RET
    BP: MOV R2,#20         ;发声子程序
   BP1: CPL SPK
        LCALL DELY500
        DJNZ R2,BP1

        NOP
        RET
DELY500: MOV R7,#250
  LOOP1: NOP
         DJNZ R7,LOOP1
         RET
;****************初始化程序******************
 INITPS: PUSH ACC                         ;初始化密码缓冲区
         PUSH PSW
         MOV TIMERS,#00H                  ;密码输入次数清零
         MOV TIMERS1,#00H                 ;密码输错次数清零
         MOV R7,#07H
         MOV R1,#PS1
         MOV A,#00H
INIT_PS: MOV @R1,A
         DEC R1
         DJNZ R7,INIT_PS
         MOV R1,#PS1
         POP PSW
         POP ACC
         NOP
         RET

DELAY1S: MOV R3,#50                       ;一秒延时
   DEL2: MOV R4,#100
   DEL1: MOV R5,#100
         DJNZ R5,$
         DJNZ R4,DEL1
         DJNZ R3,DEL2
         RET
T100MSD: MOV R3,#200                      ;100ms延时
    DL1: MOV R4,#125
    DL2: DJNZ R4,DL2
         DJNZ R3,DL1
         RET
 T12MS: MOV R7,#18H
    TM1: MOV R6,#0FFH
    TM2: DJNZ R6,TM2

         DJNZ R7,TM1
         RET
DELAY5S: MOV R7,#5
    DEF: DJNZ R7,EFG
         LJMP XYZ
    EFG: LCALL DELAY1S
         LJMP DEF
    XYZ: RET
DISPLAY:
       PUSH ACC
       PUSH PSW
       MOV DPTR,#0030H
       MOV A,6CH
       MOVC A,@A+DPTR
       MOV P1,A
       NOP
       POP PSW
       POP ACC
     RET





  END

⌨️ 快捷键说明

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