📄 calender.c
字号:
strcpy(s, "HH:MM:SS"); /* Create the template for the selected format */
s[0] = ClkHr / 10 + '0'; /* Convert TIME to ASCII */
s[1] = ClkHr % 10 + '0';
s[3] = ClkMin / 10 + '0';
s[4] = ClkMin % 10 + '0';
s[6] = ClkSec / 10 + '0';
s[7] = ClkSec % 10 + '0';
break;
case 2:
strcpy(s, "HH:MM:SS AM"); /* Create the template for the selected format */
s[9] = (ClkHr >= 12) ? 'P' : 'A'; /* Set AM or PM indicator */
if (ClkHr > 12)
{ /* Adjust time to be displayed */
hr = ClkHr - 12;
}
else
{
hr = ClkHr;
}
s[0] = hr / 10 + '0'; /* Convert TIME to ASCII */
s[1] = hr % 10 + '0';
s[3] = ClkMin / 10 + '0';
s[4] = ClkMin % 10 + '0';
s[6] = ClkSec / 10 + '0';
s[7] = ClkSec % 10 + '0';
break;
default:
strcpy(s, "?");
break;
}
}
/*
*********************************************************************************************************
* UPDATE THE TIME
*
* Description : This function is called to update the time (i.e. hours, minutes and seconds)
* Arguments : None.
* Returns : TRUE if we have completed one day.
* FALSE otherwise
* Notes : This function updates ClkSec, ClkMin and ClkHr.
*********************************************************************************************************
*/
static BOOL ClkUpdateTime (void)
{
BOOL newday;
newday = FALSE; /* Assume that we haven't completed one whole day yet */
if (ClkSec >= 59)
{ /* See if we have completed one minute yet */
ClkSec = 0; /* Yes, clear seconds */
if (ClkMin >= 59)
{ /* See if we have completed one hour yet */
ClkMin = 0; /* Yes, clear minutes */
if (ClkHr >= 23)
{ /* See if we have completed one day yet */
ClkHr = 0; /* Yes, clear hours ... */
newday = TRUE; /* ... change flag to indicate we have a new day */
}
else
{
ClkHr++; /* No, increment hours */
}
}
else
{
ClkMin++; /* No, increment minutes */
}
}
else
{
ClkSec++; /* No, increment seconds */
}
return (newday);
}
/*
*********************************************************************************************************
* SET TIME ONLY
*
* Description : Set the time-of-day clock
* Arguments : hr is the desired hour (0..23)
* min is the desired minutes (0..59)
* sec is the desired seconds (0..59)
* Returns : None.
* Notes : It is assumed that you are specifying a correct time (i.e. there is no range checking
* done by this function).
*********************************************************************************************************
*/
void Clk_set_time (UCHAR hr, UCHAR min, UCHAR sec)
{
ENTER_CRITICAL(); /* Gain exclusive access to time-of-day clock */
ClkHr = hr;
ClkMin = min;
ClkSec = sec;
EXIT_CRITICAL(); /* Release access to time-of-day clock */
}
/*
*********************************************************************************************************
* DETERMINE IF WE HAVE A LEAP YEAR
*
* Description : This function determines whether the 'year' passed as an argument is a leap year.
* Arguments : year is the year to check for leap year.
* Returns : TRUE if 'year' is a leap year.
* FALSE if 'year' is NOT a leap year.
*********************************************************************************************************
*/
#if CLK_DATE_EN
static BOOL ClkIsLeapYear(UINT year)
{
if (!(year % 4) && (year % 100) || !(year % 400))
{
return TRUE;
}
else
{
return (FALSE);
}
}
#endif
/*
*********************************************************************************************************
* SET DATE ONLY
*
* Description : Set the date of the time-of-day clock
* Arguments : month is the desired month (1..12)
* day is the desired day (1..31)
* year is the desired year (CLK_TS_BASE_YEAR .. CLK_TS_BASE_YEAR+63)
* Returns : None.
* Notes : It is assumed that you are specifying a correct date (i.e. there is no range checking
* done by this function).
*********************************************************************************************************
*/
#if CLK_DATE_EN
void Clk_set_date (UCHAR month, UCHAR day, UINT year)
{
ENTER_CRITICAL();
ClkMonth = month;
ClkDay = day;
ClkYear = year;
ClkUpdateDOW();
EXIT_CRITICAL();
}
#endif
/*
*********************************************************************************************************
* SET DATE AND TIME
*
* Description : Set the date and time of the time-of-day clock
* Arguments : month is the desired month (1..12)
* day is the desired day (1..31)
* year is the desired year (2xxx)
* hr is the desired hour (0..23)
* min is the desired minutes (0..59)
* sec is the desired seconds (0..59)
* Returns : None.
* Notes : It is assumed that you are specifying a correct date and time (i.e. there is no range
* checking done by this function).
*********************************************************************************************************
*/
#if CLK_DATE_EN
void Clk_set_date_time (UCHAR month, UCHAR day, UINT year, UCHAR hr, UCHAR min, UCHAR sec)
{
ENTER_CRITICAL(); /* Gain exclusive access to time-of-day clock */
ClkMonth = month;
ClkDay = day;
ClkYear = year;
ClkHr = hr;
ClkMin = min;
ClkSec = sec;
ClkUpdateDOW(); /* Compute the day of the week (i.e. Sunday ...) */
EXIT_CRITICAL(); /* Release access to time-of-day clock */
}
#endif
/*
*********************************************************************************************************
* UPDATE THE DATE
*
* Description : This function is called to update the date (i.e. month, day and year)
* Arguments : None.
* Returns : None.
* Notes : This function updates ClkDay, ClkMonth, ClkYear and ClkDOW.
*********************************************************************************************************
*/
#if CLK_DATE_EN
static void ClkUpdateDate (void)
{
BOOL newmonth;
newmonth = TRUE;
if (ClkDay >= ClkMonthTbl[ClkMonth].MonthDays) { /* Last day of the month? */
if (ClkMonth == 2) { /* Is this February? */
if (ClkIsLeapYear(ClkYear) == TRUE) { /* Yes, Is this a leap year? */
if (ClkDay >= 29) { /* Yes, Last day in february? */
ClkDay = 1; /* Yes, Set to 1st day in March */
} else {
ClkDay++;
newmonth = FALSE;
}
} else {
ClkDay = 1;
}
} else {
ClkDay = 1;
}
} else {
ClkDay++;
newmonth = FALSE;
}
if (newmonth == TRUE) { /* See if we have completed a month */
if (ClkMonth >= 12) { /* Yes, Is this december ? */
ClkMonth = 1; /* Yes, set month to january... */
ClkYear++; /* ...we have a new year! */
} else {
ClkMonth++; /* No, increment the month */
}
}
ClkUpdateDOW(); /* Compute the day of the week (i.e. Sunday ...) */
}
#endif
/*
*********************************************************************************************************
* COMPUTE DAY-OF-WEEK
*
* Description : This function computes the day of the week (0 == Sunday) based on the current month,
* day and year.
* Arguments : None.
* Returns : None.
* Notes : - This function updates ClkDOW.
* - This function is called by ClkUpdateDate().
*********************************************************************************************************
*/
#if CLK_DATE_EN
static void ClkUpdateDOW (void)
{
UINT dow;
dow = ClkDay + ClkMonthTbl[ClkMonth].MonthVal;
if (ClkMonth < 3)
{
if (ClkIsLeapYear(ClkYear))
{
dow--;
}
}
dow += ClkYear + (ClkYear / 4);
dow += (ClkYear / 400) - (ClkYear / 100);
dow %= 7;
ClkDOW = dow;
}
#endif
//@@***********************************************************
//
// 功能: 给定的时间与当前时间比较
// 函数: int Cmp_now_time(UCHAR hr, UCHAR min, UCHAR sec)
// 语言: C
// 输入:
// 输出: 0 相等
// >0 给定时间大于当前时间
// <0 给定时间小于当前时间
// 作者: 李艳平
// 日期: 2002-05-17
//@@***********************************************************
//-------------------------------------------------------------
int Cmp_now_time(UCHAR hr, UCHAR min, UCHAR sec)
{
if(ClkHr!=hr)
return(hr-ClkHr);
else if(ClkMin!= min)
return(min-ClkMin);
else
return(sec-ClkSec);
}
//@@***********************************************************
//
// 功能: 给定的时间与当前时间比较
// 函数: int Cmp_now_date_time(UCHAR month, UCHAR day, UINT year, UCHAR hr, UCHAR min, UCHAR sec)
// 语言: C
// 输入:
// 输出: 0 相等
// >0 给定时间大于当前时间
// <0 给定时间小于当前时间
// 作者: 李艳平
// 日期: 2002-05-17
//@@***********************************************************
//-------------------------------------------------------------
#if CLK_DATE_EN
int Cmp_now_date_time(UCHAR month, UCHAR day, UINT year, UCHAR hr, UCHAR min, UCHAR sec)
{
if(ClkYear!=year)
return(year-ClkYear);
else if(ClkMonth!=month)
return(month-ClkMonth);
else if(ClkDay!=day)
return(day-ClkDay);
else if(ClkHr!=hr)
return(hr-ClkHr);
else if(ClkMin!= min)
return(min-ClkMin);
else
return(sec-ClkSec);
}
#endif
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -