📄 yaokongrili.asm
字号:
MOV 44H,R1
MOV 65H,R2
MOV 45H,R2
MOV A,65H
CJNE A,#0,WAIT10 ;按键调整中消除小时高位0
MOV 65H,#0AH
MOV 45H,#0AH
WAIT10:
LCALL DISPLAY
JNB ADDNUM,WAIT10
AJMP SETG9
GDECHOUR:
MOV R7,HOUR ;小时减1
LCALL DEC1
MOV HOUR,A
CJNE A,#99H,GDECHOUR1
MOV HOUR,#23H
GDECHOUR1:
MOV DS1302_ADDR,#84H ;小时值送1302
MOV DS1302_DATA,HOUR
LCALL WRITE
MOV R0,HOUR
LCALL DIVIDE ;小时分离送显示缓冲
MOV 64H,R1
MOV 44H,R1
MOV 65H,R2
MOV 45H,R2
MOV A,65H
CJNE A,#0,WAIT11 ;按键调整中消除小时高位0
MOV 65H,#0AH
MOV 45H,#0AH
WAIT11:
LCALL DISPLAY
JNB DECNUM,WAIT11
AJMP SETG9
SETG10:
SETB HOURFLASH ;调分时闪标志
GWAIT12:
LCALL DISPLAY
JNB MODE,GWAIT12
SETG11:
LCALL DISPLAY
JNB MODE,SETGOUT_1
JNB ADDNUM,GADDMINTUE
JNB DECNUM,GDECMINTUE
JNB DMODE,JUMPHOUR
AJMP SETG11
SETGOUT_1:
AJMP SETGOUT
JUMPHOUR:
LCALL DISPLAY
CLR HOURFLASH
JNB DMODE,JUMPHOUR
AJMP SETG9
GADDMINTUE:
MOV R7,MINUTE ;分加1
LCALL ADD1
MOV MINUTE,A
CJNE A,#60H,GADDMINTUE1
MOV MINUTE,#00H
GADDMINTUE1:
MOV DS1302_ADDR,#82H ;分值送1302
MOV DS1302_DATA,MINUTE
LCALL WRITE
MOV R0,MINUTE
LCALL DIVIDE ;分分离送显示缓冲
MOV 62H,R1
MOV 42H,R1
MOV 63H,R2
MOV 43H,R2
CJNE A,#0,WAIT13
MOV 63H,#0AH
MOV 43H,#0AH
WAIT13:
LCALL DISPLAY
JNB ADDNUM,WAIT13
AJMP SETG11
GDECMINTUE:
MOV R7,MINUTE ;分减1
LCALL DEC1
MOV MINUTE,A
CJNE A,#99H,GDECMINTUE1
MOV MINUTE,#59H
GDECMINTUE1:
MOV DS1302_ADDR,#82H ;分值送1302
MOV DS1302_DATA,MINUTE
LCALL WRITE
MOV R0,MINUTE
LCALL DIVIDE ;分分离送显示缓冲
MOV 62H,R1
MOV 42H,R1
MOV 63H,R2
MOV 43H,R2
MOV A,63H
CJNE A,#0,WAIT14
MOV 63H,#0AH
MOV 43H,#0AH
WAIT14:
LCALL DISPLAY
JNB DECNUM,WAIT14
AJMP SETG11
SETGOUT:
LCALL DISPLAY
JNB MODE,SETGOUT
MOV DS1302_ADDR,#80H
MOV DS1302_DATA,#00H ;1302晶振开始振荡
LCALL WRITE
MOV DS1302_ADDR,#8EH
MOV DS1302_DATA,#80H ;禁止写入1302
LCALL WRITE
CLR HOURFLASH
CLR DAYFLASH
CLR MONTHFLASH
CLR YEARFLASH
CLR CHOICE_ADJ
CLR ET1
CLR TR1 ;关闭定时器1
LJMP MAIN
;***********************************
;* 整点鸣叫程序 *
;***********************************
FENGMING:
MOV 27H,#250
MOV 2CH,#250
SA:
CPL BP
DJNZ 2CH,$
MOV 2CH,#200
CPL BP
DJNZ 2CH,$
MOV 2CH,#250
DJNZ 27H,SA
DJNZ 2FH,FENGMING
RET
;***********************************
;* 按键闪动调时程序 *
;***********************************
T1_INT:
CLR EA
PUSH ACC
PUSH PSW
GFLASH:
CPL KEEPFLASH
JB KEEPFLASH,GFLASH1
MOV 60H,40H ;显示秒
MOV 61H,41H
MOV 62H,42H ;显示分
MOV 63H,43H
MOV 64H,44H ;显示小时
MOV 65H,45H
MOV 67H,47H ;显示总天数
MOV 68H,48H
MOV 69H,49H
MOV 6AH,4AH ;显示周次
MOV 6BH,4BH
MOV 70H,50H ;显示日
MOV 71H,51H
MOV 72H,52H ;显示农历日
MOV 73H,53H
MOV 74H,54H ;显示农历月
MOV 75H,55H
MOV 76H,56H ;显示星期
MOV 77H,57H ;显示月
MOV 78H,58H
MOV 79H,59H ;显示年
MOV 7AH,5AH
GFLASHOUT:
POP PSW
POP ACC
SETB EA
RETI
GFLASH1:
JB YEARFLASH,GFLASH2 ;调年闪
MOV 79H,#0AH
MOV 7AH,#0AH
MOV 76H,#0AH ;调年时星期闪
MOV 72H,#0AH ;农历月日闪烁
MOV 73H,#0AH
MOV 74H,#0AH
MOV 75H,#0AH
MOV 67H,#0AH ;总天数闪烁
MOV 68H,#0AH
MOV 69H,#0AH
MOV 6AH,#0AH ;周次闪烁
MOV 6BH,#0AH
AJMP GFLASHOUT
GFLASH2:
JB MONTHFLASH,GFLASH3 ;调月闪
MOV 77H,#0AH
MOV 78H,#0AH
MOV 76H,#0AH ;调年时星期闪
MOV 72H,#0AH ;农历月日闪烁
MOV 73H,#0AH
MOV 74H,#0AH
MOV 75H,#0AH
MOV 67H,#0AH ;总天数闪烁
MOV 68H,#0AH
MOV 69H,#0AH
MOV 6AH,#0AH ;周次闪烁
MOV 6BH,#0AH
LJMP GFLASHOUT
GFLASH3:
JB DAYFLASH,GFLASH4 ;调日闪
MOV 70H,#0AH
MOV 71H,#0AH
MOV 76H,#0AH ;调年时星期闪
MOV 72H,#0AH ;农历月日闪烁
MOV 73H,#0AH
MOV 74H,#0AH
MOV 75H,#0AH
MOV 67H,#0AH ;总天数闪烁
MOV 68H,#0AH
MOV 69H,#0AH
MOV 6AH,#0AH ;周次闪烁
MOV 6BH,#0AH
LJMP GFLASHOUT
GFLASH4:
JB HOURFLASH,GFLASH5 ;调小时闪
MOV 64H,#0AH
MOV 65H,#0AH
LJMP GFLASHOUT
GFLASH5: ;调分钟闪
MOV 62H,#0AH
MOV 63H,#0AH
LJMP GFLASHOUT
;*****************************
;* 秒灯闪烁程序 *
;*****************************
T0_INT:
PUSH ACC ;累加器入栈保护
PUSH PSW ;状态字入栈保护
CLR ET0 ;关T0中断允许
CLR TR0 ;关闭定时器T0
MOV A,#0B7H ;中断响应时间同步修正
ADD A,TL0 ;低8位初值修正
MOV TL0,A ;重装初值(低8位修正值)
MOV A,#3CH ;高8位初值修正
ADDC A,TH0 ;
MOV TH0,A ;重装初值(高8位修正值)
SETB TR0 ;开启定时器T0
CLR PSW.4
DJNZ SEC_FLA,INTT2OUT
MOV SEC_FLA,#10
CPL 10H
JB 10H,S1
SETB LED1 ; 秒指示灯闪烁
AJMP INTT2OUT
S1:
CLR LED1
INTT2OUT:
POP PSW ;出栈
POP ACC
SETB ET0
RETI
;*********************************
;* 写1302程序 *
;*********************************
WRITE:
CLR EA
CLR SCLK
NOP
SETB RST
NOP
MOV A,DS1302_ADDR
MOV R4,#8
WRITE1:
RRC A ;送地址给1302
NOP
NOP
CLR SCLK
NOP
NOP
NOP
MOV IO,C
SETB SCLK ;送入地址在时钟上升沿有效
NOP
NOP
NOP
NOP
DJNZ R4,WRITE1
CLR SCLK
NOP
MOV A,DS1302_DATA
MOV R4,#8
WRITE2:
RRC A
NOP ;送数据给1302,时钟上升沿,数据输入
CLR SCLK
NOP
NOP
MOV IO,C
NOP
NOP
NOP
SETB SCLK
NOP
NOP
DJNZ R4,WRITE2
CLR RST
SETB EA
RET
;*******************************
;* 读1302程序 *
;*******************************
READ:
CLR EA
CLR SCLK
NOP
NOP
SETB RST
NOP
MOV A,DS1302_ADDR
MOV R4,#8
READ1:
RRC A
NOP
MOV IO,C
NOP
NOP
NOP
SETB SCLK ;送入地址在时钟上升沿有效
NOP
NOP
NOP
CLR SCLK
NOP
NOP
DJNZ R4,READ1
MOV R4,#8
READ2:
CLR SCLK
NOP
NOP
NOP
MOV C,IO
NOP
NOP
NOP
NOP
NOP ;从ds1302中读取数据,时钟下降沿有效
RRC A
NOP
NOP
NOP
NOP
SETB SCLK
NOP
DJNZ R4,READ2
MOV DS1302_DATA,A
CLR RST
SETB EA
RET
;*********************************
;* 加1程序 *
;*********************************
ADD1:
CLR EA
MOV A,R7
ADD A,#01H
DA A
SETB EA
RET
;*********************************
;* 减1程序 *
;*********************************
DEC1:
CLR EA
MOV A,R7
ADD A,#99H
DA A
SETB EA
RET
;*********************************
;* 大小月加调整程序 *
;*********************************
MMONTH:
CLR EA
MOV R7,TIME_DAY ;大月日加1
LCALL ADD1
MOV TIME_DAY,A
CJNE A,#32H,MGOOUT
MOV TIME_DAY,#01H
MGOOUT:
SETB EA
RET
LMONTH:
CLR EA
MOV R7,TIME_DAY ;小月日加1
LCALL ADD1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -