⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 timetcb.cpp

📁 其于ARM的USB操作,控制芯片为CH375实现操作.以及其他功能.包括AC,串口操作.
💻 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 + -