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

📄 10000clock.asm

📁 具有显示时分秒年月日和星期以及识别闰年得功能
💻 ASM
📖 第 1 页 / 共 5 页
字号:
DIS_STOPW:
     MOV P0,#00000001B       ;清屏并光标复位
     LCALL ENABLE_LCD        ;调用写入命令子程序

     MOV P0,#0C2H            ;写入显示起始地址(第二行第三个位置)
     LCALL ENABLE_LCD        ;调用写入命令子程序

     MOV P0,#00111010B       ;写入:
     LCALL WR_DATA           ;调用LCD数据写入子程序

     MOV P0,#0C5H            ;写入显示起始地址(第二行第六个位置)
     LCALL ENABLE_LCD        ;调用写入命令子程序

     MOV P0,#00111010B       ;写入:
     LCALL WR_DATA           ;调用LCD数据写入子程序

     MOV P0,#0C8H            ;写入显示起始地址(第二行第九个位置)
     LCALL ENABLE_LCD        ;调用写入命令子程序

     MOV P0,#00101110B       ;写入.
     LCALL WR_DATA           ;调用LCD数据写入子程序

     MOV P0,#83H             ;写入显示起始地址(第一行第四个位置)
     LCALL ENABLE_LCD        ;调用写入命令子程序

     MOV P0,#01010011B       ;写入S
     LCALL WR_DATA           ;调用LCD数据写入子程序

     MOV P0,#01010100B       ;写入T
     LCALL WR_DATA           ;调用LCD数据写入子程序

     MOV P0,#01001111B       ;写入O
     LCALL WR_DATA           ;调用LCD数据写入子程序

     MOV P0,#01010000B       ;写入P
     LCALL WR_DATA           ;调用LCD数据写入子程序

     MOV P0,#01010111B       ;写入W
     LCALL WR_DATA           ;调用LCD数据写入子程序

     MOV P0,#01000001B       ;写入A
     LCALL WR_DATA           ;调用LCD数据写入子程序

     MOV P0,#01010100B       ;写入T
     LCALL WR_DATA           ;调用LCD数据写入子程序

     MOV P0,#01000011B       ;写入C
     LCALL WR_DATA           ;调用LCD数据写入子程序

     MOV P0,#01001000B       ;写入H
     LCALL WR_DATA           ;调用LCD数据写入子程序

     RET

;显示子程序
DISPLAY:
        MOV P0,#0C6H            ;写入显示起始地址(第2行第7个位置)
        LCALL ENABLE_LCD        ;调用写入命令子程序

        MOV DPTR,#NUM_TAB
        MOV A,SEC1
        MOVC A,@A+DPTR
        MOV P0,A                ;写入秒十位
        SETB RS                 ;RS=1
        CLR RW                  ;RW=0 ;准备写入数据
        CLR E                   ;E=0 ;执行显示命令
        LCALL DELAY_LCD         ;判断液晶模块是否忙?
        SETB E                  ;E=1 ;显示完成,程序停车

        MOV DPTR,#NUM_TAB
        MOV A,SEC0
        MOVC A,@A+DPTR
        MOV P0,A                ;写入秒个位
        SETB RS                 ;RS=1
        CLR RW                  ;RW=0 ;准备写入数据
        CLR E                   ;E=0 ;执行显示命令
        LCALL DELAY_LCD         ;判断液晶模块是否忙?
        SETB E                  ;E=1 ;显示完成,程序停车

        MOV P0,#0C3H            ;写入显示起始地址(第2行第4个位置)
        LCALL ENABLE_LCD        ;调用写入命令子程序

        MOV DPTR,#NUM_TAB
        MOV A,MIN1
        MOVC A,@A+DPTR
        MOV P0,A                ;写入分十位
        SETB RS                 ;RS=1
        CLR RW                  ;RW=0 ;准备写入数据
        CLR E                   ;E=0 ;执行显示命令
        LCALL DELAY_LCD         ;判断液晶模块是否忙?
        SETB E                  ;E=1 ;显示完成,程序停车

        MOV DPTR,#NUM_TAB
        MOV A,MIN0
        MOVC A,@A+DPTR
        MOV P0,A                ;写入分个位
        SETB RS                 ;RS=1
        CLR RW                  ;RW=0 ;准备写入数据
        CLR E                   ;E=0 ;执行显示命令
        LCALL DELAY_LCD         ;判断液晶模块是否忙?
        SETB E                  ;E=1 ;显示完成,程序停车

        MOV P0,#0C0H            ;写入显示起始地址(第2行第1个位置)
        LCALL ENABLE_LCD        ;调用写入命令子程序

        MOV DPTR,#NUM_TAB
        MOV A,HOU1
        MOVC A,@A+DPTR
        MOV P0,A                ;写入时十位
        SETB RS                 ;RS=1
        CLR RW                  ;RW=0 ;准备写入数据
        CLR E                   ;E=0 ;执行显示命令
        LCALL DELAY_LCD         ;判断液晶模块是否忙?
        SETB E                  ;E=1 ;显示完成,程序停车

        MOV DPTR,#NUM_TAB
        MOV A,HOU0
        MOVC A,@A+DPTR
        MOV P0,A                ;写入时个位
        SETB RS                 ;RS=1
        CLR RW                  ;RW=0 ;准备写入数据
        CLR E                   ;E=0 ;执行显示命令
        LCALL DELAY_LCD         ;判断液晶模块是否忙?
        SETB E                  ;E=1 ;显示完成,程序停车

        MOV P0,#8BH             ;写入显示起始地址(第1行第12个位置)
        LCALL ENABLE_LCD        ;调用写入命令子程序

        MOV A,WEK
        CJNE A,#0,WEK1
        MOV P0,#01010011B       ;写入字母S
        LCALL WR_DATA           ;调用LCD数据写入子程序
        MOV P0,#01010101B       ;写入字母U
        LCALL WR_DATA           ;调用LCD数据写入子程序
        MOV P0,#01001110B       ;写入字母N
        LCALL WR_DATA           ;调用LCD数据写入子程序
        LJMP CONTINUE
WEK1:
        CJNE A,#1,WEK2
        MOV P0,#01001101B        ;写入字母M
        LCALL WR_DATA           ;调用LCD数据写入子程序
        MOV P0,#01001111B        ;写入字母O
        LCALL WR_DATA           ;调用LCD数据写入子程序
        MOV P0,#01001110B        ;写入字母N
        LCALL WR_DATA           ;调用LCD数据写入子程序
        LJMP CONTINUE
WEK2:
        CJNE A,#2,WEK3
        MOV P0,#01010100B        ;写入字母T
        LCALL WR_DATA           ;调用LCD数据写入子程序
        MOV P0,#01010101B        ;写入字母U
        LCALL WR_DATA           ;调用LCD数据写入子程序
        MOV P0,#01000101B        ;写入字母E
        LCALL WR_DATA           ;调用LCD数据写入子程序
        LJMP CONTINUE
WEK3:
        CJNE A,#3,WEK4
        MOV P0,#01010111B        ;写入字母W
        LCALL WR_DATA           ;调用LCD数据写入子程序
        MOV P0,#01000101B        ;写入字母E
        LCALL WR_DATA           ;调用LCD数据写入子程序
        MOV P0,#01000100B        ;写入字母D
        LCALL WR_DATA           ;调用LCD数据写入子程序
        LJMP CONTINUE
WEK4:
        CJNE A,#4,WEK5
        MOV P0,#01010100B        ;写入字母T
        LCALL WR_DATA           ;调用LCD数据写入子程序
        MOV P0,#01001000B        ;写入字母H
        LCALL WR_DATA           ;调用LCD数据写入子程序
        MOV P0,#01010101B        ;写入字母U
        LCALL WR_DATA           ;调用LCD数据写入子程序
        LJMP CONTINUE
WEK5:
        CJNE A,#5,WEK6
        MOV P0,#01000110B       ;写入字母F
        LCALL WR_DATA           ;调用LCD数据写入子程序
        MOV P0,#01010010B        ;写入字母R
        LCALL WR_DATA           ;调用LCD数据写入子程序
        MOV P0,#01001001B        ;写入字母I
        LCALL WR_DATA           ;调用LCD数据写入子程序
        LJMP CONTINUE
WEK6:
        MOV P0,#01010011B       ;写入字母S
        LCALL WR_DATA           ;调用LCD数据写入子程序
        MOV P0,#01000001B        ;写入字母A
        LCALL WR_DATA           ;调用LCD数据写入子程序
        MOV P0,#01010100B        ;写入字母T
        LCALL WR_DATA           ;调用LCD数据写入子程序
CONTINUE:
        MOV P0,#88H             ;写入显示起始地址(第1行第9个位置)
        LCALL ENABLE_LCD        ;调用写入命令子程序

        MOV DPTR,#NUM_TAB
        MOV A,DAY1
        MOVC A,@A+DPTR
        MOV P0,A                ;写入日十位
        SETB RS                 ;RS=1
        CLR RW                  ;RW=0 ;准备写入数据
        CLR E                   ;E=0 ;执行显示命令
        LCALL DELAY_LCD         ;判断液晶模块是否忙?
        SETB E                  ;E=1 ;显示完成,程序停车

        MOV DPTR,#NUM_TAB
        MOV A,DAY0
        MOVC A,@A+DPTR
        MOV P0,A                ;写入日个位
        SETB RS                 ;RS=1
        CLR RW                  ;RW=0 ;准备写入数据
        CLR E                   ;E=0 ;执行显示命令
        LCALL DELAY_LCD         ;判断液晶模块是否忙?
        SETB E                  ;E=1 ;显示完成,程序停车

        MOV P0,#85H             ;写入显示起始地址(第1行第6个位置)
        LCALL ENABLE_LCD        ;调用写入命令子程序

        MOV DPTR,#NUM_TAB
        MOV A,MON1
        MOVC A,@A+DPTR
        MOV P0,A                ;写入月十位
        SETB RS                 ;RS=1
        CLR RW                  ;RW=0 ;准备写入数据
        CLR E                   ;E=0 ;执行显示命令
        LCALL DELAY_LCD         ;判断液晶模块是否忙?
        SETB E                  ;E=1 ;显示完成,程序停车

        MOV DPTR,#NUM_TAB
        MOV A,MON0
        MOVC A,@A+DPTR
        MOV P0,A                ;写入月个位
        SETB RS                 ;RS=1
        CLR RW                  ;RW=0 ;准备写入数据
        CLR E                   ;E=0 ;执行显示命令
        LCALL DELAY_LCD         ;判断液晶模块是否忙?
        SETB E                  ;E=1 ;显示完成,程序停车

        MOV P0,#82H             ;写入显示起始地址(第1行第3个位置)
        LCALL ENABLE_LCD        ;调用写入命令子程序

        MOV DPTR,#NUM_TAB
        MOV A,YER1
        MOVC A,@A+DPTR
        MOV P0,A                ;写入年十位
        SETB RS                 ;RS=1
        CLR RW                  ;RW=0 ;准备写入数据
        CLR E                   ;E=0 ;执行显示命令
        LCALL DELAY_LCD         ;判断液晶模块是否忙?
        SETB E                  ;E=1 ;显示完成,程序停车

        MOV DPTR,#NUM_TAB
        MOV A,YER0
        MOVC A,@A+DPTR
        MOV P0,A                ;写入年个位
        SETB RS                 ;RS=1
        CLR RW                  ;RW=0 ;准备写入数据
        CLR E                   ;E=0 ;执行显示命令
        LCALL DELAY_LCD         ;判断液晶模块是否忙?
        SETB E                  ;E=1 ;显示完成,程序停车
RET

C_DISPLAY:
        MOV P0,#0C3H            ;写入显示起始地址(第2行第4个位置)
        LCALL ENABLE_LCD        ;调用写入命令子程序

        MOV DPTR,#NUM_TAB
        MOV A,C_MIN1
        MOVC A,@A+DPTR
        MOV P0,A                ;写入分十位
        SETB RS                 ;RS=1
        CLR RW                  ;RW=0 ;准备写入数据
        CLR E                   ;E=0 ;执行显示命令
        LCALL DELAY_LCD         ;判断液晶模块是否忙?
        SETB E                  ;E=1 ;显示完成,程序停车

        MOV DPTR,#NUM_TAB
        MOV A,C_MIN0
        MOVC A,@A+DPTR
        MOV P0,A                ;写入分个位
        SETB RS                 ;RS=1
        CLR RW                  ;RW=0 ;准备写入数据
        CLR E                   ;E=0 ;执行显示命令
        LCALL DELAY_LCD         ;判断液晶模块是否忙?
        SETB E                  ;E=1 ;显示完成,程序停车

        MOV P0,#0C0H            ;写入显示起始地址(第2行第1个位置)
        LCALL ENABLE_LCD        ;调用写入命令子程序

        MOV DPTR,#NUM_TAB
        MOV A,C_HOU1
        MOVC A,@A+DPTR
        MOV P0,A                ;写入时十位
        SETB RS                 ;RS=1
        CLR RW                  ;RW=0 ;准备写入数据
        CLR E                   ;E=0 ;执行显示命令
        LCALL DELAY_LCD         ;判断液晶模块是否忙?
        SETB E                  ;E=1 ;显示完成,程序停车

        MOV DPTR,#NUM_TAB
        MOV A,C_HOU0
        MOVC A,@A+DPTR
        MOV P0,A                ;写入时个位
        SETB RS                 ;RS=1
        CLR RW                  ;RW=0 ;准备写入数据
        CLR E                   ;E=0 ;执行显示命令
        LCALL DELAY_LCD         ;判断液晶模块是否忙?
        SETB E                  ;E=1 ;显示完成,程序停车

        MOV P0,#0C9H            ;写入显示起始地址(第2行第10个位置)
        LCALL ENABLE_LCD        ;调用写入命令子程序

        MOV A,C_WEK
        CJNE A,#0,C_WEK1
        MOV P0,#01010011B       ;写入字母S
        LCALL WR_DATA           ;调用LCD数据写入子程序
        MOV P0,#01010101B       ;写入字母U
        LCALL WR_DATA           ;调用LCD数据写入子程序
        MOV P0,#01001110B       ;写入字母N
        LCALL WR_DATA           ;调用LCD数据写入子程序
        LJMP OUT
C_WEK1:
        CJNE A,#1,C_WEK2
        MOV P0,#01001101B        ;写入字母M
        LCALL WR_DATA           ;调用LCD数据写入子程序
        MOV P0,#01001111B        ;写入字母O
        LCALL WR_DATA           ;调用LCD数据写入子程序
        MOV P0,#01001110B        ;写入字母N
        LCALL WR_DATA           ;调用LCD数据写入子程序
        LJMP OUT
C_WEK2:
        CJNE A,#2,C_WEK3
        MOV P0,#01010100B        ;写入字母T
        LCALL WR_DATA           ;调用LCD数据写入子程序
        MOV P0,#01010101B        ;写入字母U
        LCALL WR_DATA           ;调用LCD数据写入子程序
        MOV P0,#01000101B        ;写入字母E
        LCALL WR_DATA           ;调用LCD数据写入子程序
        LJMP OUT
C_WEK3:
        CJNE A,#3,C_WEK4
        MOV P0,#01010111B        ;写入字母W
        LCALL WR_DATA           ;调用LCD数据写入子程序
        LCALL WR_DATA           ;调用LCD数据写入子程序
        MOV P0,#01000100B        ;写入字母D
        LCALL WR_DATA           ;调用LCD数据写入子程序
C_WEK4:
        CJNE A,#4,C_WEK5
        MOV P0,#01010100B        ;写入字母T
        LCALL WR_DATA           ;调用LCD数据写入子程序
        MOV P0,#01001000B        ;写入字母H
        LCALL WR_DATA           ;调用LCD数据写入子程序
        MOV P0,#01010101B        ;写入字母U
        LCALL WR_DATA           ;调用LCD数据写入子程序
        LJMP OUT
C_WEK5:
        CJNE A,#5,C_WEK6
        MOV P0,#01000110B       ;写入字母F
        LCALL WR_DATA           ;调用LCD数据写入子程序
        MOV P0,#01010010B        ;写入字母R
        LCALL WR_DATA           ;调用LCD数据写入子程序
        MOV P0,#01001001B        ;写入字母I
        LCALL WR_DATA           ;调用LCD数据写入子程序
        LJMP OUT
C_WEK6:
        CJNE A,#6,C_WEK7
        MOV P0,#01010011B       ;写入字母S
        LCALL WR_DATA           ;调用LCD数据写入子程序
        MOV P0,#01000001B        ;写入字母A
        LCALL WR_DATA           ;调用LCD数据写入子程序
        MOV P0,#01010100B        ;写入字母T
        LCALL WR_DATA           ;调用LCD数据写入子程序
        LJMP OUT
C_WEK7:
       MOV P0,#01000001B       ;写入字母A
       LCALL WR_DATA           ;调用LCD数据写入子程序
       MOV P0,#01001100B       ;写入字母L
       LCALL WR_DATA           ;调用LCD数据写入子程序
       MOV P0,#01001100B       ;写入字母L
       LCALL WR_DATA           ;调用LCD数据写入子程序
OUT:
        MOV P0,#8CH            ;写入显示起始地址(第1行第12个位置)
        LCALL ENABLE_LCD       ;调用写入命令子程序

        JNB ALARM,DIS_OFF      ;闹钟标志有效显示ON,否则显示OFF
        MOV P0,#01001110B      ;写入N
        LCALL WR_DATA           ;调用LCD数据写入子程序
        MOV P0,#00100000B      ;写入空值
        LCALL WR_DATA           ;调用LCD数据写入子程序
        LJMP OUT2
        DIS_OFF:
        MOV P0,#01000110B      ;写入F
        LCALL WR_DATA           ;调用LCD数据写入子程序
        MOV P0,#01000110B      ;写入F
        LCALL WR_DATA           ;调用LCD数据写入子程序
OUT2:
        RET

S_DISPLAY:
        MOV P0,#0C9H            ;写入显示起始地址(第2行第10个位置)
        LCALL ENABLE_LCD        ;调用写入命令子程序

        MOV DPTR,#NUM_TAB
        MOV A,S_MS1
        MOVC A,@A+DPTR
        MOV P0,A                ;写入毫秒百位
        LCALL WR_DATA           ;调用LCD数据写入子程序

        MOV DPTR,#NUM_TAB
        MOV A,S_MS0
        MOVC A,@A+DPTR

⌨️ 快捷键说明

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