📄 rtc.c
字号:
** Modified by:
** Modified date:
**--------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
/*********************************************************************************************************
此函数可以设置闹铃时间, 但不能使能相关的唤醒操作, 需要调用其他使能类的函数.
*********************************************************************************************************/
void rtcSetAlarmTime (RTC_TIME *prtctimeAlarm)
{
int iHigh; /* BCD 码高位 */
int iLow; /* BCD 码低位 */
int iYear; /* 年 */
if (!prtctimeAlarm) {
return;
}
if (__rtcTimeCheck(prtctimeAlarm)) { /* 检查时间有效性 */
return;
}
iYear = prtctimeAlarm->usYear - 2000;
iHigh = prtctimeAlarm->ucSecond / 10;
iLow = prtctimeAlarm->ucSecond % 10;
rALMSEC = (unsigned char)(iHigh << 4 + iLow); /* 秒闹钟寄存器 */
iHigh = prtctimeAlarm->ucMinute / 10;
iLow = prtctimeAlarm->ucMinute % 10;
rALMMIN = (unsigned char)(iHigh << 4 + iLow); /* 分闹钟寄存器 */
iHigh = prtctimeAlarm->ucHour / 10;
iLow = prtctimeAlarm->ucHour % 10;
rALMHOUR = (unsigned char)(iHigh << 4 + iLow); /* 小时闹钟寄存器 */
iHigh = prtctimeAlarm->ucDate / 10;
iLow = prtctimeAlarm->ucDate % 10;
rALMDATE = (unsigned char)(iHigh << 4 + iLow); /* 日期闹钟寄存器 */
iHigh = prtctimeAlarm->ucMonth / 10;
iLow = prtctimeAlarm->ucMonth % 10;
rALMMON = (unsigned char)(iHigh << 4 + iLow); /* 月份闹钟寄存器 */
iHigh = prtctimeAlarm->usYear / 10;
iLow = prtctimeAlarm->usYear % 10;
rALMYEAR = (unsigned char)(iHigh << 4 + iLow); /* 年闹钟寄存器 */
}
/*********************************************************************************************************
** Function name: rtcGetAlarmTime
** Descriptions: 获取闹钟唤醒时间
** input parameters: NONE
** output parameters: prtctimeAlarm 闹铃时间
** Returned value: NONE
** Created by: Hanhui
** Created Date: 2007/12/20
**--------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**--------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
void rtcGetAlarmTime (RTC_TIME *prtctimeAlarm)
{
int iHigh; /* BCD 码高位 */
int iLow; /* BCD 码低位 */
if (!prtctimeAlarm) {
return;
}
iHigh = ((rALMSEC & 0xF0) >> 4);
iLow = (rALMSEC & 0x0F);
prtctimeAlarm->ucSecond = (unsigned char)(iHigh * 10 + iLow);
iHigh = ((rALMMIN & 0xF0) >> 4);
iLow = (rALMMIN & 0x0F);
prtctimeAlarm->ucMinute = (unsigned char)(iHigh * 10 + iLow);
iHigh = ((rALMHOUR & 0xF0) >> 4);
iLow = (rALMHOUR & 0x0F);
prtctimeAlarm->ucHour = (unsigned char)(iHigh * 10 + iLow);
iHigh = ((rALMDATE & 0xF0) >> 4);
iLow = (rALMDATE & 0x0F);
prtctimeAlarm->ucDate = (unsigned char)(iHigh * 10 + iLow);
iHigh = ((rALMMON & 0xF0) >> 4);
iLow = (rALMMON & 0x0F);
prtctimeAlarm->ucMonth = (unsigned char)(iHigh * 10 + iLow);
iHigh = ((rALMYEAR & 0xF0) >> 4);
iLow = (rALMYEAR & 0x0F);
prtctimeAlarm->usYear = (unsigned short)(iHigh * 10 + iLow + 2000);
}
/*********************************************************************************************************
** Function name: rtcSetTime
** Descriptions: 设置 RTC 时间
** input parameters: prtctimeNow 当前时间
** output parameters: NONE
** Returned value: NONE
** Created by: Hanhui
** Created Date: 2007/12/20
**--------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**--------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
void rtcSetTime (RTC_TIME *prtctimeNow)
{
int iHigh; /* BCD 码高位 */
int iLow; /* BCD 码低位 */
int iYear; /* 年 */
if (!prtctimeNow) {
return;
}
if (__rtcTimeCheck(prtctimeNow)) { /* 检查时间有效性 */
return;
}
iYear = prtctimeNow->usYear - 2000;
iHigh = prtctimeNow->ucSecond / 10;
iLow = prtctimeNow->ucSecond % 10;
rBCDSEC = (unsigned char)(iHigh << 4 + iLow); /* 秒寄存器 */
iHigh = prtctimeNow->ucMinute / 10;
iLow = prtctimeNow->ucMinute % 10;
rBCDMIN = (unsigned char)(iHigh << 4 + iLow); /* 分寄存器 */
iHigh = prtctimeNow->ucHour / 10;
iLow = prtctimeNow->ucHour % 10;
rBCDHOUR = (unsigned char)(iHigh << 4 + iLow); /* 小时寄存器 */
iHigh = prtctimeNow->ucDate / 10;
iLow = prtctimeNow->ucDate % 10;
rBCDDATE = (unsigned char)(iHigh << 4 + iLow); /* 日期寄存器 */
iHigh = prtctimeNow->ucMonth / 10;
iLow = prtctimeNow->ucMonth % 10;
rBCDMON = (unsigned char)(iHigh << 4 + iLow); /* 月份寄存器 */
iHigh = prtctimeNow->usYear / 10;
iLow = prtctimeNow->usYear % 10;
rBCDYEAR = (unsigned char)(iHigh << 4 + iLow); /* 年寄存器 */
rBCDDAY = prtctimeNow->ucDay; /* 星期寄存器 */
}
/*********************************************************************************************************
** Function name: rtcGetTime
** Descriptions: 获取 RTC 时间
** input parameters: NONE
** output parameters: prtctimeNow 当前时间
** Returned value: NONE
** Created by: Hanhui
** Created Date: 2007/12/20
**--------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**--------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
void rtcGetTime (RTC_TIME *prtctimeNow)
{
int iHigh; /* BCD 码高位 */
int iLow; /* BCD 码低位 */
if (!prtctimeNow) {
return;
}
iHigh = ((rBCDSEC & 0xF0) >> 4);
iLow = (rBCDSEC & 0x0F);
prtctimeNow->ucSecond = (unsigned char)(iHigh * 10 + iLow);
iHigh = ((rBCDMIN & 0xF0) >> 4);
iLow = (rBCDMIN & 0x0F);
prtctimeNow->ucMinute = (unsigned char)(iHigh * 10 + iLow);
iHigh = ((rBCDHOUR & 0xF0) >> 4);
iLow = (rBCDHOUR & 0x0F);
prtctimeNow->ucHour = (unsigned char)(iHigh * 10 + iLow);
iHigh = ((rBCDDATE & 0xF0) >> 4);
iLow = (rBCDDATE & 0x0F);
prtctimeNow->ucDate = (unsigned char)(iHigh * 10 + iLow);
iHigh = ((rBCDMON & 0xF0) >> 4);
iLow = (rBCDMON & 0x0F);
prtctimeNow->ucMonth = (unsigned char)(iHigh * 10 + iLow);
iHigh = ((rBCDYEAR & 0xF0) >> 4);
iLow = (rBCDYEAR & 0x0F);
prtctimeNow->usYear = (unsigned short)(iHigh * 10 + iLow + 2000);
prtctimeNow->ucDay = rBCDDAY;
}
/*********************************************************************************************************
END FILE
*********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -