找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3294|回复: 0
打印 上一主题 下一主题
收起左侧

51单片机年月日算星期精简算法

[复制链接]
跳转到指定楼层
楼主
ID:127902 发表于 2016-6-25 00:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
MCU51单片机年月日算星期精简算法
从2000/1/1------2099/12/31测试通过。
//判断是否是閏年,閏年2月是29天 公式:366%7=2;如真是是要计算万年用if(((y%4==0)&&(y%100!=0))||(y%400==0))) 這是减少编译代码长度

MCU51年月日算星期精简算法
#include <reg52.h>
unsigned char getweek(unsigned char,unsigned char,unsigned char);

unsigned char getweek(unsigned char year,unsigned char month,unsigned char day)
{
unsigned char week,tp;     
tp=0;week=5;                //初始化2000-01-01星期六
while(tp!=year){            //处理年(2000开始)
  week++;              //是上一年的星期的下一天 公式:365%7=1
  if(tp%4==0)week++;   //判断是否是閏年,閏年2月是29天 公式:366%7=2
  tp++;                //下一年的1月1日
}
tp=1;
while(tp!=month){                           //处理月(1月开始)
  switch(tp){
   case 1:case 3:case 5:case 7:case 8:case 10:case 12: week=week+3;break;  //大月天数31%7
   case 2: if(year%4==0)week++;break;           //閏月天数,閏年2月是29天 公式:366%7=2 29%7
   case 4:case 6:case 9:case 11: week=week+2;break;                         //小月天数30%7
  }
  tp++;                                              //处理月
}
week=week+day;  //处理日(從1日开始)
week=week%7;
if(week==0) week=7;
return week;        //返回星期
}


在以下的电子钟制作中,使用了这种算法:



评分

参与人数 1黑币 +5 收起 理由
我在火星吃土豆 + 5 赞一个!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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