This commit is contained in:
2026-04-23 10:50:18 +08:00
commit a436fda935
844 changed files with 272643 additions and 0 deletions

View File

@ -0,0 +1,780 @@
/*
*********************************************************************************
ͷ<>ļ<EFBFBD>
*********************************************************************************
*/
#include "rtc.h"
/*
************************************************************************************
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
************************************************************************************
*/
//ƽ<><C6BD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>ڱ<EFBFBD> <20><><EFBFBD><EFBFBD>2<EFBFBD>·<EFBFBD>29<32><39>
const u8 mon_table[12]={31,28,31,30,31,30,31,31,30,31,30,31};
MYITStatus_Struct MYITStatus1;
u8 key_time,IS_FIRST_SAVE = 0;
/*
*********************************************************************************************************
* <09><> <20><> <20><>: RTC_NVIC_CONFIG()
* <09><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>: RTC<54>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>
* <09><> <20><> <20><><EFBFBD><EFBFBD>
* <20><> <20><> <20><><EFBFBD><EFBFBD>
*********************************************************************************************************
*/
void RTC_NVIC_CONFIG(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE);
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN;
GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13;
GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_DOWN;
GPIO_Init(GPIOC,&GPIO_InitStructure);
GPIO_PinAFConfig(GPIOC,GPIO_PinSource13,GPIO_AF_WKUP);
EXTI_ClearITPendingBit(EXTI_Line20);
EXTI_InitStructure.EXTI_Line=EXTI_Line20;//RTC wakeup
EXTI_InitStructure.EXTI_LineCmd=ENABLE;
EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Rising;
EXTI_Init(&EXTI_InitStructure);
NVIC_InitStructure.NVIC_IRQChannel=RTC_WKUP_IRQn;
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x00;
NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x00;
NVIC_Init(&NVIC_InitStructure);
/* EXTI configuration */
EXTI_ClearITPendingBit(EXTI_Line17);
EXTI_InitStructure.EXTI_Line = EXTI_Line17;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
/* Enable the RTC Alarm Interrupt */
NVIC_InitStructure.NVIC_IRQChannel = RTC_Alarm_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
/*
*********************************************************************************************************
* <09><> <20><> <20><>: RTC_Time_Init()
* <09><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>: RTC<54><43>ʼ<EFBFBD><CABC>
* <09><> <20><> <20><><EFBFBD><EFBFBD>
* <20><> <20><> <20><><EFBFBD><EFBFBD>
*********************************************************************************************************
*/
void RTC_Time_Init(void)
{
RTC_InitTypeDef RTC_InitStructure;
//RTC_TimeTypeDef RTC_TimeStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
/*!< Allow access to RTC */
PWR_RTCAccessCmd(ENABLE);
/*!< ʹ<><CAB9><EFBFBD>ⲿ<EFBFBD><E2B2BF><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> */
RCC_LSEConfig(RCC_LSE_ON);
// RCC_LSICmd(ENABLE);
/*!< <20>ȴ<EFBFBD><C8B4>ⲿ<EFBFBD><E2B2BF><EFBFBD><EFBFBD>ʱ<EFBFBD>Ӿ<EFBFBD><D3BE><EFBFBD> */
while (RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET);
RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);//ѡ<><D1A1><EFBFBD>ⲿLES<45><53>ΪRTCʱ<43><CAB1>Դ
RCC_RTCCLKCmd(ENABLE);
/*!< Wait for RTC APB registers synchronisation */
RTC_WaitForSynchro();
RTC_InitStructure.RTC_AsynchPrediv=127;
RTC_InitStructure.RTC_HourFormat=RTC_HourFormat_24;
RTC_InitStructure.RTC_SynchPrediv=255;
RTC_Init(&RTC_InitStructure);//RTC<54><43>ʱ<EFBFBD><CAB1>1HZ
RTC_NVIC_CONFIG();
}
/*
*********************************************************************************************************
* <09><> <20><> <20><>: rtc_std_init()
* <09><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>: RTC<54><43>ʼ<EFBFBD><CABC>1
* <09><> <20><> <20><><EFBFBD><EFBFBD>
* <20><> <20><> <20><><EFBFBD><EFBFBD>
*********************************************************************************************************
*/
void rtc_std_init(void)
{
/* Enable the PWR clock */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
/* Allow access to RTC */
PWR_RTCAccessCmd(ENABLE);
/* Wait for RTC APB registers synchronisation */
RTC_WaitForSynchro();
RTC_NVIC_CONFIG();
}
/*
*********************************************************************************************************
* <09><> <20><> <20><>: SetRTC()
* <09><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>: <20><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>Ӳ<EFBFBD><D3B2>RTCʱ<43><CAB1>
* <09><> <20><> <20><><EFBFBD><EFBFBD> set_year,<2C><> set_mon,<2C><> set_day,ʱ set_hour,<2C><> set_min ,<2C><> set_sec
* <20><> <20><> <20><><EFBFBD><EFBFBD>
*********************************************************************************************************
*/
void SetRTC(int set_year,int set_mon,int set_day,int set_hour,int set_min ,int set_sec)
{
RTC_TimeTypeDef RTC_TimeStruct;
RTC_DateTypeDef RTC_DateStruct;
RTC_TimeStruct.RTC_Hours = set_hour;
RTC_TimeStruct.RTC_Minutes = set_min;
RTC_TimeStruct.RTC_Seconds = set_sec;
RTC_TimeStruct.RTC_H12 = 0; //<2F><><EFBFBD><EFBFBD><EFBFBD>в<EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD>
RTC_SetTime(RTC_Format_BIN,&RTC_TimeStruct);
RTC_DateStruct.RTC_Year = set_year;
RTC_DateStruct.RTC_Month = set_mon;
RTC_DateStruct.RTC_Date = set_day;
RTC_DateStruct.RTC_WeekDay = 1;//<2F><><EFBFBD><EFBFBD><EFBFBD>в<EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
RTC_SetDate(RTC_Format_BIN,&RTC_DateStruct);
RTC_WriteBackupRegister(RTC_BKP_DR0, 0x32F2);
}
/*
*********************************************************************************************************
* <09><> <20><> <20><>: Set_GNSSTIME_Rtc()
* <09><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>: GPSУʱ
* <09><> <20><> <20><><EFBFBD><EFBFBD>
* <20><> <20><> <20><><EFBFBD><EFBFBD>
*********************************************************************************************************
*/
void Set_GNSSTIME_Rtc(void)
{
int set_years, set_mons, set_days, set_hours, set_mins , set_secs;
if(Save_Data.isUsefull)//<2F><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч
{
set_years=(Save_Data.UTCData[0]-'0')*10+(Save_Data.UTCData[1]-'0');//<2F><>
set_mons=(Save_Data.UTCData[2]-'0')*10+(Save_Data.UTCData[3]-'0');//<2F><>
set_days=(Save_Data.UTCData[4]-'0')*10+(Save_Data.UTCData[5]-'0');//<2F><>
set_hours=(Save_Data.UTCTime[0]-'0')*10+(Save_Data.UTCTime[1]-'0')+8;//ʱ
set_mins=(Save_Data.UTCTime[2]-'0')*10+(Save_Data.UTCTime[3]-'0');//<2F><>
set_secs=(Save_Data.UTCTime[4]-'0')*10+(Save_Data.UTCTime[5]-'0');//<2F><>
SetRTC(set_years,set_mons,set_days,set_hours,set_mins,set_secs);
}
}
/*
*********************************************************************************************************
* <09><> <20><> <20><>: GetRTC()
* <09><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>: <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>Ӳ<EFBFBD><D3B2>RTCʱ<43><CAB1>
* <09><> <20><> <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>yymmdd <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>hhmmss
* <20><> <20><> <20><><EFBFBD><EFBFBD>
*********************************************************************************************************
*/
void GetRTC(char *hhmmss,char *yymmdd)
{
RTC_TimeTypeDef time;
RTC_DateTypeDef date;
RTC_GetTime(RTC_Format_BIN,&time);
RTC_GetDate(RTC_Format_BIN,&date);
yymmdd[0]=date.RTC_Year/10+0x30; //<2F><>ʮλ
yymmdd[1]=date.RTC_Year%10+0x30; //<2F><><EFBFBD><EFBFBD>λ
yymmdd[2]=date.RTC_Month/10+0x30; //<2F><>ʮλ
yymmdd[3]=date.RTC_Month%10+0x30; //<2F><>ʮλ
yymmdd[4]=date.RTC_Date/10+0x30; //<2F><>ʮλ
yymmdd[5]=date.RTC_Date%10+0x30; //<2F><>ʮλ
hhmmss[0]=time.RTC_Hours/10+0x30; //Сʱʮλ
hhmmss[1]=time.RTC_Hours%10+0x30; //Сʱ<D0A1><CAB1>λ
hhmmss[2]=time.RTC_Minutes/10+0x30; //<2F><><EFBFBD><EFBFBD>ʮλ
hhmmss[3]=time.RTC_Minutes%10+0x30; //<2F><><EFBFBD><EFBFBD>ʮλ
hhmmss[4]=time.RTC_Seconds/10+0x30; //<2F><>ʮλ
hhmmss[5]=time.RTC_Seconds%10+0x30; //<2F><>ʮλ
}
void GetTime(char *hhmmss,char *yymmdd)
{
get_show_time();
yymmdd[0]=calendar.w_year/10+0x30; //<2F><>ʮλ
yymmdd[1]=calendar.w_year%10+0x30; //<2F><><EFBFBD><EFBFBD>λ
yymmdd[2]=calendar.w_month/10+0x30; //<2F><>ʮλ
yymmdd[3]=calendar.w_month%10+0x30; //<2F><>ʮλ
yymmdd[4]=calendar.w_date/10+0x30; //<2F><>ʮλ
yymmdd[5]=calendar.w_date%10+0x30; //<2F><>ʮλ
hhmmss[0]=calendar.hour/10+0x30; //Сʱʮλ
hhmmss[1]=calendar.hour%10+0x30; //Сʱ<D0A1><CAB1>λ
hhmmss[2]=calendar.min/10+0x30; //<2F><><EFBFBD><EFBFBD>ʮλ
hhmmss[3]=calendar.min%10+0x30; //<2F><><EFBFBD><EFBFBD>ʮλ
hhmmss[4]=calendar.sec/10+0x30; //<2F><>ʮλ
hhmmss[5]=calendar.sec%10+0x30; //<2F><>ʮλ
}
/*
*********************************************************************************************************
* <09><> <20><> <20><>: RTC_GetSeconds()
* <09><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>: <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>Ӳ<EFBFBD><D3B2>RTCʱ<43><CAB1>S
* <09><> <20><> <20><><EFBFBD><EFBFBD>
* <20><> <20><> <20><><EFBFBD><EFBFBD>secondss
*********************************************************************************************************
*/
u32 RTC_GetSeconds(void)
{
u32 secondss;
RTC_TimeTypeDef time;
RTC_GetTime(RTC_Format_BIN,&time);
secondss= time.RTC_Hours*3600 + time.RTC_Minutes*60 + time.RTC_Seconds;
return secondss;
}
/*
*********************************************************************************************************
* <09><> <20><> <20><>: RtcWakeUpConfig()
* <09><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>: <20>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <09><> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>temp
* <20><> <20><> <20><><EFBFBD><EFBFBD>
*********************************************************************************************************
*/
void RtcWakeUpConfig(u32 temp)
{
NVIC_InitTypeDef NVIC_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;
EXTI_ClearITPendingBit(EXTI_Line20);
EXTI_InitStructure.EXTI_Line=EXTI_Line20;//RTC wakeup
EXTI_InitStructure.EXTI_LineCmd=ENABLE;
EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Rising;
EXTI_Init(&EXTI_InitStructure);
NVIC_InitStructure.NVIC_IRQChannel=RTC_WKUP_IRQn;
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x00;
NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x00;
NVIC_Init(&NVIC_InitStructure);
RTC_WakeUpCmd(DISABLE);
RTC_ClearFlag(RTC_FLAG_WUTF);
if(temp>65535)
{
RTC_WakeUpClockConfig(RTC_WakeUpClock_CK_SPRE_17bits);
temp-=65535;
}
else RTC_WakeUpClockConfig(RTC_WakeUpClock_CK_SPRE_16bits);
RTC_SetWakeUpCounter(temp); //<2F><><EFBFBD>û<EFBFBD><C3BB><EFBFBD>ʱ<EFBFBD><CAB1>--S,<2C><><EFBFBD><EFBFBD>65536s=18Сʱ 2^17=131072 131072/3600s=36.4h
RTC_ClearITPendingBit(RTC_IT_WUT);
RTC_ITConfig(RTC_IT_WUT,ENABLE); //<2F><>Ҫʹ<D2AA><CAB9><EFBFBD>жϣ<D0B6><CFA3><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>жϺ<D0B6><CFBA><EFBFBD>
RTC_WakeUpCmd(ENABLE);
}
/*
*********************************************************************************************************
* <09><> <20><> <20><>: RtcWakeUppin()
* <09><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <09><> <20><> <20><><EFBFBD><EFBFBD>
* <20><> <20><> <20><><EFBFBD><EFBFBD>
*********************************************************************************************************
*/
void RtcWakeUppin(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE);
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN;
//GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13;
GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_DOWN;
GPIO_Init(GPIOC,&GPIO_InitStructure);
GPIO_PinAFConfig(GPIOC,GPIO_PinSource13,GPIO_AF_WKUP);
/* Enable SYSCFG clock */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
/* Connect EXTI0 Line to PA0 pin */
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOC, EXTI_PinSource13);
EXTI_ClearITPendingBit(EXTI_Line13);
EXTI_InitStructure.EXTI_Line=EXTI_Line13;//RTC wakeup
EXTI_InitStructure.EXTI_LineCmd=ENABLE;
EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Rising;
EXTI_Init(&EXTI_InitStructure);
NVIC_InitStructure.NVIC_IRQChannel=EXTI15_10_IRQn;
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x00;
NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x00;
NVIC_Init(&NVIC_InitStructure);
PWR_WakeUpPinCmd(PWR_WakeUpPin_2,ENABLE);//ʹ<>ܻ<EFBFBD><DCBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
/*
*********************************************************************************************************
* <09><> <20><> <20><>: Is_Leap_Year()
* <09><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>: <20>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EABAAF>
* <09><> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>year
* <20><> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Dz<EFBFBD><C7B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.1,<2C><>.0,<2C><><EFBFBD><EFBFBD>
* <20>·<EFBFBD> 1 2 3 4 5 6 7 8 9 10 11 12
* <20><><EFBFBD><EFBFBD> 31 29 31 30 31 30 31 31 30 31 30 31
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 31 28 31 30 31 30 31 31 30 31 30 31
*********************************************************************************************************
*/
u8 Is_Leap_Year(u16 year)
{
year=year+2000;
// year=0x14ff&year;
if(year%4==0) //<2F><><EFBFBD><EFBFBD><EFBFBD>ܱ<EFBFBD>4<EFBFBD><34><EFBFBD><EFBFBD>
{
if(year%100==0)
{
if(year%400==0)return 1;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>00<30><30>β,<2C><>Ҫ<EFBFBD>ܱ<EFBFBD>400<30><30><EFBFBD><EFBFBD>
else return 0;
}else return 1;
}else return 0;
}
/*
*********************************************************************************************************
* <09><> <20><> <20><>: MYRTC_Init()
* <09><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>: RTC<54><43>ʼ<EFBFBD><CABC>
* <09><> <20><> <20><><EFBFBD><EFBFBD>
* <20><> <20><> <20><><EFBFBD><EFBFBD>
*********************************************************************************************************
*/
void MYRTC_Init(void)
{
RTC_NVIC_CONFIG();
RTC_Time_Init();
PWR_ClearFlag(PWR_FLAG_WU);//<2F><><EFBFBD><EFBFBD>֮<EFBFBD><D6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
}
/*
*********************************************************************************************************
* <09><> <20><> <20><>: RTC_AlarmAConfig()
* <09><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>: <20><><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
* <09><> <20><> <20><>u32 seconds <20><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
* <20><> <20><> <20><><EFBFBD><EFBFBD>
*********************************************************************************************************
*/
void RTC_AlarmAConfig(u32 seconds)
{
int month_day;
NVIC_InitTypeDef NVIC_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;
/* EXTI configuration */
EXTI_ClearITPendingBit(EXTI_Line17);
EXTI_InitStructure.EXTI_Line = EXTI_Line17;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
/* Enable the RTC Alarm Interrupt */
NVIC_InitStructure.NVIC_IRQChannel = RTC_Alarm_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
RTC_TimeTypeDef nowtimes;
RTC_DateTypeDef nowdatas;
RTC_AlarmTypeDef RTC_AlarmStructure;
RTC_ClearFlag(RTC_FLAG_ALRAF);
RTC_ClearITPendingBit(RTC_IT_ALRA);
RTC_AlarmCmd(RTC_Alarm_A, DISABLE);
RTC_GetTime(RTC_Format_BIN,&nowtimes);//<2F><>ȡʱ<C8A1><CAB1>
RTC_GetDate(RTC_Format_BIN,&nowdatas);//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
month_day=mon_table[nowdatas.RTC_Month-1];//<2F><>ȡ<EFBFBD>µ<EFBFBD><C2B5><EFBFBD><EFBFBD><EFBFBD>
if(nowdatas.RTC_Month==2)
{
if(!Is_Leap_Year(nowdatas.RTC_Year))//<2F><><EFBFBD><EFBFBD>
month_day+=1; //<2F><><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD>-1
}
seconds+=nowtimes.RTC_Hours*3600+nowtimes.RTC_Minutes*60+nowtimes.RTC_Seconds+nowdatas.RTC_Date*86400;
if((seconds/86400)>month_day)//<2F>ж<EFBFBD><D0B6>Ƿ񳬹<C7B7><F1B3ACB9><EFBFBD><EFBFBD>·ݵ<C2B7><DDB5><EFBFBD><EFBFBD><EFBFBD>
{
month_day=(seconds/86400)-month_day;
RTC_AlarmStructure.RTC_AlarmDateWeekDay = month_day;
}else
RTC_AlarmStructure.RTC_AlarmDateWeekDay = seconds/86400; //<2F><>
/* Set the alarmA Masks */
RTC_AlarmStructure.RTC_AlarmDateWeekDaySel = RTC_AlarmDateWeekDaySel_Date;
RTC_AlarmStructure.RTC_AlarmMask = RTC_AlarmMask_None; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/* Set the alarmA time */
RTC_AlarmStructure.RTC_AlarmTime.RTC_H12=RTC_H12_AM; //24H
RTC_AlarmStructure.RTC_AlarmTime.RTC_Hours=(seconds%86400)/3600;//ʱ
RTC_AlarmStructure.RTC_AlarmTime.RTC_Minutes=(seconds%86400)%3600/60;//<2F><>
RTC_AlarmStructure.RTC_AlarmTime.RTC_Seconds=(seconds%86400)%3600%60;//<2F><>
RTC_SetAlarm(RTC_Format_BIN, RTC_Alarm_A, &RTC_AlarmStructure);
/* Enable AlarmA interrupt */
RTC_ITConfig(RTC_IT_ALRA, ENABLE);
/* Enable the alarmA */
RTC_AlarmCmd(RTC_Alarm_A, ENABLE);
}
/*
*********************************************************************************************************
* <09><> <20><> <20><>: RTC_AlarmBConfig()
* <09><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>: <20><><EFBFBD><EFBFBD>B<EFBFBD><42><EFBFBD><EFBFBD>
* <09><> <20><> <20><><EFBFBD><EFBFBD> set_year,<2C><> set_mon,<2C><> set_day,ʱ set_hour,<2C><> set_min ,<2C><> set_sec
* <20><> <20><> <20><><EFBFBD><EFBFBD>
*********************************************************************************************************
*/
void RTC_AlarmBConfig(int set_year,int set_mon,int set_day,int set_hour,int set_min ,int set_sec)
{
NVIC_InitTypeDef NVIC_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;
/* EXTI configuration */
EXTI_ClearITPendingBit(EXTI_Line17);
EXTI_InitStructure.EXTI_Line = EXTI_Line17;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
/* Enable the RTC Alarm Interrupt */
NVIC_InitStructure.NVIC_IRQChannel = RTC_Alarm_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
RTC_AlarmTypeDef RTC_AlarmStructure;
RTC_ClearFlag(RTC_FLAG_ALRBF);
RTC_ClearITPendingBit(RTC_IT_ALRB);
RTC_AlarmCmd(RTC_Alarm_B, DISABLE);
/* Set the alarmB Masks */
RTC_AlarmStructure.RTC_AlarmDateWeekDay = set_day;//<2F><>1-31
RTC_AlarmStructure.RTC_AlarmDateWeekDaySel = RTC_AlarmDateWeekDaySel_Date; //ѡ<><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
RTC_AlarmStructure.RTC_AlarmMask = RTC_AlarmMask_None; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/* Set the alarmB time */
RTC_AlarmStructure.RTC_AlarmTime.RTC_H12=RTC_H12_AM; //24H
RTC_AlarmStructure.RTC_AlarmTime.RTC_Hours=set_hour;
RTC_AlarmStructure.RTC_AlarmTime.RTC_Minutes=set_min;
RTC_AlarmStructure.RTC_AlarmTime.RTC_Seconds=set_sec;
RTC_SetAlarm(RTC_Format_BIN, RTC_Alarm_B, &RTC_AlarmStructure);
/* Set AlarmA subseconds and enable SubSec Alarm : generate 8 interripts per Second */
// RTC_AlarmSubSecondConfig(RTC_Alarm_A, 0xFF, RTC_AlarmSubSecondMask_SS14_5);
/* Enable AlarmA interrupt */
RTC_ITConfig(RTC_IT_ALRB, ENABLE);
/* Enable the alarmA */
RTC_AlarmCmd(RTC_Alarm_B, ENABLE);
}
/*
*********************************************************************************************************
* <09><> <20><> <20><>: Get_Wkup_MYITstatus()
* <09><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>Դ
* <09><> <20><> <20><><EFBFBD><EFBFBD>
* <20><> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ѱ<EFBFBD>־ MYITStatus1
*********************************************************************************************************
*/
STB_ITStatus Get_Wkup_MYITstatus(void)
{
if(RTC_GetITStatus(RTC_IT_ALRA))
{
EXTI_ClearITPendingBit(EXTI_Line17);
RTC_ClearITPendingBit(RTC_IT_ALRA);
MYITStatus1.AlarmA_ITStatus=1;
}
if(RTC_GetITStatus(RTC_IT_ALRB))
{
EXTI_ClearITPendingBit(EXTI_Line17);
RTC_ClearITPendingBit(RTC_IT_ALRB);
MYITStatus1.AlarmB_ITStatus=1;
}
if(RTC_GetITStatus(RTC_IT_WUT))
{
EXTI_ClearITPendingBit(EXTI_Line20);
RTC_ClearITPendingBit(RTC_IT_WUT);
MYITStatus1.WUT_ITStatus=1;
}
if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_13))
{
Check_WKUP_key=Check_WKUP();
if(Check_WKUP_key)
{
MYITStatus1.WKUP1_ITStatus=1;
}
EXTI_ClearITPendingBit(EXTI_Line13);
}
if(MYITStatus1.AlarmA_ITStatus | MYITStatus1.AlarmB_ITStatus | MYITStatus1.WUT_ITStatus | MYITStatus1.WKUP1_ITStatus)
{
if(MYITStatus1.AlarmA_ITStatus)return AlarmA_ITHP;
if(MYITStatus1.AlarmB_ITStatus)return AlarmB_ITHP;
if(MYITStatus1.WUT_ITStatus)return WUT_ITHP;
if(MYITStatus1.WKUP1_ITStatus)return WKUP1_ITHP;
}
else
{
MYITStatus1.WKUP_POWBUTTON=1;//<2F><>Դ<EFBFBD>ϵ<EFBFBD>
return Power_ON;
}
return Power_ON;
}
/*
*********************************************************************************************************
* <09><> <20><> <20><>: RTC_Alarm_IRQHandler()
* <09><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>: <20><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
* <09><> <20><> <20><><EFBFBD><EFBFBD>
* <20><> <20><> <20><><EFBFBD><EFBFBD>
*********************************************************************************************************
*/
void RTC_Alarm_IRQHandler(void)
{
/* Check on the AlarmA falg and on the number of interrupts per Second (60*8) */
if(RTC_GetITStatus(RTC_IT_ALRA) != RESET)
{
/* Clear RTC AlarmA Flags */
RTC_ClearITPendingBit(RTC_IT_ALRA);
MYITStatus1.AlarmA_ITStatus=1;
RTC_AlarmCmd(RTC_Alarm_A, DISABLE);
//u5_printf("alarmA hp\r\n");
RTC_AlarmAConfig(get_pubidv());
}
/* Check on the AlarmA falg and on the number of interrupts per Second (60*8) */
if(RTC_GetITStatus(RTC_IT_ALRB) != RESET)
{
/* Clear RTC AlarmB Flags */
RTC_ClearITPendingBit(RTC_IT_ALRB);
RTC_AlarmCmd(RTC_IT_ALRB, DISABLE);
MYITStatus1.AlarmB_ITStatus=1;
IS_FIRST_SAVE = 1;
}
/* Clear the EXTIL line 17 */
EXTI_ClearITPendingBit(EXTI_Line17);
}
/*
*********************************************************************************************************
* <09><> <20><> <20><>: RTC_WKUP_IRQHandler()
* <09><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>: <20><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
* <09><> <20><> <20><><EFBFBD><EFBFBD>
* <20><> <20><> <20><><EFBFBD><EFBFBD>
*********************************************************************************************************
*/
void RTC_WKUP_IRQHandler(void)
{
if(RTC_GetITStatus(RTC_IT_WUT) != RESET)
{
RTC_ClearITPendingBit(RTC_IT_WUT);
RTC_WakeUpCmd(DISABLE);
EXTI_ClearITPendingBit(EXTI_Line20);
MYITStatus1.WUT_ITStatus=1;
//u5_printf("WUT hp\r\n");
//u5_printf("wut_PROS1_RUN:%d\r\n",TASKRUNSS.PROS1_RUN);
RtcWakeUpConfig(get_meaidv() - 1);
}
}
/*
*********************************************************************************************************
* <09><> <20><> <20><>: Measure_Ap_S()
* <09><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>: ԤԼģʽ<C4A3><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>AB<41>Ĵ<EFBFBD><C4B4><EFBFBD>
* <09><> <20><> <20><><EFBFBD><EFBFBD>
* <20><> <20><> <20><><EFBFBD><EFBFBD>
*********************************************************************************************************
*/
void Measure_Ap_S(void)
{
int year,mon,day,hour,min ,sec;
char temp[4];
RTC_AlarmCmd(RTC_Alarm_A, DISABLE);//<2F>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD>A
RTC_WakeUpCmd(DISABLE); //<2F>ر<EFBFBD><D8B1>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>B<EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD>ʱ<EFBFBD><CAB1>
memcpy(temp,Init_Data_Equipment.appointment_time,4);
year = atoi(temp);
memset(temp,0,4);
memcpy(temp,&Init_Data_Equipment.appointment_time[4],2);
mon = atoi(temp);
memcpy(temp,&Init_Data_Equipment.appointment_time[6],2);
day = atoi(temp);
memcpy(temp,&Init_Data_Equipment.appointment_time[8],2);
hour = atoi(temp);
memcpy(temp,&Init_Data_Equipment.appointment_time[10],2);
min = atoi(temp);
memcpy(temp,&Init_Data_Equipment.appointment_time[12],2);
sec = atoi(temp);
if(sec == 0)
{
sec = 59;
if(min == 0)
{
min = 59;
hour = hour - 1;
}else min = min - 1;
}else sec = sec - 1;
RTC_AlarmBConfig(year,mon,day,hour,min,sec);
}
/*
*********************************************************************************************************
* <09><> <20><> <20><>: Measure_Ap_E()
* <09><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>: ԤԼģʽ<C4A3><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>
* <09><> <20><> <20><><EFBFBD><EFBFBD>
* <20><> <20><> <20><><EFBFBD><EFBFBD>
*********************************************************************************************************
*/
void Measure_Ap_E(void)
{
MYITStatus1.AlarmA_ITStatus = 1;
MYITStatus1.WUT_ITStatus = 1;
RTC_AlarmCmd(RTC_Alarm_B, DISABLE);//<2F>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD>B
}
/*
*********************************************************************************************************
* <09><> <20><> <20><>: EXTI15_10_IRQHandler()
* <09><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>: IO<49>ж<EFBFBD>
* <09><> <20><> <20><><EFBFBD><EFBFBD>
* <20><> <20><> <20><><EFBFBD><EFBFBD>
*********************************************************************************************************
*/
void EXTI15_10_IRQHandler(void)
{
EXTI_ClearITPendingBit(EXTI_Line13);
//u5_printf("WAKEUP2 is HP");
}
/*
*********************************************************************************************************
* <09><> <20><> <20><>: Check_WKUP()
* <09><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <09><> <20><> <20><><EFBFBD><EFBFBD>
* <20><> <20><> <20><>1 <20><><EFBFBD><EFBFBD>1S 0<><30><EFBFBD><EFBFBD>1S
*********************************************************************************************************
*/
u8 Check_WKUP(void)
{
u8 t=0; //<2F><>¼<EFBFBD><C2BC><EFBFBD>µ<EFBFBD>ʱ<EFBFBD><CAB1>
while(1)
{
if(WKUP_KD)
{
t++; //<2F>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
delay_ms(30);
if(t>=100) //<2F><><EFBFBD>³<EFBFBD><C2B3><EFBFBD>1<EFBFBD><31><EFBFBD><EFBFBD>
{
return 1; //<2F><><EFBFBD><EFBFBD>1s<31><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
}else
{
return 0; //<2F><><EFBFBD>²<EFBFBD><C2B2><EFBFBD>3<EFBFBD><33>
}
}
}
/*
*********************************************************************************************************
* <09><> <20><> <20><>: Key_Scan()
* <09><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̰<EFBFBD><CCB0>ͳ<EFBFBD><CDB3><EFBFBD><EFBFBD>¼<EFBFBD>
* <09><> <20><> <20><><EFBFBD><EFBFBD>
* <20><> <20><> <20><>KEY_SHORT KEY_LONG 0
*********************************************************************************************************
*/
u8 Key_Scan(void)
{
static KEY_STATE KeyState =KEY_CHECK;
static u8 TimeCnt = 0;
u8 key_return = 0;
switch (KeyState)
{
//<2F><><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD>ʱ<EFBFBD>ж<EFBFBD>WKUP_KD<4B><44>ֵ
case KEY_CHECK:
if(WKUP_KD)
{
KeyState = KEY_COMFIRM; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>WKUP_KDֵΪ1<CEAA><31>˵<EFBFBD><CBB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD>£<EFBFBD><C2A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>״̬
}
else
{
KeyState = KEY_CHECK;
}
TimeCnt = 0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ
key_time=TimeCnt;
key_return=0;
break;
case KEY_COMFIRM:
if(WKUP_KD) //<2F><EFBFBD><E9BFB4>ǰWKUP_KD<4B>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><31><EFBFBD>ٴ<EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
{
TimeCnt++;
key_time=TimeCnt;
if(TimeCnt>=200)
{
TimeCnt=200;
KeyState = KEY_RELEASE;
}
}
else
{
KeyState = KEY_RELEASE; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>״̬
}
break;
case KEY_RELEASE:
if(!WKUP_KD) //<2F><>ǰWKUP_KDֵΪ0<CEAA><30>˵<EFBFBD><CBB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><D1BE>ͷţ<CDB7><C5A3><EFBFBD><EFBFBD>ؿ<EFBFBD>ʼ״̬
{
KeyState = KEY_CHECK;
if(TimeCnt>10 )
{
key_return = KEY_SHORT;
}
if(TimeCnt>100)
{
key_return = KEY_LONG;
}
//u5_printf("TimeCnt:%d\r\n",TimeCnt);
TimeCnt=0;
}
break;
default: break;
}
return key_return;
}
/***************************** END OF FILE *********************************/