久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 8274|回復: 2
打印 上一主題 下一主題
收起左側

WORD格式可編輯 單片機太陽能路燈設計及proteus仿真

[復制鏈接]
跳轉到指定樓層
樓主

     在本文中,我們計劃了含有單片機STC12C2051和時鐘芯片DS1302的一個結合時鐘控制和光線控制的太陽能路燈控制系統(此句不通)。使用常見的存儲器AT24C02存儲路燈開關時間,光敏電阻來實現光開關。傍晚天黑時光敏電阻控制路燈開啟,行人稀少的凌晨按照預先設定的時間熄滅街燈,早上行人增加時按照預先設定的時間點亮街燈,早上根據照明水平日出自動切斷電路的。本文描述了整個系統的的工作原理和大部分電路,描述了單片機的優化設計和研究。

太陽能路燈的部分構成如下:光能電池、鉛酸免維護電池、超亮LED, LED路燈系統等。太陽能是一種取之不盡、用之不竭的能源,是人類最有發展前途的能源。當今世界能源短缺,環境污染日益嚴重。盡可能多地發展太陽能技術已成為世界各國政府在可持續發展的主要方法。與白熾燈等照明方法相比,超高亮度LED燈體積小,重量輕,可靠性高,方向性好,并在各種惡劣的環境下工作穩定等優點。而且除了太陽能LED燈超節能外還有安裝方便等優點。



第一章 緒論            

1.1研究背景

1.2國內外研究現狀和發展趨勢

1.3本文的主要研究內容

第二章 方案論證              2

2.1 設計要求              2

2.2 方案選擇              2

第三章 系統總體框圖              3

第四章 系統硬件設計              4

4.1 電源電路              4

4.2 太陽能電池板組件              4

4.3 蓄電池              5

4.4 照明負載              6

4.5 蓄電池和太陽能板的選用              7

4.6 顯示電路              8

4.7 過充、過放控制電路              9

4.8 DS1302的結構及工作原理              10

4.9 存儲器AT24C02簡介1

第五章 系統軟件設計及仿真3

5.1 系統軟件設計              13

5.2 系統的仿真              16

結束語及致謝              21

參考文獻2

附錄3




第一章 緒論
1.1研究背景

太陽能路燈,因為其先進的技術,穩定的控制,成熟的節能效果,突出景觀技術,被眾人作為一種投資回報周期短,易于維護特征的推廣。隨著快速發展規模的太陽能街燈的擴大和大量應用,各種實際項目和施工質量差別很大。因此,我們應分析原因,不斷總結經驗,繼續規范市場秩序,讓LED路燈市場穩步發展。太陽能作為一種綠色能源是非常有價值的。每日的地球表面受到的的陽光照射能量約等于 250000000 桶石油。

太陽能 LED 燈具的使用應該引起全世界的注意,太陽能 LED 燈有重要的現實意義,特別是依靠火力發電或水力發電的其他偏遠地區,因火力發電和水力發電無法連入國家大電網而造成自身的浪費,這些地區應加大開發太陽能電力的力度。這是利國利民可持續發展的好事。

1.2國內外研究現狀和發展趨勢

如今能源日益緊張,太陽能照明已迅速發展。在太陽能照明體系的成長中,人們不間斷的的對照明系統經常使用的控制方法進行剖析,設計出了許多方便可行的控制方式,蓄電池充電效率不斷進步,有效利用方面和充電時間是越來越理想。協調發展的太陽能組件、 太陽能照明技術使其越來越有價值。太陽能照明的電能,是真正的綠色照明,政府方面,自動省心還不用付電費,百姓方面,太陽能燈可免費提供能源和每晚的照明。道路照明在城市街道中占大部分。作為一種新能源和工業技術、一種新的成熟技術,與其他行業相比,有優勢但仍有不完善的地方如發展時間短,技術不成熟。特別是性能、價格、安全、標準、售后、耐用等。

目前,太陽能路燈在城市路燈路燈中仍然沒有得到廣泛使用,但體積小、 可靠性強、 維修簡便、 良好的指向性,相信未來的發展前景將是非常理想的,很值得被推廣應用在城市路燈照明系統。


1.3本文的主要研究內容

    本文主要研究太陽能路燈控制系統的應用。太陽能控制器即太陽能充電放電控制器?刂铺栯姵仃囯娫醋詣涌刂圃O備的負載和電池充電。自動防止蓄電池過充電和過放電。它對蓄電池的充、放電條件加以規定和控制,并根據太陽能電池模塊的負荷控制電池向負載輸出功率的電力需求,是整個系統的核心控制部分[1]。

太陽能路燈太陽能控制器是它的最重要組成部分。太陽能控制系統的作用是避免過充電和過放電, 使電池充電和放電條件通過設置以便電池不會深度充電和放電。當存在較大的溫差,太陽能控制器將彌補電池溫度。能量控制器完成過充電保護,過放電保護,設計,燈光控制,時間控制,甚至反接保護功能。如果注重成本控制,可以實現其高性價比。

控制系統在照明系統中有核心充電、過充電和過放電保護、進行系統控制、時間控制和逆變器的功能。

第二章 方案論證
2.1 設計要求

(1)電池板功率的計算和選用;(要求功率多大?)

(2)蓄電池電池容量,充電和放電控制和狀態顯示;

(3)連續陰雨天三天路燈仍能照明;

(4)光線暗時路燈自動點亮;

(5)晚上24點熄滅;

(6)早上5點路燈點亮;

(7)早上光線強時路燈自動熄滅;

(8)系統斷電時后下次使用依然有數據存在。
2.2 方案選擇(寫清楚方案,功率如何滿足等,要寫出結算過程)

太陽能 LED 燈和其他路燈光一樣,必須在早上熄燈在晚上亮光。并且24小時管理蓄電池電量。今天的世界上通用的控制器: 時鐘類型、 經緯類型等,但因為不同的工程,每個都有優點和缺點。  

光敏感探頭的時候會在光線微弱的晚上自動打開;早晨的光線變強時,自動斷電。為節約用電,原來的光控開關,是半導體分立器件,電路復雜,組件多,體積大,失敗率高。隨著現代技術的不斷發展,出現了以NE555為代表的時基集成電路,光控開關電路開始大幅度地簡化高效。光開關特性的感光部件中探頭的安裝位置是關鍵,也是需要技巧避免光的干涉,但在實際使用中,很難判斷。產生誤動作是經常發生也是不可避免的。

采用時鐘控制器的路燈控制器,可以提前選好開關燈的時間。路燈將根據設定的時間定時亮燈、熄燈。也就實現了自動控制的效果。優點:因為是提前設定的開關時間控制路燈,這樣就不會收到外界較大干擾,只要本身沒故障就不會有誤動作的現象。缺點:因為日出日落的時間每天都不同。無法根據日期變化和陰雨天氣自動更改開關時間,如果找專人定期更改每天開關時間,就無法達到自動控制的效果了。定時開關有機械鐘和電子鐘兩種,石英鐘的機械手表,走時準確,但由于在核心溫度高的塑料齒輪會變形,會造成關機現象。以LR6818、LM8650為代表的電子鐘的定時開關的代表也開始廣泛地使用。近年來,現有的電子時鐘 LED 液晶顯示器具有體積小、 外圍元件少等優點,可以設置 6 組開關,許多制造商對于大批量生產的產品,現在主要用于路燈控制系統。

利用計算機技術,在陽光下的仿真技術,經緯控制器自動的夜燈,早上可以自動關燈。它的優點是時間敏感的開關、 光學開關不容易受到干涉,控制時間準確。 能克服計時器無法自動切換開關時間的弱點。目前,路燈控制系統經常使用這種控制方法,但價格較高,街道照明會增加不必要的成本[2]。

關于這一主題的路燈智能控制一直有研究者,但還不是一個成熟的產品。本文會結合上面幾種方法的優點,減少缺點。節約能源,從成本和環境保護等方面的設計,使定時控制和光電控制相結合,以實現智能設計的太陽能燈。

第三章 系統總體框圖

總體電路部分組成如下:太陽能電池板、防止過充過放電路、51單片機、蓄電池、時間控制電路、光控光敏電路、照明負載LED燈與時間顯示電路[3]。系統總體方框圖如圖3.1所示。

太陽能發電的單片機電池電壓低時,電池的使用壽命將會減少,所以要防止電池過充和過放,以上的充電和放電控制電路必須有。要介紹該工作原理第四章 系統硬件設計4.1 電源電路

電源電路如圖4.1所示。太陽能發電系統,電池電壓24V電壓5V輸出電壓,作為主電源控制器。電容器C2,C3作為高頻旁路電容器。電容器C1,C4是濾波電容器。為什么這么設計

圖4.1  電源電路

4.2 太陽能電池板組件

  太陽能發電分為熱能發電和光能發電兩種。

(1) 太陽能熱發電:太陽輻射的第一吸收的熱能轉換成電能,有兩個類別:一種是直接轉換為熱能發電作為太陽能熱發電的代表,但功率很小[4]。有的還處于原理實驗階段;其他的是太陽能熱發電,太陽能發電機由發動機驅動,其基本結構包括集熱器,儲能系統,發動機和發電機。一些國家正在研制的大電網設備,已達到實際應用的水平。因為太陽能熱發電技術的復雜性,業務應用程序僅適用于大容量,所以其發展緩慢、 不是很多的應用程序。   

(2) 太陽能光發電:不發熱,光是太陽光轉化為電能,太陽能,風力發電機,光化學和光生物發電發電四類。目前廣泛用于周圍世界光伏、 光照到該單元格,利用光伏效應直接可以產生直流電,太陽能電池的一部分,蓄電池,控制器,逆變器和模擬的其他部分。目前世界上廣泛使用太陽能電池的應用,從而生產成本開始放緩。目前情況下。光伏發電在世界主要用于三個方面:為無電場合提供電源;太陽能日用電子產品。

太陽能電池的基本特性:電壓特性具有較強的非線性。S=l050W/m2;太陽能電池溫度T=24℃;大氣質量AM=1.52。在這種條件下的最大輸出功率就是太陽能電池陣列的額定功率[5]。其額定輸出功率單位是“峰瓦”,簡記為“Wp”。

在365天太陽電池組件接受太陽輻射能量,選擇最佳角度是很重要的。

通過計算模型可以計算太陽輻射在不同的角度要從中選擇最合適的角度斜平面作為最后一種選擇的平均輻射劑量的月度變化。
    太陽能電池板分為多晶硅和單晶硅,多晶硅區域,發電比單晶效率高,所以使用 70 W 將單個晶體硅太陽能電池組件符合設計要求[6]。

4.3 蓄電池

蓄電池是將太陽能電池的能量轉化存儲到自身的裝置,其作用是儲存陽光發出的多余的電力負荷矩陣,用于在夜間?偟囊笫菦]有陽光的日子里仍然滿足用戶要求的電源性能指標。最常用的鉛酸電池經常用在重要的場合,也可用于鎘鎳電池,但價格較高,相對沒有廣泛應用。

電池可以把直流電動能量轉化為化學能,化學材料將其及時和有效地存儲。光電轉換系統有電池蓄電和調理作用。每個光伏系統將是不同的,沒有陽光發電,電池可以提供穩定的電。

光伏發電系統,電池正在放電周期浮動狀態, 夏天, 太陽能電池板充電電池;冬天陽光不足,儲存的電能開始慢慢輸出。日循環的次數比季節性循環要多得多:白天時儲存的能量轉換為電池電量,晚上,充的電開始緩慢輸出。因此電池泄漏少,充放電效率盡可能高,最后,考慮的因素,如價格性能。

蓄電池的壽命的影響因素有制造質量的結構和工藝。還有一些是使用過程和維護工作。首先,徹底的影響電池放電深度的循環壽命,電池深度放電,往往會縮短生命周期。其次,電池的標稱容量通常用于高電流充電放電,影響電池壽命。大電流充電,活性物質,特別是板不易脫落,短路正負極板嚴重;大電流放電,產生大的硫酸鹽顆粒,板活性物質不能充分利用長電池的實際容量會逐漸減少,這樣生活也會受到影響[7]。

這個電路使用免維護鉛酸電池,不用特別的維修 ;即使傾倒也不溢出電解質的氫和空氣的霧,更好的安全性能。但是充電電池是更敏感,所以過充電保護的要求;當長時間反復充電后,電池板變形。

4.4 照明負載

LED被加上電壓后在內部會產生躍遷光輻射。不同類型的半導體材料,光的波長產生自然不同。發光二極管的基本構成是 P N 交界處,少數載體將積極當前 P N 交界,復合載體是光的發射發光二極管的一個基本原則。P N 半導體結燈發光固態照明材料和電子轉型固體結果中不同國家的各種固體發光。半導體材料的工作原理決定了不連續的白光LED,但使用其他的合成方法。氮化銦鎵結合熒光材料發射藍光變成了白光LED ,藍光,熒光材料發出黃光時的激勵,合成為藍色,黃色和白色。

超亮白光LED用太陽能照明,單梁式超高亮度LED燈管方向太強了,有不好的綜合視覺效果,所以應該首選平面型超級明亮的單位類型和超級明亮的LED照明燈類型結合使用,集中了一批LED , LED光源布置有超高亮白光的某些規則的LED光源,以確保光效的發光強度是必要的,但也有了更高的,但是電流的增大,流量雖然增加了,但另一方面,目前的增加將導致增加熱損失的來源,通常會導致溫度升高,結合效果是減少的光,光通量和相交的最佳工作發光效率的影響,通常17.5ma。   

超亮白光LED光源具有以下優點:

(1)壽命長。LED 的壽命至少 100000 小時、 白熾燈燈具的一般是 2000 小時,熒光燈通常約 5000 小時。

   (2)效率高。LED耗電只有白熾燈的10%至20%。   

(3)綠色環保。日光燈不含汞,無頻閃,環境友好。

    (4)耐低溫。LED 的溫度可在零下 40 ℃ ~ 80 ℃ 的溫度中工作,范圍是非常廣泛。

這個電路的電壓是關鍵特征點,一個充電和放電的電池更好的設計,和充電狀態指示電路,發光二極管智能控制器已成為一種實用的功能,功能,防止電池過放電,充電。在太陽輻射不足的一個月,因為電壓低,電池的充電的電池狀態的低排放,所以負載電流很小,功率小、 系統可以工作有較長的時間。每月的太陽輻射是不夠的,因為電池電壓的電池充電狀態為低,低排放,因此負載電流小,小系統可較長時間工作。

太陽能LED路燈, LED光源的數量范圍是從1到幾千的一批LED光源組成,排列組合是非常重要的一點。不同的排列組合的整體亮度的影響。

    這種設計使用,超級光亮管正常工作電壓為 3.3 V,即 28 個1 W 超高亮管,四組每七個超亮MOSFET為一組,即使在電路中,這也減少了影響,超亮管其他明管的電路故障,由于超亮管井的直接影響,所以的燈去嘗試的體積更小,曝光范圍,這樣就可以使超光管大,超亮管選擇較大的管道明亮的燈光。

4.5 蓄電池和太陽能板的選用

路燈電壓為24V ,電流約1.2A。路燈大約在一天內要工作8小時,陰天3天時系統也要正常工作,后備電源要有80%的放電率并堅持24h供電[8]。則蓄電池的容量如公式(1)為:

       Qx=(Tx×Is)=(24×1.2)/0.8=36(Ah)                     (1)

    式中:

       Qx——蓄電池容量;

       Tx——蓄電池放電時間;

       Is——設備工作電流。

最終選擇了24V/36Ah蓄電池。有陽光時,16小時充滿電。


(2)是用來計算的太陽能電池板功率如公式:

       P=24Ic

       =Vg〔Qx+Qs ×(D-1)〕/(Tc ×D)

                  =24Qx/Tc=24*(36+9.6)/16=68.4W               (2)

    式中:

       Qx——蓄電池容量;

       D——充滿電需要的天數;

       Qs——日耗蓄電池容量;

       Vg——設備工作電壓;

       Tc——充電滿電所用時間。

    則太陽能板取24V/70W。

    太陽能各項性能指標如表所示:

太陽能電池

70W ,24 V

LED發光源

28個LED、每個1 W

工作溫度

-40℃ +80℃

過充保護電壓

26 V

過放保護電壓

22 V

蓄電池

24 V,36Ah


照明時間

光敏電阻來實現光開關。 傍晚天黑時光敏電阻控制路燈開啟,行人稀少的凌晨按照預先設定的時間熄滅街燈,早上行人增加時按照預先設定的時間點亮街燈, 早上根據照明水平日出自動切斷電路的。

陰雨天保證時間

3個陰雨天也能正常工作

表4.1 太陽能LED的各種性能指標

4.6 顯示電路(為啥這么設計,寫清楚)

單片機的串行顯示電路,由74 LS164為數碼管驅動電路,二極管D1 , D2和D3 可降壓,保護數碼管,共顯示四個數字,1.2顯示小時,3.4顯示分鐘[9]。

      

圖4.2 顯示電路

可以為同步移位寄存器使用雙工串行通信端口,模式 0、 RXD (P3.0) 是一種串行輸入或輸出 ;通過數據同步的時鐘(P3.1)終端串行輸出,在時鐘的同步功能,實現串行數據通信。允許低電平輸出電流,不增加驅動電路的原因,亮度是可取的。4.7 過充、過放控制電路

過度充電的控制,在電池的充滿狀態時,充電電路保護,該控制電路是為電池放電的放電電路。過充和過放電保護電池,延長電池使用壽命。充放電控制電路如圖4.3所示。:

過充電,過放電的判斷主要是基于電池的電壓水平,其工作原理如下:過載繼電器開關控制電路的充電顯示的運動范圍的電路時,白天電荷狀態正常,太陽熱吸收從常閉繼電器切換到電池當電池電壓超過,電池的充電狀態, U1 A”-”端電壓大于“+”端的電壓輸出 U1 A,”“低水平的 Q1,接通和斷開,繼電器線圈通電時,繼電器的常閉,常開觸點斷開充電電路,充電指示燈,停止對電池進行充電,過充電保護功能實現[10]。

繼電器 J2 控制電路的串聯電路,放電電路工作正常。晚上當蓄電池從電池到負載,當電池電壓低于22 v,認為電池處于放電狀態, U1 B電壓的電壓下面的“+”“-”,輸出”“低,和打開和關閉,繼電器線圈電源繼電器開關從封閉走向開放,過放電指示燈停止向負載供電。達到過放保護功能。

4.8 DS1302的結構及工作原理

時序電路的功能是普遍使用的軟件定時器,定時器的設計,但缺點是定時誤差,不時修正時間的需要;另一個是電路硬件定時器,現在許多流行的串行時鐘,如DS1302,DS1307等,該接口電路簡單,價格低廉,使用方便,廣泛應用[11]。DS1302是一家達拉斯的公司可以持續慢充電能力的電路,主要特征是串行數據傳輸的使用,可以提供可編程電源充電,電源保護,并且可以關閉充電功能[12]。

DS1302工作電壓為2.5V~5.5V。接口與CPU同步線,三字節的RAM使用突發數據傳輸。DS1302內部有RAM寄存器。

表4.2是DS1302的引腳功能,連接圖如圖4.4與單片機, VCC1 , VCC2作為備用電源的主電源[13]。在一般情況下,電源由主電源供電,而備用電源充電主電源,在主電源關閉,連續操作,可以保持時鐘運行。Vcc1與Vcc2較大者供電DS1302。X1和X2為振蕩源,外部的32.768kHz振蕩器。RST是片選線,輸入高電平來傳送數據。


表4.2  DS1302的管腳介紹

RST輸入有兩個功能:第一,通過控制邏輯,使移位寄存器的地址/命令序列;最后,RST提供終止字節數據傳送。如果RST設置為低電平的過程中傳播,可以終止數據傳輸,I / O針進入一個高阻抗狀態。運行用電,在 VCC ≥ 2.5 v,首先必須保持低水平。只有在SCLK為低,RST可以設置為高的水平,圖4.4scl,I / O,用1302單片機讀寫控制RST連接[14]。

         


圖4.4 1302與單片機的連接圖

4.9 存儲器AT24C02簡介

AT2402的1,2,3腳為空,4腳接地,5腳數據端,6腳時鐘端,7腳寫保護,8腳是電源。其與單片機的連接方法如圖4.5:







圖4.5 24C02與單片機連接方法

AT24C02角色在這個設計是電動記憶,是防止電源突然斷開連接,用戶的信息不丟失,存儲當前的一組信息。AT24C02是2 KB字節ATMEL公司的電力可刪除內存芯片,由于數據和地址線AT24C02重用,使用串行數據傳輸模式,所以只有兩根電線 sci (shift 脈沖) 和 SDA 來傳輸數據 (數據 / 地址) 和微控制器。最低電壓為2.5 V,額定電流1 ma,靜態電流10 ua(5.5 V),芯片中的信息可以在有電源的情況下保存很長時間,并使用8英尺的保護,易于使用。

  管腳名稱

     功    能

A0、A1、A2

器件地址選擇

SDA

串行數據/地址

SCL

串行時鐘

WP

寫保護

VCC

+1.8V~6.0V工作電壓

GND













表4.3  24C02的管腳介紹

R18,R19是上拉電阻,靜態功耗可降低AT24C02。設置一個時間的信息時,系統會自動調用存儲過程,存儲芯片中的信息;當系統重新上電,自動呼叫存儲器讀取程序,信息存儲,讀取緩存單元,用于使用主程序。










  •   系統軟件設計
5.1 系統軟件設計

軟件設計主要包括初始化程序,時間設置, 1302讀寫程序, 24 C02讀寫程序,子程序,按鈕,顯示刷新子例程,Program初始化[15]。該計劃將用當前的系統時間相比較,時間設置,設置第二個時間間隔,并在同一時間,通過使用輸出控制信號的驅動電路來驅動。整體系統的程序流程圖如圖5.1所示。

如果想調整時間開關燈和1302的時間可以通過地圖按鈕手動設置在S1,S2時間開關調整,S3分別顯示1302次關鍵,具體程序流程圖如圖5.2所示。(具體程序請添加到附錄里面)




5.2 系統仿真

圖5.3 顯示1302時間光線較亮,光敏電阻的電阻值較小,從而路燈斷路,路燈熄滅。


圖5.4 顯示1302時間光線較暗,光敏電阻的電阻值較大,從而路燈亮。

圖5.5 功能鍵標志位為“1”時,顯示1302時間“時”并閃爍。此時可調節時間“時”。

圖5.6 功能鍵標志位為“2”時,顯示1302時間“分”并閃爍。此時可調節時間“分”。

圖5.7 功能鍵標志位為“3”時,顯示關路燈時間點“時”并閃爍。此時可調節關路燈時間點“時”。存上次1302時間。

圖5.8 功能鍵標志位為“4”時,顯示關路燈時間點“分”并閃爍。此時可調節關路燈時間點“分”。



圖5.9 功能鍵標志位為“5”時,顯示開路燈時間點“時”并閃爍。此時可調節關開路燈時間點“時”。存上次關路燈時間。


圖5.10 功能鍵標志位為“6”時,顯示開路燈時間點“分”并閃爍。此時可調節關開路燈時間點“分”。確定后存開路燈時間。

以下是總體電路圖放在這章的開頭,并介紹每個模塊的功能


                 






附錄(寫清楚是什么內容)
//頭文件


  1. #include<reg51.h>
  2. #include<intrins.h>
  3. #include<math.h>
  4. #define uchar  unsigned char
  5. #define uint   unsigned int
  6. #define ulong  unsigned long
  7. #include "delay.h"
  8. #include "key.h"
  9. #include "ad.h"
  10. #include "24c02.h"
  11. #include "1602.h"
  12. #include "time.h"
  13. //功能按鍵變量
  14. uchar set=0;
  15. uint  shanshuo=0;
  16. uint light;
  17. //-------
  18. uchar openh=18;
  19. uchar openm=18;
  20. uchar closh=23;
  21. uchar closm=18;

  22. uchar cun[]={0,0,0,0};
  23. //顯示函數
  24. void xianshi0()
  25. {
  26.    num[0]=SEG7[time[2]%100/10];
  27.    num[1]=SEG7[time[2]%10]&0X7F;
  28.    num[2]=SEG7[time[1]%100/10];
  29.    num[3]=SEG7[time[1]%10];
  30. }
  31. //---------------------------------------------------------------------
  32. //---------------------------------------------------------------------
  33. //顯示設置時--1=00
  34. void xianshi1()
  35. {
  36.    num[0]=SEG7[1];
  37.    num[1]=0xb7;
  38.    shanshuo=(shanshuo+1)%80;
  39.    if(shanshuo>40){num[2]=SEG7[time[2]%100/10];num[3]=SEG7[time[2]%10];}
  40.    if(shanshuo<40){num[2]=0xff;num[3]=0xff;}
  41. }
  42. //顯示設置分--2=00
  43. void xianshi2()
  44. {
  45.    num[0]=SEG7[2];
  46.    num[1]=0xb7;
  47.    shanshuo=(shanshuo+1)%80;
  48.    if(shanshuo>40){num[2]=SEG7[time[1]%100/10];num[3]=SEG7[time[1]%10];}
  49.    if(shanshuo<40){num[2]=0xff;num[3]=0xff;}
  50. }
  51. //---------------------------------------------------------------------
  52. //---------------------------------------------------------------------
  53. //顯示設置打開時--3=00
  54. void xianshi3()
  55. {
  56.    num[0]=SEG7[3];
  57.    num[1]=0xb7;
  58.    shanshuo=(shanshuo+1)%80;
  59.    if(shanshuo>40){num[2]=SEG7[openh%100/10];num[3]=SEG7[openh%10];}
  60.    if(shanshuo<40){num[2]=0xff;num[3]=0xff;}
  61. }

  62. //顯示設置打開時--4=00
  63. void xianshi4()
  64. {
  65.    num[0]=SEG7[4];
  66.    num[1]=0xb7;
  67.    shanshuo=(shanshuo+1)%80;
  68.    if(shanshuo>40){num[2]=SEG7[openm%100/10];num[3]=SEG7[openm%10];}
  69.    if(shanshuo<40){num[2]=0xff;num[3]=0xff;}
  70. }
  71. //---------------------------------------------------------------------
  72. //---------------------------------------------------------------------
  73. //顯示設置關閉時--5=00
  74. void xianshi5()
  75. {
  76.    num[0]=SEG7[5];
  77.    num[1]=0xb7;
  78.    shanshuo=(shanshuo+1)%80;
  79.    if(shanshuo>40){num[2]=SEG7[closh%100/10];num[3]=SEG7[closh%10];}
  80.    if(shanshuo<40){num[2]=0xff;num[3]=0xff;}
  81. }

  82. //顯示設置關閉時--6=00
  83. void xianshi6()
  84. {
  85.    num[0]=SEG7[6];
  86.    num[1]=0xb7;
  87.    shanshuo=(shanshuo+1)%80;
  88.    if(shanshuo>40){num[2]=SEG7[closm%100/10];num[3]=SEG7[closm%10];}
  89.    if(shanshuo<40){num[2]=0xff;num[3]=0xff;}
  90. }
  91. //按鍵處理函數
  92. void ctrl_key()
  93. {
  94.   if(key1==0)set=(set+1)%8;              while(key1==0);
  95.   //----------------
  96.   if(set==1){if(key2==0)time[2]=(time[2]+1)%24;while(key2==0);if(key3==0)time[2]=(time[2]-1)%24;while(key3==0);}
  97.   if(set==2){if(key2==0)time[1]=(time[1]+1)%60;while(key2==0);if(key3==0)time[1]=(time[1]-1)%60;while(key3==0);}
  98.   //----------------
  99.   if(set==3){if(key2==0)openh=(openh+1)%24;while(key2==0);    if(key3==0)openh=(openh-1)%24;while(key3==0);}
  100.   if(set==4){if(key2==0)openm=(openm+1)%60;while(key2==0);    if(key3==0)openm=(openm-1)%60;while(key3==0);}
  101.   //----------------
  102.   if(set==5){if(key2==0)closh=(closh+1)%24;while(key2==0);    if(key3==0)closh=(closh-1)%24;while(key3==0);}
  103.   if(set==6){if(key2==0)closm=(closm+1)%60;while(key2==0);    if(key3==0)closm=(closm-1)%60;while(key3==0);}
  104.   //----------------

  105. }

  106. void  chuli()
  107. {
  108.   //------------------------------
  109.   //------------------------------
  110.   if(set==7)
  111.   {
  112.    ds1302_settime();
  113.    cun[0]=openh;
  114.    cun[1]=openm;
  115.    cun[2]=closh;
  116.    cun[3]=closm;
  117.    WrToROM(cun,1,4); set=0;
  118.   }
  119.   //------------------------------
  120.   //-光線-----------
  121.   if(light<60)out=led=0;else out=led=1;
  122.   //------------------------------
  123.    if((time[2]==openh)&&(time[1]==openm))out=led=0;
  124.   if((time[2]==closh)&&(time[1]==closm))out=led=1;


  125. }                                                                                                                                                                                    
  126. //主函數
  127. void main()
  128. {
  129.   //初始化
  130.   ds1302_int();

  131.   RdFromROM(cun,1,4);
  132.    openh=cun[0];
  133.    openm=cun[1];
  134.    closh=cun[2];
  135.    closm=cun[3];
  136.   //-------定時器0配置
  137.   TMOD=0x01;              //方式1
  138.   //使能定時器0
  139.   ET0=1;
  140.   //定時器的初值
  141.   TH0=(65536-30000)/256;
  142.   TL0=(65536-30000)%256;
  143.   //停止開啟定時器0
  144.   TR0=1;
  145.   EA=1;
  146.   //延時函數ms
  147.   _delay_ms(1);
  148.   _delay_us(1);
  149.   while(1)
  150.   {
  151.   if(set==0)xianshi0();
  152.   if(set==1)xianshi1();
  153.   if(set==2)xianshi2();
  154.   if(set==3)xianshi3();
  155.   if(set==4)xianshi4();
  156.   if(set==5)xianshi5();
  157.   if(set==6)xianshi6();
  158.   dispaly();
  159.   ctrl_key();
  160.   chuli();
  161.   }
  162. }

  163. //----T0 計數                           
  164. void  Time0() interrupt 1
  165. {
  166.   //重裝初值30ms;
  167.   TH0=(65536-30000)/256;
  168.   TL0=(65536-30000)%256;
  169.   if(set==0)ds1302_readtime();
  170.   light=adc0832(0);
  171.   }


  172. sbit  CS= P3^2;
  173. sbit  Clk= P3^4;
  174. sbit  DATI=P3^3;
  175. sbit  DATO= P3^3;
  176. uint  dat = 0x00;      //AD值
  177. //AD轉換子程序
  178. uint adc0832(unsigned char CH)
  179. {
  180.   uchar i,test,adval;
  181.   adval = 0x00;
  182.   test = 0x00;
  183.   Clk = 0;       //初始化
  184.   DATI = 1;
  185.   _nop_();   _nop_();

  186.   CS = 0;
  187.   _nop_();
  188.   Clk = 1;
  189.   _nop_();  _nop_();

  190. if ( CH == 0x00 )      //通道選擇
  191.    {
  192.        Clk = 0;
  193.        DATI = 1;      //通道0的第一位
  194.        _nop_();
  195.        Clk = 1;
  196.        _nop_();  _nop_();

  197.        Clk = 0;
  198.        DATI = 0;      //通道0的第二位
  199.        _nop_();  _nop_();

  200.        Clk = 1;
  201.        _nop_();
  202.     }
  203.     else
  204.     {
  205.        Clk = 0;
  206.        DATI = 1;      //通道1的第一位
  207.         _nop_();  _nop_();

  208.        Clk = 1;
  209.         _nop_();  _nop_();

  210.        Clk = 0;
  211.        DATI = 1;      //通道1的第二位
  212.       _nop_();
  213.       Clk = 1;
  214.       _nop_();
  215.     }
  216.       Clk = 0;   _nop_();

  217.       DATI = 1;
  218.    for( i = 0;i < 8;i++ )      //讀取前8位的值
  219.     {
  220.        _nop_();
  221.        adval <<= 1;
  222.        Clk = 1;
  223.        _nop_();  _nop_();

  224.        Clk = 0;                 _nop_();

  225.        if (DATO)
  226.           adval |= 0x01;
  227.       else
  228.           adval |= 0x00;
  229.     }
  230.   for (i = 0; i < 8; i++)      //讀取后8位的值
  231.       {
  232.            test >>= 1;
  233.            if (DATO)
  234.               test |= 0x80;
  235.            else
  236.               test |= 0x00;
  237.           _nop_();
  238.           Clk = 1;
  239.           _nop_();  _nop_();

  240.           Clk = 0;   _nop_();

  241.       }
  242. //比較前8位與后8位的值,如果不相同舍去。
  243.   if (adval == test)   
  244.      dat = test;
  245.      _nop_();  _nop_();

  246.      CS = 1;        //釋放ADC0832
  247.      DATO = 1;
  248.      Clk = 1;

  249.      return dat;

  250. }


  251. //------------------------------------
  252. #define at89c_51
  253. //-----------------------------------
  254. //--------------at89c_51-------------
  255. #ifdef  at89c_51
  256. #define at89c_51
  257. sbit     SDA=P1^7 ;
  258. sbit     SCL=P1^6 ;
  259. #define  SCL_1          SCL=1
  260. #define  SCL_0                       SCL=0

  261. #define  SDA_1          SDA=1
  262. #define  SDA_0          SDA=0

  263. #define  AddWr        0xa0                    //器件地址選擇及寫標志
  264. #define  AddRd        0xa1                              //器件地址選擇及讀標志
  265. void Nop()                              //空操作
  266. {
  267.   _nop_();
  268.   _nop_();
  269.   _nop_();
  270.   _nop_();
  271. }
  272. #endif
  273. //延時函數ms
  274. #ifdef  atmega_16
  275. #define atmega_16
  276. void Nop()                              //空操作

  277. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼


word格式的完整文檔下載地址:http://www.zg4o1577.cn/bbs/dpj-83421-1.html
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:62391 發表于 2018-3-25 23:32 | 只看該作者
有源程序嗎
回復

使用道具 舉報

板凳
ID:303672 發表于 2018-4-8 14:37 | 只看該作者
感謝樓主分享
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产一区二区三区免费 | 在线午夜 | 久久草在线视频 | 日韩二区三区 | 懂色av一区二区三区在线播放 | 日韩成人免费视频 | 精品日韩在线观看 | 欧美一区二区三区在线 | 色综合天天网 | 欧美激情一区二区三区 | 99精品一区二区三区 | 日韩高清中文字幕 | 日韩国产一区二区三区 | 韩国av一区二区 | 成人综合伊人 | 国产免费色 | 请别相信他免费喜剧电影在线观看 | 日韩欧美一区二区三区四区 | 久久精品视频一区二区三区 | 久久三区 | 成人激情视频在线 | 成人在线中文字幕 | 亚洲综合色网站 | 日韩视频中文字幕 | 欧美一级淫片免费视频黄 | 中文字幕国产在线 | 插插插干干干 | 国产在线1区 | 精品视频一区二区 | 久久中文视频 | 成人亚洲精品 | 国产精品美女久久久免费 | 日本 欧美 三级 高清 视频 | 欧美日韩综合视频 | 日韩视频国产 | 韩国av影院| 日韩国产精品一区二区三区 | 淫片专区 | 国产精品久久久久久久 | 一级片片| 91青娱乐在线 |