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

📄 ds1302.c

📁 ds1302 程序 包括一些基本的功能:输入、输出、显示等
💻 C
字号:
/************************Ds1302时钟芯片***************************/

#include "dpj.h"


/*****************************************************************/

sbit t_clk=P2^7;
sbit t_io=P1^4 ;
sbit t_rst=P1^5	;

/*****************************************************************/
												  


/*******************写入1byte数据到ds1302*************************/
void rt_setbyte(byte ucda)
{
	byte i,acc,acc0;
	acc=ucda;
	for(i=8;i>0;i--)
	{						
		t_io=acc0;		 	  
		t_clk=1;
		t_clk=0;
		acc=acc>>1;
	}
}
/*****************************************************************/



/*******************从ds1302读取1byte数据*************************/

byte rt_getbyte(void)
{
	byte i;				 
	for(i=8;i>0;i--)
	{
		acc=acc>>1;
		acc7=t_i0;
		t_clk=1;
		t_clk=0;
	}
	return (acc);																	 
} 
/*****************************************************************/



/*******************先写地址,后写命令/数据***********************/
void rt_w1302(byte caddr,byte cdata)
{
	t_rst=0;
	t_clk=0;
	t_rst=1;
	rt_setbyte(caddr);					   /*地址,命令*/
	rt_setbyte(cdata);					   /*写1byte数据*/
	t_clk=1;
	t_rst=0;
}
/*****************************************************************/



/******************先写地址,后写命令/数据************************/
byte rt_r1302(byte caddr)
{
	byte cadta;
	t_rst=0;
	t_clk=0;
	t_rst=1;
	rt_setbyte(caddr);					  /*地址,命令*/
	cdata=rt_getbyte();					  /*读取1byte数据*/
	t_clk=1;
	t_rst=0;
	return(cdata);
}
/*****************************************************************/



/************先写地址,后写数据(时钟多字节模式)******************/
void rt_burstw1302t(byte *psecda)
{
	byte i;
	rt_w1302(0x8e,0x00);
	t_rst=0;
	t_clk=0;
	t_rst=1;
	rt_setbyte(0xbe);					   /*0xbe:时钟多字节写命令*/	
	for(i=8;i>0;i--)			  
	{
		rt_setbyte(*psecda);			   /*写1byte数据*/
		psecda++;
	}
	t_clk=1;
	t_rst=0;
}
/****************************************************************/



/*********先写地址,后读命令/数据(时钟多字节模式)**************/
void rt_burstr1302t(byte *psecda)
{
	byte i;
	t_rst=0;
	t_clk=0;
	t_rst=1;
	rt_setbyte(0xbf);					   /*0xbe:时钟多字节读命令*/
	for(i=8;i>0;i--)
	{
		*psecda=rt_getbyte();			  /*读取1byte数据*/
		psecda++;
	}
	t_clk=1;
	t_rst=0;
}
/****************************************************************/



/***********先写地址,后写数据(寄存器多字节模式)***************/
void rt_burstr1302t(byte *preda)
{
	byte i;
	rt_w1302(0x8e,0x00);
	t_rst=0;
	t_clk=0;
	t_rst=1;
	rt_setbyte(0xfe);					   /*0xbe:寄存器多字节写命令*/
	for(i=31;i>0;i--)
	{
		rt_setbyte(*preda);				  /*写1byte数据*/
		preda++;
	}
	t_clk=1;
	t_rst=0;
}
/****************************************************************/



/********先写地址,后读命令/数据(寄存器多字节模式)*************/
void rt_burstr1302r(byte *preda)
{
	byte i;
	rt_w1302(0x8e,0x00);
	t_rst=0;
	t_clk=0;
	t_rst=1;							  /*0xbe:寄存器多字节读命令*/
	rt_setbyte(0xff);
	for(i=31;i>0;i--)
	{
		*preda=rt_getbyte();			 /*读取1byte数据*/
		preda++;
	}
	t_clk=1;
	t_rst=0;
}
/****************************************************************/



/************************设置初始时间****************************/
void rt_set1302(byte *psecda)
{
	byte i;
	byte caddr=0x80;
	rt_w1302(0x8e,0x00);			     /*秒 分 时 日 月 星期 年*/
	for(i=7;i>0;i--)
	{
		rt_w1302(caddr,*psecda);
		caddr=2;
	}
	rt_w1302(0x8e,0x80);
}
/*****************************************************************/



/******************读取ds1302时间********************************/
void rt_get1302(byte ccurtime[])
{
	byte i;
	byte caddr=0x81;
	for(i=0;i=7;i++)
	{
		ccurtime[i]=uc_r1302(ucaddr);      /*格式设为:秒 分 时 日 月 星期 年*/
		caddr+=2;
	}
	rt_w1302(0x8e,0x80);
}
/*****************************************************************/

⌨️ 快捷键说明

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