亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? rtc.c

?? stm32 紅外萬(wàn)年歷
?? C
字號(hào):
#include "sys.h"
#include "rtc.h" 
#include "delay.h"
#include "usart.h" 


tm timer;//時(shí)鐘結(jié)構(gòu)體 
tm1 timer1; 	   
//實(shí)時(shí)時(shí)鐘配置
//初始化RTC時(shí)鐘,同時(shí)檢測(cè)時(shí)鐘是否工作正常
//BKP->DR1用于保存是否第一次配置的設(shè)置
//返回0:正常
//其他:錯(cuò)誤代碼
void RTC_NVIC_Config(void)
{	
    NVIC_InitTypeDef NVIC_InitStructure;
	NVIC_InitStructure.NVIC_IRQChannel = RTC_IRQn;		//RTC全局中斷
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;	//先占優(yōu)先級(jí)1位,從優(yōu)先級(jí)3位
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;	//先占優(yōu)先級(jí)0位,從優(yōu)先級(jí)4位
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;		//使能該通道中斷
	NVIC_Init(&NVIC_InitStructure);		//根據(jù)NVIC_InitStruct中指定的參數(shù)初始化外設(shè)NVIC寄存器
}

u8 RTC_Init(void)
	{
	//檢查是不是第一次配置時(shí)鐘
	u8 temp=0;
	RTC_NVIC_Config();
	//if(BKP->DR1!=0X5050)//第一次配置
	if (BKP_ReadBackupRegister(BKP_DR1) != 0x5050)		//從指定的后備寄存器中讀出數(shù)據(jù):讀出了與寫入的指定數(shù)據(jù)不相乎
		{	 			
		RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);	//使能PWR和BKP外設(shè)時(shí)鐘   
		PWR_BackupAccessCmd(ENABLE);	//使能RTC和后備寄存器訪問 
		BKP_DeInit();	//將外設(shè)BKP的全部寄存器重設(shè)為缺省值 	
		RCC_LSEConfig(RCC_LSE_ON);	//設(shè)置外部低速晶振(LSE),使用外設(shè)低速晶振
		while (RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET)	//檢查指定的RCC標(biāo)志位設(shè)置與否,等待低速晶振就緒
			{
			temp++;
			delay_ms(10);
			}
		if(temp>=250)return 1;//初始化時(shí)鐘失敗,晶振有問題	    
		RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);		//設(shè)置RTC時(shí)鐘(RTCCLK),選擇LSE作為RTC時(shí)鐘    
		RCC_RTCCLKCmd(ENABLE);	//使能RTC時(shí)鐘  
		RTC_WaitForSynchro();		//等待最近一次對(duì)RTC寄存器的寫操作完成
		RTC_WaitForLastTask();	//等待最近一次對(duì)RTC寄存器的寫操作完成
		RTC_ITConfig(RTC_IT_SEC, ENABLE);		//使能RTC秒中斷
		RTC_WaitForLastTask();	//等待最近一次對(duì)RTC寄存器的寫操作完成
		RTC_SetPrescaler(32767); //設(shè)置RTC預(yù)分頻的值
		RTC_WaitForLastTask();	//等待最近一次對(duì)RTC寄存器的寫操作完成
		RTC_Set(timer1.w_year1,timer1.w_month1,timer1.w_date1,timer1.hour1,timer1.min1,timer1.sec1);  //設(shè)置時(shí)間	  
		BKP_WriteBackupRegister(BKP_DR1, 0X5050);	//向指定的后備寄存器中寫入用戶程序數(shù)據(jù)

		}
	else//系統(tǒng)繼續(xù)計(jì)時(shí)
		{

		RTC_WaitForSynchro();	//等待最近一次對(duì)RTC寄存器的寫操作完成
		RTC_ITConfig(RTC_IT_SEC, ENABLE);	//使能RTC秒中斷
		RTC_WaitForLastTask();	//等待最近一次對(duì)RTC寄存器的寫操作完成
		}
		    				     
	RTC_Get();//更新時(shí)間	
	RCC_ClearFlag();	//清除RCC的復(fù)位標(biāo)志位
	return 0; //ok
	}


//RTC中斷服務(wù)函數(shù)
void RTC_IRQHandler(void)
{							    
	if(RTC->CRL&0x0001)//秒鐘中斷
		{							
		RTC_Get();//更新時(shí)間 	 
		}
	if(RTC->CRL&0x0002)//鬧鐘中斷
		{
		RTC->CRL&=~(0x0002);//清鬧鐘中斷
		//鬧鐘處理
		} 				  								 
	RTC->CRL&=0X0FFA;         //清除溢出,秒鐘中斷標(biāo)志
	while(!(RTC->CRL&(1<<5)));//等待RTC寄存器操作完成		   							 	   	 
}
 

