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

📄 ds1302+ds18b20+ʦ

📁 RM51单片机实验板配套实验例程库
💻
📖 第 1 页 / 共 2 页
字号:
TSR6:	DJNZ 	R0,TSR6
TSR7:	SETB 	DQ
	JNB	DQ,$
	RET


READ18B20:
	MOV 	R2,#8
RE01:	CLR 	C
	SETB 	DQ
	NOP
	NOP
	CLR 	DQ
	NOP
	NOP
	NOP
	SETB 	DQ
	MOV 	R3,#6
RE10:	DJNZ 	R3,RE10
	MOV 	C,DQ
	MOV 	R3,#20
RE20:	DJNZ 	R3,RE20
	RRC 	A
	DJNZ 	R2,RE01
	MOV 	@R1,A
	INC 	R1
	DJNZ 	R4,READ18B20
	RET

;写DS18OK的子程序
WRITE18B20:
	MOV 	R2,#8
	CLR 	C
WR18:	CLR 	DQ
	MOV 	R3,#6
	DJNZ 	R3,$
	RRC 	A
	MOV 	DQ,C
	MOV 	R3,#20
	DJNZ 	R3,$
	SETB 	DQ
	NOP
	DJNZ 	R2,WR18
	SETB 	DQ
	RET

DISPXS:
	DB	00H,00H,00H,00H,00H,06H,02H,05H,01H,02H,05H,00H,01H,08H,07H,05H
	DB	02H,05H,00H,00H,03H,01H,02H,05H,03H,07H,05H,00H,04H,03H,07H,05H
	DB	05H,00H,00H,00H,05H,06H,02H,05H,06H,02H,05H,00H,06H,08H,07H,05H
	DB	07H,05H,00H,00H,08H,01H,02H,05H,08H,07H,05H,00H,09H,03H,07H,05H
TABHEX:	DB	30H,31H,32H,33H,34H,35H,36H,37H,38H,39H,41H,42H,43H,44H,45H,46H

;=======================================================
DISPLAY:	NOP
			
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

;=================================
SKEY:		NOP
SK1:		JB		K1,SK2
			ACALL	YS10MS
			JB		K1,SK2
			ACALL	SOUND
K1DD:		JNB	K1,K1DD
			CPL	BLABIT		;开关背光
			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         
			
YS800M:	MOV	R3,#40		;延时
Y5_1:	MOV	R4,#10 		;[1]延时
Y5_2:	MOV	R5,#228		;[1]
	DJNZ	R5,$		;[2]
	DJNZ	R4,Y5_2		;[2]
	DJNZ	R3,Y5_1		;[2]
	RET			;[1]
			
;=================================

			END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -