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

📄 ds1302.c

📁 ds1302使用例程
💻 C
📖 第 1 页 / 共 2 页
字号:
	*/
	
	ds1302_writebyte(RTC_ADDR_WP,0x00);										// disenable写保护
	ds1302_writebyte(RTC_ADDR_MIN,int2bcd(CurrentTime.tm_min));
	ds1302_writebyte(RTC_ADDR_HOUR,(int2bcd(CurrentTime.tm_hour)& 0x7f));
	ds1302_writebyte(RTC_ADDR_DATE,int2bcd(CurrentTime.tm_mday));
	ds1302_writebyte(RTC_ADDR_MON,int2bcd(CurrentTime.tm_mon));
	ds1302_writebyte(RTC_ADDR_WEEK,int2bcd(CurrentTime.tm_wday));
	ds1302_writebyte(RTC_ADDR_YEAR,int2bcd(CurrentTime.tm_year));
	ds1302_writebyte(RTC_ADDR_TCS,0xa6);									// 充电
	ds1302_writebyte(0x0cc,0x01);											// 写RAM
	ds1302_writebyte(RTC_ADDR_SEC,(int2bcd(CurrentTime.tm_sec) & 0x7f));
	ds1302_writebyte(RTC_ADDR_WP,0x80);										// enable写保护
		
}

/**********************************************************************************
// TIME格式的时间写入
void SysTimeWriteTime(INT32 Second)  //写时间
{

	tm WrTime;
	WrTime = *localtime((const time_t *)&Second); 
//	WrTime = 0x0; 
	WrTime.tm_year += 1900; //tm是从1900年开始
	WrTime.tm_mon  += 1;    //tm是从0开始的月

	WrTime.tm_year -= 2000;
	SysTimeWrite(WrTime);

}
***********************************************************************************/
/*
**-------------------------------------------------------------------------------------------------
**函数名:SysDs1302Charge()
**功能描述:充电
**输入:
**输出:
**建立时间:2008.10.19
**-------------------------------------------------------------------------------------------------
**
*/
void SysDs1302Charge(void)  
{
	ds1302_writebyte(RTC_ADDR_WP,0x00);		// disenable写保护
	ds1302_writebyte(RTC_ADDR_TCS,0xa6);	// 充电
	ds1302_writebyte(RTC_ADDR_WP,0x80);		// enable写保护
}

/*
**-------------------------------------------------------------------------------------------------
**函数名:bcd2int(int val)
**功能描述:BCD转整型
**输入:
**输出:
**建立时间:2008.10.19
**-------------------------------------------------------------------------------------------------
**
*/
INT16  bcd2int(INT16 val)
{
	return((((val & 0xf0) >> 4) * 10) + (val & 0xf));
}
/*
**-------------------------------------------------------------------------------------------------
**函数名:int2bcd(int val)
**功能描述:整型转BCD
**输入:
**输出:
**建立时间:2008.10.19
**-------------------------------------------------------------------------------------------------
**
*/
INT16  int2bcd(INT16 val)
{
	return ((((val/10) & 0x0f)<<4) | ((val%10) & 0x0f));
}
/*
**-------------------------------------------------------------------------------------------------
**函数名:SysTimeRead()
**功能描述:读时间
**输入:
**输出:
**建立时间:2008.10.19
**-------------------------------------------------------------------------------------------------
**
*/
tm OldTime;
INT32 SysTimeRead(void)
{
	INT32	Res;
	tm CurrentTime; // realtime;
	//	struct timespec SpecTime;	
	//	time_t stime;
	
	CurrentTime.tm_yday = 0; // 天 未存储
	CurrentTime.tm_wday = bcd2int(ds1302_readbyte(RTC_ADDR_WEEK));
	CurrentTime.tm_year = bcd2int(ds1302_readbyte(RTC_ADDR_YEAR))+100;
	CurrentTime.tm_mon 	= bcd2int(ds1302_readbyte(RTC_ADDR_MON))-1;
	CurrentTime.tm_mday = bcd2int(ds1302_readbyte(RTC_ADDR_DATE));
	CurrentTime.tm_hour = bcd2int(ds1302_readbyte(RTC_ADDR_HOUR));
	CurrentTime.tm_min 	= bcd2int(ds1302_readbyte(RTC_ADDR_MIN));
	CurrentTime.tm_sec 	= bcd2int(ds1302_readbyte(RTC_ADDR_SEC));

	
	OldTime.tm_wday = bcd2int(ds1302_readbyte(RTC_ADDR_WEEK));
	OldTime.tm_year = bcd2int(ds1302_readbyte(RTC_ADDR_YEAR))+100;
	OldTime.tm_mon 	= bcd2int(ds1302_readbyte(RTC_ADDR_MON))-1;
	OldTime.tm_mday = bcd2int(ds1302_readbyte(RTC_ADDR_DATE));
	OldTime.tm_hour = bcd2int(ds1302_readbyte(RTC_ADDR_HOUR));
	OldTime.tm_min 	= bcd2int(ds1302_readbyte(RTC_ADDR_MIN));
	OldTime.tm_sec 	= bcd2int(ds1302_readbyte(RTC_ADDR_SEC));

/*
	mktime(&CurrentTime);
	printf ( "%d\n", mktime(&CurrentTime) );
	SpecTime.tv_sec= mktime(&CurrentTime);
	SpecTime.tv_nsec = 0;
	Res = clock_settime(CLOCK_REALTIME, &SpecTime);			// 设置时间到系统
	stime = time(NULL);										// 从系统读到秒形式时间
	Res = time(NULL);										// 从系统读到秒形式时间
	return Res;
	
	realtime = *localtime(&stime);							// 把秒形式时间转换成结构时间
	printf ( "time is :%s\n", asctime(&realtime) );
*/
}
/*
**-------------------------------------------------------------------------------------------------
**函数名:upPowerDS1302Chk()
**功能描述:DS1302上电自检
**输入:
**输出:
**建立时间:2008.10.19
**-------------------------------------------------------------------------------------------------
**
*/
INT16 upPowerDS1302Chk(void)
{ 
	ds1302_writebyte(RTC_ADDR_WP,0x00);						// disenable写保护
	ds1302_writebyte(RTC_RAM_STR, 0x55);
	ds1302_writebyte(RTC_ADDR_WP,0x80);						// enable写保护
	if (ds1302_readbyte(RTC_RAM_STR + 1) != 0x55) 
	{
		return (DS1302_SEL_CHEK_FAIL);						// 读的时候地址加1
	}

	ds1302_writebyte(RTC_ADDR_WP,0x00);						// disenable写保护
	ds1302_writebyte(RTC_RAM_STR, 0xaa);
	ds1302_writebyte(RTC_ADDR_WP,0x80);						// enable写保护
	if (ds1302_readbyte(RTC_RAM_STR + 1) != 0xaa) 
	{
		return (DS1302_SEL_CHEK_FAIL);
	}

	return (DS1302_SEL_CHEK_SUCC);
}

/*
**-------------------------------------------------------------------------------------------------
**函数名:ds1302_gettod()
**功能描述:读时间
**			This is called direct from the kernel timer handling code.
**			It gets the current time from the RTC.
**输入:
**输出:
**建立时间:2008.10.19
**-------------------------------------------------------------------------------------------------
**
*/
/*
void ds1302_gettod()
{
	INT32 year, mon,  day,  hour,  min,  sec,tcs,week;

	week = bcd2int(ds1302_readbyte(RTC_ADDR_WEEK));
	year = bcd2int(ds1302_readbyte(RTC_ADDR_YEAR));
	mon = bcd2int(ds1302_readbyte(RTC_ADDR_MON));
	day = bcd2int(ds1302_readbyte(RTC_ADDR_DATE));
	hour = bcd2int(ds1302_readbyte(RTC_ADDR_HOUR));
	min = bcd2int(ds1302_readbyte(RTC_ADDR_MIN));
	sec = bcd2int(ds1302_readbyte(RTC_ADDR_SEC));
    
	printf("year=%d mon=%d day=%d hour=%d min=%d sec=%d  week=%d\n  ",year,mon,day,hour,min,sec,week);
	year = (ds1302_readbyte(RTC_ADDR_YEAR));
	mon = (ds1302_readbyte(RTC_ADDR_MON));
	day = (ds1302_readbyte(RTC_ADDR_DATE));
	hour = (ds1302_readbyte(RTC_ADDR_HOUR));
	min = (ds1302_readbyte(RTC_ADDR_MIN));
	sec = (ds1302_readbyte(RTC_ADDR_SEC));

	printf("year=%d mon=%d day=%d hour=%d min=%d sec=%d \n  ",year,mon,day,hour,min,sec);
}
*/
/*
**-------------------------------------------------------------------------------------------------
**函数名:upPowerDS1302BatChk()
**功能描述:DS1302上电备用电池自检
**输入:
**输出:
**建立时间:2008.10.19
**-------------------------------------------------------------------------------------------------
**
*/
/*
int upPowerDS1302BatChk(void)
{ 
	struct tm TempTime;

	TempTime = *localtime((const time_t *)&(TimeSys.Second));
	TempTime.tm_year += 1900;
	if((TempTime.tm_year > 2035) || (TempTime.tm_year < 2007)) return(0);

    return(1);

}
*/

/*
void  time1() 
{

	taskSpawn("idprint", 70,0,10000,(FUNCPTR)idprint, 0,0,0,0,0,0,0,0,0,0); 

}

void idprint(void)
{ 
	ds1302_reset();

	struct tm Time;
	Time.tm_year = 0x06;
	Time.tm_mon = 0x12;
	Time.tm_mday = 0x26;
	Time.tm_hour = 0x09;
	Time.tm_min = 0x07;
	Time.tm_sec = 0x00;

	for(;;)
	{
		taskDelay(120);
		SysTimeWrite(Time);
		INT32 i = SysTimeRead();
		//	ds1302_gettod();
		taskDelay(120);
		//	inittime();

	}
}
*/








⌨️ 快捷键说明

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