//判斷是否是閏年函數(shù)
//月份   1  2  3  4  5  6  7  8  9  10 11 12
//閏年   31 29 31 30 31 30 31 31 30 31 30 31
//非閏年 31 28 31 30 31 30 31 31 30 31 30 31
//輸入:年份
//輸出:該年份是不是閏年.1,是.0,不是
u8 Is_Leap_Year(u16 year)
	{			  
	if(year%4==0) //必須能被4整除
		{ 
		if(year%100==0) 
			{ 
			if(year%400==0)return 1;//如果以00結(jié)尾,還要能被400整除 	   
			else return 0;   
			}else return 1;   
		}else return 0;	
	}	
 			   
//設(shè)置時(shí)鐘
//把輸入的時(shí)鐘轉(zhuǎn)換為秒鐘
//以1970年1月1日為基準(zhǔn)
//1970~2099年為合法年份
//返回值:0,成功;其他:錯(cuò)誤代碼.
//月份數(shù)據(jù)表											 
u8 const table_week[12]={0,3,3,6,1,4,6,2,5,0,3,5}; //月修正數(shù)據(jù)表	  
//平年的月份日期表
const u8 mon_table[12]={31,28,31,30,31,30,31,31,30,31,30,31};



u8 RTC_Set(u16 syear,u8 smon,u8 sday,u8 hour,u8 min,u8 sec)
	{
	u16 t;
	u32 seccount=0;
	if(syear<1970||syear>2099)return 1;	   
	for(t=1970;t<syear;t++)	//把所有年份的秒鐘相加
		{
		if(Is_Leap_Year(t))seccount+=31622400;//閏年的秒鐘數(shù)
		else seccount+=31536000;			  //平年的秒鐘數(shù)
		}
	smon-=1;
	for(t=0;t<smon;t++)	   //把前面月份的秒鐘數(shù)相加
		{
		seccount+=(u32)mon_table[t]*86400;//月份秒鐘數(shù)相加
		if(Is_Leap_Year(syear)&&t==1)seccount+=86400;//閏年2月份增加一天的秒鐘數(shù)	   
		}
	seccount+=(u32)(sday-1)*86400;//把前面日期的秒鐘數(shù)相加 
	seccount+=(u32)hour*3600;//小時(shí)秒鐘數(shù)
	seccount+=(u32)min*60;	 //分鐘秒鐘數(shù)
	seccount+=sec;//最后的秒鐘加上去

	RTC_WaitForLastTask();	//等待最近一次對(duì)RTC寄存器的寫操作完成

	RTC_SetCounter(seccount);	//設(shè)置RTC計(jì)數(shù)器的值

	RTC_WaitForLastTask();	//等待最近一次對(duì)RTC寄存器的寫操作完成  	
	return 0;	    
	}

//得到當(dāng)前的時(shí)間
//返回值:0,成功;其他:錯(cuò)誤代碼.
u8 RTC_Get(void)
{
	static u16 daycnt=0;
	u32 timecount=0; 
	u32 temp=0;
	u16 temp1=0;	  
	   
	timecount=RTC->CNTH;//得到計(jì)數(shù)器中的值(秒鐘數(shù))
	timecount<<=16;
	timecount+=RTC->CNTL;			 

	temp=timecount/86400;   //得到天數(shù)(秒鐘數(shù)對(duì)應(yīng)的)
	if(daycnt!=temp)//超過一天了
	{	  
		daycnt=temp;
		temp1=1970;	//從1970年開始
		while(temp>=365)
		{				 
			if(Is_Leap_Year(temp1))//是閏年
			{
				if(temp>=366)temp-=366;//閏年的秒鐘數(shù)
				else {temp1++;break;}  
			}
			else temp-=365;	  //平年 
			temp1++;  
		}   
		timer.w_year=temp1;//得到年份
		temp1=0;
		while(temp>=28)//超過了一個(gè)月
		{
			if(Is_Leap_Year(timer.w_year)&&temp1==1)//當(dāng)年是不是閏年/2月份
			{
				if(temp>=29)temp-=29;//閏年的秒鐘數(shù)
				else break; 
			}
			else 
			{
				if(temp>=mon_table[temp1])temp-=mon_table[temp1];//平年
				else break;
			}
			temp1++;  
		}
		timer.w_month=temp1+1;//得到月份
		timer.w_date=temp+1;  //得到日期 
	}
	temp=timecount%86400;     //得到秒鐘數(shù)   	   
	timer.hour=temp/3600;     //小時(shí)
	timer.min=(temp%3600)/60; //分鐘	
	timer.sec=(temp%3600)%60; //秒鐘
	timer.week=RTC_Get_Week(timer.w_year,timer.w_month,timer.w_date);//獲取星期   
	return 0;
}	 
//獲得現(xiàn)在是星期幾
//功能描述:輸入公歷日期得到星期(只允許1901-2099年)
//輸入?yún)?shù):公歷年月日 
//返回值:星期號(hào)																						 
u8 RTC_Get_Week(u16 year,u8 month,u8 day)
	{	
	u16 temp2;
	u8 yearH,yearL;
	
	yearH=year/100;	yearL=year%100; 
	// 如果為21世紀(jì),年份數(shù)加100  
	if (yearH>19)yearL+=100;
	// 所過閏年數(shù)只算1900年之后的  
	temp2=yearL+yearL/4;
	temp2=temp2%7; 
	temp2=temp2+day+table_week[month-1];
	if (yearL%4==0&&month<3)temp2--;
	return(temp2%7);
	} 
//比較兩個(gè)字符串指定長(zhǎng)度的內(nèi)容是否相等
//參數(shù):s1,s2要比較的兩個(gè)字符串;len,比較長(zhǎng)度
//返回值:1,相等;0,不相等

u8 str_cmpx(u8*s1,u8*s2,u8 len)
{
	u8 i;
	for(i=0;i<len;i++)if((*s1++)!=*s2++)return 0;
	return 1;	   
}
extern const u8 *COMPILED_DATE;//獲得編譯日期
extern const u8 *COMPILED_TIME;//獲得編譯時(shí)間
const u8 Month_Tab[12][3]={"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"}; 
//自動(dòng)設(shè)置時(shí)間為編譯器時(shí)間   
void Auto_Time_Set(void)
{
	u8 temp[3];
	u8 i;
	u8 mon,date;
	u16 year;
	u8 sec,min,hour;
	for(i=0;i<3;i++)temp[i]=COMPILED_DATE[i];   
	for(i=0;i<12;i++)if(str_cmpx((u8*)Month_Tab[i],temp,3))break;	
	mon=i+1;//得到月份
	if(COMPILED_DATE[4]==' ')date=COMPILED_DATE[5]-'0'; 
	else date=10*(COMPILED_DATE[4]-'0')+COMPILED_DATE[5]-'0';  
	year=1000*(COMPILED_DATE[7]-'0')+100*(COMPILED_DATE[8]-'0')+10*(COMPILED_DATE[9]-'0')+COMPILED_DATE[10]-'0';	   
	hour=10*(COMPILED_TIME[0]-'0')+COMPILED_TIME[1]-'0';  
	min=10*(COMPILED_TIME[3]-'0')+COMPILED_TIME[4]-'0';  
	sec=10*(COMPILED_TIME[6]-'0')+COMPILED_TIME[7]-'0';  
	RTC_Set(year,mon,date,hour,min,sec)	;
} 



?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久精品一区二区三区av | 4438x亚洲最大成人网| 美女精品一区二区| 久久久不卡影院| 在线精品视频一区二区| 激情av综合网| 日韩在线一区二区三区| 中文字幕不卡在线播放| 日韩一级黄色片| 在线一区二区三区四区| 成人午夜在线播放| 美国一区二区三区在线播放| 亚洲欧美经典视频| 国产日韩一级二级三级| 日韩免费看网站| 欧美精品xxxxbbbb| 色婷婷av一区二区三区软件| 国产美女在线观看一区| 日韩av成人高清| 亚洲一区二区在线免费看| 国产精品无人区| 国产香蕉久久精品综合网| 欧美电影免费观看高清完整版在线观看| 91福利在线观看| jlzzjlzz欧美大全| 国产xxx精品视频大全| 美国十次了思思久久精品导航| 亚洲综合清纯丝袜自拍| 亚洲欧洲精品天堂一级| 久久久亚洲高清| 欧美精品一区二区三区在线| 日韩一二三四区| 在线综合亚洲欧美在线视频| 欧美性高清videossexo| 欧美影视一区二区三区| 在线观看日韩国产| 91国偷自产一区二区三区观看| 91在线一区二区三区| 99久久777色| 成人avav在线| 91视频国产观看| 一本久久a久久免费精品不卡| av影院午夜一区| 色诱亚洲精品久久久久久| 色婷婷久久99综合精品jk白丝| 一本大道av伊人久久综合| 91成人网在线| 91精品国产一区二区人妖| 日韩欧美中文一区| 欧美成人一区二区三区片免费 | 欧美日韩一区二区三区在线看| 91丨九色porny丨蝌蚪| 色婷婷综合久久久久中文一区二区 | 日本高清不卡aⅴ免费网站| 91蜜桃网址入口| 欧美亚男人的天堂| 欧美一二三四在线| 久久一区二区视频| 国产精品激情偷乱一区二区∴| 椎名由奈av一区二区三区| 亚洲一区电影777| 日本午夜精品视频在线观看| 久久国产精品露脸对白| 欧美在线三级电影| 日韩一级成人av| 国产精品天干天干在观线| 亚洲美女视频在线观看| 日韩精品电影在线| 国产乱码精品一品二品| 色综合天天狠狠| 欧美一区二区三区免费观看视频| 久久伊人蜜桃av一区二区| 亚洲欧美乱综合| 免费在线欧美视频| 岛国一区二区在线观看| 欧美性猛片aaaaaaa做受| 精品国产91九色蝌蚪| 国产精品麻豆久久久| 亚洲国产中文字幕在线视频综合| 奇米一区二区三区| 成人激情动漫在线观看| 欧美美女视频在线观看| 久久久影视传媒| 亚洲高清不卡在线| 粉嫩av亚洲一区二区图片| 欧美性猛交xxxxxxxx| 国产无遮挡一区二区三区毛片日本| 亚洲另类一区二区| 极品尤物av久久免费看| 色噜噜狠狠色综合中国| wwww国产精品欧美| 亚洲综合免费观看高清完整版在线 | 日韩一区二区三免费高清| 中文av一区二区| 青娱乐精品视频| www.在线欧美| 日韩精品一区二区三区中文不卡 | 久久久久高清精品| 日韩中文字幕一区二区三区| 成人激情电影免费在线观看| 日韩一区二区中文字幕| 一级中文字幕一区二区| 国产精品一卡二卡在线观看| 欧美日韩成人一区二区| 日韩码欧中文字| 国产成人久久精品77777最新版本| 色综合久久综合网| 国产亚洲精品资源在线26u| 日韩精品成人一区二区在线| 色哟哟欧美精品| 国产精品看片你懂得| 久88久久88久久久| 91精品国产色综合久久久蜜香臀| ...xxx性欧美| 成人综合日日夜夜| 久久久亚洲精品一区二区三区 | 91精品国产黑色紧身裤美女| 亚洲欧美国产高清| 成人h版在线观看| 国产三级精品三级在线专区| 久久www免费人成看片高清| 9191精品国产综合久久久久久| 亚洲精品一二三区| 色综合一个色综合亚洲| 亚洲男人的天堂在线观看| 大桥未久av一区二区三区中文| 久久综合久久综合九色| 久久99久久99精品免视看婷婷| 欧美乱妇15p| 亚洲第一综合色| 欧美日本精品一区二区三区| 亚洲国产精品一区二区www| 欧美自拍丝袜亚洲| 亚洲精品va在线观看| 91在线国内视频| 亚洲色大成网站www久久九九| av一本久道久久综合久久鬼色| 国产亚洲一二三区| 国产成人高清视频| 国产精品私人自拍| 不卡影院免费观看| 亚洲人亚洲人成电影网站色| 91丨九色丨蝌蚪丨老版| 亚洲一区二区视频| 欧美日韩在线播放三区| 日本亚洲免费观看| 亚洲精品一区二区三区精华液 | 欧美日韩在线播放三区四区| 亚洲午夜免费电影| 欧美精品日韩一区| 蜜桃视频在线一区| 337p日本欧洲亚洲大胆色噜噜| 国产综合久久久久久久久久久久| 久久久九九九九| 99久久精品国产一区二区三区| 一区二区视频在线| 在线电影欧美成精品| 裸体一区二区三区| 国产日韩一级二级三级| 成人短视频下载| 亚洲一区二区三区四区五区黄 | 欧美日韩国产综合一区二区三区| 天堂成人国产精品一区| 欧美xxx久久| av电影在线观看不卡| 亚洲综合色自拍一区| 日韩一级片在线观看| 成人午夜免费av| 亚洲小说欧美激情另类| 精品国产污网站| 99久久国产综合精品麻豆| 亚洲成人7777| 国产午夜久久久久| 在线亚洲人成电影网站色www| 亚洲777理论| 久久精品一区二区三区不卡牛牛| 91小视频免费看| 免费在线观看一区二区三区| 国产日韩欧美麻豆| 欧美亚洲综合另类| 国产米奇在线777精品观看| 亚洲精品精品亚洲| 26uuuu精品一区二区| 色婷婷久久久综合中文字幕| 麻豆国产欧美日韩综合精品二区| 国产精品久久久久四虎| 欧美绝品在线观看成人午夜影视| 国产精品99久久久| 亚洲国产成人av网| 中文字幕av不卡| 欧美一区二区在线不卡| 91尤物视频在线观看| 久久 天天综合| 亚洲在线视频免费观看| 国产亚洲欧美日韩俺去了| 欧美区视频在线观看| 成人蜜臀av电影| 麻豆国产精品777777在线| 一区二区久久久久久| 国产亚洲欧美在线|