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

📄 液晶timeend555555.asm

📁 用89S51做的液晶时钟走的很好 用keil3.0打开
💻 ASM
📖 第 1 页 / 共 3 页
字号:
        MOV R2,TH1     ;取T1计数次数
        MOV R3,TL1
        LCALL SUB0     ;计数值大于400H吗?
        JNC X0_01      ;>400,去看是否在1的窗口
        CLR C          ;在窗口0中,清C,移位时移入0
        LJMP X0_02     ;去移位处理
X0_01:  MOV R4,#07H ;窗口1的下限
        MOV R5,#0B0H ;0720H~0800H为窗口1
        MOV R2,TH1 ;取T1计数次数
        MOV R3,TL1
        LCALL SUB0 ;计数值小于720H吗?
        JC X0_OUT ;<0720,作废
        MOV R4,#09H ;窗口1的上限
        MOV R5,#40H ;#0800
        MOV R2,TH1 ;取T1计数次数
        MOV R3,TL1
        LCALL SUB0 ;计数值大于#800H吗?
        JNC X0_OUT ;>800H,作废
        SETB C ;在窗口1中,将C置1
X0_02:   MOV A,U0_x1       ;临时存放单元送A
         RLC A             ;左移,0或1进入D0
         MOV U0_x1,A       ;新输入的一位数据移入U0_X1单元(40H)
         DJNZ Ch_num,X0_OUT ;不到8位转走
         MOV Ch_num,#08H ;下一个数据还是8位
         MOV @R0,U0_x1 ;数据存入@R0===============================================
         INC R0 ;下一个数据存入下一字节
         DJNZ Da_num,X0_OUT ;不够6个数中断返回
         LJMP X0_10 ;已存满6个数,转去处理

X0_OUT:  MOV TH1,#00H     ;送T1时间常数
          MOV TL1,#00H
          SETB TR1         ;启动T1
          POP PSW
          POP ACC
          SETB EA          ;开中断,中断返回
          RETI

    ;以下为数据处理程序

X0_10:     MOV Mo_num,#10H  ;最多移位10H次
           MOV A,X1_n1 ;第一个字节送A
X0_11:    CJNE A,#0E2H,X0_12 ;E2H为识别码,(A)不等于#E2H转去移位
           MOV A,X1_n3 ;(A)=#E2H,第三个字节也等于#E2H吗
X0_13:    CJNE A,#0E2H,X0_12 ;不等,转去移位
           MOV A,X1_n4 ;等,再看第二个字节和第四个字节相等吗?
          CJNE A,X1_n2,X0_12 ;不等,转去移位
           SJMP X0_16 ;识别码,数据全部正确
X0_12:    CLR C ;以下为六个字节依次移位
           MOV A,X1_n6
           RLC A
           MOV X1_n6,A
           MOV A,X1_n5
           RLC A
           MOV X1_n5,A
           MOV A,X1_n4
           RLC A
           MOV X1_n4,A
           MOV A,X1_n3
           RLC A
           MOV X1_n3,A
           MOV A,X1_n2
           RLC A
           MOV X1_n2,A
           MOV A,X1_n1
           RLC A
           MOV X1_n1,A ;移完
          DJNZ Mo_num,X0_11 ;没移够10H次再去判断
X0_14:    MOV A,X1_n3 ;已移够10H次,再判断一次
           CJNE A,X1_n1,X0_15 ;(2AH)不等于(2CH)或不等于#E2H,数据作废
           CJNE A,#0E2H,X0_15
           MOV A,X1_n2 ;(2AH)=(2CH)=#E2H,再看(2BH)=(2DH)吗
           CJNE A,X1_n4,X0_15 ;不等,转走
X0_16:    MOV N0_shb,X1_n1 ;识别码送N0_shb
           MOV N0_jzh,X1_n2 ;数据送N0_jzh
           LCALL DEL10MS
X0_17:    MOV Ch_num,#08H ;准备接收下一个数据,一个字节8位
           MOV R0,#2AH ;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!下一个数据首地址
           MOV Da_num,#06H ;6个字节
           LJMP X0_OUT ;转走
X0_15:    MOV N0_jzh,#0FFH ;数据单元送#FFH
           MOV N0_shb,#00H ;识别存储单元送#00
           SJMP X0_17 ;去准备接收下一个数据

SUB0:   CLR CY        ;减法子程序
        MOV A,R3      ;被减数低位送A
        SUBB A,R5     ;低位减
        JNC X0_S1     ;没进位,去处理高位减法
        DEC R2        ;有进位,被减数高位减1
X0_S1:  CLR CY        ;清C
        MOV A,R2       ;被减数高位
        SUBB A,R4       ;减被减数高位
        RET          ;返回
DEL10MS:  MOV R2,#0AH ;延时子程序
DEL_01:   MOV R3,#0FFH
DEL_02:   NOP
          NOP
          DJNZ R3,DEL_02
          DJNZ R2,DEL_01
          RET

DEL500US:  MOV R2,#0FFH ;延时子程序
DEL_03:    DJNZ R2,DEL_03
           RET

;-----------------------------------------------------------------------------------------------------------
;===========================================================================================================
CHANGETIME: MOV JHM,#0
            MOV TIMER1,#0FFH
            MOV N0_JZH1,#50H
	    LCALL JZH_SEE
	    CJNE R7,#11H,CHANGEOUT
	    CLR TR0
            LCALL JHUO
	    LCALL JZH_STOP0
CHANGE0:    LCALL JHUO
            LCALL JZH_44H
	    LCALL JZH_54H
	    LCALL JZH_C4H
	    LCALL JZH_D4H
            MOV N0_JZH1,#50H
            LCALL JZH_SEE
            CJNE R7,#11H,CHANGE0
            SETB TR0
	    LCALL JZH_STOP0
	    MOV SEC1,#0
	    MOV SEC2,#0
CHANGEOUT:    RET


JHUO:	    LCALL JUDGE
            DJNZ TIMER1,JHUO1
	    MOV TIMER1,#0FFH
	    LCALL DISPTIME
JHUO1:      MOV P2,#0EH
	    LCALL ENABLE
            MOV DPTR ,#TABLE5
            MOV A,JHM
	    MOVC A,@A+DPTR
	    MOV P2,A
	    LCALL ENABLE
            RET

JZH_SEE:  MOV A,N0_jzh
          CJNE A,N0_JZH1,JZH_SEENO
          LCALL DEL500US
	  MOV N0_jzh,#0FFH
	  LCALL DEL500US
	  CJNE A,N0_JZH1,JZH_SEENO
	  MOV R7,#11H
	  AJMP JZH_OUT
JZH_SEENO:MOV R7,#00H
JZH_OUT:  RET

JZH_STOP0: MOV A,N0_jzh
           CJNE A,N0_JZH1,JZH_STOP0YES
	   MOV N0_jzh,#0FFH
           MOV R4,#50
LOOP3:	   LCALL DEL10MS
	   DJNZ R4,LOOP3
	   MOV N0_jzh,#0FFH
	   AJMP JZH_STOP0
JZH_STOP0YES: RET

JZH_STOP2: MOV A,N0_jzh
           CJNE A,N0_JZH1,JZH_STOP2YES
	   MOV N0_jzh,#0FFH
	   MOV R4,#50
LOOP4:     LCALL DEL10MS
           DJNZ R4,LOOP4
	   MOV N0_jzh,#0FFH
JZH_STOP2YES: RET
;------------------------------------------------------------------------------------------------------
;======================================================================================================
JZH_44H:   MOV A,JHM
           CJNE A,#0,JZH_44H1
           LCALL ADYEAR_44H
	   AJMP JZH_44OUT
JZH_44H1:  CJNE A, #1,JZH_44H2
           LCALL ADMON_44H
	   AJMP JZH_44OUT
JZH_44H2:  CJNE A,#2,JZH_44H3
           LCALL ADDAY_44H
	   AJMP JZH_44OUT
JZH_44H3:  CJNE A,#3,JZH_44H4
           LCALL ADHOUR_44H
	   AJMP JZH_44OUT
JZH_44H4:  CJNE A,#4,JZH_44OUT
           LCALL ADMIN_44H
	   AJMP JZH_44OUT
JZH_44OUT: RET

ADYEAR_44H:  MOV N0_JZH1,#44H
             LCALL JZH_SEE
	     CJNE R7,#11H,ADYEAR_44OUT
             LCALL JZH_STOP2
             LCALL DEL10MS
	     INC YEAR
	     MOV A,YEAR
	     CJNE A,#10,ADYEAR_441
	     MOV YEAR,#7
ADYEAR_441:  AJMP ADYEAR_44H

ADYEAR_44OUT:RET

ADMON_44H:   MOV N0_JZH1,#44H
             LCALL JZH_SEE
	     CJNE R7,#11H,ADMON_44OUT
ADMON_441:   LCALL JZH_STOP2
             LCALL DEL10MS
             MOV A,MON
             CJNE A ,#12,ADMON_442
             MOV MON,#0
             AJMP ADMON_44H
ADMON_442:   INC MON
             AJMP ADMON_44H
ADMON_44OUT: MOV A,MON
             MOV B,#10
	     DIV AB
	     MOV MON1,A
	     MOV MON2,B
             RET


ADDAY_44H:   MOV N0_JZH1,#44H
             LCALL JZH_SEE
	     CJNE R7,#11H,ADDAY_44OUT
ADDAY_441:   LCALL JZH_STOP2
             LCALL DEL10MS
             MOV A,MON
             CJNE A,#2,ADDAY_442
	     ACALL ADDAY_44RN
	     AJMP ADDAY_44H
ADDAY_442:   MOV A,MON
             DEC A
             MOV DPTR,#TABLE1
             MOVC A,@A+DPTR
	     CJNE A,DAY,ADDAY_443
	     MOV DAY,#0
	     AJMP ADDAY_44H
ADDAY_443:   INC DAY
             AJMP ADDAY_44H
ADDAY_44OUT: MOV A,DAY
             MOV B,#10
             DIV AB
	     MOV DAY1,A
	     MOV DAY2,B
             RET


ADDAY_44RN:  MOV A,YEAR
             CJNE A,#8,ADDAY_44RUN
	     MOV A,DAY
             CJNE A,#29,ADDAY_44RN1
	     MOV DAY,#0
	     AJMP ADDAY_44RNOUT
ADDAY_44RUN: MOV A,DAY
             CJNE A,#28,ADDAY_44RN1
             MOV DAY,#0
	     AJMP ADDAY_44RNOUT
ADDAY_44RN1:    INC DAY
ADDAY_44RNOUT:    RET

ADHOUR_44H:  MOV N0_JZH1,#44H
             LCALL JZH_SEE
	     CJNE R7,#11H,ADHOUR_44OUT
ADHOUR_441:  LCALL JZH_STOP2
             LCALL DEL10MS
             MOV A,HOUR1
             CJNE A,#2,ADHOUR_442
	     MOV A,HOUR2
             CJNE A,#3,ADHOUR_443
             MOV HOUR1,#0
	     MOV HOUR2,#0
	     AJMP ADHOUR_44H
ADHOUR_442:  MOV A,HOUR2
             CJNE A,#9,ADHOUR_443
             MOV HOUR2,#0
	     INC HOUR1
	     AJMP ADHOUR_44H
ADHOUR_443:  INC HOUR2
             AJMP ADHOUR_44H
ADHOUR_44OUT:  RET

ADMIN_44H:   MOV N0_JZH1,#44H
             LCALL JZH_SEE
	     CJNE R7,#11H,ADMIN_44OUT
ADMIN_441:   LCALL JZH_STOP2
             LCALL DEL10MS
             MOV A,MIN1
	     CJNE A,#5,ADMIN_442
	     MOV A,MIN2
	     CJNE A,#9,ADMIN_443
	     MOV MIN1,#0
	     MOV MIN2,#0
	     AJMP ADMIN_44H
ADMIN_442:   MOV A,MIN2
             CJNE A,#9,ADMIN_443
	     MOV MIN2,#0
	     INC MIN1
	     AJMP ADMIN_44H
ADMIN_443:   INC MIN2
             AJMP ADMIN_44H
ADMIN_44OUT: RET
;--------------------------------------------------------------------------------------------------------

JZH_54H:   MOV A,JHM
           CJNE A,#0,JZH_54H1
           AJMP JZH_54OUT
JZH_54H1:  CJNE A,#1,JZH_54H2
           LCALL DEMON_54H
	   AJMP JZH_54OUT
JZH_54H2:  CJNE A,#2,JZH_54H3
           LCALL DEDAY_54H
	   AJMP JZH_54OUT
JZH_54H3:  CJNE A,#3,JZH_54H4
           LCALL DEHOUR_54H
	   AJMP JZH_54OUT
JZH_54H4:  CJNE A,#4,JZH_54OUT
           LCALL DEMIN_54H
JZH_54OUT: RET



DEMON_54H:   MOV N0_JZH1,#54H
             LCALL JZH_SEE
	     CJNE R7,#11H,DEMON_54OUT
DEMON_541:   LCALL JZH_STOP2
             LCALL DEL10MS
             MOV A,MON
             CJNE A ,#1,DEMON_542
             MOV MON,#12
	     AJMP DEMON_54H
DEMON_542:   DEC MON
             AJMP DEMON_54H
DEMON_54OUT: MOV A,MON
             MOV B,#10
	     DIV AB
	     MOV MON1,A
	     MOV MON2,B
             RET

DEDAY_54H:   MOV N0_JZH1,#54H
             LCALL JZH_SEE
	     CJNE R7,#11H,DEDAY_54OUT
DEDAY_541:   LCALL JZH_STOP2
             LCALL DEL10MS
             MOV A,MON
             CJNE A,#2,DEDAY_542
	     ACALL DEDAY_54RN
	     AJMP DEDAY_54H
DEDAY_542:   MOV A,DAY
             CJNE A,#0,DEDAY_543
             MOV A,MON
	     DEC A
             MOV DPTR,#TABLE1
             MOVC A,@A+DPTR
	     MOV DAY,A
	     AJMP DEDAY_54H
DEDAY_543:   DEC DAY
             AJMP DEDAY_54H
DEDAY_54OUT: MOV A,DAY
             MOV B,#10
             DIV AB
	     MOV DAY1,A
	     MOV DAY2,B
             RET


DEDAY_54RN:  MOV A,YEAR
             CJNE A,#8,DEDAY_54RUN
	     MOV A,DAY
             CJNE A,#0,DEDAY_54RN1
	     MOV DAY,#29
	     AJMP DEDAY_54RNOUT
DEDAY_54RUN: MOV A,DAY
             CJNE A,#0,DEDAY_54RN1
             MOV DAY,#28
	     AJMP DEDAY_54RNOUT
DEDAY_54RN1:    DEC DAY
DEDAY_54RNOUT:    RET

DEHOUR_54H:  MOV N0_JZH1,#54H
             LCALL JZH_SEE
	     CJNE R7,#11H,DEHOUR_54OUT
DEHOUR_541:  LCALL JZH_STOP2
             LCALL DEL10MS
             MOV A,HOUR1
             CJNE A,#0,DEHOUR_542
	     MOV A,HOUR2
             CJNE A,#0,DEHOUR_543
             MOV HOUR1,#2
	     MOV HOUR2,#3
	     AJMP DEHOUR_54H
DEHOUR_542:  MOV A,HOUR2
             CJNE A,#0,DEHOUR_543
             MOV HOUR2,#9
	     DEC HOUR1
	     AJMP DEHOUR_54H
DEHOUR_543:  DEC HOUR2
             AJMP DEHOUR_54H
DEHOUR_54OUT:  RET

DEMIN_54H:   MOV N0_JZH1,#54H
             LCALL JZH_SEE
	     CJNE R7,#11H,DEMIN_54OUT
DEMIN_541:   LCALL JZH_STOP2
             LCALL DEL10MS
             MOV A,MIN1
	     CJNE A,#0,DEMIN_542
	     MOV A,MIN2
	     CJNE A,#0,DEMIN_543
	     MOV MIN1,#5
	     MOV MIN2,#9
	     AJMP DEMIN_54H
DEMIN_542:   MOV A,MIN2
             CJNE A,#0,DEMIN_543
	     MOV MIN2,#9
	     DEC MIN1
	     AJMP DEMIN_54H
DEMIN_543:   DEC MIN2
             AJMP DEMIN_54H
DEMIN_54OUT: RET

;-----------------------------------------------------------------------------------------------

JZH_C4H:     MOV N0_JZH1,#0C4H
             LCALL JZH_SEE
	     CJNE R7,#11H,JZH_C4OUT
JZH_C41:     LCALL JZH_STOP2
             LCALL DEL10MS
	     MOV A,JHM
             CJNE A,#4,JZH_C42
	     MOV JHM,#0
	     AJMP JZH_C4OUT
JZH_C42:     INC JHM
JZH_C4OUT:   RET

JZH_D4H:     MOV N0_JZH1,#0D4H
             LCALL JZH_SEE
	     CJNE R7,#11H,JZH_D4OUT
JZH_D41:     LCALL JZH_STOP2
             LCALL DEL10MS
	     MOV A,JHM
	     CJNE A,#0,JZH_D42
	     MOV JHM,#4
	     AJMP JZH_D4OUT
JZH_D42:     DEC JHM
             AJMP JZH_D4OUT
JZH_D4OUT:   RET

;1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
TWE_JINZHI:  MOV N0_JZH1,#0CCH
             LCALL JZH_SEE
	     CJNE R7,#11H,JINZHI_OUT
             LCALL JZH_STOP2
	     MOV A,JZHMA
             CJNE A,#0,JINZHI_1
	     MOV JZHMA,#0FFH
	     AJMP TWE_JINZHI
JINZHI_1:    MOV JZHMA,#0
             AJMP TWE_JINZHI
JINZHI_OUT:   RET

;2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222
CLC:         MOV TIMER1,#0FFH
             MOV JHM_CLC,#1
             MOV N0_JZH1,#48H
             LCALL JZH_SEE
             CJNE R7,#11H,CLC_OUT
             LCALL CLC_CLEAR
             LCALL JZH_STOP0
CLC_1:       MOV A,TIMER0
             CJNE A,#01H,CLC_2
             LCALL CLC_CLEAR_2
CLC_2:       LCALL CLC_40H
	     LCALL CLC_4CH
             MOV N0_JZH1,#48H
             LCALL JZH_SEE
             CJNE R7,#11H,CLC_1
             LCALL TIME_AP
	     LCALL JZH_STOP0
	     LCALL DISP_INIT
	     LCALL DISPTIME
CLC_OUT:     RET



TABLE6:DB   "     CLOCK      "
TABLE7:DB   "       :        "
TABLE9:DB   "   --CLOCE--    "
TABLE10:DB  "    --OPEN--    "


CLC_CLEAR:   MOV P2,#1H
            LCALL ENABLE
            MOV P2,#80H
            LCALL ENABLE
            MOV DPTR,#TABLE6
            LCALL DISP
CLC_CLEAR_2:MOV A,OPEN_CLC
	    CJNE A,#1,CLC_CLEAR_1
            MOV P2,#0C0H
            LCALL ENABLE
            MOV DPTR ,#TABLE10
            LCALL DISP
	    AJMP CLC_CLEAR_OUT
CLC_CLEAR_1:MOV P2,#0C0H
            LCALL ENABLE
            MOV DPTR ,#TABLE9
            LCALL DISP
CLC_CLEAR_OUT:RET



TIME_AP:    MOV P2,#1H
            LCALL ENABLE
            RET

CLC_RUNNING: MOV A,OPEN_CLC
             CJNE A,#1,CLC_RUNNING_1
             MOV A, HOUR1
             CJNE A,HOUR1_CLC,CLC_RUNNING_1
	     MOV A,HOUR2
	     CJNE A,HOUR2_CLC,CLC_RUNNING_1
	     MOV A, MIN1
             CJNE A,MIN1_CLC,CLC_RUNNING_1
	     MOV A,MIN2
	     CJNE A,MIN2_CLC,CLC_RUNNING_1
	     CLR P3.6
	     AJMP CLC_RUNNING_OUT

⌨️ 快捷键说明

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