LED燈智能控制系統(tǒng)的設計和實現(xiàn)_第1頁
LED燈智能控制系統(tǒng)的設計和實現(xiàn)_第2頁
LED燈智能控制系統(tǒng)的設計和實現(xiàn)_第3頁
LED燈智能控制系統(tǒng)的設計和實現(xiàn)_第4頁
LED燈智能控制系統(tǒng)的設計和實現(xiàn)_第5頁
已閱讀5頁,還剩46頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

LELEwasfinallyrevisedonthemorningofDecember16,2020LELEwasfinallyrevisedonthemorningofDecember16,2020LED燈智能控制系統(tǒng)的設計和實現(xiàn)LED燈智能控制系統(tǒng)的設計和實現(xiàn)摘要該LED燈智能控制系統(tǒng)采用STC89C52RC單片機為核心,利用單片機的端口分別控制數(shù)碼管和DS1302實時時鐘系統(tǒng)、ADC0832,DAC0832智能操控照明系統(tǒng)。我們常見的路燈、過道燈、草坪燈、廣告箱燈、霓虹燈和廁所等公共場所用的一些照明燈往往徹夜通明,這不僅浪費能源,在某種程度上也造成了光污染。在今天電力能源供應比較緊張的情況下,在沒有人員活動的深夜讓這些燈自動關掉,不僅可以節(jié)約能源,也能夠節(jié)約一些開支。本文主要介紹系統(tǒng)的開發(fā)背景,意義,并重點介紹了硬件設計和軟件設計的過程。在硬件方面,從元件,模塊,系統(tǒng)逐級闡述,特別是系統(tǒng)的核心部分STC89C52RC,并用ALTIUMDESIGNER軟件對原理圖和電路板的制作。軟件方面,用現(xiàn)階段比較流行的單片機C語言編程,利用定時器中斷控制標準時鐘。其中介紹了單片機仿真軟件KEILC51的使用。關鍵詞:STC89C52RC光敏電阻pwmAbstractThisnightflaresystemisansystembasedontheSTC89C52RCmonolithicintegratedcircuit,itmakesuseoftheportofmonolithicintegratedtocontroltheLEDstandardclocksystem,thesilicon-controlledrectifierandtheelectricbellseparatelyandthenthelightingsystemwascontrolledbyintelligence.Somecommonstreetswhichareinpublicplaces,suchas:theaislewaylight,thelawnlamp,theadvertisementboxlamp,theneonlightandtherestroomandsoonthepublicplaceusessomeflaresoftenallnightarebrightlylit,thisisnotonlywastingofenergy,butalsomaketheraypollutioninsomekindofprocedure.Nowaday,theelectricpowerenergyisinshortsupply,soifweturnoffsomewhenthereisnopeople,itisnotexpenses.Inthisarticle,itintroducesthesystematicdevelopmentbackground,thesignificanceandespeciallytheprocessofthehardwaredesignandthesoftwaredesign.Inthehardwareaspect,thisarticleelaboratesthepart,themodule,thesystemonebyone,especiallythecoreofthesystemSTC89C52RC,andusestheALTIUMDESIGNER.Softwaretotheschematicdiagramandtheelectriccircuitboardmanufacture.InthesoftwareaspectwiththepresentstagequitepopularmonolithicintegratedcircuitClanguageprogramming,usesthetimerinterruptcontrolstandardclock.Finallyitwasthesoftwareandhardwaredebugging,inwhichintroducedtheinstatonsofthestationsofmonolithicintegratedcircuitsimulationsoftwareKEILC51use.Keyword:silicon-controlledrectifierSTC89C52RCpwm目錄摘要 IAbstract II第一章緒論 1課題研究的背景 1開發(fā)的意義 1課題研究的方案 1第二章芯片選用說明 2STC89C52RC 2相關芯片及其引腳分析 2ADC0832 6 7LED數(shù)碼管 10LED數(shù)碼管編碼方式 11LED數(shù)碼管顯示方式和典型應用電路 12DS1302數(shù)字時鐘芯片 13DS1302的控制字節(jié) 14數(shù)據(jù)輸入輸出(I/O) 14DS1302與CPU的連接 14光敏電阻 15第三章方案論證及部分電路分析 16方案論證和比較 16單片機的最小應用系統(tǒng) 17單片機的時鐘電路 17復位電路和復位狀態(tài) 18總線結構 21標準時鐘顯示部分設計: 22光敏接收電路 22接鍵可調(diào)部分 26系統(tǒng)照明 27第四章系統(tǒng)的軟件設計 28總結 33致謝 34參考文獻: 35附錄一:原理圖 36附錄三:程序清單 39第一章緒論課題研究的背景隨著現(xiàn)代科技的飛速發(fā)展,單片機已經(jīng)在各個領域得到越來越廣泛的應用。單片機由于體積小,功耗低兩個基本特征,在通訊,家電,工業(yè)控制,儀器儀表,汽車等產(chǎn)品中都可以看到單片機的身影。單片機技術也隨著集成電路技術的進步在近幾年飛速的發(fā)展,這種發(fā)展可以分為兩方面:一方面在硬件上單片機內(nèi)部集成了越來越多的功能部件,如A/D,D/A,PWM,WATCHDOG,LCD驅動,串行口,大容量FLASH存儲器等;另一方面在開發(fā)手段上從匯編語言向高級C語言過度,計算機仿真調(diào)試,IAP,ISP技術的應用使單片機開發(fā)周期大大的縮短,為各類產(chǎn)品更新,軟件的升級提供了可靠的技術保障。在設計單片機應用系統(tǒng)時,由于歷史的原因,目前在國內(nèi)仍然以8051系列單片機為主。作為電子專業(yè)的學生,非常有必要通過實際產(chǎn)品的設計和制作,了解現(xiàn)代IT產(chǎn)品的開發(fā)全流程。全面提高機,電,光,算知識的綜合應用能力,掌握從系統(tǒng)級,電路級,到芯片級各個層次的設計和實現(xiàn)手段。基于上述原因,選擇此設計課題,在此設計過程中,我們將會用到多門學科的理論知識,將對以前所學的知識做一個全面的復習和鞏固,更重要的是培養(yǎng)了發(fā)現(xiàn)問題,分析問題,解決問題的能力,還有動手能力,也是一次很好的實踐,對以后的學習和工作也會有所幫助。開發(fā)的意義科技的進步帶動了產(chǎn)品的智能化,單片機的應用更是加快了發(fā)展的步伐,它的應用范圍日益廣泛,已遠遠超出了計算機科學的領域。小到玩具、信用卡,大到航天器、機器人,從實現(xiàn)數(shù)據(jù)采集、過程控制、模糊控制等智能系統(tǒng)到人類的日常生活,到處都離不開單片機,此設計正是單片機的一個典型應用。而此設計可以通過實現(xiàn)智能照明控制,通過對環(huán)境有無需要光照的檢測,由單片機來控制其反應情況,使其變得智能化,使人的手解放出來,此系統(tǒng)還可以應用到道路檢測,安全巡邏中,能滿足社會的需要。課題研究的方案本選題是用單片機介紹一種使用STC89C52RC單片機制作的夜用照明燈智能控制器,采用智能節(jié)電工作模式,即在天黑后自動開燈,到晚上0點后到第二天6點根據(jù)熱釋紅外探測的周圍環(huán)境有沒有人來控制燈亮并延時關閉,由于本系統(tǒng)采用單片機對環(huán)境照度進行測試判斷并進行計算,因此電路能隨著季節(jié)的變化自動調(diào)節(jié)每天的開關燈的時間,從而達到自動節(jié)約電能的目的。第二章芯片選用及功能闡述STC89C52RC2.1.1相關芯片及其引腳分析由于Intel公司的單片機問世早、產(chǎn)品系列齊全、兼容性強,得到了廣泛的應用,目前我國主要使用MCS-51系列的產(chǎn)品,尤以8031為多。這是因為8031無片內(nèi)ROM、應用靈活、價格便宜。MCS-51是Intel公司的8位系列單片機,包括51和

52兩個子系列。51子系列有8031、8051、8751;52子系列有8032、8052。52子系列的不同在于它多具有定時/計數(shù)器2及具有256B的內(nèi)部數(shù)據(jù)存儲器。MCS-51結構框圖1)主要性能[2] 內(nèi)部程序存儲器:4KB 內(nèi)部數(shù)據(jù)存儲器:128B 外部程序存儲器:可擴展到64KB。 外部數(shù)據(jù)存儲器:可擴展到64KB。 輸入/輸出口線:32根(4個端口, 每個端口8根)。 定時/計數(shù)器:2個16位可編程的定時計數(shù)器。 串行口:全雙工,二根。 寄存器區(qū):在內(nèi)部數(shù)據(jù)存儲器的128B中劃出一部分作為寄存器區(qū), 分為四個區(qū), 每個區(qū)8個通用寄存器。 中斷源:5個中斷源,2個優(yōu)先級別。 堆棧:最深128B。 布爾處理機:即位處理機, 對某些單元的某位做單獨處理。 指 令系統(tǒng)(系統(tǒng)時鐘為12MHZ時):大部分指令執(zhí)行時間為1us;少部分指 令,執(zhí)行時間為2us;只有乘、除指令的執(zhí)行時間為4us。2)引腳功能說明圖2-2是MCS-51的引腳結構圖,有雙列直插封裝(DIP)方式和方形封裝方式。下面分別敘述這些引腳的功能。(1)主電源引腳1 VCC:電源端。2 GND:接地端。(2)外接晶體引腳XTAL1和XTAL2①XTAL1:晶體振蕩器接入的一個引腳。當采用外部振蕩器時,此引腳接地。②XTAL2:晶體振蕩器接入的另一個引腳。采用外部振蕩器時,此引腳作為外部振蕩信號的輸入端。(3)控制或與其他電源復用引腳RST,ALE/,/Vpp1 RST:復2 位輸H入端。當振蕩器運行時,3 在該引腳上出現(xiàn)兩個機器周期的高電平將使單片機復4 位。5 ALE/:當訪問外部存儲器時,6 ALE(地址鎖存允許)的輸出用于鎖存地址的低位字節(jié)。即使不7 訪問外部存儲器,8 ALE端仍以不9 變的頻率(此頻率為振蕩器頻率的1/6)周期性地出現(xiàn)正脈沖信號。因此,10 它可用作對外輸出的時鐘,11 或用于定時目的。然而12 注意的是:每當訪問外部數(shù)據(jù)存儲器時,13 將跳過一個ALE脈沖。在對Flash存儲器編程期間,14 該引腳還用于輸入編程脈沖()。如果需要的話,通過對專用寄存器(SFR)區(qū)中8EH單元的D0位置數(shù),可禁止ALE操作。該位置數(shù)后,只有在執(zhí)行一條MOVX或MOVC指令期間,ALE才會被激活。另外,該引腳會被微弱拉高,單片機執(zhí)行外部程序時,該設定禁止ALE位無效。③:程序存儲允許()輸出是外部程序存儲器的讀選通信號。當80C51由外部程序存儲器取指令(或常數(shù))時,每個機器周期兩次有效(即輸出2個脈沖)。但在此期間內(nèi),每當訪問外部數(shù)據(jù)存儲器時,這兩次有效的信號將不出現(xiàn)。④/Vpp:外部訪問允許端。要使CPU只訪問外部程序存儲器(地址為0000H~FFFFH),則端必須保持低電平(接到GND端)。然而要注意的是,如果保密位LB1被編程,復位時在內(nèi)部會鎖存端的狀態(tài)。當端保持高電平(接Vcc端)時,CPU則執(zhí)行內(nèi)部程序存儲器中的程序。在Flash存儲器編程期間,該引腳也用于施加12V的編程允許電源Vpp(如果選用12V編程)。(4)輸入/輸出引腳~,~,~和~。①P0端口(~):P0是一個8位漏極開路型雙向I/O端口。作為輸出口用時,每位能以吸收電流的方式驅動8個TTL輸入,對端口寫1時,又可作高阻抗輸入端用。在訪問外部程序和數(shù)據(jù)存儲器時,它是分時多路轉換的地址(低8位)/數(shù)據(jù)總線,在訪問期間激活了內(nèi)部的上拉電阻。在Flash編程時,P0端口接收指令字節(jié);而在校驗程序時,則輸出指令字節(jié)。驗證時,要求外接上拉電阻②P1端口(~):P1是一個帶有內(nèi)部上拉電阻的8位雙向I/O端口。P2的輸出緩沖器可驅動(吸收或輸出電流方式)4個輸入口使用時,因為有內(nèi)部的上拉電阻,那些被外部信號拉低的引腳會輸出一個電流(IIL)。在對Flash編程和程序校驗時,P1接收低8位地址。③P2端口(~):P2是一個帶有內(nèi)部上拉電阻的8位雙向I/O端口。P2的輸出緩沖器可驅動(吸收或輸出電流方式)4個TTL輸入。對端口寫1時,通過內(nèi)部的上拉電阻把端口拉到高電位,這時可用作輸入口。P2作輸入口使用時,因為有內(nèi)部的上拉電阻,那些被外部信號拉低的引腳會輸出一個電流(IIL)。在訪問外部程序存儲器和16位地址的外部數(shù)據(jù)存儲器(如執(zhí)行MOVX@DPTR指令)時,P2送出高8位地址。在訪問8位地址的外部數(shù)據(jù)存儲器(如執(zhí)行MOVX@RI指令)時,P2口引腳上的內(nèi)容(就是專用寄存器(SFR)區(qū)中P2寄存器的內(nèi)容),在整個訪問期間不會改變。在對Flash編程和程序校難期間,P2也接收高位地址和一些控制信號。④P3端口(~):P3是一個帶內(nèi)部上拉電阻的8位雙向I/O端口。P3的輸出緩沖器可驅動(吸收或輸出電流方式)4個TTL輸入。對端口寫1時,通過內(nèi)部的上拉電阻把端口拉到高電位,這時可用作輸入口。P3作輸入口使用時,因為有內(nèi)部的上拉電阻,那些被外部信號拉低的引腳會輸出一個電流(IIL)。在STC89C52RC中,P3端口還用于一些復用功能。復用功能如表2-1所列。在對Flash編程或程序校驗地,P3還接收一些控制信號。表2-1P3各端口引腳與復用功能表端口引腳復用功能RXD(串行輸入口)TXD(串行輸出口)P(外部中斷0)P(外部中斷1)T0(定時器0的外部輸入)PT1(定時器1的外部輸入)P(外部數(shù)據(jù)存儲器寫選通)P(外部數(shù)據(jù)存儲器讀選通)MCS-51的引腳結構ADC0832的功能及設置說明ADC0832是美國國家半導體公司生產(chǎn)的一種8位分辨率、雙通道A/D轉換芯片。由于它體積小,兼容性,性價比高而深受單片機愛好者及企業(yè)歡迎,其目前已經(jīng)有很高的普及率。學習并使用ADC0832可是使我們了解A/D轉換器的原理,有助于我們單片機技術水平的提高。ADC0808管腳圖·8位分辨率;·雙通道A/D轉換;·輸入輸出電平與TTL/CMOS相兼容;·5V電源供電時輸入電壓在0~5V之間;·工作頻率為250KHZ,轉換時間為32μS;·一般功耗僅為15mW;·8P、14P—DIP(雙列直插)、PICC多種封裝;·商用級芯片溫寬為0°Cto+70°C,工業(yè)級芯片溫寬為?40°Cto+85°C;芯片接口說明:·CS_片選使能,低電平芯片使能?!H0模擬輸入通道0,或作為IN+/-使用?!H1模擬輸入通道1,或作為IN+/-使用?!ND芯片參考0電位(地)?!I數(shù)據(jù)信號輸入,選擇通道控制?!O數(shù)據(jù)信號輸出,轉換數(shù)據(jù)輸出?!LK芯片時鐘輸入。·Vcc/REF電源輸入及參考電壓輸入(復用)。ADC0832為8位分辨率A/D轉換芯片,其最高分辨可達256級,可以適應一般的模擬量轉換要求。其內(nèi)部電源輸入與參考電壓的復用,使得芯片的模擬電壓輸入在0~5V之間。芯片轉換時間僅為32μS,據(jù)有雙數(shù)據(jù)輸出可作為數(shù)據(jù)校驗,以減少數(shù)據(jù)誤差,轉換速度快且穩(wěn)定性能強。獨立的芯片使能輸入,使多器件掛接和處理器控制變的更加方便。通過DI數(shù)據(jù)輸入端,可以輕易的實現(xiàn)通道功能的選擇。2.3.3ADC0832的內(nèi)部結構和時序圖:工作時序圖:由時序圖知ADC0832的工作過程如下:正常情況下ADC0832與單片機的接口應為4條數(shù)據(jù)線,分別是CS、CLK、DO、DI。但由于DO端與DI端在通信時并未同時有效并與單片機的接口是雙向的,所以電路設計時可以將DO和DI并聯(lián)在一根數(shù)據(jù)線上使用。當ADC0832未工作時其CS輸入端應為高電平,此時芯片禁用,CLK和DO/DI的電平可任意。當要進行A/D轉換時,須先將CS使能端置于低電平并且保持低電平直到轉換完全結束。此時芯片開始轉換工作,同時由處理器向芯片時鐘輸入端CLK輸入,DO/DI端則使用DI端輸入通道功能選擇的數(shù)據(jù)信號。在第1個時鐘脈沖的下沉之前DI端必須是高電平,表示啟始信號。在第2、3個脈沖下沉之前DI端應輸入2位數(shù)據(jù)用于選擇通道功能,其功能項見官方資料。程序如下:

