发现了正点RTC程序的一个错误,你们看看我找的对不对

2019-10-15 20:48发布


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;
}         


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
8条回答
shichuang
2019-10-16 08:52
慕名兰 发表于 2016-10-18 12:19
楼主还在吗???这里有点不懂:
while(temp>=28)//3¬1yáËò»¸öÔÂ
...

这个while(){}的作用是计算当前年份中完整月份的个数(即temp1的大小);while后面括号里的temp一定符合这个条件1<=temp<=364;而在while中还要考虑闰年平年的因素,所以出现if括号中的限制条件,其中temp1==1这个条件主要是限制闰年中非二月的月份进入if体中。写的不是太好,希望你再仔细理解一下。

一周热门 更多>