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

📄 12864lcdlocker.asm

📁 该汉字密码锁
💻 ASM
📖 第 1 页 / 共 5 页
字号:
         CLR   KDEC
         MOV   A,MINTUE
       LCALL   DEC1
         MOV   MINTUE,A
        CJNE   A,#99H,DECMINTUE1
         MOV   MINTUE,#59H
 DECMINTUE1:
         MOV   DS1302_ADDR,#82H        ;分钟值送1302
         MOV   DS1302_DATA,MINTUE
       LCALL   WRITE

       LCALL   TIMEDIS              ;分钟减1之后,送液晶显示

        LJMP   CH_KEY

     ADJ_OUT:


         CLR   MINBIT
         CLR   KF
         CLR   KO
         CLR   KADD
         CLR   KDEC
         CLR   F_7
         CLR   ADJ_RL
         CLR   KBL1
         CLR   KBL2
         CLR   KBL3
         CLR   KBL4

         MOV   DS1302_ADDR,#80H
         MOV   DS1302_DATA,#00H            ;1302振荡
       LCALL   WRITE
         MOV   DS1302_ADDR,#8EH
         MOV   DS1302_DATA,#80H                ;禁止写入1302
       LCALL   WRITE
         MOV   A,#0CH
       LCALL   SEND_I
        LJMP   CH_KEY




;--------------------修改密码处理子程序------------------
      MODI:

         JB   F_5,MODI_1

        MOV   TIMERS,#0
        CLR   F_1
        CLR   F_7
        CLR   IRIN_1
       SETB   F_5
        MOV   A,#1
      LCALL   SEND_I
      LCALL   INITPS
      LCALL   INITLCD1
      LCALL   MENU_B1
      LCALL   MENU_B2



       SETB   F_2
       LJMP   CH_KEY

    MODI_1:
        CLR   F_5
        CLR   F_2
        CLR   F_3
        CLR   F_4
        CLR   F_6
        MOV   TIMERS,#0
       LJMP   MAIN1

 MODI_EXIT:

       LJMP   CH_KEY


;--------------------确认键处理子程序------------------
     ENTER:
        NOP
        NOP
        NOP
         JB   F_7,ENTER_EXIT
         JB   IRIN_1,IRIN_SAVE
         JB   F_1,BKCOMP1
         JB   BUF_FULL,ENTER_RUN    ;判断密码是否已经够6位。
       AJMP   ENTER_EXIT            ;如果密码不够6位,退出确认键程序。
 IRIN_SAVE:
       AJMP   IRIN_CODE
   BKCOMP1:
       AJMP   BKCOMP
 ENTER_RUN:
        CLR   BUF_FULL
        CLR   PASSBIT5
         JB   F_3,CONFIPRD_1
      LCALL   AT_READ               ;读取24C02地址单元密码
      LCALL   PSW_COMP              ;调用密码比较程序
         JB   PSW_TF,OPEN_1
        INC   TIMERS1               ;密码次数加1
        MOV   A,TIMERS1
       CJNE   A,#03H,DOIT
      DOIT:
         JC   ENTER_1
        MOV   TIMERS1,#0
      LCALL   MENU_A4
        MOV   75H,#200
    ALARM:
      LCALL   FMQ                 ;三次密码输入有误,蜂鸣器,鸣叫3声,锁定1分钟
       DJNZ   75H,ALARM
        JNB   F_5 ,KBLKING

       AJMP   ENTER_A
OPEN_1:
       AJMP   OPEN
 CONFIPRD_1:
       AJMP   CONFIPRD

   ENTER_1:
       CJNE   A,#1,ENTER_SEC
      LCALL   MENU_A2             ;中文提示:第一次密码输入错误
       AJMP   WRONG_SOUN
 ENTER_SEC:
      LCALL   MENU_A3
                                   ;中文提示:第二次密码输入错误

WRONG_SOUN:

      LCALL   DELAY2S
   KBLKING:
         JB   F_5,ENTER_A
      LCALL   MENU4
       AJMP   ENTER_EXIT
   ENTER_A:
        MOV   A,#98H
      LCALL   SEND_I
      LCALL   CLR_LINE

ENTER_EXIT:
      LCALL   INITPS
      LCALL   INITLCD1
        MOV   TIMERS,#0
        MOV   BUFF,#0
        CLR   FLAG1
                        ;判断按键是否松开,防止按键误触发
       LJMP   CH_KEY


IRIN_CODE:

        NOP

        JNB   IRIN_SF,CODE_OUT

        CLR   IRIN_SF
      LCALL   IRIN_WR
      LCALL   MENU_C5      ;地址码和数据码,
      LCALL   MENU_C6      ;保存成功!
      LCALL   DELAY2S
        CLR   IRIN_1
        CLR   IRIN_2
       LJMP   MAIN1
  CODE_OUT:
      LCALL   MENU_C5     ;  地址码和数据码,
      LCALL   MENU_C7     ;保存失败!
      LCALL   DELAY2S
        CLR   IRIN_1
        CLR   IRIN_2
       LJMP   MAIN1


;****************后门两次密码进行比较****************************
   BKCOMP:
        NOP
        NOP
      LCALL   BK_COMP
         JB   PSW_TF,BKTURE

        CLR   F_1
        MOV   TIMERS,#0
      LCALL   INITPS
      LCALL   INITNEW
      LCALL   INITTWO

       LJMP   MAIN1
    BKTURE:
        CLR   PSW_TF
      LCALL   MENU_E3         ;密码锁的密码是


      LCALL   AT_READ
                              ;前1位密码显示

        MOV   A,AT1
        ADD   A,#48
      LCALL   SEND_D




        MOV   A,AT2
        ADD   A,#48
      LCALL   SEND_D



        MOV   A,AT3
        ADD   A,#48
      LCALL   SEND_D




        MOV   A,AT4
        ADD   A,#48
      LCALL   SEND_D




        MOV   A,AT5
        ADD   A,#48
      LCALL   SEND_D



        MOV   A,AT6
        ADD   A,#48
      LCALL   SEND_D
      LCALL   DELAY2S
      LCALL   DELAY1S
      LCALL   INITPS

      LCALL   INITNEW
      LCALL   INITTWO

        MOV   TIMERS,#0
        CLR   F_1
       LJMP   MAIN1

;****************开锁子程序******************************
      OPEN:
        NOP
        CLR   PSW_TF

         JB   F_2,NEWPRD
        MOV   A,#0CH         ;关闭光标
      LCALL   SEND_I

      LCALL   MENU_A1      ;中文提示:密码输入正确




        CLR   OKEY                 ;开锁,持续时间2秒。


      LCALL   DELAY5MS
      LCALL   DELAY5MS
      LCALL   DELAY5MS
      LCALL   DELAY6MS





       SETB   OKEY
      LCALL   DELAY2S
      LCALL   DELAY2S
     
        MOV   TIMERS1,#0



       AJMP   ENTER_EXIT
;****************输入新密码*****************************

    NEWPRD:
        NOP

      LCALL   MENU_B3
       SETB   F_3
       SETB   F_6

       AJMP   ENTER_EXIT

;****************确认新密码******************************
  CONFIPRD:
        NOP
         JB   F_4,TWOCOMP
      LCALL   MENU_B4
       SETB   F_4
        CLR   F_6

       AJMP   ENTER_EXIT









;****************两次密码进行比较****************************
   TWOCOMP:
        NOP
      LCALL   TWO_COMP
         JB   PSW_TF,TRUE
      LCALL   MENU_B8
      LCALL   MENU_B9
      LCALL   MENU_B10
                               ;两次输入密码不符合,密码修改失败,退出修改
      LCALL   DELAY2S

     WRONG:
        MOV   TIMERS,#0
      LCALL   INITPS
      LCALL   INITLCD1
        CLR   F_2
        CLR   F_3
        CLR   F_4
        CLR   F_5
       LJMP   MAIN1
      TRUE:
        CLR   F_5
        CLR   F_2
        CLR   F_3
        CLR   F_4
        CLR   PSW_TF
      LCALL   MENU_B5
      LCALL   MENU_B6


      LCALL   AT_WR
      LCALL   DELAY6MS                          ;密码修改成功

      LCALL   AT_READ

        MOV   A,AT1
        ADD   A,#48
      LCALL   SEND_D



        MOV   A,AT2          ;显示前2位密码
        ADD   A,#48
      LCALL   SEND_D


        MOV   A,AT3          ;显示3位密码显示
        ADD   A,#48
      LCALL   SEND_D



        MOV   A,AT4         ;前4位密码显示
        ADD   A,#48
      LCALL   SEND_D

        MOV   A,AT5         ;前5位密码显示
        ADD   A,#48
      LCALL   SEND_D


        MOV   A,AT6       ;前6位密码显示
        ADD   A,#48
      LCALL   SEND_D
      LCALL   DELAY2S
      LCALL   DELAY2S

       AJMP   WRONG


;****************检验后门密码正误******************************
   BK_COMP:
       PUSH   PSW
       PUSH   ACC
        MOV   R2,#06H
        MOV   R0,#BKPS1
        MOV   R1,#PS1
       BK_P:
        CLR   C
        MOV   A,@R0
       SUBB   A,@R1
        JNZ   BKRE
        INC   R0
        INC   R1
       DJNZ   R2,BK_P
        NOP
       SETB   PSW_TF                ;密码正确,密码对错标志位置1。
       AJMP   BK_EXIT7
    BKRE:
        CLR   PSW_TF                ;密码错误,密码对错标志位置0。
   BK_EXIT7:
        NOP
        POP   ACC
        POP   PSW
        RET
;****************检验密码正误******************************
  PSW_COMP:
       PUSH   PSW
       PUSH   ACC
        MOV   R2,#06H
        MOV   R0,#AT1
        MOV   R1,#PS1
       C_P:
        CLR   C
        MOV   A,@R0
       SUBB   A,@R1
        JNZ   RETURN
        INC   R0
        INC   R1
       DJNZ   R2,C_P
        NOP
       SETB   PSW_TF                ;密码正确,密码对错标志位置1。
       AJMP   EXIT7
    RETURN:
        CLR   PSW_TF                ;密码错误,密码对错标志位置0。
     EXIT7:
        NOP
        POP   ACC
        POP   PSW
        RET

;****************检验两次密码正误******************************
  TWO_COMP:
       PUSH   PSW
       PUSH   ACC
        MOV   R2,#06H
        MOV   R0,#TWOPRD1
        MOV   R1,#NEWPRD1
    TWOC_P:
        CLR   C
        MOV   A,@R0
       SUBB   A,@R1
        JNZ   TWO_RETURN
        INC   R0
        INC   R1
       DJNZ   R2,TWOC_P
        NOP
       SETB   PSW_TF                ;密码正确,密码对错标志位置1。
       AJMP   TWO_EXIT7
TWO_RETURN:
        CLR   PSW_TF                ;密码错误,密码对错标志位置0。
 TWO_EXIT7:
        NOP
        POP   ACC
        POP   PSW
        RET



;*************初始化修改密码的第ER次密密码**************
   INITTWO:
       PUSH   ACC
       PUSH   PSW
        MOV   R7,#06H
        MOV   R1,#NEWPRD1
        MOV   A,#00H
  INIT_TWO:
        MOV   @R1,A
        INC   R1
       DJNZ   R7,INIT_TWO
        POP   PSW
        POP   ACC
        NOP
        RET

;*************初始化修改密码的第一次密密码**************
   INITNEW:
       PUSH   ACC
       PUSH   PSW
        MOV   R7,#06H
        MOV   R1,#TWOPRD1
        MOV   A,#00H
   INIT_NEW:
        MOV   @R1,A
        INC   R1
       DJNZ   R7,INIT_NEW
        POP   PSW
        POP   ACC
        NOP
        RET


;*************初始化显示缓冲区以及其他缓冲区**************

    INITPS:
       PUSH   ACC
       PUSH   PSW
        MOV   R7,#06H
        MOV   R1,#PS1
        MOV   A,#00H
   INIT_PS:
        MOV   @R1,A
        INC   R1
       DJNZ   R7,INIT_PS
        POP   PSW
        POP   ACC
        NOP
        RET

;*************清LCD屏,密码输入区域**************
  INITLCD1:
       PUSH   ACC
       PUSH   PSW
        MOV   R7,#06H
         JB   F_5,INITLCD_A1
        MOV   A,#9AH              ;第4行密码输入区清空
      LCALL   SEND_I
INITLCD1_L:

        MOV   A,#0A1H
      LCALL   SEND_D
        MOV   A,#0A0H
      LCALL   SEND_D

       DJNZ   R7,INITLCD1_L
        MOV   A,#9AH        ;     ;光标停留在第4行第3个汉字处闪烁
      LCALL   SEND_I
       AJMP   INITLCD_OUT

INITLCD_A1:
        MOV   A,#08AH              ;第3行密码输入区清空
      LCALL   SEND_I
INITLCD_A2:
        MOV   A,#0A1H
      LCALL   SEND_D
        MOV   A,#0A0H
      LCALL   SEND_D

       DJNZ   R7,INITLCD_A2

        MOV   A,#08AH              ;光标停留在第3行第3个汉字处闪烁。
      LCALL   SEND_I
INITLCD_OUT:
        POP   PSW
        POP   ACC
        NOP
        RET



;***********************************
;            判断是否有键按下
;***********************************
        KS:

        MOV   P1,#0FH
        NOP
        MOV   A,P1
        CPL   A
        ANL   A,#0FH
        NOP
        RET

⌨️ 快捷键说明

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