;ADC0832簡單測試(改)A_0832_CSEQU;CSA_0832_CLKEQU;CLKA_0832_DIEQU;DIA_0832_DEQU;DOA_0832_TEQU40H;讀取時的脈沖計數(shù)A_0832_DAEQU41H;數(shù)據(jù)所存位置ORG0LJMPMAINORG30HMAIN:LCALLADC_RDMOVA,A_0832_DAAJMP$ADC_RD:MOVA_0832_T,#8CLRA_0832_CLKCLRA_0832_CSSETBA_0832_DI;STARTSETBA_0832_CLK;第一個上升沿NOPNOPNOPCLRA_0832_CLKNOPNOPSETBA_0832_DI;選擇CH1,通過組合選取通道(SGL/DIF)NOPSETBA_0832_CLK;第二個上升沿NOPNOPNOPCLRA_0832_CLKNOPNOPSETBA_0832_DI;選擇CH1,通過組合選取通道(ODD/SIGN)NOPSETBA_0832_CLK;第三個上升沿NOPNOPNOPCLRA_0832_CLK;首個下降沿NOPNOPNOPSETBA_0832_CLKNOPNOPA_0832_RD:;讀取前,8位CLRA_0832_CLKNOPNOPNOPSETBA_0832_CLKMOVC,A_0832_DRLCADJNZA_0832_T,A_0832_RDMOVA_0832_DA,ARRAMOVA_0832_T,#7A_0832_RD1:;讀后7位,+前1位CLRA_0832_CLKNOPNOPNOPSETBA_0832_CLKMOVC,A_0832_DRRCADJNZA_0832_T,A_0832_RD1CJNEA,A_0832_DA,ADC_RDSETBA_0832_CSRETENDLED數(shù)碼管LED數(shù)碼管是由發(fā)光二極管作為顯示字段的數(shù)碼型顯示器件。圖4-3a為數(shù)碼管的外形和引腳圖,其中七只發(fā)光二極管分別對應a~g筆段構成“”字形另一只發(fā)光二極管Dp作為小數(shù)點。因此這種LED顯示器稱為七段數(shù)碼管或八段數(shù)碼管。圖4-3LED數(shù)碼管LED數(shù)碼管按電路中的連接方式可以分為共陰型和共陽型兩大類,如圖4-3示b、c所示。共陽型是將各段發(fā)光二極管的正極連在一起,作為公共端COM,公共端COM接高電平,a~g、Dp各筆段通過限流電阻接控制端。某筆段控制端低電平時,該筆段發(fā)光,高電平時不發(fā)光??刂七@幾段筆段發(fā)光,就能顯示出某個數(shù)碼或字符。共陰型是將各數(shù)碼發(fā)光二極管的負極連在一起,作為公共端COM接地,某筆段通過限流電阻接高電平時發(fā)光。LED數(shù)碼管按其外形尺寸有多種形式,使用較多的是0.5in和0.8in;按顯示顏色也有多種形式,主要有紅色和綠色;按亮度強弱可分為高亮和普亮,指通過同樣的電流顯示亮度不一樣,這是因發(fā)光二極管的材料不一樣而引起的。LED數(shù)碼管的使用與發(fā)光二極管相同,根據(jù)其材料不同正向壓降一般為~2V額定電流為10mA,最大電流為40mA。靜態(tài)顯示時取10mA為宜,動態(tài)掃描顯示可加大,加大脈沖電流,但一般不超過40mA。2.4.2LED數(shù)碼管編碼方式當LED數(shù)碼管與單片機相連時,一般將LED數(shù)碼管的各筆段引腳a、b、…、g、Dp按某一順序接到MCS-51型單片機某一個并行I/O口D0、D1、…、D7,當該I/O口輸出某一特定數(shù)據(jù)時,就能使LED數(shù)碼管顯示出某個字符。例如要使共陽極LED數(shù)碼管顯示“0”,則a、b、c、d、e、f各筆段引腳為低電平,g和Dp為高電平,。表4-2共陽極LED數(shù)碼管顯示數(shù)字“0”時各管段編碼D7D6D5D4D3D2D1D0字段碼顯示數(shù)Dpgfedcba11000000C0H0C0H稱為共陽極LED數(shù)碼管顯示“0”的字段碼,不計小數(shù)點的字段碼稱為七段碼,包括小數(shù)點的字段稱為八段碼。LED數(shù)碼管編碼方式有多種,按小數(shù)點計否可分為七段碼和八段碼;按共陰共陽可分為共陰字段碼和共陽字段碼,不計小數(shù)點的共陰字段碼與共陽字段碼互為反碼;按a、b、…、g、Dp編碼順序是高位在前,還是低位在前,又可分為順序字段碼和逆序字段碼。甚至在某些特殊情況下將a、b、…、g、Dp順序打亂編碼。表4-2為共陰和共陽LED數(shù)碼管幾種八段編碼表。[15]表4-3共陰和共陽LED數(shù)碼管幾種八段編碼共陰順序小數(shù)點暗共陰逆序小數(shù)點暗共陽順序小數(shù)點亮共陽順序小數(shù)點暗Dpgfedcba16進制abcdefgdp16進制0001111113FH11111100FCH40HC0H10000011006H0110000060H79HF9H2010110115BH11011010DAH24HA4H3010011114FH11110010F2H30HB0H40110011066H0110011066H19H99H5011011016DH10110110B6H12H92H6011111017DH10111110BEH02H82H70000011107H11100000E0H78HF8H8011111117FH11111110FEH00H80H9011011116FH11110110F6H10H90H2.4.3LED數(shù)碼管顯示方式和典型應用電路LED數(shù)碼管顯示電路在單片機應用系統(tǒng)中可分為靜態(tài)顯示方式和動態(tài)顯示方式。①靜態(tài)顯示方式在靜態(tài)顯示方式下,每一位顯示器的字段需要一個8位I/O口控制,而且該I/O口須有鎖存功能,N位顯示器就需要N個8位I/O口,公共端可直接接+5V(共陽)或接地(共陰)。顯示時,每一位字段碼分別從I/O控制口輸出,保持不變直至CPU刷新顯示為止。也就是各字段的亮滅狀態(tài)不變。靜態(tài)顯示方式編程較簡單,但占用I/O口線多,即軟件簡單、硬件成本高,一般適用顯示位數(shù)較少的場合。②動態(tài)掃描顯示方式當要求顯示位數(shù)較多時,為簡化電路、降低硬件成本,常采用動態(tài)掃描顯示電路。所謂動態(tài)掃描顯示電路是將顯示各位的所有相同字段線連在一起,每一位的a段連在一起,b段連在一起…g段連在一起,共8段,由一個8位I/O口控制,而每一位的公共端(共陽或共陰COM)由另一個I/O口控制,如圖4-4所示。這種連接方式由于將多位字段線連在一起,當輸出字段碼時,由于多門同時選通,每一位將顯示相同的內(nèi)容。因此要顯示不同的內(nèi)容,必須采取輪流顯示的方式。即在某一瞬間時,只讓某一位的字位線處于選通狀態(tài)(共陰極LED數(shù)碼管為低電平,共陽極為高電平),其他各位的字位線處于開斷狀態(tài),同時字段線上輸出這一位相應要顯示字符的字段碼。在這一瞬時,只有這一位在顯示,其他幾位暗。同樣在下一瞬時,單獨顯示下一位,這樣依次輪流顯示,循環(huán)掃描。由于人的視覺滯留效應,人們看到的是多位同時穩(wěn)定顯示。、圖4-4動態(tài)顯示LED數(shù)碼管連接方式DS1302數(shù)字時鐘芯片DS1302是美國DALLAS公司推出的一種高性能、低功耗、帶RAM的實時時鐘電路,它可以對年、月、日、周日、時、分、秒進行計時,具有閏年補償功能,工作電壓為~。采用三線接口與CPU進行同步通信,并可采用突發(fā)方式一次傳送多個字節(jié)的時鐘信號或RAM數(shù)據(jù)。DS1302內(nèi)部有一個31×8的用于臨時性存放數(shù)據(jù)的RAM寄存器。DS1302是DS1202的升級產(chǎn)品,與DS1202兼容,但增加了主電源/后背電源雙電源引腳,同時提供了對后背電源進行涓細電流充電的能力。DS1302的引腳排列,其中Vcc1為后備電源,VCC2為主電源。在主電源關閉的情況下,也能保持時鐘的連續(xù)運行。DS1302由Vcc1或Vcc2兩者中的較大者供電。當Vcc2大于Vcc1+時,Vcc2給DS1302供電。當Vcc2小于Vcc1時,DS1302由Vcc1供電。X1和X2是振蕩源,外接晶振。RST是復位/片選線,通過把RST輸入驅動置高電平來啟動所有的數(shù)據(jù)傳送。RST輸入有兩種功能:首先,RST接通控制邏輯,允許地址/命令序列送入移位寄存器;其次,RST提供終止單字節(jié)或多字節(jié)數(shù)據(jù)的傳送手段。當RST為高電平時,所有的數(shù)據(jù)傳送被初始化,允許對DS1302進行操作。如果在傳送過程中RST置為低電平,則會終止此次數(shù)據(jù)傳送,I/O引腳變?yōu)楦咦钁B(tài)。上電運行時,在Vcc>之前,RST必須保持低電平。只有在SCLK為低電平時,才能將RST置為高電平。I/O為串行數(shù)據(jù)輸入輸出端(雙向),后面有詳細說明。SCLK為時鐘輸入端。下圖為DS1302的引腳功能圖:2.5.1DS1302的控制字節(jié)DS1302的控制字最高有效位(位7)必須是邏輯1,如果它為0,則不能把數(shù)據(jù)寫入DS1302中,位6如果為0,則表示存取日歷時鐘數(shù)據(jù),為1表示存取RAM數(shù)據(jù);位5至位1指示操作單元的地址;最低有效位(位0)如為0表示要進行寫操作,為1表示進行讀操作,控制字節(jié)總是從最低位開始輸出。2.5.2數(shù)據(jù)輸入輸出(I/O)在控制指令字輸入后的下一個SCLK時鐘的上升沿時,數(shù)據(jù)被寫入DS1302,數(shù)據(jù)輸入從低位即位0開始。同樣,在緊跟8位的控制指令字后的下一個SCLK脈沖的下降沿讀出DS1302的數(shù)據(jù),讀出數(shù)據(jù)時從低位0位到高位7。DS1302有12個寄存器,其中有7個寄存器與日歷、時鐘相關,存放的數(shù)據(jù)位為BCD碼形式,其日歷、時間寄存器及其控制字見表1。此外,DS1302還有年份寄存器、控制寄存器、充電寄存器、時鐘突發(fā)寄存器及與RAM相關的寄存器等。時鐘突發(fā)寄存器可一次性順序讀寫除充電寄存器外的所有寄存器內(nèi)容。DS1302與RAM相關的寄存器分為兩類:一類是單個RAM單元,共31個,每個單元組態(tài)為一個8位的字節(jié),其命令控制字為C0H~FDH,其中奇數(shù)為讀操作,偶數(shù)為寫操作;另一類為突發(fā)方式下的RAM寄存器,此方式下可一次性讀寫所有的RAM的31個字節(jié),命令控制字為FEH(寫)、FFH(讀)。DS1302與CPU的連接需要三條線,即SCLK(7)、I/O(6)、RST(5)。圖3示出DS1302與89C2051的連接圖,其中,時鐘的顯示用LCD。2.5.3DS1302與CPU的連接實際上,在調(diào)試程序時可以不加電容器,只加一個的晶振即可。只是選擇晶振時,不同的晶振,誤差也較大。光敏電阻光敏電阻器(photovaristor)又叫電阻,是利用半導體的光電效應制成的一種電阻值隨入射光的強弱而改變的電阻器;入射光強,電阻減小,入射光弱,電阻增大。光敏電阻器一般用于光的測量、光的控制和光電轉換(將光的變化轉換為電的變化)。通常,光敏電阻器都制成薄片結構,以便吸收更多的光能。當它受到光的照射時,半導體片(光敏層)內(nèi)就激發(fā)出電子—空穴對,參與導電,使電路中電流增強。一般光敏電阻器結構如圖所示。本電路采用3K—5M的光敏電阻。74HC13874HC138是一款高速CMOS器件,74HC138引腳兼容低功耗肖特基TTL(LSTTL)系列。74HC138譯碼器可接受3位二進制加權地址輸入(A0,A1和A2),并當使能時,提供8個互斥的低有效輸出(Y0至Y7)。74HC138特有3個使能輸入端:兩個低有效(E1和E2)和一個高有效(E3)。除非E1和E2置低且E3置高,否則74HC138將保持所有輸出為高。利用這種復合使能特性,僅需4片74HC138芯片和1個反相器,即可輕松實現(xiàn)并行擴展,組合成為一個1-32(5線到32線)譯碼器。任選一個低有效使能輸入端作為數(shù)據(jù)輸入,而把其余的使能輸入端作為選通端,則74HC138亦可充當一個8輸出多路分配器,未使用的使能輸入端必須保持綁定在各自合適的高有效或低有效狀態(tài)。功能CD74HC138,CD74HC238和CD74HCT138,CD74HCT238是高速硅柵CMOS解碼器,適合內(nèi)存地址解碼或數(shù)據(jù)路由應用。74HC138作用原理于高性能的存貯譯碼或要求傳輸延遲時間短的數(shù)據(jù)傳輸系統(tǒng),在高性能存貯器系統(tǒng)中,用這種譯碼器可以提高譯碼系統(tǒng)的效率。將快速賦能電路用于高速存貯器時,譯碼器的延遲時間和存貯器的賦能時間通常小于存貯器的典型存取時間,這就是說由肖特基鉗位的系統(tǒng)譯碼器所引起的有效系統(tǒng)延遲可以忽略不計。HC138按照三位二進制輸入碼和賦能輸入條件,從8個輸出端中譯出一個低電平輸出。兩個低電平有效的賦能輸入端和一個高電平有效的賦能輸入端減少了擴展所需要的外接門或倒相器,擴展成24線譯碼器不需外接門;擴展成32線譯碼器,只需要接一個外接倒相器。在解調(diào)器應用中,賦能輸入端可用作數(shù)據(jù)輸入端。譯碼/真值表第三章方案論證及部分電路分析3.1.1方案論證和比較采用STC89C52RC微處理芯片,來控制智能照明系統(tǒng),具體方框圖如圖5所示:本設計采用光敏電阻測試環(huán)境亮度經(jīng)放大后通過ADC0808轉換成數(shù)字信息傳送到STC89C52RC單片機,經(jīng)處理后送給DAC0808通過功放和電壓比較控制LED燈的亮度。同時電路從實時時鐘獲得精確時間,配合紅外電路的是否有人來控制下半夜的燈亮滅,達到節(jié)電的目的。數(shù)碼管顯示按鍵設置部分數(shù)碼管顯示按鍵設置部分光敏電阻接收電路光敏電阻接收電路AT89AT89c微處理器基本外圍基本外圍(晶振和復位)電路圖5由于本系統(tǒng)處理任務不復雜,所以在標準時鐘電路采用模擬口線方式。電源采用7805穩(wěn)壓集成芯片來提供穩(wěn)定單片機夜用照明系統(tǒng)的電源,從而能夠穩(wěn)定的工作。綜合以上三種設計方案,第一種精度較低,而且各部分全部采用模擬器件來組成部分,制作復雜;第二種采用CPLD元件來組成,要求對硬件描述語言(VHDL)要求較高,且控制時間準確,電路工作穩(wěn)定;第三種方案采用單片機(AT89C/S52或者AT89C2051單片機的最小應用系統(tǒng)單片計算機是一個最小的應用系統(tǒng),但由于應用系統(tǒng)中有一些功能器件無法集成到芯片內(nèi)部,如晶振、復位電路等,需要在片外加接相應的電路。對于片內(nèi)無程序存儲器的單片機,還應該配置片外程序存儲器。3.2.1單片機的時鐘電路MCS-51單片機內(nèi)部的振蕩電路是一個高增益反相放大器,引線XTAL1和XTAL2分別是放大器的輸入端和輸出端。單片機內(nèi)部雖然有振蕩電路,但要形成時鐘,外部還需附加電路。MCS-51單片機的時鐘產(chǎn)生方式有兩種。(1)內(nèi)部時鐘方式利用其內(nèi)部的振蕩電路在XTAL1和XTAL2引線上外接定時元件,內(nèi)部振蕩電路便產(chǎn)生自激振蕩,用示波器可以觀察到XTAL2輸出的時鐘信號。最常用的是在XTAL1和XTAL2之間連接晶體振蕩器與電容構成穩(wěn)定的自激震蕩器,如圖3-1所示。晶體可在~12MHz之間選擇。MCS-51單片機在通常應用情況下,使用振蕩頻率為6MHz的石英晶體,而12Hz頻率的晶體主要是在高速串行通信情況下才使用。C1和C2可在20~100pF之間取值,一般取30pF左右。(2)外部時鐘方式在由單片機組成的系統(tǒng)中,為了各單片機之間時鐘信號的同步,應當引入惟一的合用外部振蕩脈沖作為各單自片機的時鐘。外部時鐘方式中是把外部振蕩信號源直接接入XTAL1或XTAL2。由于HMOS和CHMOS單片機外部時鐘進入的引線不同,其外部振蕩信號源接入的方式也不同。HMOS型單片機由XTAL2進入,外部振蕩信號接至XTAL2,而內(nèi)部反相放大器的輸入端XTAL1應接地,如圖3-2所示。由于XTAL2端的邏輯電平不是TTL的,故還要接一上接電阻。CHMOS型單片機由XTAL1進入,外部振蕩信號接至XTAL1,而XTAL2可不接地,如圖3-3所示。圖3-1內(nèi)部時鐘電路圖3-2HMOS型外部時鐘電路圖3-3外部時鐘電路3.2.2復位電路和復位狀態(tài)MCS-51單片機的復位是靠外部電路實現(xiàn)的。MCS-51單片機工作后,只要在它的RST引線上加載10ms以上的高電平,單片機就能夠有效地復位。(1)復位電路MCS-51單片機通常采用上電自動復位和按鍵復位兩種方式。最簡單的復位電路如圖3-4所示。上電瞬間,RC電路充電,RST引線端出現(xiàn)正脈沖,只要RST端保持10ms以上的高電平,就能使單片機有效地復位。圖3-4簡單的復位電路(2)復位狀態(tài)復位電路的作用是使單片機執(zhí)行復位操作。復位操作主要是把PC初始化為0000H,使單片機從程序存儲器的0000H單元開始執(zhí)行程序。程序存儲器的0003H單元即MCS-51單片機的外部中斷0的中斷處理程序的入口地址。留出的0000H~0002H3個單元地址,僅能夠放置一條轉移指令,因此,MCS-51單片機的主程序的第一條指令通常情況下是一條轉移指令。除PC之外,復位還對其他一些特殊功能的寄存器有影響,它們的復位狀態(tài)如表3-6所示。由表3-6可知,除SP=07H,P0~P34個鎖存器均為FFH外,其他所有的寄存器均為0。此外,單片機的復位不影響片內(nèi)RAM的狀態(tài)(包括通用寄存器Rn)。表3-6寄存器的復位狀態(tài)寄存器復位狀態(tài)寄存器復位狀態(tài)PC0000HTMOD00HACC00HTCONOOHPSW00HTL000HSP07HTH000HDPTR0000HTL100HP0~P3FFHTH100HIPXxx00000BSCON00HIE0xx00000BPCON0xx00000BP0、P1、P2、P3共有4個8位并行I/O口,它們引線為:~、~、~、~,共32條引線。這32條引線可以全部用做I/O線,也可將其中部分用做單片機的片外總線。①控制線A、ALE地址鎖存允許當單片機訪問外部存儲器時,輸出信號ALE用于鎖存P0口輸出的低8位地址A7~A0。ALE的輸出頻率為時鐘振蕩頻率的1/6。B、程序存儲器選擇=0,單片機只訪問外部程序存儲器。對內(nèi)部無程序存儲器的單片機8031,必須接地。=1,單片機訪問內(nèi)部程序存儲器,若地址超過內(nèi)部程序存儲器的范圍,單片機將自動訪問外部程序存儲器。對內(nèi)部有程序存儲器的單片機,應接高電平。C、片外程序存儲器的選通信號。此信號為讀外部程序存儲器的選通信號。D、RST復位信號輸入②電源及時鐘VSS地端接地線,VCC電源端接+5V,XTAL1和XTAL2接晶振或外部振蕩信號源。圖3-7片外3總線結構標準時鐘顯示部分設計:設計采用DS1302作為實時時鐘芯片,配用備用電源保證時間準確。DS1302采用的IIC總線,在本系統(tǒng)中屬于核心部分,在設計中,我把他放在了單片機的旁邊,這樣的設計有助于提高系統(tǒng)的可靠性。光敏接收電路光敏接收電路是有分壓電阻和放大電路和ADC0832組成。光敏電阻的阻值隨光照強度的變化而變化結合分壓電阻完成對環(huán)境光強度的探測,經(jīng)過AR2放大后送ADC032轉換成八位二進制的數(shù)字量送單片機處理。照度檢測電路在硬件設計過程中要調(diào)節(jié)好它和led的位置,這樣有助于調(diào)光的準確性。系統(tǒng)照明照明部分有DAC0808和LM324組成。單片機送來的數(shù)據(jù)經(jīng)過DA轉換后通過74LS373鎖存然后經(jīng)LM324放大,經(jīng)電阻R43分壓后驅動高亮度LED形成照明電路。照明電路pwm控制方式脈沖寬度調(diào)制(PWM),是英文“PulseWidthModulation”的縮寫,簡稱脈寬調(diào)制,是利用微處理器的數(shù)字輸出來對模擬電路進行控制的一種非常有效的技術,廣泛應用在從測量、通信到功率控制與變換的許多領域中。隨著電子技術的發(fā)展,出現(xiàn)了多種PWM技術,其中包括:相電壓控制PWM、脈寬PWM法、隨機PWM、SPWM法、線電壓控制PWM等,而在鎳氫電池智能充電器中采用的脈寬PWM法,它是把每一脈沖寬度均相等的脈沖列作為PWM波形,通過改變脈沖列的周期可以調(diào)頻,改變脈沖的寬度或占空比可以調(diào)壓,采用適當控制方法即可使電壓與頻率協(xié)調(diào)變化??梢酝ㄟ^調(diào)整PWM的周期、PWM的占空比而達到控制充電電流的目的。模擬信號的值可以連續(xù)變化,其時間和幅度的分辨率都沒有限制。9V電池就是一種模擬器件,因為它的輸出電壓并不精確地等于9V,而是隨時間發(fā)生變化,并可取任何實數(shù)值。與此類似,從電池吸收的電流也不限定在一組可能的取值范圍之內(nèi)。模擬信號與數(shù)字信號的區(qū)別在于后者的取值通常只能屬于預先確定的可能取值集合之內(nèi),例如在{0V,5V}這一集合中取值。通過以數(shù)字方式控制模擬電路,可以大幅度降低系統(tǒng)的成本和功耗。此外,許多微控制器和DSP已經(jīng)在芯片上包含了PWM控制器,這使數(shù)字控制的實現(xiàn)變得更加容易了。脈沖寬度調(diào)制優(yōu)點PWM的一個優(yōu)點是從處理器到被控系統(tǒng)信號都是數(shù)字形式的,無需進行數(shù)模轉換。讓信號保持為數(shù)字形式可將噪聲影響降到最小。噪聲只有在強到足以將邏輯1改變?yōu)檫壿?或將邏輯0改變?yōu)檫壿?時,也才能對數(shù)字信號產(chǎn)生影響。對噪聲抵抗能力的增強是PWM相對于模擬控制的另外一個優(yōu)點,而且這也是在某些時候將PWM用于通信的主要原因。從模擬信號轉向PWM可以極大地延長通信距離。在接收端,通過適當?shù)腞C或LC網(wǎng)絡可以濾除調(diào)制高頻方波并將信號還原為模擬形式??傊?,PWM既經(jīng)濟、節(jié)約空間、抗噪性能強,是一種值得廣大工程師在許多設計應用中使用的有效技術第四章系統(tǒng)的軟件設計主程序主要完成系統(tǒng)初始化(包括I/O口初始化、DS11302芯片讀寫)、按鍵檢測和處理、時鐘數(shù)據(jù)的讀取和顯示、環(huán)境數(shù)據(jù)的讀取和顯示,以完成人機交互的功能。系統(tǒng)主程序的流程圖如圖5-1所示。PWM生成法—光照調(diào)節(jié)由于微機技術的發(fā)展使得用軟件生成PWM波形變得比較容易,因此,軟件生成法也就應運而生.軟件生成法其實就是用軟件來實現(xiàn)調(diào)制的方法。本系統(tǒng)采用STC89C52RC單片機的定時器1來實現(xiàn)PWM的調(diào)光,通過給予TH1,TL1不同的數(shù)值來改變時間,從而達到控制LED亮度的目的。DS1302數(shù)據(jù)處理由于單片機從DS1302中讀取的數(shù)據(jù)位十六進制數(shù)據(jù),所以我們要把這些數(shù)據(jù)變位十進制數(shù)據(jù)來顯示,轉換程序如下。ucharhexTodec(unsignedcharhex){if(hex<0x0a)returnhex;else{hex=hex/10+6;returnhex}到凌晨了嗎?啟動時鐘并顯示開始到凌晨了嗎?啟動時鐘并顯示開始讀ADC0832初始化讀ADC0832初始化沒有,延時燈滅輸出DAC0832有燈亮沒有,延時燈滅輸出DAC0832有燈亮讀1302讀1302調(diào)節(jié)亮度調(diào)節(jié)亮度總結通過這次畢業(yè)設計,我才明白學習是一個長期積累的過程,在以后的工作、生活中都應該不斷的學習,努力提高自己知識和綜合素質(zhì)。總之,不管學會的還是學不會的的確覺得困難比較多,真是萬事開頭難,不知道如何入手。最后終于做完了有種如釋重負的感覺。此外,還得出一個結論:知識必須通過應用才能實現(xiàn)其價值!有些東西以為學會了,但真正到用的時候才發(fā)現(xiàn)是兩回事,所以我認為只有到真正會用的時候才是真的學會了。通過本次的畢業(yè)設計,從中我更加深刻的理解了書本上的知識。對于51單片機的使用更加熟練,一些基本的內(nèi)部模塊使用也趨于熟練,如I/O口操作,定時器,中斷。掌握了PWM調(diào)節(jié)照度的基本原理和實現(xiàn)方法,能夠較為熟練地使用。對于編程軟件KEIL的使用也得心應手,此次軟件編寫過程中,部分程序使用了KEIL的模擬仿真器調(diào)試,節(jié)省了很多時間,也提高了軟件的可靠性。這次設計因為個人能力有限,作品也存在著很多問題,如沒有做好人體檢測部分,這說明了在模擬電路方面我還有一些欠缺。PWM調(diào)光的調(diào)試時間過長,對于PWM的原理還不是完全通透,有待于提高。致謝在畢業(yè)設計期間,我得到了許多熱心的教師、同學的幫助,在此表示深深的謝意。首先,我衷心地感謝我的導師。他耐心的教誨和嚴謹?shù)膽B(tài)度使我受益匪淺,正是他在各方面的精心指導才使我最終完成了課題。最后,我不能不對在百忙之中抽出寶貴時間來參加參加論文評閱的各位教師表示由衷的謝意,他的的指導不但能修正論文中的錯誤,而且也使我得以真知。由于本人學識有限,文中必有不妥之處,敬請各位教師批評指正。參考文獻:[1]劉文濤單片機語言C51典型應用設計[M]人民郵電出版社2005,1(1):5-8[2]求是科技單片機典型模塊設計實例導航[M]人民郵電出版社1995,1(4):32-34[3]趙亮侯國銳單片機C語言編程與實例[M]人民郵電出版社1995,1(6):37-38[4]稻葉保[日]振蕩電路的設計與應用[M]科學出版社1997,19(3):71-72[5]豬飼國夫本多中二[日]數(shù)字系統(tǒng)設計[M]科學出版社1998,1(2):122-124[6]鈴木雅臣[日]晶體管電路設計(上)(下)[M]科學出版社2003,1(6):92-93[7]岡村迪夫[日]OP放大電路設計[M]科學出版社2003,1(6):92-93[8]楊幫文應用電路百例叢書新型集成器件實用電路[M]電子工業(yè)出版社,2004,1(34):13-14[9]求是科技李現(xiàn)通串口通信技術與工程實踐[M]人民郵電出版社2001,3(2):56-58[10]楊金巖8051單片機數(shù)據(jù)傳輸接口擴展技術與應用實例[M]人民郵電出版社1996,1(2):1-5[11]keilc51的使用[M]人民郵電出版社1998,1(2):122-124[12]STC公司STC89C52RC的技術手冊[J].[13]深圳市中源單片機發(fā)展有限公司[J]AT89C52Datasheets.[14][15]2004/06/08[16][17],Editor.ThePoint-to-PointProtocol,RFC1661[EB/OL].July1994[18]WAVECOM.ATCommandsInterfaceGuide,Revision002[EB/OL].6thNovember200附錄一:原理圖附錄3:程序清單/******************************************************************//*LED控制器程序*//******************************************************************/#include<>//包含頭文件,一般情況不需要改動,頭文件包含特殊功能寄存器的定義#include<>#include""voidmain(void){InitTIMER0();//初始化定時器0 Write_Ds1302(0x8E,0X00);//寫入時鐘值,如果使用備用電池時候,不需要沒每次上電寫入,此程序應該屏蔽 Write_Ds1302(0x8E,0x80); //虛擬一次寫1302 Set_RTC(); while(1) { if(ReadRTC_Flag)//是否讀1302 { ReadRTC_Flag=0;//清0 Read_RTC(); //讀時鐘函數(shù) l_tmpdisplay[0]=l_tmpdate[2]/16; //數(shù)據(jù)的轉換,因我們采用數(shù)碼管0~9的顯示,將數(shù)據(jù)分開 l_tmpdisplay[1]=l_tmpdate[2]&0x0f;//讀取小時 l_tmpdisplay[2]=10; //加入"-" l_tmpdisplay[3]=l_tmpdate[1]/16; l_tmpdisplay[4]=l_tmpdate[1]&0x0f;//讀取分鐘 l_tmpdisplay[5]=10; l_tmpdisplay[6]=l_tmpdate[0]/16;//讀取秒 l_tmpdisplay[7]=l_tmpdate[0]&0x0f; } Set_Time();//是否需要調(diào)解時間? light_control();//照度檢測及亮度控制 }}/******************************************************************//*定時器中斷函數(shù)*//******************************************************************/voidtim(void)interrupt1using1//中斷,用于數(shù)碼管掃描{staticunsignedchari,num;TH0=0xf5;TL0=0xe0; P0=table[l_tmpdisplay[i]]; //查表法得到要顯示數(shù)字的數(shù)碼段switch(i) { case7:LS138A=0;LS138B=0;LS138C=0;break; case6:LS138A=1;LS138B=0;LS138C=0;break; case5:LS138A=0;LS138B=1;LS138C=0;break; case4:LS138A=1;LS138B=1;LS138C=0;break; case3:LS138A=0;LS138B=0;LS138C=1;break; case2:LS138A=1;LS138B=0;LS138C=1;break; case1:LS138A=0;LS138B=1;LS138C=1;break; case0:LS138A=1;LS138B=1;LS138C=1;break; } i++; if(i==8) { i=0; num++; if(10==num)//隔段時間讀取1302的數(shù)據(jù)。時間間隔可以調(diào)整 { ReadRTC_Flag=1;//使用標志位判斷 num=0; } }}sbitSCK=P2^0; //時鐘 sbitSDA=P2^1; //數(shù)據(jù) sbitRST=P2^2;//DS1302復位sbitLS138A=P1^3;sbitLS138B=P1^4;sbitLS138C=P1^5;//74hc138端口定義sbitKey1=P3^7;sbitKey2=P3^6;sbitKey3=P3^5; //時間調(diào)節(jié)按鍵定義bitReadRTC_Flag;//定義讀DS1302標志unsignedcharl_tmpdate[7]={0,53,7,15,5,3,8};//秒分時日月周年08-05-1512:00:00unsignedcharl_tmpdisplay[8];codeunsignedcharwrite_rtc_address[7]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c};//秒分時日月周年最低位讀寫位codeunsignedcharread_rtc_address[7]={0x81,0x83,0x85,0x87,0x89,0x8b,0x8d};codeunsignedchartable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0x00}; //共陰數(shù)碼管0-9'-''熄滅‘表/******************************************************************//*函數(shù)聲明*//******************************************************************/ voidWrite_Ds1302_byte(unsignedchartemp);voidWrite_Ds1302(unsignedcharaddress,unsignedchardat);unsignedcharRead_Ds1302(unsignedcharaddress);voidRead_RTC(void);//readRTCvoidSet_RTC(void);//setRTCvoidInitTIMER0(void);//initaltimer0voidSet_Time(void);voiddelay(unsignedintz);/******************************************************************//*延時函數(shù)*//******************************************************************/voiddelay(unsignedintz){unsignedintx,y; for(x=z;x>0;x--) for(y=110;y>0;y--);}/******************************************************************//*定時器0初始化*//******************************************************************/voidInitTIMER0(void){TMOD|=0x01;//定時器設置16位TH0=0xef;//初始化值TL0=0xf0;ET0=1;TR0=1;EA=1;}/******************************************************************//*寫一個字節(jié)*//******************************************************************/voidWrite_Ds1302_Byte(unsignedchartemp){unsignedchari;for(i=0;i<8;i++) //循環(huán)8次寫入數(shù)據(jù){SCK=0;SDA=temp&0x01;//每次傳輸?shù)妥止?jié)temp>>=1; //右移一位SCK=1;}}/******************************************************************//*寫入DS1302*//******************************************************************/voidWrite_Ds1302(unsignedcharaddress,unsignedchardat){ RST=0; _nop_(); SCK=0; _nop_(); RST=1; _nop_();//啟動 Write_Ds1302_Byte(address); //發(fā)送地址 Write_Ds1302_Byte(dat); //發(fā)送數(shù)據(jù) RST=0; //恢復}/******************************************************************//*讀出DS1302數(shù)據(jù)*//******************************************************************/unsignedcharRead_Ds1302(unsignedcharaddress){ unsignedchari,temp=0x00; RST=0; _nop_(); _nop_(); SCK=0; _nop_(); _nop_(); RST=1; _nop_(); _nop_(); Write_Ds1302_Byte(address); for(i=0;i<8;i++) //循環(huán)8次讀取數(shù)據(jù) { if(SDA) temp|=0x80; //每次傳輸?shù)妥止?jié) SCK=0; temp>>=1; //右移一位 _nop_(); _nop_(); _nop_(); SCK=1; } RST=0; _nop_(); //以下為DS1302復位的穩(wěn)定時間 _nop_(); RST=0; SCK=0; _nop_(); _nop_(); _nop_(); _nop_(); SCK=1; _nop_(); _nop_(); SDA=0; _nop_(); _nop_(); SDA=1; _nop_(); _nop_(); return(temp); //返回}/******************************************************************//*讀時鐘數(shù)據(jù)*//******************************************************************/voidRead_RTC(void) //讀取日歷{unsignedchari,*p;p=read_rtc_address; //地址傳遞for(i=0;i<7;i++) //分7次讀取秒分時日月周年{l_tmpdate[i]=Read_Ds1302(*p);p++;}}/******************************************************************//*設定時鐘數(shù)據(jù)*//******************************************************************/voidSet_RTC(void) //設定日歷{ unsignedchari,*p,tmp; for(i=0;i<7;i++){//BCD處理 tmp=l_tmpdate[i]/10; l_tmpdate[i]=l_tmpdate[i]%10; l_tmpdate[i]=l_tmpdate[i]+tmp*16; } Write_Ds1302(0x8E,0X00); p=write_rtc_address; //傳地址 for(i=0;i<7;i++) //7次寫入秒分時日月周年 { Write_Ds1302(*p,l_tmpdate[i]); p++; } Write_Ds1302(0x8E,0x80);}/******************************************************************//*調(diào)節(jié)時鐘數(shù)據(jù)*//******************************************************************/voidSet_Time(void){unsignedcharnumber=0; if(Key1==0) {delay(300); if(Key1==0) { while(!Key1);//按鍵檢測 number++; while(number==1) { if(Key1==0) { delay(300);

溫馨提示

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

評論

0/150

提交評論