📄 timetcb.cpp
字号:
#include "TimeTcb.h"
#include "ucos_ii.h"
const U32 TIME_MONTH_P[]=
{
0,
31*24*60*60,28*24*60*60,31*24*60*60,30*24*60*60,
31*24*60*60,30*24*60*60,31*24*60*60,31*24*60*60,
30*24*60*60,31*24*60*60,30*24*60*60,31*24*60*60
};
const U32 TIME_MONTH_R[]=
{
0,
31*24*60*60,29*24*60*60,31*24*60*60,30*24*60*60,
31*24*60*60,30*24*60*60,31*24*60*60,31*24*60*60,
30*24*60*60,31*24*60*60,30*24*60*60,31*24*60*60
};
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
/********************************************************
//功能描述:构造函数
//函数入口:无
//函数出口:无
//操 作:初始化数据
//版 本:V1.0
//作 者:周登勇
//时 间:2006.02.08 17:11
*********************************************************/
CTimeTcb::CTimeTcb()
{
cSecond = 0;
cMinute = 0;
cHour = 0;
cDay = 0;
cMonth = 0;
cYear = 0;
}
/********************************************************
//功能描述:析构函数
//函数入口:无
//函数出口:无
//操 作:释放内存
//版 本:V1.0
//作 者:周登勇
//时 间:2006.02:08 17:12
*********************************************************/
CTimeTcb::~CTimeTcb()
{
}
/********************************************************
//功能描述:等操作
//函数入口:src=源数据
//函数出口:数据
//操 作:赋值
//版 本:V1.0
//作 者:周登勇
//时 间:2006.02:08 17:13
*********************************************************/
CTimeTcb& CTimeTcb::operator=( const CTimeTcb& src )
{
cSecond = src.cSecond;
cMinute = src.cMinute;
cHour = src.cHour;
cDay = src.cDay;
cMonth = src.cMonth;
cYear = src.cYear;
return *this;
}
/********************************************************
//功能描述:设置秒
//函数入口:second=秒
//函数出口:无
//操 作:设置秒
//版 本:V1.0
//作 者:周登勇
//时 间:2006.02:08 17:14
*********************************************************/
void CTimeTcb::SetSecond( U8 second )
{
cSecond = second;
}
/********************************************************
//功能描述:设置分钟
//函数入口:minute=分钟
//函数出口:无
//操 作:设置分钟
//版 本:V1.0
//作 者:周登勇
//时 间:2006.02:08 17:16
*********************************************************/
void CTimeTcb::SetMinute( U8 minute )
{
cMinute = minute;
}
/********************************************************
//功能描述:设置小时
//函数入口:hour=小时
//函数出口:无
//操 作:设置小时
//版 本:V1.0
//作 者:周登勇
//时 间:2006.02:08 17:17
*********************************************************/
void CTimeTcb::SetHour( U8 hour )
{
cHour = hour;
}
/********************************************************
//功能描述:设置天
//函数入口:day=天
//函数出口:无
//操 作:设置天
//版 本:V1.0
//作 者:周登勇
//时 间:2006.02:08 17:18
*********************************************************/
void CTimeTcb::SetDay( U8 day )
{
cDay = day;
}
/********************************************************
//功能描述:设置月
//函数入口:month=月
//函数出口:无
//操 作:设置月
//版 本:V1.0
//作 者:周登勇
//时 间:2006.02:08 17:19
*********************************************************/
void CTimeTcb::SetMonth( U8 month )
{
cMonth = month;
}
/********************************************************
//功能描述:设置年
//函数入口:year=年
//函数出口:无
//操 作:设置年
//版 本:V1.0
//作 者:周登勇
//时 间:2006.02:08 17:20
*********************************************************/
void CTimeTcb::SetYear( U8 year )
{
cYear = year;
}
/********************************************************
//功能描述:返回秒
//函数入口:无
//函数出口:秒
//操 作:返回秒
//版 本:V1.0
//作 者:周登勇
//时 间:2006.02:08 17:21
*********************************************************/
U8 CTimeTcb::GetSecond( )
{
return cSecond;
}
/********************************************************
//功能描述:返回分钟
//函数入口:无
//函数出口:分钟
//操 作:返回分钟
//版 本:V1.0
//作 者:周登勇
//时 间:2006.02:08 17:22
*********************************************************/
U8 CTimeTcb::GetMinute( )
{
return cMinute;
}
/********************************************************
//功能描述:返回小时
//函数入口:无
//函数出口:小时
//操 作:返回小时
//版 本:V1.0
//作 者:周登勇
//时 间:2006.02:08 17:23
*********************************************************/
U8 CTimeTcb::GetHour( )
{
return cHour;
}
/********************************************************
//功能描述:返回天
//函数入口:无
//函数出口:天
//操 作:返回天
//版 本:V1.0
//作 者:周登勇
//时 间:2006.02:08 17:24
*********************************************************/
U8 CTimeTcb::GetDay( )
{
return cDay;
}
/********************************************************
//功能描述:返回月
//函数入口:无
//函数出口:月
//操 作:返回月
//版 本:V1.0
//作 者:周登勇
//时 间:2006.02:08 17:25
*********************************************************/
U8 CTimeTcb::GetMonth( )
{
return cMonth;
}
/********************************************************
//功能描述:返回年
//函数入口:无
//函数出口:年
//操 作:返回年
//版 本:V1.0
//作 者:周登勇
//时 间:2006.02:08 17:26
*********************************************************/
U8 CTimeTcb::GetYear( )
{
return cYear;
}
/********************************************************
//功能描述:读取当前时间
//函数入口:无
//函数出口:无
//操 作:从系统读出当前时间
//版 本:V1.0
//作 者:周登勇
//时 间:2006.02:08 17:27
*********************************************************/
void CTimeTcb::GetCurrentTime()
{
#ifndef ARM
CTime time;
time = time.GetCurrentTime();
cSecond = time.GetSecond();
cMinute = time.GetMinute();
cHour = time.GetHour();
cDay = time.GetDay();
cMonth = time.GetMonth();
cYear = time.GetYear()-2000;
#else
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr;
#endif
OS_ENTER_CRITICAL();
U8 year;
U8 month;
U8 day;
U8 hour;
U8 minute;
U8 second;
rRTCCON = 1;
year = rBCDYEAR;
month = rBCDMON;
day = rBCDDAY;
hour = rBCDHOUR;
minute = rBCDMIN;
second = rBCDSEC;
if( second == 0 )
{//防止1秒误差
year = rBCDYEAR;
month = rBCDMON;
day = rBCDDAY;
hour = rBCDHOUR;
minute = rBCDMIN;
second = rBCDSEC;
}
rRTCCON = 0;
OS_EXIT_CRITICAL();
cYear = ( year & 0xf ) + (year>>4)*10;
cMonth = ( month & 0xf ) + (month>>4)*10;
cDay = ( day & 0xf ) + ( day>>4 ) * 10;
cHour = ( hour & 0xf ) + ( hour>>4 ) * 10;
cMinute = ( minute & 0xf ) + ( minute>>4 ) * 10;
cSecond = ( second & 0xf ) + ( second>>4 ) * 10;
#endif
}
/********************************************************
//功能描述:设置系统当前时间
//函数入口:无
//函数出口:无
//操 作:修改系统时间
//版 本:V1.0
//作 者:周登勇
//时 间:2006.02:08 17:28
*********************************************************/
void CTimeTcb::SetCurrentTime()
{
#ifndef ARM
#else
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr;
#endif
U8 year;
U8 month;
U8 day;
U8 hour;
U8 minute;
U8 second;
year = (cYear % 10) + ((cYear/10)<<4);
month = (cMonth % 10) + ((cMonth/10)<<4);
day = (cDay % 10) + ((cDay/10)<<4);
hour = (cHour % 10) + ((cHour/10)<<4);
minute = (cMinute % 10) + ((cMinute/10)<<4);
second = (cSecond % 10) + ((cSecond/10)<<4);
OS_ENTER_CRITICAL();
rRTCCON = 0x01;
rBCDYEAR = year;
rBCDMON = month;
rBCDDAY = day;
rBCDHOUR = hour;
rBCDMIN = minute;
rBCDSEC = second;
rRTCCON = 0x00;
OS_EXIT_CRITICAL();
#endif
}
U32 CTimeTcb::GetGmt()
{
U32 temp;
//年
temp = (cYear/4) * 126144000;//4年
temp += (cYear%4) * (365*24*60*60);//不到4年
if( cYear%4 )
{//加一天
temp += (24*60*60);
}
U8 i;
//月
if( cYear%4 )
{//平年
for( i=1; i<cMonth; i++ )
{
temp += TIME_MONTH_P[i];
}
}
else
{//润年
for( i=1; i<cMonth; i++ )
{
temp += TIME_MONTH_R[i];
}
}
//天
temp += ((U32)(cDay-1)*24*60*60);
//时
temp += ((U32)cHour*60*60);
//分
temp += ((U32)cMinute*60);
//秒
temp += ((U32)cSecond);
return temp;
}
void CTimeTcb::SetGmt( U32 time )
{
U32 temp;
U32 i;
temp = time / 126144000;
temp *= 4;
time %= 126144000;
if( time >= ( 366*24*60*60 ) )
{//平年
temp ++;
time -= ( 366*24*60*60 );
temp += ( time / ( 365*24*60*60 ) );
time %= ( 365*24*60*60 );
cYear = temp;//年
temp = 0;
for( i=1; i<=12; i++ )
{
if( (temp+TIME_MONTH_P[i]) >= time )
{
cMonth = i;
time -= temp;
break;
}
else
{
temp += TIME_MONTH_P[i];
}
}
}
else
{//润年
cYear = temp;//年
temp = 0;
for( i=1; i<=12; i++ )
{
if( temp+TIME_MONTH_R[i] >= time )
{
cMonth = i;
time -= temp;
break;
}
else
{
temp += TIME_MONTH_R[i];
}
}
}
cDay = ( time / (24*60*60) )+1;
time %= ( 24*60*60 );
cHour = ( time / (60*60) );
time %= ( 60*60 );
cMinute = time / 60;
time %= 60;
cSecond = time;
}
/********************************************************
//功能描述:格式化
//函数入口:type=类型,pBuf=数据字符串指针
//函数出口:无
//操 作:将时间格式化输出
//版 本:V1.0
//作 者:周登勇
//时 间:2006.02:09 16:11
*********************************************************/
void CTimeTcb::Format( U32 type, S8* pBuf )
{
switch( type )
{
case DISP_TIME_YMD:
//年
*pBuf++ = '2';
*pBuf++ = '0';
*pBuf++ = cYear/10 + '0';
*pBuf++ = cYear%10 + '0';
*pBuf++ = '/';
//月
*pBuf++ = cMonth/10 + '0';
*pBuf++ = cMonth%10 + '0';
*pBuf++ = '/';
//日
*pBuf++ = cDay/10 + '0';
*pBuf++ = cDay%10 + '0';
break;
case DISP_TIME_MD:
//月
*pBuf++ = cMonth/10 + '0';
*pBuf++ = cMonth%10 + '0';
*pBuf++ = '/';
//日
*pBuf++ = cDay/10 + '0';
*pBuf++ = cDay%10 + '0';
break;
case DISP_TIME_HMS:
//时
*pBuf++ = cHour/10 + '0';
*pBuf++ = cHour%10 + '0';
*pBuf++ = ':';
//分
*pBuf++ = cMinute/10 + '0';
*pBuf++ = cMinute%10 + '0';
*pBuf++ = ':';
//秒
*pBuf++ = cSecond/10 + '0';
*pBuf++ = cSecond%10 + '0';
break;
case DISP_TIME_HM:
//时
*pBuf++ = cHour/10 + '0';
*pBuf++ = cHour%10 + '0';
*pBuf++ = ':';
//分
*pBuf++ = cMinute/10 + '0';
*pBuf++ = cMinute%10 + '0';
break;
case DISP_TIME_YMDHMS:
//年
*pBuf++ = '2';
*pBuf++ = '0';
*pBuf++ = cYear/10 + '0';
*pBuf++ = cYear%10 + '0';
*pBuf++ = '/';
//月
*pBuf++ = cMonth/10 + '0';
*pBuf++ = cMonth%10 + '0';
*pBuf++ = '/';
//日
*pBuf++ = cDay/10 + '0';
*pBuf++ = cDay%10 + '0';
*pBuf++ = ' ';
//时
*pBuf++ = cHour/10 + '0';
*pBuf++ = cHour%10 + '0';
*pBuf++ = ':';
//分
*pBuf++ = cMinute/10 + '0';
*pBuf++ = cMinute%10 + '0';
*pBuf++ = ':';
//秒
*pBuf++ = cSecond/10 + '0';
*pBuf++ = cSecond%10 + '0';
break;
case DISP_TIME_HMSYMD:
//时
*pBuf++ = cHour/10 + '0';
*pBuf++ = cHour%10 + '0';
*pBuf++ = ':';
//分
*pBuf++ = cMinute/10 + '0';
*pBuf++ = cMinute%10 + '0';
*pBuf++ = ':';
//秒
*pBuf++ = cSecond/10 + '0';
*pBuf++ = cSecond%10 + '0';
*pBuf++ = ' ';
//年
*pBuf++ = '2';
*pBuf++ = '0';
*pBuf++ = cYear/10 + '0';
*pBuf++ = cYear%10 + '0';
*pBuf++ = '/';
//月
*pBuf++ = cMonth/10 + '0';
*pBuf++ = cMonth%10 + '0';
*pBuf++ = '/';
//日
*pBuf++ = cDay/10 + '0';
*pBuf++ = cDay%10 + '0';
break;
case DISP_TIME_MDHM:
//月
*pBuf++ = cMonth/10 + '0';
*pBuf++ = cMonth%10 + '0';
*pBuf++ = '/';
//日
*pBuf++ = cDay/10 + '0';
*pBuf++ = cDay%10 + '0';
*pBuf++ = ' ';
//时
*pBuf++ = cHour/10 + '0';
*pBuf++ = cHour%10 + '0';
*pBuf++ = ':';
//分
*pBuf++ = cMinute/10 + '0';
*pBuf++ = cMinute%10 + '0';
break;
case DISP_TIME_HMMD:
//时
*pBuf++ = cHour/10 + '0';
*pBuf++ = cHour%10 + '0';
*pBuf++ = ':';
//分
*pBuf++ = cMinute/10 + '0';
*pBuf++ = cMinute%10 + '0';
*pBuf++ = ' ';
//月
*pBuf++ = cMonth/10 + '0';
*pBuf++ = cMonth%10 + '0';
*pBuf++ = '/';
//日
*pBuf++ = cDay/10 + '0';
*pBuf++ = cDay%10 + '0';
break;
case DISP_TIME_YMDHM:
//年
*pBuf++ = '2';
*pBuf++ = '0';
*pBuf++ = cYear/10 + '0';
*pBuf++ = cYear%10 + '0';
*pBuf++ = '/';
//月
*pBuf++ = cMonth/10 + '0';
*pBuf++ = cMonth%10 + '0';
*pBuf++ = '/';
//日
*pBuf++ = cDay/10 + '0';
*pBuf++ = cDay%10 + '0';
*pBuf++ = ' ';
//时
*pBuf++ = cHour/10 + '0';
*pBuf++ = cHour%10 + '0';
*pBuf++ = ':';
//分
*pBuf++ = cMinute/10 + '0';
*pBuf++ = cMinute%10 + '0';
break;
default:
break;
};
*pBuf = '\0';
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -