找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3312|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

51單片機(jī)年月日算星期精簡算法

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:127902 發(fā)表于 2016-6-25 00:07 | 只看該作者 回帖獎勵 |倒序?yàn)g覽 |閱讀模式
MCU51單片機(jī)年月日算星期精簡算法
從2000/1/1------2099/12/31測試通過。
//判斷是否是閏年,閏年2月是29天 公式:366%7=2;如真是是要計(jì)算萬年用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;  //大月天數(shù)31%7
   case 2: if(year%4==0)week++;break;           //閏月天數(shù),閏年2月是29天 公式:366%7=2 29%7
   case 4:case 6:case 9:case 11: week=week+2;break;                         //小月天數(shù)30%7
  }
  tp++;                                              //處理月
}
week=week+day;  //處理日(從1日開始)
week=week%7;
if(week==0) week=7;
return week;        //返回星期
}


在以下的電子鐘制作中,使用了這種算法:



評分

參與人數(shù) 1黑幣 +5 收起 理由
我在火星吃土豆 + 5 贊一個!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表