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

📄 haitime.c

📁 HGui4.1.rar
💻 C
字号:
//---------------------------------------------------------------------------------
// Copyright (c) Haisoft 2006-9-1
// Copyright jinhailiao 2008-2010
// E-mail:   jinhailiao@163.com
// Project:			HGui
// File:			haitime.c
// Description:		
//-------------------------------------------------------------
// Reversion Histroy:
//-------------------------------------------------------------
// Version		date		operations				by who
// 1.0.0		2006-09-01	Create					Kingsea
// 2.0.0		2006-09-06	update					Kingsea
// 3.0.0		2008-03-01	update					Kingsea
//---------------------------------------------------------------------------------

#include "haitype.h"

S_VOID _hai_TimerEventISR(S_VOID);

typedef struct tagCALENDAR
{
	S_WORD year;
	S_BYTE mon;
	S_BYTE day;
}S_CALENDAR;

typedef struct tagTIME 
{
	S_BYTE hour;
	S_BYTE minute;
	S_BYTE second;
}S_TIME;


S_DWORD volatile	TimeTick = 0;
static  S_CHAR	TimeFlag = 10;//count second, because time interrupt come  per 1/10 second
static  S_TIME		CurTime  = {0,0,0};
static  S_CALENDAR	Calendar = {2008,1,1};

#ifdef PCSIM
int year, mon, day, hour, minute, second;
#endif


S_ROMDATA S_CHAR LeapYear[12] = 
{
	31,29,31,30,31,30,31,31,30,31,30,31,
};

S_ROMDATA S_CHAR NotLeapYear[12] = 
{
	31,28,31,30,31,30,31,31,30,31,30,31,
};

static S_VOID hai_UpdateCalendar(S_VOID)
{
	S_BOOL leap = 0;
	S_CHAR LimitDay;

	if (Calendar.year % 4 == 0) 
	{
		if (Calendar.year % 100 != 0)
			leap = 1;
		else if (Calendar.year % 400 == 0)
			leap = 1;
	}

	LimitDay = leap? LeapYear[Calendar.mon - 1]:NotLeapYear[Calendar.mon - 1];

	if (Calendar.day == LimitDay) 
	{
		Calendar.day = 1;
		if (Calendar.mon == 12) 
		{
			Calendar.mon = 1;
			Calendar.year++;
		} 
		else 
		{
			Calendar.mon++;
		}
	} 
	else 
	{
		Calendar.day++;	
	}
}

static S_VOID hai_UpdateTime(S_VOID)
{
	S_BOOL update = 0;

	if (CurTime.second == 59) 
	{
		CurTime.second = 0;
		if (CurTime.minute == 59) 
		{
			CurTime.minute = 0;
			if (CurTime.hour == 23) 
			{
				CurTime.hour = 0;
				update = 1;
			} 
			else 
				CurTime.hour++;
		} 
		else 
			CurTime.minute++;
	} 
	else 
		CurTime.second++;

	if (update) 
		hai_UpdateCalendar();
}
S_VOID hai_InitDateTime(S_VOID)
{
	TimeTick		= 0;
	TimeFlag		= 10;
	Calendar.year	= 2005;
	Calendar.mon	= 1;
	Calendar.day	= 1;
	CurTime.hour	= 0;
	CurTime.minute	= 0;
	CurTime.second	= 0;
#ifdef PCSIM
	{
	Calendar.year	= year;
	Calendar.mon	= mon;
	Calendar.day	= day;
	CurTime.hour	= hour;
	CurTime.minute	= minute;
	CurTime.second	= second;
	}
#endif
}
S_VOID hai_DoTimeISR(S_VOID)
{
	TimeTick++;

	_hai_TimerEventISR();

	if (!(--TimeFlag))
	{
		hai_UpdateTime();
		TimeFlag = 10;
	}
}

S_WORD hai_GetYear(S_VOID)
{
	return Calendar.year;
}

S_BYTE hai_GetMonth(S_VOID)
{
	return Calendar.mon;
}

S_BYTE hai_GetDay(S_VOID)
{
	return Calendar.day;
}

S_BYTE hai_GetHour(S_VOID)
{
	return CurTime.hour;
}

S_BYTE hai_GetMinute(S_VOID)
{
	return CurTime.minute;
}

S_BYTE hai_GetSecond(S_VOID)
{
	return CurTime.second;
}

S_BYTE hai_GetDayOfWeek(S_VOID)
{
	S_BYTE  Week; 
	S_WORD  year = Calendar.year; /* FIXME 2000 ~ 2099 */
	S_BYTE  mon = Calendar.mon;
	S_BYTE  day = Calendar.day;

	if((mon == 1) || (mon == 2))
	{
		mon += 12;
		year--;
	}
	Week = (day + 2*mon + 3*(mon+1)/5 + year + year/4 - year/100 + year/400) % 7; 
	return (Week + 1);
}

S_VOID hai_SetYear(S_WORD NewYear)
{
	Calendar.year = NewYear;
}

S_VOID hai_SetMonth(S_BYTE NewMon)
{
	Calendar.mon  = NewMon;
}

S_VOID hai_SetDay(S_BYTE NewDay)
{
	Calendar.day = NewDay;
}

S_VOID hai_SetHour(S_BYTE NewHour)
{
	CurTime.hour = NewHour;
}

S_VOID hai_SetMinute(S_BYTE NewMinute)
{
	CurTime.minute = NewMinute;
}

S_VOID hai_SetSecond(S_BYTE NewSecond)
{
	CurTime.second = NewSecond;
}

S_VOID  hai_GetDate(S_BYTE *pszDate)//format: 20060101
{
	pszDate[0] = Calendar.year/1000 + 0x30;
	pszDate[1] = Calendar.year/100%10 + 0x30;
	pszDate[2] = Calendar.year/10%10 + 0x30;
	pszDate[3] = Calendar.year%10 + 0x30;
	pszDate[4] = Calendar.mon/10 + 0x30;
	pszDate[5] = Calendar.mon%10 + 0x30;
	pszDate[6] = Calendar.day/10 + 0x30;
	pszDate[7] = Calendar.day%10 + 0x30;
	pszDate[8] = 0;
}

S_VOID  hai_GetTime(S_BYTE *pszTime)
{
	pszTime[0] = CurTime.hour/10 + 0x30;
	pszTime[1] = CurTime.hour%10 + 0x30;
	pszTime[2] = ':';
	pszTime[3] = CurTime.minute/10 + 0x30;
	pszTime[4] = CurTime.minute%10 + 0x30;
	pszTime[5] = ':';
	pszTime[6] = CurTime.second/10 + 0x30;
	pszTime[7] = CurTime.second%10 + 0x30;
	pszTime[8] = 0;
}

S_DWORD hai_GetTimeTick(S_VOID)
{
	S_DWORD CurTick;

	do{
		CurTick = TimeTick;
	}while (CurTick != TimeTick);

	return CurTick;
}

S_DWORD hai_GetTimeSpan(S_DWORD TickNum)
{
	S_DWORD CurTick = hai_GetTimeTick();

	return (CurTick-TickNum);
}

S_VOID hai_Delay(S_DWORD MS)
{
	S_DWORD tick = hai_GetTimeTick();

	MS += tick;

	while (tick < MS)
		tick = hai_GetTimeTick();
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -