u8 RTC_Get(void)
{
static u16 daycnt=0;
u32 timecount=0;
u32 temp=0;
u16 temp1=0;
timecount=RTC_GetCounter();
temp=timecount/86400;
if(daycnt!=temp)
{
daycnt=temp;
temp1=1970;
while(temp>=365)
{
if(Is_Leap_Year(temp1))
{
if(temp>=366)temp-=366;
else {/*temp1++;*/break;} //就是这里不应该有temp1++
}
else temp-=365; //ƽÄê
temp1++;
}
calendar.w_year=temp1;//μÃμ½Äê·Y
temp1=0;
while(temp>=28)//3¬1yáËò»¸öÔÂ
{
if(Is_Leap_Year(calendar.w_year)&&temp1==1)
{
if(temp>=29)temp-=29;
else break;
}
else
{
if(temp>=mon_table[temp1])temp-=mon_table[temp1];
else break;
}
temp1++;
}
calendar.w_month=temp1+1;
calendar.w_date=temp+1;
}
temp=timecount%86400;
calendar.hour=temp/3600;
calendar.min=(temp%3600)/60;
calendar.sec=(temp%3600)%60;
calendar.week=RTC_Get_WeekDay(calendar.w_year,calendar.w_month,calendar.w_date);
return 0;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
这个while(){}的作用是计算当前年份中完整月份的个数(即temp1的大小);while后面括号里的temp一定符合这个条件1<=temp<=364;而在while中还要考虑闰年平年的因素,所以出现if括号中的限制条件,其中temp1==1这个条件主要是限制闰年中非二月的月份进入if体中。写的不是太好,希望你再仔细理解一下。
一周热门 更多>