📄 ds1302-dsy.asm
字号:
L15: MOV R5,#64H
L16: DJNZ R5,L16
DJNZ R4,L15
RET
;******************************************************
SET_KEY:
SETB K1 ;增加键
SETB K2 ;减少键
SETB K3 ;选择键
NOP
JB K3,KEY03
LCALL BEEP_BL
JMP SET_TIME ;进入时间设定子程序
KEY03: RET
;==============================================
;实时时间设定子程序
;K1为加键、K2为减键、K3为选择键
;==============================================
SET_TIME:
MOV R1,#8EH ;写保护寄存器
MOV R0,#00H ;允许写入
LCALL WRITE
MOV R1,#80H ;写秒寄存器
MOV R0,#80H ;停止振荡器工作
LCALL WRITE
SETB TR0
K001: CALL TIME_DELAY ;校时
JNB K3,K001 ;K3为位移键
K010:
CALL CHULI
JNB LED,KH01
MOV 54H,#0AH ;送入熄灭符
MOV 55H,#0AH
JMP KH02
KH01: MOV 54H,74H ;送实时值
MOV 55H,75H ;送实时值
KH02: MOV R0,#TIME_DATA
CALL DISP
MOV R0,#TIME_DATA
CALL TIME_DISPLAY
JNB K1,K011A
JNB K2,K011B
JNB K3,K002
JMP K010
K011A:
MOV A,42H
ADD A,#01H
DA A
MOV 42H,A
XRL A,#24H
JNZ K012A
MOV 42H,#00H
K012A: MOV R1,#84H ;写时寄存器
MOV R0,42H
LCALL WRITE
CALL TIME_DELAY
JMP K010
K011B:
MOV A,42H
XRL A,#00H
JZ K012B
SETB C ;求补运算
CLR A
ADDC A,#99H ;加99
SUBB A,#01H ;减去减数
ADD A,42H ;加被减数
DA A ;十进制调整
MOV 42H,A ;
XRL A,#00H
JNZ K012C
K012B: MOV 42H,#23H
K012C: MOV R1,#84H ;写时寄存器
MOV R0,42H
LCALL WRITE
CALL TIME_DELAY
JMP K010
;-------------------------------------------------
K002: CALL TIME_DELAY ;校分
JNB K3,K002 ;K3为位移键
K020: CALL CHULI
JNB LED,KM01
MOV 52H,#0AH ;送入熄灭符
MOV 53H,#0AH
JMP KM02
KM01: MOV 52H,72H ;送实时值
MOV 53H,73H ;送实时值
KM02: MOV R0,#TIME_DATA
CALL DISP
MOV R0,#TIME_DATA
CALL TIME_DISPLAY
JNB K1,K021A
JNB K2,K021B
JNB K3,K003
JMP K020
K021A:
MOV A,41H
ADD A,#01H
DA A
MOV 41H,A
XRL A,#60H
JNZ K022A
MOV 41H,#00H
K022A: MOV R1,#82H ;写分寄存器
MOV R0,41H
LCALL WRITE
CALL TIME_DELAY
JMP K020
;---------------------------------------------------
K021B:
MOV A,41H
XRL A,#00H
JZ K022B
SETB C ;求补运算
CLR A
ADDC A,#99H ;加99
SUBB A,#01H ;减去减数
ADD A,41H ;加被减数
DA A ;十进制调整
MOV 41H,A ;
XRL A,#00H
JNZ K022C
K022B: MOV 41H,#59H
K022C: MOV R1,#82H ;写分寄存器
MOV R0,41H
LCALL WRITE
CALL TIME_DELAY
JMP K020
;---------------------------------------------------
K003: CALL DATE_DELAY ;校日
JNB K3,K003 ;K3为位移键
K030: CALL CHULI
JNB LED,KR01
MOV 60H,#0AH ;送入熄灭符
MOV 61H,#0AH
JMP KR02
KR01: MOV 60H,76H ;送实时值
MOV 61H,77H ;送实时值
KR02: MOV R0,#DATE_DATA
CALL DISP
MOV R0,#DATE_DATA
CALL TIME_DISPLAY
JNB K1,K031A
JNB K2,K031B
JNB K3,K004
JMP K030
K031A:
MOV A,43H
ADD A,#01H
DA A
MOV 43H,A
XRL A,#32H
JNZ K032A
MOV 43H,#00H
K032A: MOV R1,#86H ;写日寄存器
MOV R0,43H
LCALL WRITE
CALL DATE_DELAY
JMP K030
K031B:
MOV A,43H
XRL A,#00H
JZ K032B
SETB C ;求补运算
CLR A
ADDC A,#99H ;加99
SUBB A,#01H ;减去减数
ADD A,43H ;加被减数
DA A ;十进制调整
MOV 43H,A
XRL A,#00H
JNZ K032C
K032B: MOV 43H,#31H
K032C: MOV R1,#86H ;写日寄存器
MOV R0,43H
LCALL WRITE
CALL DATE_DELAY
JMP K030
;------------------------------------------------
K004: CALL DATE_DELAY ;校月
JNB K3,K004 ;K3为位移键
K040: CALL CHULI
JNB LED,KC01
MOV 62H,#0AH ;送入熄灭符
MOV 63H,#0AH
JMP KC02
KC01: MOV 62H,78H ;送实时值
MOV 63H,79H ;送实时值
KC02: MOV R0,#DATE_DATA
CALL DISP
MOV R0,#DATE_DATA
CALL TIME_DISPLAY
JNB K1,K041A
JNB K2,K041B
JNB K3,K005
JMP K040
K041A:
MOV A,44H
ADD A,#01H
DA A
MOV 44H,A
XRL A,#13H
JNZ K042A
MOV 44H,#00H
K042A: MOV R1,#88H ;写月寄存器
MOV R0,44H
LCALL WRITE
CALL DATE_DELAY
JMP K040
K041B:
MOV A,44H
XRL A,#00H
JZ K042B
SETB C ;求补运算
CLR A
ADDC A,#99H ;加99
SUBB A,#01H ;减去减数
ADD A,44H ;加被减数
DA A ;十进制调整
MOV 44H,A ;
XRL A,#00H
JNZ K042C
K042B: MOV 44H,#12H
K042C: MOV R1,#88H ;写月寄存器
MOV R0,44H
LCALL WRITE
CALL DATE_DELAY
JMP K040
;-----------------------------------------------
K005: CALL DATE_DELAY ;校年
JNB K3,K005 ;K3为位移键
K050: CALL CHULI
JNB LED,KY01
MOV 64H,#0AH ;送入熄灭符
MOV 65H,#0AH
JMP KY02
KY01: MOV 64H,7AH ;送实时值
MOV 65H,7BH ;送实时值
KY02: MOV R0,#DATE_DATA
CALL DISP
MOV R0,#DATE_DATA
CALL TIME_DISPLAY
JNB K1,K051A
JNB K2,K051B
JNB K3,K008
JMP K050
K051A:
MOV A,45H
ADD A,#01H
DA A
MOV 45H,A
XRL A,#9AH
JNZ K052A
MOV 45H,#00H
K052A: MOV R1,#8CH ;写年寄存器
MOV R0,45H
LCALL WRITE
CALL DATE_DELAY
JMP K050
K051B:
MOV A,45H
XRL A,#00H
JZ K052B
SETB C ;求补运算
CLR A
ADDC A,#99H ;加99
SUBB A,#01H ;减去减数
ADD A,45H ;加被减数
DA A ;十进制调整
MOV 45H,A ;
XRL A,#00H
JNZ K052C
K052B: MOV 45H,#99H
K052C: MOV R1,#8CH ;写年寄存器
MOV R0,45H
LCALL WRITE
CALL DATE_DELAY
JMP K050
;-------------------------------------------------
K008: JNB K3,K008
MOV R1,#80H ;写秒寄存器
MOV R0,#00H ;启动振荡器工作
LCALL WRITE
MOV R1,#8EH ;写保护寄存器
MOV R0,#80H ;禁止写入
LCALL WRITE
CALL DATE_DELAY
CLR LED
SETB TR0
CALL BEEP_BL
RET
;====================================================
;键延时子程序
;多次调用显示程序做键延时
;====================================================
TIME_DELAY: ;设定时间,键延时用
MOV R6,#0AH
TIME_KK:
LCALL CHULI
MOV R0,#TIME_DATA
LCALL DISP
MOV R0,#TIME_DATA
CALL TIME_DISPLAY
DJNZ R6,TIME_KK
RET
DATE_DELAY: ;设定日期,键延时用
MOV R6,#0AH
DATE_KK:
LCALL CHULI
MOV R0,#DATE_DATA
LCALL DISP
MOV R0,#DATE_DATA
CALL TIME_DISPLAY
DJNZ R6,DATE_KK
RET
;====================================================
;蜂鸣器响一声子程序 (适用交流蜂鸣器)
;====================================================
BEEP_BL:
MOV R6,#100
BL2: CALL DEX1
CPL BEEP
DJNZ R6,BL2
MOV R5,#10
CALL DELAY_BL
RET
DEX1: MOV R7,#180
DE2: NOP
DJNZ R7,DE2
RET
DELAY_BL: ;(R5)*延时10MS
MOV R6,#50
DL1: MOV R7,#100
DJNZ R7,$
DJNZ R6,DL1
DJNZ R5,DELAY_BL
RET
;*************************************************************
TAB_NU: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,00H ;0-9-灭
;*************************************************************
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -