跟大家分享一個非常精簡的夏令時轉換程序,程序是通用的可以在51、430、PIC、瑞薩系列的單片機上使用

#include "reg52.h"

/*歐洲夏令時於以下日期的格林尼治標準時間1:00開始(時鐘提前一個小時):
2008年3月30日
2009年3月29日
2010年3月28日
2011年3月27日
用於計算歐洲夏令時開始時間的公式爲:
3月(31-(5y÷4+4) mod 7)日的1:00(格林尼治標準時間)
(至2099年有效)其中y指年份,而對於非負數a,a mod b表示將a和b截尾後,兩數相除所得的餘數。

歐洲夏令時於以下日期的格林尼治標準時間1:00結束(時鐘調後一個小時):
2008年10月26日
2009年10月25日
2010年10月31日
2011年10月30日
用於計算歐洲夏令時結束始時間的公式爲:
10月(31-(5y÷4+1) mod 7)日的1:00(格林尼治標準時間)
(至2099年有效)
*/

unsigned char DSTdatestart (unsigned int y)
{
unsigned char day;
day=(31-(5*y/4+4)%7);
return day;
}

unsigned char DSTdateend (unsigned int y)
{
unsigned char day;
day=(31-(5*y/4+1)%7);
return day;
}

void main (void)
{
unsigned int y=2010;
unsigned char day1,day2;
day1=DSTdatestart(y);
day2=DSTdateend(y);
while(1)
{
;
}
}

 

哈哈,是不是比較精簡啊,用Keil uVision3的編譯結果如下:

Program Size: data=11.0 xdata=0 code=214

"EuropeanDST" - 0 Error(s), 0 Warning(s).

 到現在爲止我覺得我這個夏令時計算程序是非常精簡的,我還有一個夏令時計算的程序是前年編的,程序代碼非常的龐大,大家看了肯定會嚇暈過去,所以我不拿出來嚇人了。大家有什麼問題和建議可以發E-Mail:[email protected]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章