📄 液晶timeend555555.asm
字号:
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 + -