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

📄 lock.asm

📁 实现集密码显示,语音报警和加密解密等功能于一身的防试探型密码锁!
💻 ASM
📖 第 1 页 / 共 3 页
字号:
             MOV   PS_OK,#01H
             LJMP  W00
             ;;;;;;;;;更改密码
    CHA_PS:
             MOV   A,MODIFY_F
             JB    ACC.1,CHA_M
             LCALL CHPS_U     ;;; 修用户密码
             LCALL DISP_CLR
             LCALL DISP_CHOK  ;显示修改成功
             MOV   R3,#40H
   CHU_DEL:
             LCALL DELAY1
             DJNZ  R3,CHU_DEL
             MOV   MODE_FLAG,#00H
             MOV   IN_TIME,#00H
             MOV   MODIFY_F,#00H
             MOV   PS_OK,#00H
             MOV   PS_ALL,#00H
             LCALL DISP_CLR
             LCALL DISP_MODE
             LJMP  W00
    CHA_M:
             LCALL CHPS_M   ;修管理密码
             LCALL DISP_CLR
             LCALL DISP_CHOK  ;显示修改成功
             MOV   R3,#40H
    CHM_DEL:
             LCALL DELAY1
             DJNZ  R3,CHM_DEL
             MOV   MODE_FLAG,#00H
             MOV   IN_TIME,#00H
             MOV   MODIFY_F,#00H
             MOV   PS_OK,#00H
             MOV   PS_ALL,#00H
             LCALL DISP_CLR
             LCALL DISP_MODE
             LJMP  W00      ;等键抬起
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;按下解锁键
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 NO_ENT1:
             MOV  A,VAL
             CJNE A,#0CH,NO_M    ;不是管理键转至NO_M
             MOV  A,IN_TIME
             CJNE A,#03H,NOT_M
             MOV  MODE_FLAG,#01H
             LCALL DISP_CLR
             LCALL DISP_MODE
   NOT_M:
             LJMP W00   ; 等键抬起
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;按下修改用户密码键
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
NO_M:
            MOV  A,VAL
            CJNE A,#0DH,NO_USER    ;不是修改用户密码的键
            MOV  A,IN_TIME
            CJNE A,#03H,GO_TEXT1
            LCALL DISP_START
            LJMP W00   ;解锁时无效
   GO_TEXT1:
            LCALL DISP_CLR
            LCALL DISP_TEXT1       ;提示输入管理密码
            MOV   MODIFY_F,#01H      ;修改用户密码
            MOV   PS_OK,#00H
            MOV   PS_ALL,#00H
            LJMP  W00
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;按下修改管理密码键
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
NO_USER:
           MOV  A,VAL
           CJNE A,#0EH,NO_MA    ;不是修改管理密码的键
           MOV  A,IN_TIME
           CJNE A,#03H,GO_TEXT2
           LCALL DISP_START
           LJMP W00    ;解锁时无效
  GO_TEXT2:
           LCALL DISP_CLR
           LCALL DISP_TEXT1
           MOV   MODIFY_F,#02H    ;修改管理密码
           MOV   PS_ALL,#00H
           MOV   PS_OK,#00H
           LJMP  W00
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;按下门铃键
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
NO_MA:
           MOV  A,VAL
           CJNE A,#0FH,NO_B     ;不是门铃键
           SETB BELL            ;门铃响
           LJMP START1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;按下数字键
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
NO_B:        ;按下数字键
           INC   PS_ALL
           MOV   A,PS_ALL
           CJNE  A,#07H,R_IN
           LCALL ALARM_KEY    ;报警
           MOV   R3,#0AH
   NUM_ALARM:
            LCALL DELAY1
            DJNZ  R3,NUM_ALARM
            LCALL ALARM_KEY
            MOV   PS_ALL,#06H
            LCALL DISP_START
            LJMP  W00
   R_IN:
            MOV PS1,PS2
            MOV PS2,PS3
            MOV PS3,PS4
            MOV PS4,PS5
            MOV PS5,PS6
            MOV PS6,VAL
            LCALL DISP_START
            LJMP W00

            LJMP  START

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;子程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;定时器0中断子程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INT_T0:
           CLR   TF0
           MOV   TH0,#TMH
           MOV   TL0,#TML
           DJNZ  R6,T0_EXIT
           DJNZ  R7,T0_EXIT
           MOV   MODE_FLAG,#00H
           MOV   PS_OK,#00H
           MOV   PS_ALL,#00H
           MOV   MODIFY_F,#00H
           MOV   IN_TIME,#00H
           MOV   LCD_OPEN,#01H  ;关显示器
           LCALL DISP_CLR   ;显示器清屏
           LCALL DISP_MODE  ;显示模式
           MOV   COMMAND,#0AEH   ;;关显示器
           LCALL WINSTR1
           MOV   COMMAND,#0AEH
           LCALL WINSTR2
 T0_EXIT:
           RETI
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;标志初始化子程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INIT_FLAG:
          MOV     MODE_FLAG,#00H    ; 用户模式
          MOV     ROW,#00H         ;行
          MOV     COL,#00H          ;列
          MOV     VAL,#00H          ;键值
          MOV     IN_TIME,#00H       ;连续输入的次数
          MOV     PS_ALL,#00H        ;本次密码的位数
          MOV     COMMAND,#00H       ;显示器指令
          MOV     DATA1,#00H         ;显示器数据
          MOV     LEFT_ALL,#00H      ;左边*为0
          MOV     RIGHT_ALL,#00H     ;右边*为0
          MOV     MODIFY_F,#00H      ;没修改密码
          MOV     PS_OK,#00H         ;密码错
          MOV     LCD_OPEN,#00H      ;显示器开
          RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;密码初始化子程序      从24LC02中读入用户和管理密码           ;;;;;;;;;;;;;;;待修改
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
READ_PS:
           MOV    SUPPER1,#06H   ;管理密码654321
           MOV    SUPPER2,#05H
           MOV    SUPPER3,#04H
           MOV    SUPPER4,#03H
           MOV    SUPPER5,#02H
           MOV    SUPPER6,#01H

           MOV    USER1,#01H         ;用户密码123456
           MOV    USER2,#02H
           MOV    USER3,#03H
           MOV    USER4,#04H
           MOV    USER5,#05H
           MOV    USER6,#06H

           RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;输入密码清至FF
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INIT_PS:
        MOV     PS1,#0FFH
        MOV     PS2,#0FFH
        MOV     PS3,#0FFH
        MOV     PS4,#0FFH
        MOV     PS5,#0FFH
        MOV     PS6,#0FFH

        RET

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;显示器初始化
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INIT_LCD:
        ;;;;;;;;;;;;;;;;;;;;初始E1
        MOV   COMMAND,#0AEH
        LCALL WINSTR1
        MOV   COMMAND,#0C0H
        LCALL WINSTR1
        MOV   COMMAND,#0A4H
        LCALL WINSTR1
        MOV   COMMAND,#00H
        LCALL WINSTR1
        MOV   COMMAND,#0BBH
        LCALL WINSTR1
        MOV   COMMAND,#0A9H
        LCALL WINSTR1
        MOV   COMMAND,#0A0H
        LCALL WINSTR1
        MOV   COMMAND,#0EEH
        LCALL WINSTR1
        MOV   COMMAND,#0AFH
        LCALL WINSTR1

        ;;;;;;;;;;;;;;;;; 初始 E2
        MOV   COMMAND,#0AEH
        LCALL WINSTR2
        MOV   COMMAND,#0C0H
        LCALL WINSTR2
        MOV   COMMAND,#0A4H
        LCALL WINSTR2
        MOV   COMMAND,#00H
        LCALL WINSTR2
        MOV   COMMAND,#0BBH
        LCALL WINSTR2
        MOV   COMMAND,#0A9H
        LCALL WINSTR2
        MOV   COMMAND,#0A1H
        LCALL WINSTR2
        MOV   COMMAND,#0EEH
        LCALL WINSTR2
        MOV   COMMAND,#0AFH
        LCALL WINSTR2
        RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;WINSTR1   显示器写指令   E1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
WINSTR1:
       CLR  A0
       MOV  LCDP,COMMAND
       SETB E1
       CLR  E1

       RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;WINSTR2   显示器写指令   E2
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
WINSTR2:
       CLR  A0
       MOV  LCDP,COMMAND
       SETB E2
       CLR  E2

       RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;WDATA1   显示器写数据    E1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
WDATA1:
       SETB A0
       MOV  LCDP,DATA1
       SETB E1
       CLR  E1

       RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;WDATA2   显示器写数据    E2
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
WDATA2:

       SETB A0
       MOV  LCDP,DATA1
       SETB E2
       CLR  E2

       RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;显示模式   MODE_FLAG:   0为用户模式   1:管理模式
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DISP_MODE:
        MOV  A,MODE_FLAG
        CJNE A,#00H,GUAN

        ;输入
        MOV  DPTR,#SHURU
        LCALL DISP_2E1
        MOV  DPTR,#MIMA   ;密码
        LCALL DISP_2E2
        RET


          ;;;;;;;显示 "模式"
   GUAN:
        MOV   DPTR,#MOSHI
        LCALL DISP_2E2

        ;;;;;;;;;;;;;;显示 "管理"

        MOV   DPTR,#GUANLI
        LCALL DISP_2E1

        RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;开始计时中断
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BEGIN_TIME:
                 MOV  TMOD,#11H
                 CLR  TR0
                 MOV  TH0,#TMH
                 MOV  TL0,#TML
                 CLR  TF0
                 SETB TR0
                 SETB ET0
                 SETB EA
                 MOV  R7,#05H ;计时延时
                 MOV  R6,#0FFH
                 RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;延时
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DELAY1:
       MOV  R5,#50
   D1:
       MOV  R4,#200
       DJNZ R4,$
       DJNZ R5,D1
       RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; BUZZER响
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ALARM_KEY:
          SETB  BUZZER
          LCALL DELAY1
          CLR   BUZZER
          RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;显示*
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DISP_START:
        MOV   R5,PS_ALL   ;;;;计算LEFT_ALL,RIGHT_ALL的值
        MOV   R1,#00H       ;右 *
        MOV   B,#00H       ;左 *
        MOV   R4,#03H      ;右边空格
        MOV   A,PS_ALL
        JB    ACC.2,LR
        JB    ACC.1,LR
        JB    ACC.0,LR
        JMP   LL
 LR:
        CJNE  R1,#03H,R
        INC   B
        JMP   L
 R:
        INC   R1
        DEC   R4
 L:
        DJNZ  R5,LR
 LL:
        MOV   RIGHT_ALL,R1
        MOV   LEFT_ALL,B
        LCALL DISP_RIGHT
        LCALL DISP_LEFT
        RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;显示左边*
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DISP_LEFT:
        MOV   COMMAND,#0BBH
        LCALL WINSTR1
        MOV   COMMAND,#00H
        LCALL WINSTR1
        MOV   A,LEFT_ALL
        MOV   R1,LEFT_ALL
        JB    ACC.1,t6
        JB    ACC.0,t6
        JMP   START_EXIT

⌨️ 快捷键说明

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