u8 RTC_Set(u16 year,u8 mon,u8 day,u8 hour,u8 min,u8 sec)
{
u16 t;
u32 secCount=0;
if(year<1970||year>2099)
return 1;//³ö´í
for(t=1970;t<year;t++) //把所有年份的秒钟相加
{
if(Is_Leap_Year(t))//闰年
secCount+=31622400;//闰年的秒钟数
else
secCount+=31536000;
}
mon-=1;//先减掉一个月再算秒数(如现在是5月10日,则只需要算前4个月的天数,再加上10天,然后计算秒数)
for(t=0;t<mon;t++)
{
secCount+=(u32)mon_table[t]*86400;//月份秒钟数相加
if(Is_Leap_Year(year)&&t==1)
secCount+=86400;//闰年,2月份增加一天的秒钟数
}
secCount+=(u32)(day-1)*86400;//把前面日期的秒钟数相加(这一天还没过完,所以-1)
secCount+=(u32)hour*3600;//小时秒钟数
secCount+=(u32)min*60;//分钟秒钟数
secCount+=sec;
// RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP,ENABLE);
// PWR_BackupAccessCmd(ENABLE);
RTC_SetCounter(secCount);//设置RTC计数器的值
RTC_WaitForLastTask(); //等待最近一次对RTC寄存器的写操作完成
RTC_Get();//更新时间
return 0;
}
给你看一段代码,都需要自己去匹配算法的。
|