📄 ds1302+-
字号:
ORG 0000H
AJMP START
ORG 0033H
START:
SECOND EQU 30H
MIN EQU 31H
HR EQU 32H
DATE EQU 33H
MONTH EQU 34H
DAY EQU 35H
YEAR EQU 36H
BMJSBUF EQU 37H
RST BIT P3.0
CLK BIT P3.1
IO BIT P3.2
K1 BIT P3.2
K2 BIT P3.3
K3 BIT P3.4
K4 BIT P3.5
DPBIT BIT 00H
MOV P0,#0FFH
MOV P1,#0FFH
MOV P2,#0FFH
MOV P3,#0FFH
MOV SP,#60H
MOV SECOND,#02H
MOV MIN,#08H
MOV HR,#22H
MOV DATE,#07H
MOV MONTH,#03H
MOV DAY,#03H
MOV YEAR,#07H
; LCALL SET1302 ;初始化为07年3月6日 星期二 18:28:00
MAIN: LCALL R_1302 ;读出当前时间
LCALL DISPLAY
AJMP MAIN
DISPLAY: DJNZ R3,DISPLAY1
MOV R3,#118
CPL DPBIT
DISPLAY1:
SETB P2.7 ;关闭液晶背光
CLR P2.6 ;开启数码管显示
MOV A,HR ;第1位显示显示十位
SWAP A
ANL A,#00001111B
MOV DPTR,#SGTB
MOVC A,@A+DPTR
MOV P0,A
CLR P2.0
SETB P2.1
SETB P2.2
SETB P2.3
SETB P2.4
LCALL DELAY
LCALL SK1
MOV A,HR ;第2位显示小时个位
ANL A,#00001111B
MOV DPTR,#SGTB
MOVC A,@A+DPTR
JB DPBIT,DPXY1
ANL A,#01111111B
DPXY1: MOV P0,A
SETB P2.0
CLR P2.1
SETB P2.2
SETB P2.3
SETB P2.4
LCALL DELAY
LCALL SK1
MOV A,MIN ;第3位显示分钟十位
SWAP A
ANL A,#00001111B
MOV DPTR,#SGTB
MOVC A,@A+DPTR
MOV P0,A
SETB P2.0
SETB P2.1
CLR P2.2
SETB P2.3
SETB P2.4
LCALL DELAY
LCALL SK1
MOV A,MIN ;第4位显示分钟个位
ANL A,#00001111B
MOV DPTR,#SGTB
MOVC A,@A+DPTR
JB DPBIT,DPXY2
ANL A,#01111111B
DPXY2: MOV P0,A
SETB P2.0
SETB P2.1
SETB P2.2
CLR P2.3
SETB P2.4
LCALL DELAY
LCALL SK1
MOV A,SECOND ;第5位显示秒钟个位
ANL A,#00001111B
MOV DPTR,#SGTB
MOVC A,@A+DPTR
MOV P0,A
SETB P2.0
SETB P2.1
SETB P2.2
SETB P2.3
CLR P2.4
LCALL DELAY
LCALL SK1
MOV A,SECOND ;用P1.0~P1.5指示灯指示秒钟十位的0~5
SWAP A
ANL A,#00001111B
SEC0: CJNE A,#0,SEC1
MOV P1,#11111110B ;P1.0点亮,表示秒的10位数为0
SEC1: CJNE A,#1,SEC2
MOV P1,#11111101B ;P1.1点亮,表示秒的10位数为1
SEC2: CJNE A,#2,SEC3
MOV P1,#11111011B ;P1.2点亮,表示秒的10位数为2
SEC3: CJNE A,#3,SEC4
MOV P1,#11110111B ;P1.3点亮,表示秒的10位数为3
SEC4: CJNE A,#4,SEC5
MOV P1,#11101111B ;P1.4点亮,表示秒的10位数为4
SEC5: CJNE A,#5,SECE
MOV P1,#11011111B ;P1.5点亮,表示秒的10位数为5
SECE: NOP
RET
;************* 8位共阳数码管字型表 *****************
SGTB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
DB 88H,83H,0C6H,0A1H,86H,8EH,89H,0A3H,8CH,0C8H
;******** 延时子程序 ********
DELAY: MOV R1,#2
Y1: MOV R2,#200
DJNZ R2,$
DJNZ R1,Y1
RET
;------ 初始化1302 ------
SET1302: CLR RST
CLR CLK
SETB RST
MOV A,#8EH ;控制寄存器
LCALL W_BIT
MOV A,#00H ;写操作前WP=0
LCALL W_BIT
SETB CLK
CLR RST
MOV R0,#SECOND
MOV R7,#7 ;秒 分 时 日 月 星期 年
MOV R1,#80H ;秒写地址
SET1302A:
CLR RST
CLR CLK
SETB RST
MOV A,R1
LCALL W_BIT
MOV A,@R0
LCALL W_BIT
INC R0
INC R1
INC R1
SETB CLK
CLR RST
DJNZ R7,SET1302A
CLR RST
CLR CLK
SETB CLK
NOP
CLR RST
NOP
CLR CLK
SETB RST
MOV A,#90H
LCALL W_BIT
MOV A,#10100101B ;充电器设置
LCALL W_BIT
SETB CLK
CLR RST
CLR CLK
SETB RST
MOV A,#8EH
LCALL W_BIT
MOV A,#80H ;恢复写保护
LCALL W_BIT
SETB CLK
CLR RST
RET
;------读取一字节RAM ------
T_6061: CLR RST
CLR CLK
SETB RST
MOV A,R1
LCALL W_BIT
LCALL R_BIT
SETB CLK
CLR RST
RET
;------ 从DS1302读出7字节时间数据 ------
R_1302: MOV R0,#SECOND
MOV R7,#7
MOV R1,#81H ;秒地址
R_1302A: CLR RST
CLR CLK
SETB RST
MOV A,R1
LCALL W_BIT
LCALL R_BIT
MOV @R0,A
INC R0
INC R1
INC R1
SETB CLK
CLR RST
DJNZ R7,R_1302A
RET
;-----写任意一地址---R1 为地址,R0 为数据-----
SETONE: CLR CLK
CLR RST
CLR CLK
NOP
SETB RST
MOV A,#8EH
LCALL W_BIT
MOV A,#00H
LCALL W_BIT
SETB CLK
CLR RST
CLR CLK
NOP
CLR RST
CLR CLK
SETB RST
MOV A,R1
LCALL W_BIT
MOV A,R0
LCALL W_BIT
NOP
SETB CLK
CLR RST
NOP
NOP
CLR RST
CLR CLK
SETB RST
MOV A,#8EH
LCALL W_BIT
MOV A,#80H
LCALL W_BIT
SETB CLK
CLR RST
RET
;------ 写8位数据到DA1302 ------
W_BIT: MOV R4,#8
W_BIT1: RRC A
MOV IO,C
SETB CLK
CLR CLK
DJNZ R4,W_BIT1
RET
;------ 从DS1302读出8位数据 ------
R_BIT: MOV R4,#8
R_BIT1: MOV C,IO
RRC A
SETB CLK
CLR CLK
DJNZ R4,R_BIT1
RET
;----------------------------------
BCD_HEX:
MOV A,6FH
ANL A,#0FH
MOV B,A
MOV A,6FH
MOV 6FH,B
SWAP A
ANL A,#0FH
MOV B,#0AH
MUL AB
ADD A,6FH
;MOV 6FH,A
RET
HEX_BCD:
MOV A,6FH
MOV B,#10
DIV AB
SWAP A
ADD A,B
;MOV 6FH,A
RET
;=================================
SK1: JB K1,SK2
ACALL YS10MS
JB K1,SK2
ACALL SOUND
;K1DD: JNB K1,K1DD
SJMP SKRET
SK2: JB K2,SK3
ACALL YS10MS
JB K2,SK3
ACALL SOUND
;K2DD: JNB K2,K2DD
SJMP SKRET
SK3: JB K3,SK4
ACALL YS10MS
JB K3,SK4
ACALL SOUND
;K3DD: JNB K3,K3DD
SJMP SKRET
SK4: JB K4,SKRET
ACALL YS10MS
JB K4,SKRET
ACALL SOUND
;K4DD: JNB K1,K4DD
SKRET: RET
YS10MS: MOV R7,#128
DL1: MOV R6,#0FFH
DL0: DJNZ R6,DL0
DJNZ R7,DL1
RET
;******* 音效子程序 *******
SOUND: MOV R7,#228
SDL1: CPL P3.7
MOV R6,#0FFH
SDL0: DJNZ R6,SDL0
DJNZ R7,SDL1
RET
;=================================
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -