📄 cal.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 + -