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

📄 cal.c

📁 基于SPCE061A的出租车计价器
💻 C
字号:
//======================================================
// 文件名称:	Cal.c
// 功能描述:	日历管理程序
// 维护记录:	2006-10-12	v1.0	by lijian
//======================================================
#include "Cal.h"

Date sDate;									//	系统日期时间
unsigned long int ulTimer[2];				//	0.5s计数器
unsigned int uiHourChanged;					//	小时是否更新
unsigned int uiMinuteChanged;				//	分钟是否更新
unsigned int uiDateChanged;					//	日期是否更新
unsigned int uiDayofCurMonth;				//	当月的最大天数

const unsigned int uiDayofMonth[] = {		//	每月最大天数
	0, 31,28,31,30,31,30,31,31,30,31,30,31
};

//========================================================================
//	语法格式:	void Cal_Init(void)
//	实现功能:	日历初始化
//	参数:		无
//	返回值:	无
//========================================================================
void Cal_Init(void)
{
	sDate.Year = C_Year;
	sDate.Month = C_Month;
	sDate.Day = C_Day;
	sDate.Hour = C_Hour;
	sDate.Minute = C_Minute;
	sDate.Second = C_Second;
	uiHourChanged = 1;
	uiMinuteChanged = 1;
	uiDateChanged = 1;
	uiDayofCurMonth = Cal_In_GetDayofMonth(sDate.Month, sDate.Year);
}

//========================================================================
//	语法格式:	unsigned int Cal_GetYear(void)
//	实现功能:	得到系统年
//	参数:		无
//	返回值:	年
//========================================================================
unsigned int Cal_GetYear(void)
{
	return sDate.Year;
}

//========================================================================
//	语法格式:	unsigned int Cal_GetMonth(void)
//	实现功能:	得到系统月
//	参数:		无
//	返回值:	月
//========================================================================
unsigned int Cal_GetMonth(void)
{
	return sDate.Month;
}

//========================================================================
//	语法格式:	unsigned int Cal_GetDay(void)
//	实现功能:	得到系统日
//	参数:		无
//	返回值:	日
//========================================================================
unsigned int Cal_GetDay(void)
{
	return sDate.Day;
}

//========================================================================
//	语法格式:	unsigned int Cal_GetDay(void)
//	实现功能:	得到系统小时
//	参数:		无
//	返回值:	小时
//========================================================================
unsigned int Cal_GetHour(void)
{
	return sDate.Hour;
}

//========================================================================
//	语法格式:	unsigned int Cal_GetDay(void)
//	实现功能:	得到系统分钟
//	参数:		无
//	返回值:	分钟
//========================================================================
unsigned int Cal_GetMinute(void)
{
	return sDate.Minute;
}

//========================================================================
//	语法格式:	unsigned int Cal_GetDay(void)
//	实现功能:	得到系统秒
//	参数:		无
//	返回值:	秒
//========================================================================
unsigned int Cal_GetSecond(void)
{
	return sDate.Second;
}

//========================================================================
//	语法格式:	Date Cal_GetDay(void)
//	实现功能:	得到系统日期和时间
//	参数:		无
//	返回值:	系统日期和时间
//========================================================================
Date Cal_GetTime(void)
{
	return sDate;
}

//========================================================================
//	语法格式:	void Cal_SetSysTime(Date DateSetting)
//	实现功能:	设置系统日期和时间
//	参数:		DateSetting	-	日期时间
//	返回值:	无
//========================================================================
void Cal_SetSysTime(Date DateSetting)
{
	sDate.Year = DateSetting.Year;
	sDate.Month = DateSetting.Month;
	sDate.Day = DateSetting.Day;
	sDate.Hour = DateSetting.Hour;
	sDate.Minute = DateSetting.Minute;
	sDate.Second = DateSetting.Second;
}

//========================================================================
//	语法格式:	void Cal_StartTimer(unsigned int TMIndex)
//	实现功能:	启动0.5s计数器
//	参数:		TMIndex	-	计数器序号
//	返回值:	无
//========================================================================
void Cal_StartTimer(unsigned int TMIndex)
{
	ulTimer[TMIndex] = 0;
}

//========================================================================
//	语法格式:	void Cal_ClearTimer(unsigned int TMIndex)
//	实现功能:	清除0.5s计数器
//	参数:		TMIndex	-	计数器序号
//	返回值:	无
//========================================================================
void Cal_ClearTimer(unsigned int TMIndex)
{
	ulTimer[TMIndex] = 0;
}

