📄 lpc_rtc.c
字号:
return 0;
}
/*************************************************************************
* Function Name: RTC_GetDateTime
* Parameters: LPC_Rtc_DateTime_t *pDateTime
* Return: int
* 0: success
* 1: fail
* Description: Get the current date and time
*
*************************************************************************/
int RTC_GetDateTime (LPC_Rtc_DateTime_t *pDateTime)
{
pDateTime->day = DOM;
pDateTime->month = MONTH;
pDateTime->year = YEAR;
pDateTime->hour = HOUR;
pDateTime->minute = MIN;
pDateTime->second = SEC;
pDateTime->DOW = DOW;
pDateTime->DOY = DOY;
return 0;
}
/*************************************************************************
* Function Name: RTC_SetInctInt
* Parameters: unsigned char IncIntType
* Return: void
*
* Description: Set increment interrupt type
*
*************************************************************************/
void RTC_SetIncInt (unsigned char IncIntType)
{
CIIR = IncIntType & 0xFF;
return;
}
/*************************************************************************
* Function Name: RTC_DisableIncInt
* Parameters: void
* Return: void
*
* Description: Disable RTC increment interrupt.
*
*************************************************************************/
void RTC_DisableIncInt(void)
{
CIIR = 0;
return ;
}
/*************************************************************************
* Function Name: RTC_SetAlarmtInt
* Parameters: unsigned char AlarmIntType
* Return: void
*
* Description: Set alarm interrupt type
*
*************************************************************************/
void RTC_SetAlarmInt (unsigned char AlarmIntType)
{
AMR = ~AlarmIntType & 0xFF;
return;
}
/*************************************************************************
* Function Name: RTC_DisableAlarmInt
* Parameters: void
* Return: void
*
* Description: Disable RTC alarm interrupt.
*
*************************************************************************/
void RTC_DisableAlarmInt(void)
{
AMR = 0xFF;
}
/*************************************************************************
* Function Name: RTC_SetAlarmDateTime
* Parameters: LPC_Rtc_DateTime_t *pDateTime
* Return: int
* 0: success
* 1: fail
* Description: Set your specifying alarm date and time
*
*************************************************************************/
int RTC_SetAlarmDateTime (LPC_Rtc_DateTime_t *pDateTime)
{
// Valid Judge
if (IsValidDay(pDateTime->year, pDateTime->month, pDateTime->day) == false)
return 1;
if ( pDateTime->hour > 23 || pDateTime->minute > 59 ||pDateTime->second > 59)
return 1;
// Calculate DOW, DOY
pDateTime->DOY = GetDOY(pDateTime->year, pDateTime->month, pDateTime->day);
pDateTime->DOW = GetDOW(pDateTime->year, pDateTime->month, pDateTime->day);
ALDOM=pDateTime->day;
ALMON=pDateTime->month;
ALYEAR=pDateTime->year;
ALDOW=pDateTime->DOW;
ALDOY=pDateTime->DOY;
ALHOUR = pDateTime->hour;
ALMIN = pDateTime->minute;
ALSEC = pDateTime->second;
return 0;
}
/*************************************************************************
* Function Name: RTC_ClearInt
* Parameters: unsigned long IntType
* Return: int
* 0: success
* 1: fail
*
* Description: Clear RTC interrupt.
*
*************************************************************************/
int RTC_ClearInt(unsigned long IntType)
{
if (IntType<1 || IntType>3)
return 1;
ILR = (IntType & 0x3);
return 0;
}
/*************************************************************************
* Function Name: RTC_CheckIntType
* Parameters: void
* Return: unsigned long
* RTCIncrementInt(1) | RTCAlarmInt(2)
*
* Description: Get RTC interrupt Type.
*
*************************************************************************/
unsigned long RTC_CheckIntType(void)
{
return (ILR & 0x3);
}
/*************************************************************************
* Function Name: RTC_ISR
* Parameters: void
* Return: void
*
* Description: Rtc interrupt subroutine
*
*************************************************************************/
void RTC_ISR (void)
{
int IntStatus;
IntStatus = RTC_CheckIntType() & 0x3;
RTC_ClearInt(IntStatus);
if (IntStatus & RTCIncrementInt) // Increment Interrupt
{
SysTimeUpdate();
}
if (IntStatus & RTCAlarmInt) // Alarm Interrupt
{
Alarm();
}
VICVectAddr = 0;
}
/*************************************************************************
* Function Name: FormatDate
* Parameters: int Type
* LPC_Rtc_Date_t *pDate
* char *s
*
* Return: void
*
* Description: Format the current date into an ASCII string according to the Type.
* Type = 1, "YYYY-MM-DD" (11 chars)
* Type = 2, "DOW Month DD, YYYY" (30 chars)
*
*************************************************************************/
void FormatDate (int Type, LPC_Rtc_Date_t *pDate, char *s)
{
unsigned short year;
unsigned char month, day, DOW;
char str[5];
year = pDate->year;
month = pDate->month;
day = pDate->day;
DOW = pDate->DOW;
// DOY = pDate->DOY;
switch(Type)
{
case 1:
strcpy(s, "YYYY-MM-DD");
s[0] = year / 1000 + '0';
year = year % 1000;
s[1] = year / 100 + '0';
year = year % 100;
s[2] = year / 10 + '0';
s[3] = year % 10 + '0';
s[5] = month / 10 + '0';
s[6] = month % 10 + '0';
s[8] = day / 10 + '0';
s[9] = day % 10 + '0';
break;
case 2:
strcpy(s, RTC_DOWTbl[DOW]);
strcat(s, RTC_MonthTbl[month]);
if (day < 10)
{
str[0] = day + '0';
str[1] = 0;
}
else
{
str[0] = day / 10 + '0';
str[1] = day % 10 + '0';
str[2] = 0;
}
strcat(s, str);
strcat(s, ", ");
sprintf(str,"%d",year);
strcat(s, str);
break;
default:
strcpy(s,"?");
break;
}
}
/*************************************************************************
* Function Name: FormatTime
* Parameters: int Type
* LPC_Rtc_Time_t *pTime
* char *s
*
* Return: void
*
* Description: Format the current time into an ASCII string according to the Type.
* Type = 1, "HH:MM:SS" (9 chars)
* Type = 2, "HH:MM:SS AM" (13 chars)
*
*************************************************************************/
void FormatTime (int Type, LPC_Rtc_Time_t *pTime, char *s)
{
unsigned char hour, minute, second;
hour = pTime->hour;
minute = pTime->minute;
second = pTime->second;
switch(Type)
{
case 1:
strcpy(s, "HH:MM:SS");
s[0] = hour / 10 + '0';
s[1] = hour % 10 + '0';
s[3] = minute / 10 + '0';
s[4] = minute % 10 + '0';
s[6] = second / 10 + '0';
s[7] = second % 10 + '0';
break;
case 2:
strcpy(s, "HH:MM:SS AM");
s[9] = (hour>=12) ? 'P' : 'A';
if (hour>12)
hour = hour -12;
s[0] = hour / 10 + '0';
s[1] = hour % 10 + '0';
s[3] = minute / 10 + '0';
s[4] = minute % 10 + '0';
s[6] = second / 10 + '0';
s[7] = second % 10 + '0';
break;
default:
strcpy(s,"?");
break;
}
}
/*************************************************************************
* Function Name: FormatDateTime
* Parameters: int Type
* LPC_Rtc_DateTime_t *pDateTime
* char *s
*
* Return: void
*
* Description: Format the current date and time into an ASCII string according to the Type.
* Type = 1, "YYYY-MM-DD HH:MM:SS" (18 chars)
*
*************************************************************************/
void FormatDateTime (int Type, LPC_Rtc_DateTime_t *pDateTime, char *s)
{
unsigned short year;
unsigned char month, day;
unsigned char hour, minute, second;
year = pDateTime->year;
month = pDateTime->month;
day = pDateTime->day;
// DOW = pDateTime->DOW;
// DOY = pDateTime->DOY;
hour = pDateTime->hour;
minute = pDateTime->minute;
second = pDateTime->second;
switch(Type)
{
case 1:
strcpy(s, "YYYY-MM-DD HH:MM:SS");
s[0] = year / 1000 + '0';
year = year % 1000;
s[1] = year / 100 + '0';
year = year % 100;
s[2] = year / 10 + '0';
s[3] = year % 10 + '0';
s[5] = month / 10 + '0';
s[6] = month % 10 + '0';
s[8] = day / 10 + '0';
s[9] = day % 10 + '0';
s[11] = hour / 10 + '0';
s[12] = hour % 10 + '0';
s[14] = minute / 10 + '0';
s[15] = minute % 10 + '0';
s[17] = second / 10 + '0';
s[18] = second % 10 + '0';
break;
default:
strcpy(s,"?");
break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -