OpenEdv-开源电子网

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

基于ds1302设计万年历中,计算星期几的方法

[复制链接]

5

主题

47

帖子

0

精华

高级会员

Rank: 4

积分
680
金钱
680
注册时间
2019-5-18
在线时间
101 小时
发表于 2019-7-26 17:00:00 | 显示全部楼层 |阅读模式
// 星期判定,2000.1.1(星期六)为基准,对以后100年内,星期是有效的。即(2000~2100)
unsigned char setWeek(unsigned char TIME6,unsigned char TIME4,unsigned char TIME3)
{
        unsigned char code table[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
        unsigned char j=0, wk=0;                       // j 用于记录从2000年到你设定的那一年(不包括你设定的年)之间有几个闰年,wk 用于存放你求出的星期几
        unsigned int sum=0, i, allyear;                 // sum 用于存放从2000年到你设定的那一年一共有多少天,sum最大到65535
        allyear = year*100 + TIME6;                   // 这里的year是你设定年的前两位,TIME6是后两位
        sum = TIME3;                       
        for(i=0;i<TIME4;i++)
        {
                sum += table[i];
        }
        if((allyear%4==0)&&(allyear%100!=0)||(allyear%400==0))
        {
                if(TIME4 > 2)
                        sum++;
        }
        for(i=2000;i<allyear;i++)
        {
                if((i%4==0)&&(i%100!=0)||(i%400==0))
                        j++;
        }
        if(allyear >1999 && allyear < 2101)                   // 确保不超出设定的范围2000~2100                                    
                sum = sum + (allyear-2000)*365 + j + 5; // 5是由基准星期6-1得到
        wk = sum%7;
        if(wk==0)
                wk = 7;
        return wk;       
}


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-23 12:49

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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