//========================================================================
//	语法格式:	unsigned long int Cal_ReadTimer(unsigned int TMIndex)
//	实现功能:	读取0.5s计数器计数值
//	参数:		TMIndex	-	计数器序号
//	返回值:	计数值
//========================================================================
unsigned long int Cal_ReadTimer(unsigned int TMIndex)
{
	return ulTimer[TMIndex];
}

//========================================================================
//	语法格式:	void Cal_In_IRQ_ServiceLoop(void)
//	实现功能:	日历管理中断服务程序(需要安置在2Hz时基中断)
//	参数:		无
//	返回值:	无
//========================================================================
void Cal_In_IRQ_ServiceLoop(void)
{
	ulTimer[0]++;
	ulTimer[1]++;
	if(++sDate.Second == 120)
	{
		sDate.Second = 0;
		if(++sDate.Minute == 60)
		{
			sDate.Minute = 0;
			if(++sDate.Hour == 24)
			{
				sDate.Hour = 0;
				if(sDate.Day++ == uiDayofCurMonth)
				{
					sDate.Day = 1;
					if(sDate.Month++ == 12)
					{
						sDate.Month = 1;
						sDate.Year++;
					}
					uiDayofCurMonth = Cal_In_GetDayofMonth(sDate.Month, sDate.Year);
				}
				uiDateChanged = 1;
			}
			uiHourChanged = 1;
		}
		uiMinuteChanged = 1;
	}
}

//========================================================================
//	语法格式:	unsigned int Cal_HourChanged()
//	实现功能:	查询小时是否改变
//	参数:		无
//	返回值:	0 :	未改变
//				1 :	改变
//========================================================================
unsigned int Cal_HourChanged()
{
	if(1 == uiHourChanged)
	{
		uiHourChanged = 0;
		return 1;
	}
	else
		return 0;
}

//========================================================================
//	语法格式:	unsigned int Cal_MinuteChanged()
//	实现功能:	查询分钟是否改变
//	参数:		无
//	返回值:	0 :	未改变
//				1 :	改变
//========================================================================
unsigned int Cal_MinuteChanged()
{
	if(1 == uiMinuteChanged)
	{
		uiMinuteChanged = 0;
		return 1;
	}
	else
		return 0;
}

//========================================================================
//	语法格式:	unsigned int Cal_DateChanged()
//	实现功能:	查询日期
//	参数:		无
//	返回值:	0 :	未改变
//				1 :	改变
//========================================================================
unsigned int Cal_DateChanged()
{
	if(1 == uiDateChanged)
	{
		uiDateChanged = 0;
		return 1;
	}
	else
		return 0;
}

//========================================================================
//	语法格式:	unsigned int Cal_GetHello(unsigned int Hour)
//	实现功能:	查询问候语
//	参数:		Hour	-	小时
//	返回值:	MORNING :	上午
//				NOON :		中午
//				AFTERNOON :	下午
//				NIGHT :		 晚上
//========================================================================
unsigned int Cal_GetHello(unsigned int Hour)
{
	if(Hour >= 19)
		return NIGHT;			//	晚上
	else if(Hour >= 14)
		return AFTERNOON;			//	下午
	else if(Hour >= 12)
		return NOON;			//	中午
	else if(Hour >= 7)
		return MORNING;			//	上午
	else
		return NIGHT;			//	晚上
}

//========================================================================
//	语法格式:	unsigned int Cal_In_RYear(unsigned int Year)
//	实现功能:	闰年判断
//	参数:		Year	-	年份
//	返回值:	0 :	不是闰年
//				1 :	是闰年
//========================================================================
unsigned int Cal_In_RYear(unsigned int Year)
{
	if((Year & 0x0003) == 0)			//	能被4整除
	if((Year % 100) != 0)				//	并且不能被100整除
		return 1;
	if((Year % 400) == 0)				//	或者能被400整除
		return 1;
	return 0;
}

//========================================================================
//	语法格式:	unsigned int Cal_In_GetDayofMonth(unsigned int Month, unsigned int Year)
//	实现功能:	计算某月的最大天数
//	参数:		Month	-	月份
//				Year	-	年份
//	返回值:	天数
//========================================================================
unsigned int Cal_In_GetDayofMonth(unsigned int Month, unsigned int Year)
{
	if(2 == Month)
	{
		if(1 == Cal_In_RYear(Year))
			return 29;
		else
			return 28;
	}
	else
		return uiDayofMonth[Month];
}

⌨️ 快捷键说明

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