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

📄 ds1302+-

📁 RM51单片机实验板配套实验例程库
💻
字号:

;****************************************************************
;*  ★★★     DS1302 + DS18B20电子钟测试实验程序      ★★★   *
;* (电子驿站单片机实验板、开发板配套例程,程序转载请著明出处。) *
;*  E-mail: support@ourmpu.com     QQ留言:451338254 476485321  *
;*  编程:ourmpu  http://www.ourmpu.com/ 更多例程请登陆网站     *
;****************************************************************
;*  数码管的1~4位显示时钟和分钟                                *
;*  数码管的第5位显示秒钟                                       *
;*  秒钟的十位由P1.0~P1.5发光二极管来指示,分别表示0~50妙     *
;*  实验时请将RST/CLK/IO分别接在P3.0/P3.1/P3.2上,插回P1口跳线  *
;*  本程序供参考,没有加入时间调整功能及定时,闹铃功能          *
;*  用户可以修改该程序,实现多点定时、定闹功能,定时时间设置    *
;*  可以保存在24C04或93C46上,实现断电保存设置                  *
;*  设置参数也可以保存在DS1302内部的31自己RAM当中,也可以保存   *
;****************************************************************
			
			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
			
			K2			BIT	P3.3
			K3			BIT	P3.4
			K4			BIT	P3.5
			
			DPBIT		BIT	00H	;半秒标志
			SSEC		BIT	01H	;设置妙
			SMIN		BIT	02H	;设置分
			SETHR		BIT	03H	;设置时
			SDATE		BIT	04H	;设置日
			SMON		BIT	05H	;设置月
			SDAY		BIT	06H	;设置星期
			SYEAR		BIT	07H	;设置年
			SETBIT	BIT	08H	;总设置状态标志
			
			MOV		P0,#0FFH
			MOV		P1,#0FFH
			MOV		P2,#0FFH
			MOV		P3,#0FFH
			MOV		20H,#00H
			MOV		SP,#60H
			
			
			MOV     	SECOND,#02H
        	MOV     	MIN,#28H
        	MOV     	HR,#21H
        	MOV     	DATE,#26H
        	MOV     	MONTH,#03H
        	MOV     	DAY,#03H
        	MOV     	YEAR,#08H
       	LCALL		SET1302   	;初始化为07年3月6日 星期二 18:28:00
			LCALL		STR1302		;启动计时

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	SK2

			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	SK2

			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	SK2

			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	SK2

			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	SK2
			
			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
         
;------ 启动1302计时 ------
STR1302: CLR    RST
         CLR    CLK
	      SETB   RST
         MOV    A,#8EH				;控制寄存器
         LCALL  W_BIT
         MOV    A,#00H				;写操作前WP=0
         LCALL  W_BIT

         SETB   CLK
         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         

;------ 写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

;=================================
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 + -