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

📄 ds1302.h

📁 1302时钟单片机库
💻 H
字号:
/*********************************************************************
目    的:   建立DS1302的操作库
	
目标系统:   基于AVR单片机
		                                                                
应用软件:   ICCAVR 6.31a
		                                                                
版    本:   Version 1.0                                                
		                                                                
圆版时间:   2007年4月12日
	
开发人员:   shinea8868

说    明:   若用于商业用途,请保留此段文字或注明代码来源
	
	扬州精雅科技有限公司拥有版权    
*********************************************************************/
/*-------------------------------------------------------------------
函数名称: void DS1302SetTime(uchar hour,uchar minutes,uchar second) 
函数功能: DS1302时间设定
参    数: uchar hour,uchar minutes,uchar second
返 回 值: 无
---------------------------------------------------------------------
函数名称: void DS1302Init(void) 
函数功能: 初始化时钟端口信息
参    数: 
返 回 值: 无
---------------------------------------------------------------------
函数名称: void DS1302GetTime(uchar *time) 
函数功能: 读DS1302时间
参    数: uchar hour,uchar minutes,uchar second
返 回 值: 无
-------------------------------------------------------------------*/

#ifndef DS1302_H
#define DS1302_H

#define DS1302RstOut	DDRD  |= (1<<7)
#define DS1302IOIn		DDRD  &=~(1<<6)
#define DS1302IOOut		DDRD  |= (1<<6)
#define DS1302SckOut	DDRD  |= (1<<5)

#define DS1302DataIn	(PIND & (1<<6))
#define DS1302DataSet	PORTD |= (1<<6)
#define DS1302DataClr	PORTD &=~(1<<6)

#define DS1302SckSet	PORTD |= (1<<5)
#define DS1302SckClr	PORTD &=~(1<<5)

#define DS1302RstSet	PORTD |= (1<<7)
#define DS1302RstClr	PORTD &=~(1<<7)

//#define DS1302WrAdd		0x80
//#define DS1302RdAdd		0x81

uchar AA; 

/********************************************************************  
 函 数 名:DS1302WrByte() 
 功    能:实时时钟写入一字节 
 说    明:往DS1302写入1Byte数据 (内部函数) 
 入口参数:d 写入的数据  
 返 回 值:无   
 ***********************************************************************/ 
void DS1302WrByte(uchar  x) 
{
	uchar i;
    DS1302IOOut; 
	for (i = 0; i < 8; i ++) 
	{
		if (x&(1<<i)) 
		{

			DS1302DataSet;
		}
		else 
		{
			DS1302DataClr;
		}
		DS1302SckSet; 	 	   			    /* CLK  to H */
	
		DS1302SckClr;						/* CLK  to L */
	}

}

/********************************************************************  
 函 数 名:uchar DS1302RdByte(void) 
 功    能:实时时钟读取一字节 
 说    明:从DS1302读取1Byte数据 (内部函数) 
 入口参数:无   
 返 回 值:ACC 
 ***********************************************************************/ 
uchar DS1302RdByte(void) 
{
	uchar i,k;
	DS1302IOIn;
	for (i = 0; i < 8; i ++) 
	{
		k = DS1302DataIn;        	   /*读数据,从低位开始  */
		if (k) 
		{
			AA|=(1<<i);
		}
		else 
		{
			AA&=~(1<<i);
		}
		DS1302SckSet; 	 	   			/* CLK  to H */	
		DS1302SckClr;					/* CLK  to L */
	}
	DS1302SckSet; 	 	   			    /* CLK  to H */
	
	DS1302SckClr;						/* CLK  to L */
	DS1302IOOut;
	return AA;
}

/********************************************************************  
 函 数 名:void DS1302Write(uchar ucAddr, uchar ucDa) 
 功    能:往DS1302写入数据 
 说    明:先写地址,后写命令/数据 (内部函数) 
 入口参数:ucAddr: DS1302地址, ucData: 要写的数据 
 返 回 值:无 
 ***********************************************************************/ 
void DS1302Write(uchar ucAddr, uchar ucDa) 
{
	DS1302RstClr;				/* RST  to L */
	DS1302SckClr;				/* CLK  to L */
	DS1302RstSet;				/* RST  to H */
	
	DS1302WrByte(ucAddr);		/* 地址,命令 */
	DS1302WrByte(ucDa);			/* 写1Byte数据*/ 

	DS1302SckSet;				/* CLK  to H */
	DS1302RstClr;				/* RST  to L */
} 

/********************************************************************  
 函 数 名:uchar DS1302Read(uchar ucAddr)
 功    能:读取DS1302某地址的数据 
 说    明:先写地址,后读命令/数据 (内部函数) 
 入口参数:ucAddr: DS1302地址 
 返 回 值:ucData :读取的数据 
***********************************************************************/ 
uchar DS1302Read(uchar ucAddr) 
{
	uchar ucData;
	DS1302RstClr;				/* RST  to L */
	DS1302SckClr;				/* CLK  to L */
	DS1302RstSet;				/* RST  to H */
	DS1302WrByte(ucAddr);		/* 地址,命令 */ 
	ucData = DS1302RdByte();	/* 读1Byte数据 */ 

	DS1302SckSet;				/* CLK  to H */
//	PORTD |= (1<<7);
	DS1302RstClr;				/* RST  to L */
	return ucData;
}
/*-----------------------------------------------------------------
函数名称: void DS1302SetTime(uchar hour,uchar minutes,uchar second) 
函数功能: DS1302时间设定
参    数: uchar hour,uchar minutes,uchar second
返 回 值: 无
-----------------------------------------------------------------*/
void DS1302SetTime(uchar hour,uchar minutes,uchar second)
{
 	DS1302Write(0x80,second);
	DS1302Write(0x82,minutes);
	DS1302Write(0x84,hour);
}
/*-----------------------------------------------------------------
函数名称: void DS1302GetTime(uchar *time) 
函数功能: 读DS1302时间
参    数: uchar hour,uchar minutes,uchar second
返 回 值: 无
-----------------------------------------------------------------*/
void DS1302GetTime(uchar *time)
{
 	*time++ = DS1302Read(0x85);
	*time++ = DS1302Read(0x83);
	*time++ = DS1302Read(0x81);
}
/*-----------------------------------------------------------------
函数名称: void DS1302Init(void) 
函数功能: 初始化时钟端口信息
参    数: 
返 回 值: 无
-----------------------------------------------------------------*/ 
void DS1302Init(void)
{
 	DS1302RstOut;	 			//DS1302复位信号设置为输出
	DS1302IOOut;				//DS1302数据信号设置为输出
	DS1302SckOut;				//DS1302时钟信号设定为输出
}
#endif


⌨️ 快捷键说明

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