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

📄 12864lcdlocker.asm

📁 该汉字密码锁
💻 ASM
📖 第 1 页 / 共 5 页
字号:
        CLR   C
        MOV   A,BUFF
       SUBB   A,#14H
        JNZ   F1_K
       LJMP   ENTER          ;跳转到确认处理程序

      F1_K:
        CLR   C
        MOV   A,BUFF
       SUBB   A,#10H
        JNZ   F2_K
         JB   ADJ_RL,KK2   ;调整日历的时候,作为加1功能键
       AJMP   F4_K            ;功能键1,进入遥控器解码菜单
       KK2:
       SETB   KADD
       AJMP   F4_K1

      F2_K:
        CLR   C
        MOV   A,BUFF
       SUBB   A,#13H
        JNZ   F3_K
         JB   ADJ_RL,KK3     ;调整日历的时候,作为减1功能键   DEC
       AJMP   FU2            ;后门程序,用来查看当前密码,后门密码778166
       KK3:
       SETB   KDEC
       AJMP   F4_K1

      F3_K:
        CLR   C
        MOV   A,BUFF
       SUBB   A,#12H
        JNZ   F4_K            ;进入修改时间功能键,同时作为顺序调整功能键
        JNB   ADJ_RL,FU3
       SETB   KF
     F4_K1:
       AJMP   FU3

      F4_K:                   ;

       AJMP   CH_KEY

;***********************************
;        各功能键处理子程序
;***********************************



;--------------------后门键处理子程序------------------

       FU2:
        NOP
        NOP



      LCALL   DELAY2S

      LCALL   KS

         JZ   FU2_EXIT
        CLR   F_5
        CLR   F_7
        CLR   IRIN_1
        MOV   TIMERS,#0
      LCALL   INITPS
      LCALL   INITLCD1

        MOV   A,#1
      LCALL   SEND_I
      LCALL   MENU_E1                    ;启动后门查看密码程序
      LCALL   MENU_E2



       SETB   F_1

  FU2_EXIT:
      LCALL   KS
        JNZ   FU2_EXIT
   FU2_OUT:
       AJMP   CH_KEY


;--------------------进入调整日历子程序------------------

       FU3:
         JB   F_1,FU3_EXIT
         JB   F_5,FU3_EXIT
         JB   IRIN_1,FU3_EXIT
       SETB   F_7
       SETB   ADJ_RL
        MOV   TIMERS,#0
      LCALL   INITPS
      LCALL   INITLCD1
        CLR   PASSBIT1
        CLR   PASSBIT2
        CLR   PASSBIT3
        CLR   PASSBIT4
        CLR   PASSBIT5




         MOV   DS1302_ADDR,#8EH
         MOV   DS1302_DATA,#00H            ;允许写1302
       LCALL   WRITE
         MOV   DS1302_ADDR,#80H
         MOV   DS1302_DATA,#80H            ;1302停止振荡
       LCALL   WRITE


   ADJ_YEAR:




          JB   KBL1,AA1
          JB   KF,ADJMONTH_1      ;调整月
          JB   KO,ADJ_CALEN_EXIT
          JB   KADD,ADDYEAR    ;进入年加1程序
          JB   KDEC,DECYEAR    ;进入年减1程序
        SETB   YEARBIT
       LCALL   TIMEDIS
        AJMP   CH_KEY
ADJ_CALEN_EXIT:
         CLR   KO
         CLR   F_7
         CLR   ADJ_RL
         MOV   DS1302_ADDR,#80H
         MOV   DS1302_DATA,#00H            ;1302振荡
       LCALL   WRITE
         MOV   A,#0CH
       LCALL   SEND_I
        AJMP   MAIN1
         AA1:
        AJMP   ADJMONTH

     FU3_EXIT:
        AJMP   CH_KEY


ADJMONTH_1:
         CLR   KF
         CLR   YEARBIT
        SETB   MONTHBIT
        AJMP   ADJMONTH

    ADDYEAR:                    ;年加1
         CLR   KADD
         MOV   A,TIME_YEAR
       LCALL   ADD1
         MOV   TIME_YEAR,A

         MOV   DS1302_ADDR,#8CH        ;年值送1302
         MOV   DS1302_DATA,TIME_YEAR
       LCALL   WRITE

       LCALL   TIMEDIS             ;年加1之后,送液晶显示


        AJMP   CH_KEY

    DECYEAR:                  ;年减1
         CLR   KDEC
         MOV   A,TIME_YEAR
       LCALL   DEC1
         MOV   TIME_YEAR,A

         MOV   DS1302_ADDR,#8CH        ;年值送1302
         MOV   DS1302_DATA,TIME_YEAR
       LCALL   WRITE

       LCALL   TIMEDIS              ;年加1之后,送液晶显示

        AJMP   CH_KEY



   ADJMONTH:
        SETB   KBL1

   ADJ_MONTH:                 ;调整月
          JB   KBL2,AA2
          JB   KO,BACKADJYEAR
          JB   KADD,ADDMONTH
          JB   KDEC,DECMONTH
          JB   KF,ADJDAY1

         MOV   A,#83H
       LCALL   SEND_I     ;光标置月调整位置
        AJMP   CH_KEY

        AA2:
        AJMP   ADJDAY

    ADJDAY1:
         CLR   KF
         CLR   MONTHBIT
        SETB   DATEBIT
        AJMP   ADJDAY

BACKADJYEAR:            ;返回调整年
         CLR   KBL1
         CLR   KO
        AJMP   ADJ_YEAR

   ADDMONTH:             ;月加1
         CLR   KADD
         MOV   A,TIME_MONTH
       LCALL   ADD1
         MOV   TIME_MONTH,A
        CJNE   A,#13H,ADDMONTH1
         MOV   TIME_MONTH,#1H

  ADDMONTH1:
         MOV   DS1302_ADDR,#88H        ;月值送1302
         MOV   DS1302_DATA,TIME_MONTH
       LCALL   WRITE
       LCALL   TIMEDIS              ;月加1之后,送液晶显示
        LJMP   CH_KEY

   DECMONTH:
       LCALL   DELAY5MS      ;月减1
         CLR   KDEC
         MOV   A,TIME_MONTH
       LCALL   DEC1
         MOV   TIME_MONTH,A
        CJNE   A,#00H,DECMONTH1
         MOV   TIME_MONTH,#12H
  DECMONTH1:

         MOV   DS1302_ADDR,#88H        ;月值送1302
         MOV   DS1302_DATA,TIME_MONTH
       LCALL   WRITE

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

        LJMP   CH_KEY
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
     ADJDAY:
        SETB   KBL2

    ADJ_DAY:                     ;日调整
          JB   KBL3,AA3
          JB   KO,BACKADJMONTH
          JB   KADD,ADDDAY       ;按下K3键,日加1
          JB   KDEC,DECDAY_ADJ   ;按下K4键,日减1
          JB   KF,JUMP_ALARM     ;按下K1键,调整闹铃的开启或者关闭
         MOV   A,#85H
       LCALL   SEND_I            ;光标置日调整位置

        LJMP   CH_KEY

 DECDAY_ADJ:
         CLR   KDEC
        LJMP   DECDAY

        AA3:
        LJMP   ADJALARM

 JUMP_ALARM:
         CLR   KF
         CLR   DATEBIT
        SETB   HOURBIT
        LJMP   ADJALARM

BACKADJMONTH:                    ;返回调整年

         CLR   KBL2
         CLR   KO
        LJMP   ADJ_MONTH
     ADDDAY:                ;日加1

         CLR   KADD
         MOV   A,TIME_MONTH
        CJNE   A,#02H,ADDAUGUST
         MOV   R3,TIME_YEAR
       LCALL   ZH
         MOV   A,R3
          JZ   RADDDAY           ;A=0,为闰年,二月有29天;A=1,为平年,二月有28天。
         MOV   A,TIME_DAY
       LCALL   ADD1
         MOV   TIME_DAY,A
        CJNE   A,#29H,PADDDAY    ;平年,二月有28天。
         MOV   TIME_DAY,#01
        LJMP   PADDDAY
    RADDDAY:
         MOV   A,TIME_DAY
       LCALL   ADD1
         MOV   TIME_DAY,A
        CJNE   A,#30H,PADDDAY    ;闰年,二月有29天。
         MOV   TIME_DAY,#01
    PADDDAY:

         MOV   DS1302_ADDR,#86H        ;日值送1302
         MOV   DS1302_DATA,TIME_DAY
       LCALL   WRITE

       LCALL   TIMEDIS             ;日加1之后,送液晶显示

        LJMP   CH_KEY



  ADDAUGUST:
        CJNE   A,#08H,ADJEACHDAY_ADD
         MOV   A,TIME_DAY
       LCALL   ADD1
         MOV   TIME_DAY,A
        CJNE   A,#32H,ADDAUGUST1
         MOV   TIME_DAY,#01H
 ADDAUGUST1:

         MOV   DS1302_ADDR,#86H          ;日值送1302
         MOV   DS1302_DATA,TIME_DAY
       LCALL   WRITE
         MOV   DS1302_ADDR,#8AH        ;星期值送1302
         MOV   DS1302_DATA,WEEK
       LCALL   WRITE
       LCALL   TIMEDIS             ;日加1之后,送液晶显示

        LJMP   CH_KEY

ADJEACHDAY_ADD:         ;调整大小月天数
         PUSH  A
         CLR   CY       ;判断是否大于或是小于8月
        SUBB   A,#08
         JNC   ADD_MOR_AUGUST         ;CY=1,表明当前月小于8月,CY=0,表明当前月大月8月
         CLR   CY
         POP   A
         MOV   R3,A
       LCALL   ZH1
         MOV   A,R3
          JZ   ADJ_S_DAY_ADD     ;A=0调整小月天数;A=1,调整大月天数
ADD_COMM_MONTH1:
         MOV   A,TIME_DAY
       LCALL   ADD1
         MOV   TIME_DAY,A    ;大月31天,调整程序。
        CJNE   A,#32H,ADJ_M_DAY_ADD
         MOV   TIME_DAY,#1
ADJ_M_DAY_ADD:

         MOV   DS1302_ADDR,#86H          ;日值送1302
         MOV   DS1302_DATA,TIME_DAY
       LCALL   WRITE

       LCALL   TIMEDIS             ;日加1之后,送液晶显示

        LJMP   CH_KEY
ADD_MOR_AUGUST:                    ;大于8月调整程序
         POP   A
         MOV   R3,A
       LCALL   ZH1
         MOV   A,R3
          JZ   ADD_COMM_MONTH1

ADJ_S_DAY_ADD:                     ;小月30天调整
         MOV   A,TIME_DAY
       LCALL   ADD1
         MOV   TIME_DAY,A   ;
        CJNE   A,#31H,ADJ_S_DAY1
         MOV   TIME_DAY,#1
 ADJ_S_DAY1:

         MOV   DS1302_ADDR,#86H          ;日值送1302
         MOV   DS1302_DATA,TIME_DAY
       LCALL   WRITE

       LCALL   TIMEDIS             ;日加1之后,送液晶显示

        LJMP   CH_KEY


      DECDAY:                ;日减1


         MOV   A,TIME_MONTH
        CJNE   A,#02H,DECAUGUST
         MOV   R3,TIME_YEAR
       LCALL   ZH
         MOV   A,R3
          JZ   RDECDAY           ;A=0,为闰年,二月有29天;A=1,为平年,二月有28天。
         MOV   A,TIME_DAY
       LCALL   DEC1
         MOV   TIME_DAY,A
        CJNE   A,#00H,PDECDAY    ;平年,二月有28天。
         MOV   TIME_DAY,#28H
        AJMP   PDECDAY
    RDECDAY:
         MOV   A,TIME_DAY
       LCALL   DEC1
         MOV   TIME_DAY,A
        CJNE   A,#00H,PDECDAY    ;闰年,二月有29天。
         MOV   TIME_DAY,#29H
    PDECDAY:

         MOV   DS1302_ADDR,#86H        ;日值送1302
         MOV   DS1302_DATA,TIME_DAY
       LCALL   WRITE

       LCALL   TIMEDIS              ;日加1之后,送液晶显示

        LJMP   CH_KEY


  DECAUGUST:
        CJNE   A,#08H,ADJEACHDAY_DEC
         MOV   A,TIME_DAY
       LCALL   DEC1
         MOV   TIME_DAY,A
        CJNE   A,#00H,DECAUGUST1
         MOV   TIME_DAY,#31H
 DECAUGUST1:

         MOV   DS1302_ADDR,#86H          ;日值送1302
         MOV   DS1302_DATA,TIME_DAY
       LCALL   WRITE

       LCALL   TIMEDIS              ;日加1之后,送液晶显示

        LJMP   CH_KEY
ADJEACHDAY_DEC:      ;调整大小月天数
        PUSH   A
         CLR   CY       ;判断是否大于或是小于8月
        SUBB   A,#08
         JNC   DEC_MOR_AUGUST         ;CY=1,表明当前月小于8月,CY=0,表明当前月大月8月
         CLR   CY
         POP   A
         MOV   R3,A
       LCALL   ZH1
         MOV   A,R3
          JZ   ADJ_S_DAY_DEC         ;A=0调整小月天数;A=1,调整大月天数
DEC_COMM_MONTH1:
         MOV   A,TIME_DAY
       LCALL   DEC1
         MOV   TIME_DAY,A            ;大月31天,调整程序。
        CJNE   A,#00H,ADJ_M_DAY_DEC
         MOV   TIME_DAY,#31H
ADJ_M_DAY_DEC:

         MOV   DS1302_ADDR,#86H     ;日值送1302
         MOV   DS1302_DATA,TIME_DAY
       LCALL   WRITE

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

        LJMP   CH_KEY
DEC_MOR_AUGUST:                    ;大于8月调整程序
         POP   A
         MOV   R3,A
       LCALL   ZH1
         MOV   A,R3
          JZ   DEC_COMM_MONTH1
ADJ_S_DAY_DEC:                      ;小月30天调整
         MOV   A,TIME_DAY
       LCALL   DEC1
         MOV   TIME_DAY,A    ;
        CJNE   A,#00H,ADJ_S_DAY1_DEC
         MOV   TIME_DAY,#30H
ADJ_S_DAY1_DEC:

         MOV   DS1302_ADDR,#86H          ;日值送1302
         MOV   DS1302_DATA,TIME_DAY
       LCALL   WRITE

       LCALL   TIMEDIS              ;日加1之后,送液晶显示

        LJMP   CH_KEY

  ADJALARM:
       SETB    KBL3



   ADJ_HOUR:
          JB   KBL4,ADJMINTUE
          JB   KF,ADJMINTUE_1
          JB   KO,BACKADJDAY
          JB   KADD,ADDHOUR
          JB   KDEC,DECHOUR

         MOV   A,#94H
       LCALL   SEND_I     ;光标置小时调整位置
        LJMP   CH_KEY
ADJMINTUE_1:
         CLR   KF
         CLR   HOURBIT
        SETB   MINBIT
        AJMP   ADJMINTUE

 BACKADJDAY:
         CLR   KBL3
         CLR   KO
        LJMP   ADJ_DAY
   ADDHOUR:                           ;小时加1
         CLR   KADD
         MOV   A,HOUR
       LCALL   ADD1
         MOV   HOUR,A
        CJNE   A,#24H,ADDHOUR1
         MOV   HOUR,#0
        ADDHOUR1:
         MOV   DS1302_ADDR,#84H         ;小时值送1302
         MOV   DS1302_DATA,HOUR
       LCALL   WRITE
       LCALL   TIMEDIS              ;小时加1之后,送液晶显示

        LJMP   CH_KEY                ;北京时间22:12:12

  DECHOUR:                  ;小时减1
         CLR   KDEC
         MOV   A,HOUR
       LCALL   DEC1
         MOV   HOUR,A
        CJNE   A,#99H,DECHOUR1
         MOV   HOUR,#23H
   DECHOUR1:
         MOV   DS1302_ADDR,#84H        ;小时值送1302
         MOV   DS1302_DATA,HOUR
       LCALL   WRITE

       LCALL   TIMEDIS             ;小时减1之后,送液晶显示

        LJMP   CH_KEY

  ADJMINTUE:
        SETB   KBL4

 ADJ_MINTUE:
          JB   KF,ADJ_OUT
          JB   KO,BACKADJHOUR
          JB   KADD,ADDMINTUE
          JB   KDEC,DECMINTUE

         MOV   A,#96H
       LCALL   SEND_I     ;光标置分钟调整位置
        LJMP   CH_KEY
BACKADJHOUR:
         CLR   KBL4
         CLR   KO
        LJMP   ADJ_HOUR
  ADDMINTUE:
         CLR   KADD
         MOV   A,MINTUE
       LCALL   ADD1
         MOV   MINTUE,A
        CJNE   A,#60H,ADDMINTUE1
         MOV   MINTUE,#0
 ADDMINTUE1:
         MOV   DS1302_ADDR,#82H         ;分钟值送1302
         MOV   DS1302_DATA,MINTUE
       LCALL   WRITE
       LCALL   TIMEDIS             ;分钟加1之后,送液晶显示

        LJMP   CH_KEY

  DECMINTUE:                  ;分钟减1

⌨️ 快捷键说明

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