版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p><b> 畢業(yè)設(shè)計報告</b></p><p> 題目 《紅外人體報警器》設(shè)計報告 </p><p> 學(xué)院 電子信息工程學(xué)院</p><p> 專業(yè) 電子信息工程</p><p> 日期 2012年6月8日</p><p> 【摘要】
2、:隨著社會的發(fā)展,科學(xué)技術(shù)的進步和安全防范意識的增強,人們越來越注重自身所處的環(huán)境是否安全。當(dāng)家中無人或者僅有老人孩子在家時,必須考慮家庭成員生命和財產(chǎn)的絕對安全。目前,許多住宅小區(qū)的安防主要依靠安裝防盜窗、防盜門以及人工防范。這樣不僅有礙美觀,不符合防火的要求,而且不能有效地防止壞人的侵入。本課題研究紅外報警監(jiān)控系統(tǒng),它集紅外報警、1602液晶顯示、實時時鐘為一體,簡單實用,抗干擾能力強、靈敏度高、安全可靠,具有較高的應(yīng)用價值。<
3、;/p><p> 【關(guān)鍵詞】:紅外報警系統(tǒng)、紅外熱釋電傳感器、1602液晶顯示、實時時鐘</p><p> 【abstract】:With the development of society and the progress of science and technology, enhance safety consciousness, people pay more and more
4、attention to the environment safety. When no or only the elderly and children at home, must consider the absolute safety of family life and property. At present, many residential security mainly depends on the installati
5、on of anti-theft window, burglarproof door and artificial prevention. This not only interferes with the beautiful, do not meet the require</p><p> 【key words】:Infrared alarm system, infrared pyroelectric se
6、nsor, 1602 liquid crystal display, real-time clock。</p><p><b> 目錄</b></p><p> 第一章:引言...........................................</p><p> 1.1:紅外報警監(jiān)控系統(tǒng)概述................
7、...........</p><p> 1.2:課題要求及系統(tǒng)功能.............................</p><p> 1.3:課題設(shè)計目的...................................</p><p> 第二章:紅外報警系統(tǒng)原理...............................</p>
8、<p> 2.1:熱釋電效應(yīng)原理.................................</p><p> 2.2:被動式熱釋電傳感器防盜報警工作原理.............</p><p> 2.3、被動式紅外報警器組成結(jié)構(gòu).......................</p><p> 2.4、DYP-ME003人體感應(yīng)傳感器.
9、.......................</p><p> 第三章:系統(tǒng)主要硬件設(shè)計...............................</p><p> 3.1、單片機電路.....................................</p><p> 3.2、紅外熱釋電報警傳感器電路.......................
10、</p><p> 3.3、溫濕度傳感器器及檢測電路.......................</p><p> 3.4、DS1302實時時鐘電路.............................</p><p> 3.5、LCD顯示電路....................................</p><p>
11、; 3.6、EEPROM存儲器電路...............................</p><p> 3.7、鍵盤電路.......................................</p><p> 3.8、供電及程序下載電路.............................</p><p> 第四章:系統(tǒng)軟件設(shè)計...
12、................................</p><p> 4.1、軟件流程圖.....................................</p><p> 4.2、主程序.........................................</p><p> 第五章:分析與調(diào)試................
13、.....................</p><p> 5.1、下載與調(diào)試.....................................</p><p> 5.2、紅外報警監(jiān)控系統(tǒng)安裝運行.......................</p><p> 總結(jié)...........................................
14、........</p><p> 致謝...................................................</p><p> 參考文獻...............................................</p><p><b> 第一章:引言</b></p>&l
15、t;p> 1.1紅外報警監(jiān)控系統(tǒng)概述</p><p> 紅外報警監(jiān)控系統(tǒng)是現(xiàn)代報警監(jiān)控系統(tǒng)中比較先進的報警系統(tǒng),它利用紅外熱釋電原理,巧妙地獲取人體的入侵信息,并且存儲信息,幾大模塊功能電路組合起來,使得其同時具有獲取信息,存儲,報警等功能,為當(dāng)今各種住房及設(shè)施提供了完備的安全保障。</p><p> 1.2課題要求及系統(tǒng)功能</p><p> 紅外報
16、警監(jiān)控系統(tǒng)由紅外熱釋電傳感器、DS1302時鐘電路、EEPROM存儲電路、液晶屏和鍵盤組成。其主要功能有:</p><p> 紅外熱釋電傳感器獲取人體入侵信息,當(dāng)監(jiān)控功能打開并且有人入侵時,驅(qū)動蜂鳴器報警,LED報警燈閃爍。</p><p> 報警時間自動存儲至EEPROM存儲器,當(dāng)按查詢按鈕時顯示上次報警時間。</p><p> 具備不間斷時鐘電路,當(dāng)前時間
17、在液晶屏顯示。時鐘電路具有后備電池,系統(tǒng)掉電后始終依然運行,再次上電顯示當(dāng)前時間,無須重新調(diào)時。</p><p> 四鍵鍵盤可以調(diào)校時鐘初始值,具體方法是連續(xù)按設(shè)置鍵直至“年”、“月”、“日”、“時”、“分”、“秒”相應(yīng)的位置閃爍,再通過Up鍵和Down鍵調(diào)整數(shù)值,調(diào)整完畢繼續(xù)按設(shè)置鍵進入正常狀態(tài)。</p><p> 可以通過設(shè)置鍵打開或關(guān)閉監(jiān)控報警功能。</p><
18、;p><b> 1.3課題設(shè)計目的</b></p><p> 本課題的設(shè)計著重考察學(xué)生對于的單片機應(yīng)用的理解,在理解單片機功能的前提下,能夠加一些簡單的外接電路,讓其實現(xiàn)各種功能,同時也考察了學(xué)生對于特定功能的傳感器的認識,為以后工作和學(xué)習(xí)奠定良好的基礎(chǔ)。</p><p> 第二章:紅外報警系統(tǒng)原理</p><p> 2.1熱釋電
19、效應(yīng)原理</p><p> 熱釋電傳感器是一種將熱量變化轉(zhuǎn)換為電量變化的能量轉(zhuǎn)換器件。因紅外線具有很強的熱效應(yīng),當(dāng)交互變化的紅外線照射到晶體表面時,晶體溫度迅速變化,這時會發(fā)生電荷的變化,從而形成一個明顯的外電場,這種現(xiàn)象稱為熱釋電效應(yīng)。熱釋電紅外傳感器內(nèi)部的熱釋電晶體的極化,隨著溫度的變化而變化。當(dāng)恒定的紅外輻射照射在探測器探頭上時,熱釋電晶體溫度不變,晶體對外呈電中性,探測器沒有電信號輸出,因而恒定的紅外輻
20、射不能被檢測到。另外熱釋電晶體輸出的是電信號,不能直接使用,需要用電阻將其轉(zhuǎn)換為電壓形式,該電阻阻抗高達104M歐,故引入N 溝道結(jié)型場效應(yīng)管接成共漏形式來完成阻抗變換。熱釋電紅外線元件是一種典型的熱量傳感器,常用紅外光發(fā)射能量作為整個防盜報警裝置中檢測入侵者及其活動的手段。</p><p> 2.2被動式熱釋電傳感器防盜報警工作原理</p><p> 熱釋電人體紅外線傳感器是上世紀8
21、0年代末期出現(xiàn)的一種新型傳感器件, 現(xiàn)在電子防盜報警設(shè)備研制中已得到廣泛的應(yīng)用。通常我們采用的熱釋電傳感器防盜報警電路,是利用該電路檢測到有人進入防范區(qū)時通過能量變化導(dǎo)致產(chǎn)生電信號,最終電聲報警。其工作原理如下:一般人體體溫是37℃,所以會發(fā)出波長10um左右的紅外線,被動式紅外傳感器探頭就是靠探測人體發(fā)射的10um 左右的紅外線進行工作的。人體發(fā)射的10um 左右的紅外線通過菲涅耳濾光片增強后聚集到紅外感應(yīng)源上,紅外感應(yīng)源通常采用熱釋
22、電元件,這種元件接收到人體紅外輻射溫度發(fā)生變化時就會失去電荷平衡,向外釋放電荷,經(jīng)后續(xù)電路檢測處理后就能產(chǎn)生報警信號了。</p><p> 在紅外探頭中有兩個關(guān)鍵性的器件,一個是熱釋電紅外傳感器,它能將波長為8~ 12um 之間的紅外信號的變化轉(zhuǎn)變?yōu)殡娦盘?,并對自然界中的可見光信號具有抑制作用,因此在紅外探測器的有效警戒區(qū)內(nèi),當(dāng)無人體移動時,熱釋電紅外感應(yīng)器感應(yīng)到的只是背景溫度,沒有信號變化,所以不能產(chǎn)生電信號
23、,也不會報警;當(dāng)人體進人警戒區(qū),通過菲涅耳透鏡,熱釋電紅外感應(yīng)器感應(yīng)到的是人體溫度與背景溫度的差異信號,此時產(chǎn)生電信號,從而報警。另外一個器件就是菲涅耳透鏡,它具有聚焦--即將熱釋電的紅外信號反射在紅外傳感器上的作用, 還能將警戒區(qū)內(nèi)分為若干個明區(qū)和暗區(qū),使進入警戒區(qū)的移動物體能以溫度變化的形式在熱釋電紅外傳感器上產(chǎn)生變化熱釋紅外信號,這樣熱釋電紅外傳感器產(chǎn)生變化的電信號,后續(xù)電路經(jīng)檢測處理后產(chǎn)生報警信號。</p><
24、;p> 2.3、被動式紅外報警器組成結(jié)構(gòu)</p><p> 被動式紅外報警器主要由菲涅耳光學(xué)系統(tǒng)、熱釋電紅外傳感器、信號濾波和放大電路、信號處理和報警電路等幾部分組成( 如圖1 所示) 。</p><p> 圖1 被動式紅外報警器組成框圖</p><p> 菲涅爾透鏡一般采用聚乙烯塑料片制成,顏色為乳白色或黑色,呈半透明狀,但對波長為10Lm左右的紅
25、外線來說卻是透明的。菲涅耳透鏡的焦點一般為5 厘米左右,除有聚焦作用還可形成可見區(qū)和盲區(qū),實際應(yīng)用時一般把菲涅耳透鏡固定在傳感器正前方1~ 5 厘米的地方。當(dāng)物體射出的紅外線通過菲涅耳透鏡后,傳到熱釋電紅外探測器,這時熱釋電紅外探測器將輸出脈沖信號,脈沖信號經(jīng)放大和濾波后,由電壓比較器將其與基準值進行比較,當(dāng)輸出信號達到一定值時,報警電路發(fā)出警報。</p><p> 被動式熱釋電紅外探頭的優(yōu)點是本身不發(fā)生各種類
26、型的輻射,器件的功耗小、隱蔽性好、價格低。缺點是具有容易受各種熱源、光源及射頻輻射的干擾;被動紅外穿透力差,人體的紅外輻射容易被遮擋,不易被探頭接收;當(dāng)環(huán)境溫度和人體溫度接近時,探測和靈敏度下降,有時還會短時失靈。</p><p> 目前市場上經(jīng)常采用P288型熱釋電紅外傳感器作為敏感元件,能以非接觸方式檢測出人體輻射出的紅外能量,并將其轉(zhuǎn)化為電信號輸出。該傳感器外接12V電源,內(nèi)部裝有菲涅耳透鏡,檢測區(qū)域為球
27、形,有效警戒距離為12~ 15m,方向角為85度。當(dāng)紅外警戒區(qū)內(nèi)無移動物體時,傳感器無輸出信號,報警電路不工作;當(dāng)有人闖入警戒區(qū)時,只要人體移動,其輻射出的紅外線便會被熱釋電紅外傳感器所接收,并輸出微弱的電信號。該信號經(jīng)運算放大器A1和A2放大后,會輸出一個較強的電信號。再輸送給由A3 和A4 組成的雙限電壓比較器。具體電路如圖2所示:</p><p> 圖2 熱釋電傳感器檢測電路</p>&l
28、t;p> 2.4、DYP-ME003人體感應(yīng)傳感器</p><p> 圖2所示電路比較繁瑣,調(diào)試難度也較大。目前市場上有集成紅外人體感應(yīng)傳感器,將熱釋電傳感器、菲涅耳透鏡和調(diào)理電路集成在一個模塊上,可以實現(xiàn)5伏電壓供電,性能穩(wěn)定,使用方便。DYP-ME003人體感應(yīng)傳感器就是這樣一款基于紅外線技術(shù)的自動控制產(chǎn)品,靈敏度高,可靠性強,超低電壓工作模式,廣泛應(yīng)用于各類自動感應(yīng)電器設(shè)備,尤其是干電池供電的自動
29、控制產(chǎn)品中。其功能特點:</p><p> 全自動感應(yīng):人進入其感應(yīng)范圍則輸出高電平,人離開感應(yīng)范圍則自動延時關(guān)閉高電平,輸出低電平。</p><p> 光敏控制(可選擇,出廠時未設(shè)):可設(shè)置光敏控制,白天或光線強時不感應(yīng)。</p><p> 溫度補償(可選擇,出廠時未設(shè)):在夏天當(dāng)環(huán)境溫度升高至30~32℃,探測距離稍變短,溫度補償可作一定的性能補償。<
30、;/p><p> 兩種觸發(fā)方式:a.不可重復(fù)觸發(fā)方式:即感應(yīng)輸出高電平后,延時時間段一結(jié)束,輸出將自動從高電平變?yōu)榈碗娖?;b.可重復(fù)觸發(fā)方式:即感應(yīng)輸出高電平后,在延時時間段內(nèi),如果有人體在其感應(yīng)范圍活動,其輸出將一直保持高電平,直到人離開后才延時將高電平變?yōu)榈碗娖剑ǜ袘?yīng)模塊檢測到人體的每一次活動后會自動順延一個延時時間段,并且以最后一次活動的時間為延時時間的起始點)。</p><p>
31、具有感應(yīng)封鎖時間(默認設(shè)置:2.5S封鎖時間):感應(yīng)模塊在每一次感應(yīng)輸出后(高電平變成低電平),可以緊跟著設(shè)置一個封鎖時間段,在此時間段內(nèi)感應(yīng)器不接受任何感應(yīng)信號。</p><p> 工作電壓范圍寬:默認工作電壓DC4.5V-20V。</p><p> 微功耗:靜態(tài)電流<50微安,特別適合干電池供電的自動控制產(chǎn)品。</p><p> 輸出高電平信號:可方
32、便與各類電路實現(xiàn)對接。</p><p> DYP-ME003人體感應(yīng)傳感器的感應(yīng)范圍如圖3所示:</p><p> 圖3 DYP-ME003人體感應(yīng)傳感器的感應(yīng)范圍</p><p> DYP-ME003人體感應(yīng)傳感器的電氣參數(shù)如表1所示:</p><p> 表1 DYP-ME003人體感應(yīng)傳感器的電氣參數(shù)</p>&
33、lt;p><b> 其外型如圖4所示:</b></p><p> 圖4 DYP-ME003人體感應(yīng)傳感器外型圖</p><p> 第三章:系統(tǒng)主要硬件設(shè)計</p><p> 本研究設(shè)計的溫濕度控制器框圖如圖5所示。</p><p> 圖5 紅外報警監(jiān)控系統(tǒng)方框圖</p><p>
34、 圖中STC89C52單片機隨時監(jiān)控DYP-ME003紅外人體傳感器送來的報警信號。當(dāng)報警功能打開并且傳感器檢測到有人侵入時,單片機通過聲(蜂鳴器)光(LED發(fā)光管)報警,同時將入侵時間記錄在外部存儲芯片AT24C04中。</p><p> 系統(tǒng)還可以即時顯示當(dāng)前環(huán)境溫濕度值。單片機每2秒鐘從DHT11溫濕度傳感器中讀入溫度和濕度,在液晶屏上即時顯示。</p><p> 系統(tǒng)通過DS
35、1302時鐘電路獲得并顯示當(dāng)前時間。該時間初始值可以通過設(shè)置鍵、上調(diào)鍵和下調(diào)鍵設(shè)定,由于具有后備電池,主控系統(tǒng)斷電后時鐘仍然繼續(xù)運行。</p><p> 系統(tǒng)通過四鍵鍵盤切換開、關(guān)報警狀態(tài),設(shè)定時鐘初始值,查詢報警時間等。</p><p> 系統(tǒng)各單元電路介紹如下。</p><p><b> 3.1、單片機電路</b></p>
36、<p> 本設(shè)計選用宏晶公司高性能單片機STC89C52采用主控芯片,其管腳如圖6所示。</p><p> 圖6 STC89C52單片機管腳圖</p><p> 該芯片為52內(nèi)核8位單片機,兼容Intel等52內(nèi)核單片機,支持ISP下載,適用于常用檢測控制電路。由STC89C52組成的單片機系統(tǒng)原理圖如圖6所示。</p><p> 圖7 單
37、片機系統(tǒng)電路</p><p> 圖中ALERT引腳輸入DYP-ME003紅外人體傳感器信號,該信號為高電平時有人入侵,為低電平時表示沒有檢測到人。DATA引腳為溫濕度傳感器單總線引腳。2402_SCL和2402_SDA為外存芯片AT24C04通信引腳,該芯片為IIC接口芯片,通過時鐘線和數(shù)據(jù)線二線接口通信。K1、K2、K3、K4為四只按鍵,分別為設(shè)置鍵、上調(diào)鍵、下調(diào)鍵和查詢鍵。L2為報警LED發(fā)光管。P0.0—
38、P0.7為LCD數(shù)據(jù)線,P2.5—P2.7為LCD控制線。系統(tǒng)采用11.0572MHz外部晶振電路。</p><p> 3.2、紅外熱釋電報警傳感器電路</p><p> 圖8 DYP-ME003紅外人體傳感器電路</p><p> 傳感器使用DYP-ME003紅外人體傳感器,圖中ALERT引腳輸出信號,該信號為高電平時有人入侵,為低電平時表示無人入侵。R1
39、7電阻為下拉電阻,防止管腳誤報。</p><p> 3.3、溫濕度傳感器器及檢測電路</p><p> 圖9 DHT11溫濕度傳感器外型及管腳</p><p> DHT11溫濕度傳感器外型及管腳如圖9所示。其中電源引腳的供電電壓為 3.5--5.5V。傳感器上電后,要等待 1s 以越過不穩(wěn)定狀態(tài)在此期間不要發(fā)送任何指令。電源引腳(VDD,GND)之間可增加一
40、個100nF 的電容,用以去耦濾波。 </p><p> DHT11典型應(yīng)用電路如圖9所示,其連接電路簡單,只需要占用控制器一個I/O口即可完成上下位的連接。建議連接線長度短于20時用5K上拉電阻,大于20米時根據(jù)實際情況使用合適的上拉電阻。</p><p> 圖10 DHT11典型應(yīng)用電路</p><p> DHT11數(shù)字濕溫度傳感器采用單總線數(shù)據(jù)格式,即
41、單個數(shù)據(jù)引腳端口完成輸入輸出雙向傳輸。其數(shù)據(jù)包由5Byte(40Bit)組成。一次通訊時間最大3ms,數(shù)據(jù)分小數(shù)部分和整數(shù)部分。 一次完整的數(shù)據(jù)傳輸為40bit,高位先出。 數(shù)據(jù)格式如表2:</p><p> 表2 DHT11數(shù)據(jù)格式</p><p> 3.4、DS1302實時時鐘電路</p><p> DS1302是DALLAS公司推出的涓流充電時鐘芯片,
42、內(nèi)含有一個實時時鐘/日歷和31字節(jié)靜態(tài)RAM,通過簡單的串行接口與單片機進行通信。實時時鐘/日歷電路提供秒、分、時、日、日期、月、年的信息。每月的天數(shù)和閏年的天數(shù)可自動調(diào)整。時鐘操作可通過AM/PM指示決定采用24或12小時格式。其芯片管腳如圖11所示。</p><p> 圖11 DS1302管腳圖</p><p> DS1302 與單片機之間能簡單地采用同步串行的方式進行通信,僅需用
43、到三個口:線1-RES復(fù)位,2-I/O數(shù)據(jù)線和3-SCLK串行時鐘。時鐘/RAM 的讀/寫數(shù)據(jù)以一個字節(jié)或多達31個字節(jié)的字符組方式通信,DS1302工作時功耗很低,保持數(shù)據(jù)和時鐘信息時功率小于1mW。DS1302是由DS1202改進而來,增加了以下的特性,雙電源管腳用于主電源和備份電源,供應(yīng)Vcc1為可編程涓流充電電源,附加七個字節(jié)存儲器。它廣泛應(yīng)用于電話、傳真、便攜式儀器以及電池供電的儀器儀表等。</p><p&
44、gt; 實時時鐘具有能計算2100 年之前的秒分時日日期星期月年的能力還有閏年調(diào)整的能力;</p><p> 31*8位暫存數(shù)據(jù)存儲RAM;</p><p> 串行I/O 口方式使得管腳數(shù)量最少;</p><p> 寬范圍工作電壓2.0--5.5V;</p><p> 工作電流:2.0V 時,小于300nA;</p>
45、<p> 讀/寫時鐘或RAM 數(shù)據(jù)時有兩種傳送方式:單字節(jié)傳送和多字節(jié)傳送字符組方式;</p><p> 8 腳DIP封裝或可選的8腳SOIC封裝,根據(jù)表面裝配;</p><p><b> 簡單3線接口;</b></p><p> 與TTL兼容,Vcc=5V;</p><p> 可選工業(yè)級溫度范圍-4
46、0--+85;</p><p> 與DS1202 兼容;</p><p> 雙電源管用于主電源和備份電源供應(yīng),備份電源管腳可由電池或大容量電容輸入;</p><p> 附加的7字節(jié)暫存存儲器。</p><p> DS1302與單片機系統(tǒng)連接電路如圖12所示。</p><p> 圖12 DS1302電路連接圖&
47、lt;/p><p> 如圖11所示,DS1302的SCLK、I/O和RST三個引腳通過上拉電阻連接單片機的P1.4、P1.5和P1.6。</p><p> 3.5、LCD顯示電路</p><p> 顯示部分采用SMC 1602液晶屏進行數(shù)據(jù)顯示,其主要技術(shù)參數(shù)為:</p><p> 表3 液晶屏技術(shù)指標</p><p
48、> 接口信號說明如表4所示。</p><p> 表4 液晶屏接口信號說明</p><p> 與單片機接口電路如圖13所示。其中P0.0—P0.7接LCD數(shù)據(jù)線,P2.5—P2.7接LCD控制線。</p><p> 圖13 LCD與單片機接口電路</p><p> 3.6、EEPROM存儲器電路</p><
49、;p> 紅外報警監(jiān)控系統(tǒng)的報警時間存儲在EEPROM芯片AT24C04中,并可以通過查詢按鍵查看。AT24C04是IIC芯片,其管腳連接如圖14所示,與單片機連接電路如圖15所示。</p><p> 圖14 AT24C04管腳圖 圖15 與單片機連接圖</p><p><b> 3.7、鍵盤電路</b></p><
50、;p> 本設(shè)計采用四鍵鍵盤,電路如圖16所示。</p><p> 圖16 四鍵鍵盤電路</p><p> 按鍵直接接單片機P3.2—P3.5,程序采用查詢方式獲取按鍵狀態(tài)。</p><p> 3.8、供電及程序下載電路</p><p> 本設(shè)計采用USB接口供電,電源電壓5V。同時,USB接口通過內(nèi)含PL2303芯片的轉(zhuǎn)換電
51、路對單片機進行程序編寫。其電路原理如圖17所示。</p><p> 圖17 供電及程序下載電路</p><p> 第四章:系統(tǒng)軟件設(shè)計</p><p><b> 4.1、軟件流程圖</b></p><p> 本設(shè)計軟件主程序流程圖如圖18所示。</p><p> 圖18 軟件流程圖&l
52、t;/p><p><b> 4.2、主程序</b></p><p> 下面介紹main.c主程序編寫,其他程序略。</p><p> (1) 頭文件和一些宏定義</p><p> #include <reg52.h></p><p> #include <math.h&g
53、t;</p><p> #include "1602.h"</p><p> #include "dht.h"</p><p> #include "2402.h"</p><p> #include "DS1302.h"</p><p
54、><b> (2) 管腳定義</b></p><p> sbit Led_Alert=P3^6;//報警燈</p><p> sbit In_Alert=P2^1; //報警信號輸入</p><p> sbit Beep=P2^0; //蜂鳴器</p><p>
55、 sbit Key_Up = P3^2;</p><p> sbit Key_Down = P3^5;</p><p> sbit Key_Set = P3^3;</p><p> sbit Key_Review = P3^4;</p><p> (3) 常量、變量定義和函數(shù)聲明</p><p><b&g
56、t; //定義標識</b></p><p> volatile bit FlagStartRH = 0; //開始溫濕度轉(zhuǎn)換標志</p><p> volatile bit FlagKeyPress = 0; //有鍵按下標志</p><p> volatile bit FlagAlert = 0; //報警狀態(tài)標志</p>
57、<p> volatile bit FlagReview = 0; //查詢標志</p><p> //定義溫濕度傳感器用外部變量</p><p> extern U8 U8FLAG,k;</p><p> extern U8 U8count,U8temp;</p><p> extern U8 U8T_dat
58、a_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;</p><p> extern U8 U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;</p><p> extern U8 U8comdata;</p&g
59、t;<p> extern U8 count, count_r;</p><p> //溫濕度傳感器用變量</p><p><b> U16 temp;</b></p><p> S16 temperature, humidity;</p><p> U16 RHCounter;</p&g
60、t;<p><b> //按鍵響應(yīng)用變量</b></p><p> U8 keyvalue, keyUp, keyDown, keySet, keyReview;</p><p> U8 FlagSet; </p><p> //DS1302時鐘用變量</p><p&
61、gt; SYSTEMTIME CurrentTime;</p><p> uchar year, month, day, hour, minute, second;</p><p> //報警及存儲用變量</p><p> //char * pSave;</p><p> //字符串顯示用變量</p><p>
62、; uchar str1[6] = "000000";</p><p> uchar AlertDate[9]="00-00-00", AlertTime[9]="00:00:00";</p><p> uchar hide;</p><p><b> //函數(shù)聲明</b>&l
63、t;/p><p> void int2str(int x, char* str);</p><p> void Delay1ms(unsigned int count);</p><p> void Data_Init();</p><p> void Timer0_Init();</p><p> void T
64、imer0_ISR () ;</p><p> void SaveAlert();</p><p> void LoadAlert();</p><p> void KeyProcess(uint num);</p><p><b> (4) 各子程序</b></p><p> //整型
65、轉(zhuǎn)字符串的函數(shù),轉(zhuǎn)換范圍0--65536</p><p> void int2str(int x, char* str) </p><p><b> { </b></p><p><b> int i=1; </b></p><p> int tmp=10; </p><
66、p> while(x/tmp!=0) </p><p><b> { </b></p><p><b> i++; </b></p><p><b> tmp*=10; </b></p><p><b> } </b></p>
67、<p><b> tmp=x; </b></p><p> str[i]='\0'; </p><p> while(i>1) </p><p><b> { </b></p><p> str[--i]='0'+(tmp%10); <
68、;/p><p><b> tmp/=10; </b></p><p><b> } </b></p><p> str[0]=tmp+'0'; </p><p><b> } </b></p><p> void Delay1ms(
69、unsigned int count)</p><p><b> {</b></p><p> unsigned int i,j;</p><p> for(i=0;i<count;i++)</p><p> for(j=0;j<120;j++);</p><p><b&
70、gt; }</b></p><p><b> //數(shù)據(jù)初始化</b></p><p> void Data_Init()</p><p><b> {</b></p><p> RHCounter = 0;</p><p> Led_Alert = 1
71、;</p><p> keyvalue = 0;</p><p> keyUp = 1;</p><p> keyDown = 1;</p><p> keySet = 1;</p><p> keyReview = 1;</p><p> FlagSet = 0;</p>
72、;<p><b> hide = 0;</b></p><p> AlertDate[8]='\0';</p><p> AlertTime[8]='\0';</p><p><b> }</b></p><p><b> //定時器
73、0初始化</b></p><p> void Timer0_Init()</p><p><b> {</b></p><p> ET0 = 1; //允許定時器0中斷</p><p> TMOD = 1; //定時器工作方式選擇</p><p>
74、TL0 = 0x06; </p><p> TH0 = 0xf8; //定時器賦予初值</p><p> TR0 = 1; //啟動定時器</p><p><b> }</b></p><p><b> //定時器0中斷</b></p><p
75、> void Timer0_ISR (void) interrupt 1 using 0</p><p><b> {</b></p><p> TL0 = 0x06;</p><p> TH0 = 0xf8; //定時器賦予初值</p><p> //每2秒鐘啟動一次溫濕度轉(zhuǎn)換</p>
76、;<p> RHCounter ++;</p><p> if (RHCounter >= 450)</p><p><b> {</b></p><p> FlagStartRH = 1;</p><p> RHCounter = 0;</p><p><b&
77、gt; //設(shè)定閃爍標志</b></p><p> if (hide == 1) hide = 0;</p><p> else hide = 1;</p><p><b> }</b></p><p><b> }</b></p><p> //存入
78、報警日期時間</p><p> void SaveAlert()</p><p><b> {</b></p><p> wrteeprom(0, year); </p><p> DELAY(1500);</p><p> wrteeprom(1, month); </p
79、><p> DELAY(1500);</p><p> wrteeprom(2, day); </p><p> DELAY(1500);</p><p> wrteeprom(3, hour); </p><p> DELAY(1500);</p><p> wrteeprom
80、(4, minute); </p><p> DELAY(1500);</p><p> wrteeprom(5, second); </p><p> DELAY(1500);</p><p><b> }</b></p><p> //載入報警日期時間</p>
81、<p> void LoadAlert()</p><p><b> {</b></p><p> uchar value;</p><p> value = rdeeprom(0);</p><p> AlertDate[0]=value/10+48;</p><p> A
82、lertDate[1]=value%10+48;</p><p> value = rdeeprom(1);</p><p> AlertDate[3]=value/10+48;</p><p> AlertDate[4]=value%10+48;</p><p> value = rdeeprom(2);</p>&l
83、t;p> AlertDate[6]=value/10+48;</p><p> AlertDate[7]=value%10+48;</p><p> value = rdeeprom(3);</p><p> AlertTime[0]=value/10+48;</p><p> AlertTime[1]=value%10+48
84、;</p><p> value = rdeeprom(4);</p><p> AlertTime[3]=value/10+48;</p><p> AlertTime[4]=value%10+48;</p><p> value = rdeeprom(5);</p><p> AlertTime[6]=v
85、alue/10+48;</p><p> AlertTime[7]=value%10+48;</p><p><b> }</b></p><p> void KeyProcess(uint num)</p><p><b> {</b></p><p> swit
86、ch (num)</p><p><b> {</b></p><p> case 1: //Up鍵被按下</p><p> switch (FlagSet)</p><p><b> {</b></p><p><b> case 0:</b&g
87、t;</p><p><b> case 1:</b></p><p><b> break;</b></p><p> case 2: //年</p><p> if (year<99)year++;</p><p> Write1302(0x8e,0x0
88、0); //寫入允許</p><p> DS1302_SetTime(DS1302_YEAR,year);</p><p> Write1302(0x8e,0x80); //禁止寫入</p><p><b> break;</b></p><p> case 3: //月</p><p>
89、 if (month<12) month++;</p><p> Write1302(0x8e,0x00); //寫入允許</p><p> DS1302_SetTime(DS1302_MONTH,month);</p><p> Write1302(0x8e,0x80); //禁止寫入</p><p><b> b
90、reak;</b></p><p> case 4: //日</p><p> if (day<31) day++;</p><p> Write1302(0x8e,0x00); //寫入允許</p><p> DS1302_SetTime(DS1302_DAY,day);</p><p>
91、 Write1302(0x8e,0x80); //禁止寫入</p><p><b> break;</b></p><p> case 5: //時</p><p> if (hour<23) hour++;</p><p> Write1302(0x8e,0x00); //寫入允許</p>
92、<p> DS1302_SetTime(DS1302_HOUR,hour);</p><p> Write1302(0x8e,0x80); //禁止寫入</p><p><b> break;</b></p><p> case 6: //分</p><p> if (minute<60) mi
93、nute++;</p><p> Write1302(0x8e,0x00); //寫入允許</p><p> DS1302_SetTime(DS1302_MINUTE,minute);</p><p> Write1302(0x8e,0x80); //禁止寫入</p><p><b> break;</b><
94、;/p><p> case 7: //秒</p><p> if (second<60) second++;</p><p> Write1302(0x8e,0x00); //寫入允許</p><p> DS1302_SetTime(DS1302_SECOND,second);</p><p> Write
95、1302(0x8e,0x80); //禁止寫入</p><p><b> break;</b></p><p><b> }</b></p><p><b> break;</b></p><p> case 2://Down鍵被按下</p><p
96、> switch (FlagSet)</p><p><b> {</b></p><p><b> case 0:</b></p><p><b> case 1:</b></p><p><b> break;</b></p>
97、;<p> case 2: //年</p><p> if (year>0)year--;</p><p> Write1302(0x8e,0x00); //寫入允許</p><p> DS1302_SetTime(DS1302_YEAR,year);</p><p> Write1302(0x8e,0x80)
98、; //禁止寫入</p><p><b> break;</b></p><p> case 3: //月</p><p> if (month>0) month--;</p><p> Write1302(0x8e,0x00); //寫入允許</p><p> DS1302_Se
99、tTime(DS1302_MONTH,month);</p><p> Write1302(0x8e,0x80); //禁止寫入</p><p><b> break;</b></p><p> case 4: //日</p><p> if (day>0) day--;</p><p&
100、gt; Write1302(0x8e,0x00); //寫入允許</p><p> DS1302_SetTime(DS1302_DAY,day);</p><p> Write1302(0x8e,0x80); //禁止寫入</p><p><b> break;</b></p><p> case 5: //時
101、</p><p> if (hour>0) hour--;</p><p> Write1302(0x8e,0x00); //寫入允許</p><p> DS1302_SetTime(DS1302_HOUR,hour);</p><p> Write1302(0x8e,0x80); //禁止寫入</p><p
102、><b> break;</b></p><p> case 6: //分</p><p> if (minute>0) minute--;</p><p> Write1302(0x8e,0x00); //寫入允許</p><p> DS1302_SetTime(DS1302_MINUTE,min
103、ute);</p><p> Write1302(0x8e,0x80); //禁止寫入</p><p><b> break;</b></p><p> case 7: //秒</p><p> if (second>0) second--;</p><p> Write1302(
104、0x8e,0x00); //寫入允許</p><p> DS1302_SetTime(DS1302_SECOND,second);</p><p> Write1302(0x8e,0x80); //禁止寫入</p><p><b> break;</b></p><p><b> }</b>
105、</p><p><b> break;</b></p><p> case 3: //Set鍵被按下。FlagSet 0-報警;1-關(guān)報警;2-設(shè)置年;3-月;4-日;5-時;6-分;7-秒</p><p> if (FlagReview==0) //只有不查詢時才能設(shè)定</p><p><b>
106、; {</b></p><p> FlagSet ++;</p><p> if (FlagSet==1) </p><p><b> {</b></p><p> L1602_string(2,10,"A");</p><p><b> }&
107、lt;/b></p><p><b> else </b></p><p><b> {</b></p><p> L1602_string(2,10," ");</p><p><b> }</b></p><p>
108、 if (FlagSet>=8)</p><p><b> {</b></p><p> FlagSet = 0;</p><p><b> } </b></p><p><b> }</b></p><p> break;
109、 </p><p> case 4: //Review鍵被按下</p><p> if (FlagReview == 0) </p><p><b> {</b></p><p> FlagReview = 1;</p><p> LoadAlert();</p>&l
110、t;p> L1602_string(1,1," ");</p><p> L1602_string(2,1," ");</p><p> L1602_string(1,1,AlertDate);</p><p> L1602_string(1,9," Alert "
111、;);</p><p> L1602_string(2,1,AlertTime);</p><p> L1602_string(2,9," ");</p><p><b> }</b></p><p><b> else</b></p><
112、;p><b> {</b></p><p> FlagReview = 0;</p><p><b> }</b></p><p><b> break;</b></p><p><b> default:</b></p>&
113、lt;p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p> /********************************************************************</p&
114、gt;<p> * 名稱 : Main()</p><p> * 功能 : 主函數(shù)</p><p> ***********************************************************************/</p><p> void main()</p><p><b>
115、; {</b></p><p> U16 i, j, testnum;</p><p><b> EA = 0;</b></p><p> Timer0_Init(); //定時器0初始化</p><p> Data_Init();</p><p> Initial_DS
116、1302();</p><p><b> EA = 1;</b></p><p> L1602_init();</p><p> L1602_string(1,1," Welcome to My ");</p><p> L1602_string(2,1,"Infrared Mon
117、itor");</p><p><b> //延時</b></p><p> for (i=0;i<1000;i++)</p><p> for (j=0;j<1000;j++)</p><p><b> {;}</b></p><p><
118、b> //清屏</b></p><p> L1602_string(1,1," T C");</p><p> L1602_string(2,1," H %");</p><p><b> while(1)</b></p>
119、;<p><b> {</b></p><p><b> //查詢報警信號</b></p><p> //FlagSet=0為報警狀態(tài),</p><p> //FlagSet=1為關(guān)報警狀態(tài),</p><p> //FlagSet=2,3,4,5,6,7依次為設(shè)置年,月,日,
120、時,分,秒狀態(tài)</p><p> if ((FlagSet==1)&&(In_Alert==0)) //首次觸發(fā)報警則存入報警時間</p><p><b> {</b></p><p> SaveAlert();</p><p> FlagAlert=1;</p><p&g
121、t;<b> Beep=0;</b></p><p> Led_Alert = 0;</p><p><b> }</b></p><p> else //報警未打開或者無警可報</p><p><b> {</b></p><p> Fl
122、agAlert=0;</p><p><b> Beep=1;</b></p><p> Led_Alert = 1;</p><p><b> }</b></p><p> if (FlagStartRH == 1)</p><p><b> {<
123、/b></p><p> //溫濕度轉(zhuǎn)換標志檢查</p><p><b> TR0 = 0;</b></p><p> testnum = RH();</p><p> FlagStartRH = 0;</p><p><b> TR0 = 1;</b><
124、;/p><p> //讀出溫濕度,只取整數(shù)部分</p><p> humidity = U8RH_data_H;</p><p> temperature = U8T_data_H;</p><p><b> //讀出日期時間值</b></p><p> DS1302_GetTime(&am
125、p;CurrentTime);</p><p> year = CurrentTime.Year;</p><p> month = CurrentTime.Month;</p><p> day = CurrentTime.Day;</p><p> hour = CurrentTime.Hour;</p><p
126、> minute = CurrentTime.Minute;</p><p> second = CurrentTime.Second;</p><p> DateToStr(&CurrentTime);</p><p> TimeToStr(&CurrentTime);</p><p> //如果不處于查詢狀
127、態(tài)則顯示當(dāng)前日期時間溫度濕度</p><p> if (FlagReview==0)</p><p><b> {</b></p><p><b> //清屏</b></p><p> L1602_string(1,1," T C");</p
128、><p> L1602_string(2,1," ");</p><p> L1602_string(2,12,"H %");</p><p><b> //顯示溫濕度</b></p><p> if (temperature<0) </p>&l
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 紅外熱釋電感應(yīng)燈課程設(shè)計
- 熱釋電人體感應(yīng)調(diào)光燈畢業(yè)設(shè)計
- 熱釋電人體感應(yīng)調(diào)光燈畢業(yè)設(shè)計
- 畢業(yè)設(shè)計--熱釋紅外線電子哨兵
- 靜電感應(yīng)與導(dǎo)體接地
- 靜電感應(yīng)晶閘管的研制.pdf
- 靜電感應(yīng)器件的研制.pdf
- 電力靜電感應(yīng)器件的研制.pdf
- 靜電感應(yīng)演示的常見失敗原因分析
- 靜電感應(yīng)晶體管的設(shè)計與制造技術(shù).pdf
- 靜電感應(yīng)光敏器件(SIPT)的數(shù)值模擬.pdf
- 熱釋電紅外感應(yīng)控制照明燈開關(guān)課程設(shè)計報告
- 逆變器供電感應(yīng)電機傳動系統(tǒng)的自激振蕩問題研究.pdf
- 基于光電感應(yīng)的摩托車道路測試系統(tǒng)的研究.pdf
- 信息系統(tǒng)機房雷電感應(yīng)危害計算分析及防護措施研究.pdf
- 靜電感應(yīng)晶體管的研究與仿真.pdf
- 埋柵型電力靜電感應(yīng)晶閘管的研制.pdf
- 大功率靜電感應(yīng)器件的研制.pdf
- 架空配電線路雷電感應(yīng)過電壓的研究.pdf
- 有機靜電感應(yīng)晶體管工作機理的解析.pdf
評論
0/150
提交評論