基于stm32模擬路燈控制系統(tǒng)_第1頁(yè)
基于stm32模擬路燈控制系統(tǒng)_第2頁(yè)
基于stm32模擬路燈控制系統(tǒng)_第3頁(yè)
基于stm32模擬路燈控制系統(tǒng)_第4頁(yè)
基于stm32模擬路燈控制系統(tǒng)_第5頁(yè)
已閱讀5頁(yè),還剩22頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

模擬路燈控制系統(tǒng)設(shè)摘要本設(shè)計(jì)是一種采用新一代超強(qiáng)抗干擾/強(qiáng)抗靜電/高速/低功耗單片STM32為數(shù)據(jù)處理和控制的路燈照明智能系統(tǒng)。該單片機(jī)實(shí)現(xiàn)了對(duì)路燈的亮滅控制、報(bào)警、還有定時(shí)功能。采用節(jié)能環(huán)保的LED燈作為光源,采用科學(xué)有效的檢測(cè)與控制技術(shù),實(shí)現(xiàn)了光電控制、時(shí)間控制、交通情況檢測(cè)、故障自動(dòng)檢測(cè)與報(bào)警等功能,節(jié)省了人力和電力資源,降低了系統(tǒng)運(yùn)行本錢,性價(jià)比擬高。通過(guò)光敏電阻模塊檢測(cè)LED故障,ULN2803芯片控制LED燈狀態(tài),利用光敏電阻原理和紅外對(duì)管特性實(shí)現(xiàn)自動(dòng)調(diào)節(jié)路燈開(kāi)關(guān)狀態(tài)關(guān)鍵字:STM32-cortex-m3;AbstractThisdesignisanewgenerationofpowerfulanti-interference/strongantistatic/high/lowpowersinglechipSTM32asthedataprocessingandcontrolofstreetlampintelligentlightingsystem.Thesinglechipmicrocomputertoachievethebrightlightsoutofcontrol,alarm,andthetimingfunction.TheenergysavingandenvironmentalprotectionoftheLEDlampasthelightsource,theuseofscientificandeffectivedetectionandcontroltechnology,realizethephotoelectriccontrol,timecontrol,trafficconditiondetection,automaticfaultdetectionandalarmfunctions,savingmanpowerandelectricpowerresources,reducingtheoperationcostofthesystem,priceiscomparativelyhigh.PhotosensitiveresistancethroughfaultdetectionmoduleLED,ULN2803chipcontrolLEDlampstatus,useofphotosensitiveresistancetheoryandinfraredtubecharacteristicstorealizeautomaticadjustmentofroadlampswitchstate.Keywords:STM32-cortex-m3;目一、總體方案思路及其設(shè)41.1、檢測(cè)物體移動(dòng)方案設(shè)41.3、時(shí)鐘顯示方案的設(shè)計(jì)41.4、控制局部方案的設(shè)計(jì)5二、系統(tǒng)理論分析與功能模塊設(shè)計(jì)52.1、驅(qū)動(dòng)電路原理分析52.2、CPU核心控制模塊62.3、時(shí)鐘控制模塊72.4、按鍵模塊82.4、光電檢測(cè)模塊82.5光敏檢測(cè)模塊9三、系統(tǒng)測(cè)試13.1使用測(cè)量工具13.2局部測(cè)試指標(biāo)10三、軟件設(shè)計(jì)113.1.軟件流程113.2.軟件子程序12四、系統(tǒng)實(shí)現(xiàn)的功能124.1.路燈的工作模式12五、結(jié)束13附件1:系統(tǒng)程序14附件2:系統(tǒng)總原理圖41一、總體方案思路及其設(shè)本模擬路燈控制系統(tǒng)的設(shè)計(jì)方案要實(shí)現(xiàn)的主要功能主要分解為以下五個(gè)方面一是時(shí)鐘功能及定時(shí)開(kāi)關(guān)燈二是根據(jù)環(huán)境明暗變化,自動(dòng)開(kāi)燈和關(guān)燈。三是根據(jù)交通情況自動(dòng)調(diào)節(jié)亮燈狀態(tài):當(dāng)汽車靠近路燈時(shí),路燈能自動(dòng)點(diǎn)亮;當(dāng)汽車遠(yuǎn)離時(shí),路燈自動(dòng)熄滅四聲光報(bào)警功能,當(dāng)路燈出現(xiàn)故障時(shí)而不亮?xí)r,控制器發(fā)出信號(hào),并顯示有故障路燈的地址編號(hào)1.1、檢測(cè)物體移動(dòng)方案設(shè)方案一、采用紅外對(duì)管發(fā)射接收裝置方案二、超聲波傳感器方案三、紅外避障傳感方案論證:方案一中利用紅外對(duì)管發(fā)射接收,操作簡(jiǎn)單,價(jià)格低廉,可以完成簡(jiǎn)單物體的測(cè)量。方案二超聲波傳感器在檢測(cè)方面靈敏度很高,價(jià)格昂貴,性能雖好,可是性價(jià)比低。方案三中的紅外避障傳感器,能較好檢測(cè)物體,但是價(jià)錢比擬貴。所以我們選擇方案一,完成要求,性價(jià)比高1.3、時(shí)鐘顯示方案的設(shè)計(jì)方案一、采用傳統(tǒng)六個(gè)數(shù)碼管作為時(shí)鐘顯示方案二、采用液晶屏作時(shí)鐘顯示方案論證:方案一采用數(shù)碼管顯示雖然控制簡(jiǎn)單,亮度大,價(jià)格廉價(jià)。缺點(diǎn)是功耗較大,顯示不清晰,操作不方便。方案二液晶顯示器那么具有耗電少、配置簡(jiǎn)單靈活、安裝方便、耐振動(dòng)、使用壽命長(zhǎng)、美觀等優(yōu)點(diǎn)。同時(shí)可以顯示菜單等復(fù)雜的界面,更易于操作。本設(shè)計(jì)系統(tǒng)采用LCD顯示器1.4、控制局部方案的設(shè)計(jì)方案一、單片機(jī)STM32Cortex-M3完成對(duì)其他各局部控制方案二、采用單片機(jī)STC90C51作為控制局部方案論證:方案一STM32Cortex-M3是一種高速/低功耗/性價(jià)比高的單片機(jī)可完成對(duì)其他各局部的控制。內(nèi)部具有強(qiáng)大的存儲(chǔ)空間且能夠?qū)崿F(xiàn)各種復(fù)雜的控制功能。方案二STC90C51的功耗比擬大,數(shù)據(jù)傳輸速率比擬低,要實(shí)現(xiàn)比擬復(fù)雜的控制功能較困難。故本設(shè)計(jì)采用STM32Cortex-M3單片機(jī)下列圖是模擬路燈控制系統(tǒng)設(shè)計(jì)的總體設(shè)計(jì)方案:圖1系統(tǒng)總體方二、系統(tǒng)理論分析與功能模塊設(shè)計(jì)2.1、驅(qū)動(dòng)電路原理分析圖2為本設(shè)計(jì)系統(tǒng)LED燈的驅(qū)動(dòng)電源電路以及光電驅(qū)動(dòng),通過(guò)運(yùn)放器ULN2803芯片,使驅(qū)動(dòng)LED圖2LED驅(qū)動(dòng)電路2.2、CPU核心控制模塊圖6為本系統(tǒng)的主控CPU單元,VBAT為備用電源引腳,PC14/COSC32和PC15/OSC33為內(nèi)部實(shí)時(shí)時(shí)鐘電路引腳,NRST為復(fù)位引腳,PA0腳為進(jìn)入時(shí)間設(shè)定界面以及長(zhǎng)按時(shí)對(duì)路燈開(kāi)關(guān)時(shí)間控制,PA1時(shí)間設(shè)定加以及長(zhǎng)按時(shí)進(jìn)入單獨(dú)設(shè)定路燈的亮、滅狀態(tài),PA2時(shí)間設(shè)定減以及長(zhǎng)按時(shí)進(jìn)入路燈故障界面,PA3和PA4報(bào)警信號(hào)燈狀態(tài),PA6和PA7控制路燈狀態(tài),PC13、PC4和PC5光敏狀態(tài)檢測(cè),PB0、PB1、PB2、PB7、PB6、PB5、PB4、PB3為液晶顯示輸入數(shù)據(jù)端口,PB13、PB14、PB15為液晶輸入控制端口,PC7、PC8、PC9檢測(cè)光電狀態(tài)端口,PB9、PB8為時(shí)鐘控制端口,PA15、PA14、PA13為檢測(cè)光敏狀態(tài)端口。下列圖為主控電路模塊圖6單片機(jī)最小系統(tǒng)、LCD顯示和報(bào)警電2.3、時(shí)鐘控制模塊為了減輕單片機(jī)的編程壓力,設(shè)計(jì)中沒(méi)有采用片內(nèi)時(shí)鐘,而是外接了時(shí)鐘芯片DS1302。DS1302時(shí)鐘芯片具有時(shí)鐘/日歷功能,并能利用其內(nèi)部的32字節(jié)RAM存儲(chǔ)。圖7中四個(gè)時(shí)鐘功能鍵分別為SW1—進(jìn)入時(shí)鐘界面設(shè)定、SW2—增加、SW3—減小,此功能鍵由CPU控制進(jìn)行LED燈的開(kāi)關(guān)調(diào)時(shí)。按下每個(gè)鍵將會(huì)有設(shè)置小提示選擇所需功能,最后完成的調(diào)時(shí)時(shí)間以及系統(tǒng)的狀態(tài)顯示在LCD上2.4、按鍵模塊此模塊電路設(shè)計(jì)簡(jiǎn)單,〔原理是根據(jù)當(dāng)按鍵按下時(shí),給單片機(jī)一個(gè)低電平,通過(guò)單片機(jī)并能做出一些的設(shè)置,〕但每個(gè)按鍵都有多個(gè)功能,比方實(shí)時(shí)時(shí)鐘的時(shí)間設(shè)置,以及路燈的單獨(dú)控制時(shí)間等等2.4、光電檢測(cè)模為了檢測(cè)是否物體通過(guò),采用光電檢測(cè)。光電傳感器是通過(guò)把光強(qiáng)度的變化轉(zhuǎn)換成電信號(hào)的變化來(lái)實(shí)現(xiàn)控制的,它首先把被測(cè)量的變化轉(zhuǎn)換成光信號(hào)的變化,然后借助光電元件進(jìn)一步將光信號(hào)轉(zhuǎn)換成電信號(hào)。光電傳感器一般由光源,光學(xué)通路和光電元件三局部組成。光電檢測(cè)方法具有精度高,反響快,非接觸等優(yōu)點(diǎn),而且可測(cè)參數(shù)多,傳感器的結(jié)構(gòu)簡(jiǎn)單,形式靈活多樣,我們所采用的光電傳感器的構(gòu)成,是在同一個(gè)檢測(cè)頭里既裝有一個(gè)發(fā)光器,也裝一個(gè)收光器,但前方?jīng)]有反光板。正常情況下發(fā)光器發(fā)出的光收光器是收不到的;當(dāng)檢測(cè)物通過(guò)時(shí)擋住了光,并把光局部反射回來(lái),收光器就收到光信號(hào),輸出一個(gè)開(kāi)關(guān)控制信號(hào)。有物體通過(guò)時(shí),輸出端會(huì)輸出一個(gè)低電平,從而通過(guò)上下電平的變化,測(cè)出是否有物體通過(guò),下列圖為光電檢測(cè)模塊電路圖:2.5光敏檢測(cè)模塊光傳感器是利用光敏元件將光信號(hào)轉(zhuǎn)換為電信號(hào)的傳感器,它的敏感波長(zhǎng)在可見(jiàn)光波長(zhǎng)附近,包括紅外線波長(zhǎng)和紫外線波長(zhǎng)。光傳感器不只局限于對(duì)光的探測(cè),它還可以作為探測(cè)元件組成其他傳感器,對(duì)許多非電量進(jìn)行檢測(cè),只要將這些非電量轉(zhuǎn)換為光信號(hào)的變化即可。光敏電阻是利用半導(dǎo)體的光電效應(yīng)制成的一種電阻值隨入射光的強(qiáng)弱而改變的電阻器;入射光強(qiáng),電阻減小,入射光弱,電阻增大。光敏電阻器一般用于光的測(cè)量、光的控制和光電轉(zhuǎn)換〔將光的變化轉(zhuǎn)換為電的變化〕。原理:在黑暗環(huán)境里,它的電阻值很高。當(dāng)受到光照時(shí),從而造成光敏電阻阻值下降。光照愈強(qiáng),阻值愈低為了檢測(cè)路燈的亮度,這里我們采用光敏元件檢測(cè),當(dāng)光的強(qiáng)度到達(dá)光敏元件的門限值時(shí),返回一個(gè)電平值到單片機(jī),通過(guò)單片機(jī)控制實(shí)現(xiàn)對(duì)路燈的狀態(tài)。下列圖為光敏模塊電路圖系統(tǒng)測(cè)3.1測(cè)試儀器示波器3.2局部測(cè)試指標(biāo).功率測(cè)試設(shè)置功率/路燈兩端電壓/路燈電流/實(shí)際功率/誤差/%0.25.580.0360.2010.40.35.710.0530.3030.90.45.810.0680.3951.20.55.910.0840.4960.70.66.020.1010.6081.30.76.060.1150.6970.40.86.090.1320.8040.50.96.120.1470.9000.016.170.1631.0060.6功能測(cè)試序號(hào)指標(biāo)〔目標(biāo)值實(shí)測(cè)值1故障指示〔編號(hào)〕LCD上顯示正確2過(guò)中點(diǎn)后前燈亮后燈滅,試驗(yàn)成功率〔100%100%3自動(dòng)開(kāi)關(guān)燈功能,試驗(yàn)成功100%4實(shí)時(shí)誤差,采用時(shí)間加速方法〔誤差小于5MIN〕誤差<1MIN5單元控制器具有調(diào)光功能,路燈驅(qū)動(dòng)電源輸出功率能在規(guī)定時(shí)間按設(shè)定要求自動(dòng)減小,該功率應(yīng)能在20%~100%范圍內(nèi)設(shè)定并調(diào)節(jié),調(diào)節(jié)誤差≤2%電流從0mA至850mAm變化平緩穩(wěn)定三、軟件設(shè)計(jì)3.1.軟件流3.2:軟件子程在本設(shè)計(jì)系統(tǒng)中,由于實(shí)現(xiàn)功能比擬復(fù)雜,再加上傳感器和處理模塊非常多,放在一個(gè)文件中是不可行的,此時(shí),我們采用進(jìn)行模塊化處理1:1602子程序#include"1602.h"voidwrite_code(u8a);寫1602voidwrite_data(u8a);讀1602voidinit_1602(void);初始化6022:delay延時(shí)子程序#include"delay.h"voiddelay_init(u8SYSCLK);選擇時(shí)鐘頻率voiddelay_ms(u16nms);毫秒級(jí)延時(shí)voiddelay_us(u32nus);微秒級(jí)延時(shí)3:DS1302時(shí)鐘子程序#include"DS1302.h"voidWrite_Ds1302(u8address,u8dat);寫ds1302voidinit_1302DS(void);///初始化1302voidReads_RTC(void);//一次性讀取ds1302八個(gè)存放器時(shí)間值voidtimedeal_RTC(void);//處理讀到的數(shù)據(jù)4:系統(tǒng)配置鐘子程序#include"RCC-GPIO.h"voidRCC_Configuration(void);配置處理器時(shí)鐘頻率voidGPIO_Configuration(void);配置處理器時(shí)鐘頻率管教voidNVIC_Configuration(void);配置處理器中斷優(yōu)先級(jí)voidEXTI_Configuration(void);配置處理器外部中斷voidTIM_Configuration(void);/配置處理器定時(shí)器四、系統(tǒng)實(shí)現(xiàn)的功能.1.路燈的工作模本模擬路燈控制系統(tǒng)具備5種工作模式,分別是自動(dòng)群控模式、自動(dòng)分控模式、根據(jù)照度自動(dòng)控制模式、根據(jù)交通情況自動(dòng)控制模式、手動(dòng)控制模式,下面對(duì)每種工作模式簡(jiǎn)單介紹如下自動(dòng)群控模在該模式下,支路控制器根據(jù)設(shè)定好的定時(shí)信息,自動(dòng)地同時(shí)翻開(kāi)或者關(guān)閉兩盞路燈。系統(tǒng)啟動(dòng)后默認(rèn)進(jìn)入該模式自動(dòng)分控模在該模式下,支路控制器根據(jù)設(shè)定好的定時(shí)信息,分別控制兩盞路燈的開(kāi)關(guān),例如,當(dāng)系統(tǒng)的時(shí)間和路燈1開(kāi)燈的時(shí)間相等時(shí),開(kāi)啟路燈1;當(dāng)系統(tǒng)的時(shí)間和路燈2關(guān)燈的時(shí)間相等時(shí)開(kāi)啟路燈2根據(jù)照度自動(dòng)控制模式在該模式下,當(dāng)環(huán)境照度低于一定的值時(shí)開(kāi)啟兩盞路燈,當(dāng)環(huán)境照度高于一定的值時(shí)關(guān)閉兩盞路燈根據(jù)交通情況自動(dòng)控制模在該模式下,當(dāng)可移動(dòng)物體M由左到右到達(dá)S點(diǎn)時(shí),燈1亮;當(dāng)物體M到達(dá)B點(diǎn)時(shí),燈1滅,燈2亮;假設(shè)物體M由右到左移動(dòng)時(shí),那么亮燈的次序與上相反手動(dòng)控制模在手動(dòng)模式時(shí),??梢杂捎脩糇杂煽刂泼恳槐K燈,,亮或者滅。〔1〕~〔5〕等四種工作模式是相互獨(dú)立的,即在某一時(shí)刻只能具有其中的一種功能,不過(guò)各種模式可以手動(dòng)的切換五、結(jié)束經(jīng)過(guò)四天三夜的辛勤努力,本設(shè)計(jì)實(shí)現(xiàn)了題目的全部要求。但由于時(shí)間緊,任務(wù)重,系統(tǒng)還存在許多可以改良的地方,比方電路布局、抗干擾性等方面還有很大的提升空間,經(jīng)過(guò)改良,相信性能還會(huì)有進(jìn)一步的提升。本次競(jìng)賽極大的鍛煉了我們各方面的能力,雖然我們遇到了很多困難和障礙,但總體上成功與挫折交替,困難與希望并存,我們將繼續(xù)努力爭(zhēng)取更大的進(jìn)步參考文[1]周航慈.單片機(jī)應(yīng)用程序設(shè)計(jì)技術(shù).北京航空航天大學(xué)出版[2]胡漢才.單片機(jī)原理及其接口技術(shù).清華大學(xué)出版[3]康華光.電子技術(shù)根底(數(shù)字局部).高等教育出版社,2001附件1:系統(tǒng)程Main.c主函數(shù)#include"stm32f10x_lib.h"#include"GPIO_RCC.h"#include"delay.h"#include"1602.h"#include"DS1302.h"u8timedisplay[19];//時(shí)間數(shù)據(jù)u8fen,shi,ri,yue,nian;//時(shí)間設(shè)置數(shù)據(jù)u8openLED1,openLED2;externu8ErrorLED1,ErrorLED2;u8tab[12]="0123456789-:";u8date[5]="Date:";u8time[5]="Time:";u8GD_off[6]="GDoff";u8GD_on[6]="GDon";u8GM_C[9]="GMOnOff:-";u8start_set[31]="0123456789NO:L-OFF:L-ErrorTrue"externvu8setshi1,setshi2,setshi3,setshi4;externvu8setfen1,setfen2,setfen3,setfen4;externu8LED;externvu8LEDGM;u8set_tab[24];//存儲(chǔ)設(shè)置時(shí)間u8set_init;//是否初始化1602標(biāo)志位externu8t;//for循環(huán)變量externvu8GDflag;//是否開(kāi)啟光電傳感器標(biāo)志vu8setflag=0;//進(jìn)入設(shè)置標(biāo)志位voiddisplay(void);//時(shí)間顯示voidset_DS(void);//設(shè)置時(shí)間數(shù)據(jù)處理voidguangbiao(void);//光標(biāo)閃爍voidset_startup(void);//開(kāi)關(guān)時(shí)間設(shè)置處理函數(shù)u8voidopen_LED(void);//單獨(dú)開(kāi)啟LEDvoidError_LED(void);intmain(void){RCC_Configuration();GPIO_Configuration();NVIC_Configuration();EXTI_Configuration();TIM_Configuration();delay_init(72);init_1602();init_1302DS();while(1){if(setflag==9)//{set_startup();guangbiao();}if((setflag!=9)&&(setflag!=10)&&(setflag!=11)&&(setflag!=12)){set_init=0;///設(shè)置是否初始化1602guangbiao();set_DS();display();}if((setflag==10)||(setflag==12)){LED=0;open_LED();}if(setflag==11){Error_LED();}}}voiddisplay(void){if((setflag==0)||(setflag==7)){Reads_RTC();//讀取時(shí)間timedeal_RTC();//處理時(shí)間}for(t=0;t<10;t++)//顯示日期{write_code(0x85+t);write_data(tab[timedisplay[18-t]]);}for(t=0;t<5;t++)//顯示日期{write_code(0x80+t);write_data(date[t]);}for(t=0;t<5;t++)//顯示時(shí)間{write_code(0x85+0x40+t);write_data(tab[timedisplay[4-t]]);}for(t=0;t<5;t++)//顯示時(shí)間{write_code(0x80+0x40+t);write_data(time[t]);}switch(GDflag){case0:for(t=0;t<6;t++)//顯示是開(kāi)啟光電檢{write_code(0x80+0x4a+t);write_data(GD_off[t]);}break;case1:for(t=0;t<6;t++)//顯示否顯示是開(kāi)啟光電檢{write_code(0x80+0x4a+t);write_data(GD_on[t]);}break;}}voidguangbiao(void){switch(setflag)case1:write_code(0x80+0x40+9);write_code(0x0f);delay_ms(200);write_code(0x0c);break;//case2:write_code(0x80+0x40+6);write_code(0x0f);delay_ms(200);write_code(0x0c);break;//case3:write_code(0x80+0x0e);write_code(0x0f);delay_ms(200);write_code(0x0c);break;//case4:write_code(0x80+0x0b);write_code(0x0f);delay_ms(200);write_code(0x0c);break;case5:write_code(0x80+0x08);write_code(0x0f);delay_ms(200);write_code(0x0c);break;case7:write_code(0x80+0x40+11);write_code(0x0f);delay_ms(200);write_code(0x0c);break;//設(shè)置是否開(kāi)啟光電傳感器case9:switch(LED-1){case1write_code(0x80);write_code(0x0f);delay_ms(200);write_code(0x0c);break;//case2write_code(0x80+0x40);write_code(0x0f);delay_ms(200);write_code(0x0c);break;//case3write_code(0x80);write_code(0x0f);delay_ms(200);write_code(0x0c);break;//case4write_code(0x80+0x40);write_code(0x0f);delay_ms(200);write_code(0x0c);break;//}break;}}voidset_DS(void){if(setflag==0){fen=timedisplay[0]+timedisplay[1]*10;//shi=timedisplay[3]+timedisplay[4]*10ri=timedisplay[9]+timedisplay[10]*10yue=timedisplay[12]+timedisplay[13]*10nian=timedisplay[15]+timedisplay[16]*10;/}if(setflag==1){timedisplay[0]=fen%10;//timedisplay[1]=fen/10;}/if(setflag==2){timedisplay[3]=shi%10;//時(shí)timedisplay[4]=shi/10;}if(setflag==3){timedisplay[9]=ri%10;//日timedisplay[10]=ri/10;}//if(setflag==4){timedisplay[12]=yue%10;//timedisplay[13]=yue/10;}//if(setflag==5){timedisplay[15]=nian%10;//年timedisplay[16]=nian/10;}//}voidset_startup(void){if(LED!=6){if(set_init<=2)init_1602();set_init=3;set_tab[0]=10;//Nset_tab[1]=11;//oset_tab[2]=12;//:set_tab[3]=13;//Lswitch(LED-1){case1:set_tab[4]=1;break;//選擇設(shè)置case2:set_tab[4]=1;break;case3:set_tab[4]=2;break;//選擇設(shè)置case4:set_tab[4]=2;break;//case5:set_tab[4]=2;break;}set_tab[5]=14;//-switch(LED-1){case1:set_tab[18]=setshi2/10;set_tab[19]=setshi2%10;set_tab[6]=setshi1/10;set_tab[7]=setshi1%10;break;//時(shí)低case3:set_tab[18]=setshi4/10;set_tab[19]=setshi4%10;set_tab[6]=setshi3/10;set_tab[7]=setshi3%10;break}set_tab[8]=14;//-switch(LED-1){case1:set_tab[21]=setfen2/10;set_tab[22]=setfen2%10;set_tab[9]=setfen1/10;set_tab[10]=setfen1%10;break;//分低case3:set_tab[21]=setfen4/10;set_tab[22]=setfen4%10;set_tab[9]=setfen3/10;set_tab[10]=setfen3%10;break}set_tab[11]=15;//Oset_tab[12]=16;//Fset_tab[13]=17;//Fset_tab[14]=18;//:set_tab[15]=19;//Lswitch(LED-1){case1:set_tab[16]=1;break;//選擇設(shè)置case2:set_tab[16]=1;break;case3:set_tab[16]=2;break;//選擇設(shè)置case4:set_tab[16]=2;break;}set_tab[17]=14;//-switch(LED-1){case2:set_tab[18]=setshi2/10;set_tab[19]=setshi2%10;break;//時(shí)低case4:set_tab[18]=setshi4/10;set_tab[19]=setshi4%10;break;}set_tab[20]=14;//-switch(LED-1){case2:set_tab[21]=setfen2/10;set_tab[22]=setfen2%10;break;//時(shí)低case4:set_tab[21]=setfen4/10;set_tab[22]=setfen4%10;break;}for(t=0;t<11;t++)//顯示{write_code(0x80+t);write_data(start_set[set_tab[t]]);}for(t=11;t<23;t++)//顯示{write_code(0x80+0x40+t-11);write_data(start_set[set_tab[t]]);}}if(LED==6){set_tab[0]=8;set_tab[1]=8;set_tab[2]=8;set_tab[3]=8;set_tab[4]=8;set_tab[5]=8;set_tab[6]=8;set_tab[7]=8;set_tab[8]=8;set_tab[9]=8;set_tab[10]=8;switch(LEDGM){case0:set_tab[11]=0;//Gset_tab[12]=1;//Mset_tab[13]=8;//-set_tab[14]=4;//Oset_tab[15]=6;//fset_tab[16]=6;//fset_tab[17]=8;//-set_tab[18]=8;//-break;//-case1:set_tab[11]=0;//Gset_tab[12]=1;//Mset_tab[13]=8;//-set_tab[14]=2;//Oset_tab[15]=3;//nset_tab[16]=8;//-set_tab[17]=8;//-set_tab[18]=8;//-set_tab[19]=8;set_tab[20]=8;set_tab[21]=8;set_tab[22]=8;break;//-break;//-}for(t=11;t<23;t++)//顯示{write_code(0x80+0x40+t-11);write_data(GM_C[set_tab[t]]);}for(t=0;t<11;t++)//顯示{write_code(0x80+t);write_data(GM_C[set_tab[t]]);}}}voidopen_LED(void){if(set_init<=2)init_1602();set_init=3;set_tab[0]=13;//Lset_tab[1]=1;//1set_tab[2]=12;//:switch(openLED1){case1:set_tab[3]=10;set_tab[4]=11;set_tab[5]=30;break;case0:set_tab[3]=15;set_tab[4]=16;set_tab[5]=17;break;}set_tab[6]=13;//Lset_tab[7]=2;//1set_tab[8]=12;//:switch(openLED2){case1:set_tab[9]=10;set_tab[10]=11;set_tab[11]=30;breakcase0:set_tab[9]=15;set_tab[10]=16;set_tab[11]=17;break;}for(t=0;t<6;t++)//顯示{write_code(0x80+t);write_data(start_set[set_tab[t]]);}for(t=6;t<12;t++)//顯示{write_code(0x80+0x40+t-6);write_data(start_set[set_tab[t]]);}}voidError_LED(void){if(set_init<=2)init_1602();set_init=3;set_tab[0]=13;//Lset_tab[1]=1;//1set_tab[2]=14;//-switch(ErrorLED1){case0:set_tab[3]=26;set_tab[4]=27;set_tab[5]=28;set_tab[6]=29;set_tab[7]=30;breakcase1:set_tab[3]=21;set_tab[4]=22;set_tab[5]=23;set_tab[6]=24;set_tab[7]=25;break}set_tab[8]=14;//-set_tab[9]=14;//-set_tab[10]=13;//Lset_tab[11]=2;//2set_tab[12]=14;//-switch(ErrorLED2){case0:set_tab[13]=26;set_tab[14]=27;set_tab[15]=28;set_tab[16]=29;set_tab[17]=30;breakcase1:set_tab[13]=21;set_tab[14]=22;set_tab[15]=23;set_tab[16]=24;set_tab[17]=25;break}set_tab[18]=14;//-set_tab[19]=14;//-for(t=0;t<10;t++)//顯示{write_code(0x80+t);write_data(start_set[set_tab[t]]);}for(t=10;t<20;t++)//顯示{write_code(0x80+0x40+t-10);write_data(start_set[set_tab[t]]);}}中斷.c文件#include"stm32f10x_it.h"#include"stm32f10x_lib.h"#include"delay.h"#include"DS1302.h"u8t;vu8GDflag=1;externu8fen,shi,ri,yue,nian;//externu8openLED1,openLED2;//u8ErrorLED1,ErrorLED2;//vu8setshi1,setshi2,setshi3,setshi4;//vu8setfen1,setfen2,setfen3,setfen4;//vu8LED=1;//vu8LEDGM=1;u8checkGD1,checkGD2,checkGD3=0;//檢測(cè)光電是否有信號(hào)傳入externvu8setflag;//設(shè)置標(biāo)志位u8addflag;//+u8cutflag;//-u8counter;u8set;//設(shè)置開(kāi)關(guān)時(shí)間時(shí)間標(biāo)志位voidTIM2_IRQHandler(void){//do{setflag++;if(setflag==9)break;}while(setflag<9)if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)==0)//{delay_ms(5);if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)==0);while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)==0)//判斷當(dāng)前按鍵是否被長(zhǎng)安{counter++;delay_ms(20);}if(counter>30){do{setflag++;if(setflag==9)break;}while(setflag<9);set++;counter=0;if((setflag!=9)&&(setflag!=10)){counter=0;setflag++;if(setflag==8)setflag=0;if(setflag>=12){setflag=0;LED=0}}if(setflag==9){LED++;if(LED>=7){LED=0;setflag=0;}counter=0;}if(setflag==10){setflag++;setflag++;LED=0;}}if(set>=2){do{setflag--;if(setflag==0)break;}while(setflag>0);set=0;counter=0;}//判斷當(dāng)前按鍵是否被長(zhǎng)時(shí)間按下兩if(setflag==6)//setfalg==6些時(shí)間并存儲(chǔ){Write_Ds1302(0x8e,0x00);Write_Ds1302(0x82,((fen/10)<<4|(fen%10)));//分Write_Ds1302(0x84,((shi/10)<<4|(shi%10)));//時(shí)Write_Ds1302(0x86,((ri/10)<<4|(ri%10)));//日Write_Ds1302(0x88,((yue/10)<<4|(yue%10)));//月Write_Ds1302(0x8c,((nian/10)<<4|(nian%10)));//年Write_Ds1302(0x90,0xa4);//翻開(kāi)充電2kWrite_Ds1302(0x8e,0x80);setflag++;//}switch(setflag){case0:if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1)==0)//{delay_ms(5);if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1)==0);while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1)==0){counter++;delay_ms(20);}if(counter>20){do{setflag++;if(setflag==10)break;}while(setflag<10);set++;counter=0;}if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2)==0){delay_ms(5);if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2)==0);while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2)==0){counter++;delay_ms(20);}if(counter>15){do{setflag++;if(setflag==11)break;}while(setflag<11);set++;counter=0;}break;case9:if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1)==0){delay_ms(5);if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1)==0);while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1)==0);if(LED==2){setfen1++;if(setfen1==60)setfen1=0;}//Onif(LED==3){setfen2++;if(setfen2==60)setfen2=0;}//一號(hào)燈開(kāi)啟1,2Offif(LED==4){setfen3++;if(setfen3==60)setfen3=0;}//二號(hào)燈34Onif(LED==5){setfen4++;if(setfen4==60)setfen4=0;}//Offif(LED==6){LEDGM++;if(LEDGM>=2)LEDGM=0;}/Off}if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2)==0){delay_ms(5);if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2)==0);while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2)==0);if(LED==2)setshi1++;if(setshi1==24)setshi1=0;//if(LED==3)setshi2++;if(setshi2==24)setshi2=0;//if(LED==4)setshi3++;if(setshi3==24)setshi3=0;//if(LED==5)setshi4++;if(setshi4==24)setshi4=0;//if(LED==6){LEDGM--;if(LEDGM<=0)LEDGM=1;}/Off}break;case1:if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1)==0){delay_ms(5);if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1)==0);while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1)==0);fen++;if(fen==60)fen=0;//}if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2)==0){delay_ms(5);if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2)==0);while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2)==0);fen--;if(fen==0)fen=59;//}break;case2:if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1)==0){delay_ms(5);if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1)==0);while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1)==0);shi++;if(shi==24)shi=0;//}if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2)==0){delay_ms(5);if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2)==0);while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2)==0);shi--;if(shi==0)shi=23;//}break;case3:if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1)==0){delay_ms(5);if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1)==0);while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1)==0);ri++;if(ri==31)ri=0;//}if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2)==0){delay_ms(5);if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2)==0);while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2)==0);ri--;if(ri==0)ri=31;//}break;case4:if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1)==0){delay_ms(5);if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1)==0);while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1)==0);yue++;if(yue==13)yue=0;//}if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2)==0){delay_ms(5);if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2)==0);while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2)==0);yue--;if(yue==0)yue=12;//}break;case5:if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1)==0){delay_ms(5);if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1)==0);while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1)==0);nian++;if(nian==99)yue=0;//}if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2)==0){delay_ms(5);if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2)==0);while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2)==0);nian--;if(nian==0)yue=99;//}break;case7:if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1)==0){delay_ms(5);if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1)==0);while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1)==0);GDflag++;if(GDflag==2)GDflag=0;//}if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2)==0){delay_ms(5);if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2)==0);while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2)==0);//setflag=0;//返回主菜單}break;case10:if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1)==0){delay_ms(5);if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1)==0);while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1)==0);if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_12)!=1){openLED1++;if(openLED1>=2)openLED1=0;}//判斷光明是否開(kāi)LED=0;}if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2)==0){delay_ms(5);if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2)==0);while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2)==0);if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_12)!=1){openLED2++;if(openLED2>=2)openLED2=0;}//判斷光明是否開(kāi)啟LED=0}break;case12:if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1)==0{delay_ms(5);if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1)==0);while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1)==0);openLED1++;if(openLED1>=2)openLED1=0;LED=0;}if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2)==0){delay_ms(5);if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2)==0);while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2)==0);openLED2++;if(openLED2>=2)openLED2=0;LED=0;}break;}TIM_ClearITPendingBit(TIM2,TIM_IT_Update);//去除TIM2的中斷源;}voidTIM3_IRQHandler(void){switch(openLED1)//開(kāi)啟或關(guān)閉LED11開(kāi){case1:GPIO_SetBits(GPIOA,GPIO_Pin_8|GPIO_Pin_6);break;case0:GPIO_ResetBits(GPIOA,GPIO_Pin_8|GPIO_Pin_6);break;}switch(openLED2)//開(kāi)啟或關(guān)閉LED2{case1:GPIO_SetBits(GPIOA,GPIO_Pin_11|GPIO_Pin_7);breakcase0:GPIO_ResetBits(GPIOA,GPIO_Pin_11|GPIO_Pin_7);break}//判斷LED1是否出問(wèn)題條件是燈且光明被翻開(kāi)if((GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_6)==1)&&(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_5)==1)&&(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_8)==1))ErrorLED1=1elseErrorLED1=0;//判斷LED2是否出問(wèn)題條件是燈且光明被翻開(kāi)if((GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_7)==1)&&(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_11)==1)&&(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_4)==1)ErrorLED2=1;elseErrorLED2=0;if((ErrorLED1==1)||(ErrorLED2==1)){if(ErrorLED1==1){GPIO_ResetBits(GPIOA,GPIO_Pin_4);GPIO_SetBits(GPIOA,GPIO_Pin_3);if(setflag==0)setflag=11;}//、、提示LED1故障//開(kāi)蜂鳴if(ErrorLED2==1){GPIO_ResetBits(GPIOA,GPIO_Pin_5);GPIO_SetBits(GPIOA,GPIO_Pin_3);if(setflag==0)setflag=11;}//、、提示LED2故}else{GPIO_ResetBits(GPIOA,GPIO_Pin_3);//關(guān)閉GPIO_SetBits(GPIOA,GPIO_Pin_4);GPIO_SetBits(GPIOA,GPIO_Pin_5);}if((setflag!=12)&&(setflag!=9)){//判斷是否開(kāi)啟光條件LED1且LED2開(kāi)啟與關(guān)閉時(shí)間相同if(LEDGM==1)GPIO_SetBits(GPIOA,GPIO_Pin_12);if(LEDGM==0)GPIO_ResetBits(GPIOA,GPIO_Pin_12);if(LEDGM==1)if((GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_13)==1)&&(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_12)==1)){openLED1=1;else{openLED1=0;}else{if((setfen1==fen)&&(setshi1==shi))openLED1=1;if((setfen2==fen)&&(setshi2==shi))openLED1=0;}if(LEDGM==1)if((GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_13)==1)&&(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_12)==1)){openLED2=1;else{openLED2=0;}else{if((setfen3==fen)&&(setshi3==shi))openLED2=1;if((setfen4==fen)&&(setshi4==shi))openLED2=0;}}if(GDflag==0){checkGD3=3;GPIO_ResetBits(GPIOA,GPIO_Pin_15|GPIO_Pin_14|GPIO_Pin_13)}//關(guān)閉光電傳感器else{GPIO_SetBits(GPIOA,GPIO_Pin_15|GPIO_Pin_14|GPIO_Pin_13);}if((GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_7)==0)&&(checkGD1==0){delay_ms(400);if((GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_7)==0)&&(checkGD1==0){setflag=12;LED=0;checkGD1=1;checkGD2=1;openLED1=1;openLED2=0;}}if((checkGD1==1)&&(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_8)==0)){openLED1=0;openLED2=1;checkGD1=2;if((GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_9)==0)&&(checkGD1==2)){GPIO_ResetBits(GPIOA,GPIO_Pin_15);LED=0;delay_ms(400)openLED1=0;openLED2=0;setflag=0;checkGD1=0;setflag=0;}TIM_ClearITPendingBit(TIM3,TIM_IT_Update);}voidEXTI9_5_IRQHandler(void){if(EXTI_GetITStatus(EXTI_Line7)!=RESET)//檢測(cè)指定的EXTI0線路觸發(fā)請(qǐng)求與否發(fā)生中斷時(shí)返回SET無(wú)中斷時(shí)返回RESE{if(checkGD1==4){openLED1=0;openLED2=0;checkGD1=0;setflag=0;delay_ms(500);LED=0;}//正向}if(EXTI_GetITStatus(EXTI_Line8)!=RESET)//檢測(cè)指定的EXTI0線路觸發(fā)請(qǐng)求與否發(fā)生中斷時(shí)返回SET無(wú)中斷時(shí)返回RESE{if(checkGD1==3){openLED1=1;openLED2=0;checkGD1=4;}//正向}if(EXTI_GetITStatus(EXTI_Line9)!=RESET)//檢測(cè)指定的EXTI0線路觸發(fā)請(qǐng)求與否發(fā)生中斷時(shí)返回SET無(wú)中斷時(shí)返回RESE{if(checkGD1!=2){delay_ms(500);if(checkGD1!=2){openLED1=0;openLED2=1;checkGD1=3;setflag=12;LED=0;if(checkGD3==3){setflag=0;openLED1=0;openLED2=0;checkGD3=0;}}//反向}EXTI_ClearITPendingBit(EXTI_Line7);EXTI_ClearITPendingBit(EXTI_Line8);EXTI_ClearITPendingBit(EXTI_Line9);}1602.c文件#include"1602.h"#include"delay.h"#include"stm32f10x_it.h"#defineLCD_RS1GPIO_SetBits(GPIOB,GPIO_Pin_13)//指令數(shù)據(jù)選擇#defineLCD_RS0GPIO_ResetBits(GPIOB,GPIO_Pin_13)#defineLCD_RW1GPIO_SetBits(GPIOB,GPIO_Pin_14)//#defineLCD_RW0GPIO_ResetBits(GPIOB,GPIO_Pin_14)#defineLCD_EN1GPIO_SetBits(GPIOB,GPIO_Pin_15)//#defineLCD_EN0GPIO_ResetBits(GPIOB,GPIO_Pin_15)voidwrite_code(u8a){LCD_RS0;//寫指令LCD_RW0;//寫LCD_EN0;GPIOB->BSRR=a&0x00ff;//將數(shù)據(jù)送到P0口GPIOB->BRR=(~a)&0x00ff;delay_ms(5);LCD_EN1;//送入1602delay_ms(5);LCD_EN0;}voidwrite_data(u8a){LCD_RS1;//寫數(shù)據(jù)LCD_RW0;//寫LCD_EN0;GPIOB->BSRR=a&0x00ff;//置GPIOD->BSRR低16位的某位為'1',那么對(duì)應(yīng)的I/O端口置'1';而置GPIOD->BSRR低16位的某位為'0',那么對(duì)應(yīng)的I/O端口不變GPIOB->BRR=(~a)&0x00ff;//置GPIOD->BRR低16位的某位為'1',那么對(duì)應(yīng)的I/O端口置'0';而置GPIOD->BRR低16位的某位為'0',那么對(duì)應(yīng)的I/O端口不變delay_ms(5);LCD_EN1;//送入1602delay_ms(5);LCD_EN0;}voidinit_1602(void){write_code(0x01);//清平write_code(0x06);//寫一個(gè)字后指針加以,,整平不移動(dòng)write_code(0x0c);//光標(biāo)bu翻開(kāi),,顯示翻開(kāi)write_code(0x38);//八位數(shù)據(jù)接口兩行顯示5X7點(diǎn)陣write_code(0x80+0x00);}1602.h文件#ifndef__1602_H#define__1602_H#include"stm32f10x_it.h"voidwrite_code(u8a);voidwrite_data(u8a);voidinit_1602(void);#endif/*__LCD1602_H*/DS1302.c文#include"stm32f10x_lib.h"#include"DS1302.h"#include"delay.h"#include"1602.h"#defineSCK1GPIO_SetBits(GPIOB,GPIO_Pin_8)//指令數(shù)據(jù)選擇#defineSCK0GPIO_ResetBits(GPIOB,GPIO_Pin_8)#defineSDA1GPIO_SetBits(GPIOB,GPIO_Pin_9)//#defineSDA0GPIO_ResetBits(GPIOB,GPIO_Pin_9)#defineSDAGPIO_ReadInputDataBit(GPIOB,GPIO_Pin_9#defineRST1GPIO_SetBits(GPIOB,GPIO_Pin_10)//#defineRST0GPIO_ResetBits(GPIOB,GPIO_Pin_10)u8read_add[7]={0x8d,0x8b,0x89,0x87,0x85,0x83,0x81}u8timedat[8];externu8timedisplay[19];/******************************************************************/*寫一個(gè)字節(jié)*/******************************************************************voidWrite_Ds1302_Byte(u8temp){u8i;SCK0;delay_us(2);for(i=0;i<8;i++)//循環(huán)8次寫入數(shù)據(jù){delay_us(5);if(temp&0x01)SDA1;elseSDA0;//每次傳輸?shù)妥謉elay_us(2);SCK1;delay_us(2);SCK0;temp>>=1;//右移一位}/******************************************************************/*寫入DS1302*/******************************************************************voidWrite_Ds1302(u8address,u8dat){RST0;delay_us(5);SCK0;delay_us(5);RST1;delay_us(5);//啟動(dòng)Write_Ds1302_Byte(address);//發(fā)送地址Write_Ds1302_Byte(dat);//發(fā)送數(shù)據(jù)delay_us(5);RST0;//恢復(fù)}/******************************************************************/*讀出DS1302數(shù)據(jù)*/******************************************************************u8Read_Ds1302(u8address){u8i,temp=0x00;RST0;delay_us(2);SCK0;delay_us(2);RST1;delay_us(2);Write_Ds1302_Byte(address);for(i=0;i<8;i++)//循環(huán)8次讀取數(shù)據(jù){temp>>=1;//右移一位if(SDA)temp|=0x80;//每次傳輸?shù)妥止?jié)delay_us(3);SCK1delay_us(3);SCK0;}SCK1;//以下為DS1302復(fù)位的穩(wěn)定時(shí)間delay_us(2);RST0;return(temp);//返回}voidinit_1302DS(void){u8flag;flag=Read_Ds1302(0x81);if(flag&0x80){Write_Ds1302(0x8e,0x00);Write_Ds1302(0x80,((14/10)<<4|(14%10)));//秒Write_Ds1302(0x82,((10/10)<<4|(10%10)));

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論