- 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;
- }
- 给你看一段代码,都需要自己去匹配算法的。
|