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

📄 ds1302.c

📁 PIC MCU操作DS1302全部功能的C代码,可以在PICC1618 C18C30上移植使用.
💻 C
字号:
	#include "DS1302.h"

/************************************
名称:DS1302In8Bit
功能:向DS1302输入一字节数据
入口:需要输入的字节DAT
出口:无
说明:
************************************/
	void DS1302In8Bit(unsigned char dat)
	{
	 unsigned char cnt;
	//端口初始化
	 DS1302DAT=0;
	 DS1302DAT_T=0;
	//传送数据
	 for(cnt=8;cnt>0;cnt--)
		{
		 if(dat&0x01)
			{DS1302DAT=1;}
		 else
			{DS1302DAT=0;}
		 DS1302CLK=0;
		 DS1302CLK=1;
		 dat>>=1;
		}
	 //端口复位
	 DS1302DAT=0;
	}

/************************************
名称:DS1302Out8Bit
功能:DS1302输出一字节数据
入口:无
出口:DS1302返回值
说明:
************************************/
	unsigned char DS1302Out8Bit(void)
	{
	 unsigned char cnt,temp;
	//端口初始化
	 DS1302DAT=0;
	 DS1302DAT_T=1;
	//传送数据
	 temp=0;
	 for(cnt=8;cnt>0;cnt--)
		{
		 DS1302CLK=1;
		 temp>>=1;
		 DS1302CLK=0;
		 if(DS1302DAT>0)
			{temp|=0x80;}
		 else
			{temp&=0x7f;}
		}
	 //端口复位
	 DS1302DAT=0;
	 DS1302DAT_T=0;
	 return(temp);
	}

/************************************
名称:DS1302WritByte
功能:向DS1302中指定地址写入一字节数据
入口:地址add,数据dat
出口:无
说明:
************************************/
	void DS1302WritByte(unsigned char add,unsigned char dat)
	{
	 DS1302RTS=1;	//使能传输
	 DS1302In8Bit(add);
	 DS1302In8Bit(dat);
	 DS1302CLK=0;
	 DS1302RTS=0;	//关闭传输
	}

/************************************
名称:DS1302ReadByte
功能:从DS1302中指定地址读一字节数据
入口:地址add
出口:读出的数据
说明:
************************************/
	unsigned char  DS1302ReadByte(unsigned char add)
	{
	 unsigned char temp;
	 DS1302RTS=1;	//使能传输
	 DS1302In8Bit(add);
	 temp=DS1302Out8Bit();
	 DS1302CLK=0;
	 DS1302RTS=0;	//关闭传输
	 return(temp);
	}

/************************************
名称:TimeSet
功能:设定DS1302中时间寄存器
入口:时间数据指针
出口:无
说明:指针对应时间数据的顺序为:
	  秒、分、时、日、月、星期、年,
	  全部采用BCD编码
************************************/
	void TimeSet(unsigned char *timept)
	{
	 unsigned char cnt,addr;
	 unsigned char *ptbak;
	 ptbak=timept;
	 timept++;
	 DS1302WritByte(PROT_ADD_W,PROTECT_DE);	//关闭写保护
	 addr=MIN_ADD_W;	//选择秒写地址
	 for(cnt=6;cnt>0;cnt--)
		{
		 DS1302WritByte(addr,*timept);	//写入参数
		 addr+=2;timept++;				//指针调整
		}
	 DS1302WritByte(SEC_ADD_W,((*ptbak)&0x7f));
	 DS1302WritByte(PROT_ADD_W,PROTECT_EN);	//使能写保护
	}

/************************************
名称:TimeRead
功能:读取DS1302中时间寄存器
入口:时间数据指针
出口:无
说明:指针对应时间数据的顺序为:
	  秒、分、时、日、月、星期、年,
	  全部采用BCD编码
************************************/
	void TimeRead(unsigned char *timept)
	{
	 unsigned char cnt,addr;
	 addr=SEC_ADD_R;	//选择秒读地址
	 for(cnt=7;cnt>0;cnt--)
		{
		 *timept=DS1302ReadByte(addr);	//读出参数
		 addr+=2;timept++;				//指针调整
		}
	}

/************************************
名称:SNWrit
功能:DS1302中RAM数据写入
入口:数据指针
出口:无
说明:写入顺序为RAM0、RAM1……RAM30
************************************/
	void SNWrit(unsigned char *datpt)
	{
	 unsigned char cnt,addr;
	 DS1302WritByte(PROT_ADD_W,PROTECT_DE);	//关闭写保护
	 addr=RAM0_ADD_W;	//选择秒写地址
	 for(cnt=31;cnt>0;cnt--)
		{
		 DS1302WritByte(addr,*datpt);	//写入参数
		 addr+=2;datpt++;				//指针调整
		}
	 DS1302WritByte(PROT_ADD_W,PROTECT_EN);	//使能写保护
	}

/************************************
名称:SNRead
功能:读取DS1302中RAM寄存器
入口:数据指针
出口:无
说明:读出顺序为RAM0、RAM1……RAM30
************************************/
	void SNRead(unsigned char *datpt)
	{
	 unsigned char cnt,addr;
	 addr=RAM0_ADD_R;
	 for(cnt=31;cnt>0;cnt--)
		{
		 *datpt=DS1302ReadByte(addr);	//读出参数
		 addr+=2;datpt++;				//指针调整
		}
	}

/************************************
名称:ChargerEnable
功能:使能充电
入口:无
出口:无
说明:
************************************/
	void ChargerEnable(void)
	{
	 DS1302WritByte(PROT_ADD_W,PROTECT_DE);	//关闭写保护
	 DS1302WritByte(CHARG_ADD_W,CHARGER_EN);//充电控制
	 DS1302WritByte(PROT_ADD_W,PROTECT_EN);	//使能写保护
	}

/************************************
名称:ChargerClose
功能:停止充电
入口:无
出口:无
说明:
************************************/
	void ChargerClose(void)
	{
	 DS1302WritByte(PROT_ADD_W,PROTECT_DE);	//关闭写保护
	 DS1302WritByte(CHARG_ADD_W,CHARGER_DE);//充电控制
	 DS1302WritByte(PROT_ADD_W,PROTECT_EN);	//使能写保护
	}

/************************************
名称:DS1302Init
功能:DS1302初始化
入口:无
出口:无
说明:
************************************/
	void DS1302Init(void)
	{
	 DS1302CLK=0;
	 DS1302DAT=0;
	 DS1302RTS=0;
	 DS1302CLK_T=0;
	 DS1302DAT_T=0;
 	 DS1302RTS_T=0;
	 
	 DS1302WritByte(PROT_ADD_W,PROTECT_DE);	//关闭写保护
	 DS1302WritByte(CHARG_ADD_W,CHARGER_DE);//充电控制
	 DS1302WritByte(PROT_ADD_W,PROTECT_EN);	//使能写保护
	}


⌨️ 快捷键说明

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