OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2585|回复: 3

RTC关于星期的问题?

[复制链接]

1

主题

2

帖子

0

精华

新手入门

积分
26
金钱
26
注册时间
2014-12-22
在线时间
2 小时
发表于 2015-12-30 10:37:17 | 显示全部楼层 |阅读模式
1金钱
RTC 例程中有段代码是关于星期几的计算的
                                                                                         

[mw_shl_code=c,true]u8 const table_week[12]={0,3,3,6,1,4,6,2,5,0,3,5}; //  

const u8 mon_table[12]={31,28,31,30,31,30,31,31,30,31,30,31};
u8 RTC_Set(u16 syear,u8 smon,u8 sday,u8 hour,u8 min,u8 sec)
{
        u16 t;
        u32 seccount=0;
        if(syear<1970||syear>2099)return 1;           
        for(t=1970;t<syear;t++)        //°&#209;&#203;ùóD&#196;ê·Yμ&#196;&#195;&#235;&#214;ó&#207;à&#188;ó
        {
                if(Is_Leap_Year(t))seccount+=31622400;//
                else seccount+=31536000;                          //
        }
        smon-=1;
        for(t=0;t<smon;t++)           //
        {
                seccount+=(u32)mon_table[t]*86400;//
                if(Is_Leap_Year(syear)&&t==1)seccount+=86400;//
        }
        seccount+=(u32)(sday-1)*86400;//
        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_WaitForLastTask();        //        
        RTC_Get();
        return 0;            
}[/mw_shl_code]

请问一下u8 const table_week[12]={0,3,3,6,1,4,6,2,5,0,3,5}; 中的{0,3,3,6,1,4,6,2,5,0,3,5}  是怎么计算来的?


最佳答案

查看完整内容[请看2#楼]

http://dhcp.tcgs.tc.edu.tw/c/p015.htm
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

239

帖子

0

精华

高级会员

Rank: 4

积分
545
金钱
545
注册时间
2015-6-5
在线时间
110 小时
发表于 2015-12-30 10:37:18 | 显示全部楼层
http://dhcp.tcgs.tc.edu.tw/c/p015.htm
回复

使用道具 举报

1

主题

2

帖子

0

精华

新手入门

积分
26
金钱
26
注册时间
2014-12-22
在线时间
2 小时
 楼主| 发表于 2015-12-30 13:23:37 | 显示全部楼层
Rocks 发表于 2015-12-30 10:45
http://dhcp.tcgs.tc.edu.tw/c/p015.htm

谢谢。
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
3
金钱
3
注册时间
2016-1-4
在线时间
0 小时
发表于 2016-1-4 10:38:00 | 显示全部楼层
//基姆拉尔森计算公式
int KimlarssonWeek(int year, int month, int day)
{
        int week;
        if(month<3)
        {
                year--;
                month= month+12;
        }
       
        week=(day+2*month+3*(month+1)/5+year+year/4-year/100+year/400)%7;
        return week;
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-21 22:13

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表