?? rtc.c
字號:
/* $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ Copyright (c) $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
$ 肖遙電子(廣州)研發(fā)中心
$ Shawyoo Electronics (GuangZhou) R&D Center
$ http://www.shawyoo.com Email: autoele@qq.com
$ QQ群:9069471/9069433/9524253 All rights reserved.
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ Copyright (c) $$$$$$$$$$$$$$$$$$$$$$$$$$$ */
/*
文件描述
文件名: RTC.c
功能描述:把日期時間變成秒,把秒變成日期時間格式
編譯環(huán)境:通用C編譯器
目標(biāo)CPU:
作者:
創(chuàng)建時間:
建議編輯環(huán)境:UltraEdit 11.00a+ 制表符寬度為三個字符,程序可讀性更好。
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
*/
#define DEF_RTC 1
#define RTC_GLOBALS 1
#include "RTC.h"
#include <stdio.h>
/* $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
平年中,每個月的天數(shù).月是從1開始
*/
signed char code DayOfMonth[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
/* $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
從START_YEAR開始,總計TOTAL_YEAR,每年的潤年標(biāo)志,潤年為1,否則為0
這個表是從2000年開始,共100年。不同年份要作相應(yīng)修改。
*/
unsigned char code LeapYearFlag[100] =
{
1,0,0,0, 1,0,0,0, 1,0,0,0, 1,0,0,0, 1,0,0,0,
1,0,0,0, 1,0,0,0, 1,0,0,0, 1,0,0,0, 1,0,0,0,
1,0,0,0, 1,0,0,0, 1,0,0,0, 1,0,0,0, 1,0,0,0,
1,0,0,0, 1,0,0,0, 1,0,0,0, 1,0,0,0, 1,0,0,0,
1,0,0,0, 1,0,0,0, 1,0,0,0, 1,0,0,0, 1,0,0,0,
};
/* $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
平年中,當(dāng)月及前面月份的總天數(shù)
*/
signed short code DayOfYear[13] = { 0,31,59,90,120,151,181,212,243,273,304,334,365 };
/* $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
函數(shù)名稱:DateTimeToSecond
功能描述:把日期和時間轉(zhuǎn)換為秒(2000年1月1日0時0分0秒時刻為0秒)
入口參數(shù):RTC結(jié)構(gòu)指針
出口參數(shù):秒
全局變量: 無
創(chuàng)建時間:2006-5-6 17:40
修改時間:
*/
uint32 DateTimeToSecond(RTC_STR *pRTC)
{
uchar i;
int16 LeapYear,wYear;
uint32 Day,Sec,ySec;
//////////////////////////////////////////
wYear = pRTC->wYear;
wYear -= START_YEAR;
/////////////////////////////////// 計算出已過去的整年總共秒數(shù)
for(i=0,ySec=0;i<wYear;i++)
{
ySec += ONE_YEAR_SECOND;
if(LeapYearFlag[i])
ySec += ONE_DAY_SECOND;
}
/////////////////////////////////// 計算出當(dāng)年已過去的整天數(shù)
LeapYear = LeapYearFlag[wYear];
Day = DayOfYear[pRTC->Month-1];
Day += pRTC->Day;
Day -= 1;
if((LeapYear!=0)&&(pRTC->Month>2))
Day += 1;
/////////////////////////////////// 計算出當(dāng)天已過去的總秒數(shù)
Sec = (pRTC->Hour)*3600L + (pRTC->Min)*60L + pRTC->Sec;
Sec += ySec;
Sec += (Day*ONE_DAY_SECOND);
///////////////////////////////////
return Sec;
} // End of function <DateTimeToSecond>
/* $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
函數(shù)名稱:SecondToDateTime
功能描述:把秒(2000年1月1日0時0分0秒時刻為0秒)轉(zhuǎn)換為年月日時分秒
入口參數(shù):秒,RTC結(jié)構(gòu)指針
出口參數(shù):成功標(biāo)志,成功為OK,不成功為ERROR
全局變量: 無
創(chuàng)建時間:2006-5-6 17:40
修改時間:
*/
uchar SecondToDateTime(uint32 Second, RTC_STR *pRTC)
{
uchar i,Month,Day;
int16 LeapYear,wYear;
uint32 Sec;
/////////////////////////////////// 計算出已過去的整年數(shù)
for(i=0,wYear=0;i<TOTAL_YEAR;i++)
{
Sec = ONE_YEAR_SECOND;
if(LeapYearFlag[i])
Sec += ONE_DAY_SECOND;
if(Second<Sec) break;
wYear++;
Second -= Sec;
}
pRTC->Year = wYear;
pRTC->wYear = wYear+START_YEAR;
/////////////////////////////////// 計算出當(dāng)年已過去的整月數(shù)
LeapYear = LeapYearFlag[wYear];
for(i=0,Month=1;i<12;i++)
{
Sec = DayOfMonth[i];
Sec *= ONE_DAY_SECOND;
if((LeapYear!=0)&&(Month==2))
Sec += ONE_DAY_SECOND;
if(Second<Sec) break;
Month++;
Second -= Sec;
}
pRTC->Month = Month;
/////////////////////////////////// 計算出當(dāng)月已過去的整天數(shù)
pRTC->Day = Second/ONE_DAY_SECOND;
pRTC->Day += 1;
/////////////////////////////////// 計算出當(dāng)天已過去的整小時數(shù)
Second %= ONE_DAY_SECOND;
pRTC->Hour = Second/3600L;
/////////////////////////////////// 計算出分鐘、秒
Second %= 3600L;
pRTC->Min = Second/60;
pRTC->Sec = Second%60;
/////////////////////////////////// 星期
wYear = pRTC->wYear;
Month = pRTC->Month;
Day = pRTC->Day;
if((Month==1)||(Month==2))
{
Month += 12;
wYear--;
}
pRTC->Week = ((Day+2*Month+3*(Month+1)/5+wYear+wYear/4-wYear/100+wYear/400)+1)%7;
return 0;
}
// End of function <SecondToDateTime>
/*
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ End of File $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
*/
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -