【《基于STC89C52單片機的智能家庭環(huán)境監(jiān)控系統(tǒng)設(shè)計(附程序)》15000字(論文)】_第1頁
【《基于STC89C52單片機的智能家庭環(huán)境監(jiān)控系統(tǒng)設(shè)計(附程序)》15000字(論文)】_第2頁
【《基于STC89C52單片機的智能家庭環(huán)境監(jiān)控系統(tǒng)設(shè)計(附程序)》15000字(論文)】_第3頁
【《基于STC89C52單片機的智能家庭環(huán)境監(jiān)控系統(tǒng)設(shè)計(附程序)》15000字(論文)】_第4頁
【《基于STC89C52單片機的智能家庭環(huán)境監(jiān)控系統(tǒng)設(shè)計(附程序)》15000字(論文)】_第5頁
已閱讀5頁,還剩50頁未讀, 繼續(xù)免費閱讀

付費下載

下載本文檔

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

文檔簡介

III基于STC89C52單片機的智能家庭環(huán)境監(jiān)控系統(tǒng)設(shè)計摘要本次設(shè)計是一個基于STC89C52單片機的智能家庭環(huán)境監(jiān)控系統(tǒng)的設(shè)計,本次的為設(shè)計的目的是為了構(gòu)建一個低成本并且能夠簡單操作,讓人能夠一眼看出是哪里出現(xiàn)了問題的監(jiān)控系統(tǒng),這樣可以幫助人們更快的察覺家庭中的異常情況,快速處理,避免危害的情況發(fā)生,挽救人們的人身安全以及家庭財產(chǎn)。本次設(shè)計可以分為溫度濕度檢測、煙霧檢測、紅外人體檢測、顯示部分和蜂鳴器報警部分。溫度濕度檢測部分通過DHT11溫濕度傳感器監(jiān)控當(dāng)前環(huán)境下的溫度濕度,煙霧檢測部分通過MQ-2氣體傳感器監(jiān)控當(dāng)前環(huán)境下的氣體濃度,紅外人體檢測部分通過HC-SR501模塊監(jiān)控當(dāng)前環(huán)境是否有人,顯示部分通過LCD1602液晶顯示模塊顯示當(dāng)前環(huán)境溫度濕度、氣體濃度等數(shù)據(jù)資料,蜂鳴器報警部分通過蜂鳴器實現(xiàn)在溫度濕度、氣體濃度異常以及開啟人體檢測模塊是有人被檢測到后開始蜂鳴器鳴叫報警。關(guān)鍵詞:紅外人體檢測;煙霧檢測;溫濕度檢測;STC89C52單片機目錄TOC\o"1-3"\h\u31157摘要 I5318Abstract Ⅱ233041緒論 1112831.1課題背景 1202051.2設(shè)計依據(jù) 1246051.3功能介紹 2195212系統(tǒng)設(shè)計方案 3168732.1系統(tǒng)構(gòu)成 3100252.2方案設(shè)計 319043硬件電路設(shè)計 7200913.1系統(tǒng)硬件原理圖 7148243.2主控電路 934273.3MQ-2煙霧檢測模塊 1129073.4DHT11溫濕度傳感器電路 13151473.5人體紅外傳感器模塊 13137633.6LCD1602液晶顯示屏電路 14210743.7按鍵控制電路 1562203.8報警電路 16290183.9電路電源 17111184軟件系統(tǒng)設(shè)計 1968924.1軟件介紹 19273794.2軟件主程序框圖 21307954.3LCD1602顯示流程圖 2333754.4溫度濕度檢測流程圖 24143784.5按鍵流程圖 25227714.6報警流程圖 25136624.7煙霧傳感器流程圖 26143285調(diào)試 28112755.1硬件調(diào)試 28209585.2軟件調(diào)試 2814644結(jié)論 3332731參考文獻 3527744附錄 36PAGE28-1緒論1.1課題背景隨著時代的進步,很多我們以為的遙不可及的高科技正在慢慢變得不再那么神秘。隨著人們受教育水平的提升,極大地促進了科學(xué)的飛速發(fā)展,我們的日常生活逐漸多了許許多多的科技產(chǎn)品,這些產(chǎn)品給我們帶來了很多的便捷之處,但是擁有著這些便捷之處不是沒有代價的,它們帶來了許多安全隱患,比如煤氣泄漏、不正當(dāng)?shù)氖褂秒娖髟斐傻幕馂?zāi)等等。于是智能環(huán)境監(jiān)控慢慢進入了大家的視野并且成了大家都很關(guān)注的話題。智能家居可以通過網(wǎng)絡(luò)將我們家庭里面的居家設(shè)施(照明、空調(diào)、安防等等)連接到一起,從而實現(xiàn)對家用電器的控制、燈光照明的控制、溫度濕度的控制、防盜報警等等監(jiān)控的功能與手段。相對比于普通家居,普通家居有的智能家居也有,普通家居沒有的智能家居也有,比如兼?zhèn)浣ㄖ⑿畔⒓译?、設(shè)備自動化等功能。還可以讓我們的家庭環(huán)境變得更加的高效、便利、環(huán)保、安全、舒適,在安排時間上可以更加的方便快速,節(jié)約各種資源、成本。在日常生活中無論在何處環(huán)境監(jiān)控系統(tǒng)都是重點關(guān)注對象,酒店、電影院、學(xué)校、公司都是一樣的。通過對溫度濕度、氣體濃度的監(jiān)控發(fā)現(xiàn)異常立馬進行報警來警示人們從而阻止沒必要的損失。根據(jù)生活中的需求、我個人的經(jīng)濟能力以及所學(xué)習(xí)的知識相結(jié)合,在經(jīng)過精挑細選,于是就有了本次的設(shè)計以及文章。本文先是介紹了智能家具的背景與發(fā)展前景,然后介紹本次課題的設(shè)計思路,以及各個模塊元件的選型以及他們的工作原理,最后再對這次的設(shè)計進行總結(jié),各個,模塊的電路原理圖貼在硬件部分,所有的程序放在附錄中。1.2設(shè)計依據(jù)基于所學(xué)知識我采用單片機,芯片則是選用STC89C52芯片,它比AT89C52芯片有著集成度更高、價格更便宜、功能更多更強大的優(yōu)點,通過I/O口進行操作簡單易懂。溫度濕度傳感器我經(jīng)過仔細思考過后決定選擇DHT11溫濕度傳感器,它可以同時檢測溫度和濕度,它的精度為濕度±5%RH,溫度±2℃,量程為濕度5-95%RH,溫度0~+50℃。紅外人體感應(yīng)模塊則是只考慮HC-SR501這一種,它是基于紅外線技術(shù)的自動控制模塊,是一種被動式的紅外探測方式,工作環(huán)境廣泛,抗干擾性強,靈敏度很高,廣泛應(yīng)用于各類自動感應(yīng)電器設(shè)備,尤其是干電池供電的自動控制產(chǎn)品。煙霧傳感器則是選擇MQ-2煙霧傳感器,MQ-2煙霧傳感器可用作為家庭和工廠之中檢查是否有氣體泄漏的裝置使用,適宜于液化氣、丁烷、丙烷、甲烷、酒精、氫氣、煙霧等等的探測。顯示模塊選用LCD1602液晶顯示器,它是廣泛使用的一種字符型液晶顯示模塊。它是由字符型液晶顯示屏(LCD)、控制驅(qū)動主電路HD44780及其擴展驅(qū)動電路HD44100,以及少量電容元件、結(jié)構(gòu)件和電阻等裝配在PCB板上而組成。報警部分選用蜂鳴器進行報警,當(dāng)檢測到溫濕度異常、煙霧濃度異常、防盜模式開啟時紅外人體感應(yīng)模塊感應(yīng)到有人接近時開始報警,當(dāng)這些情況恢復(fù)到正常之后取消報警。1.3功能介紹(1)通過DHT11溫濕度傳感器檢測環(huán)境并且采集數(shù)據(jù),然后將采集到的數(shù)據(jù)傳輸LCD1602之后在LCD1602液晶顯示屏上面顯示,方便人們更加直觀的觀察到數(shù)據(jù)。如果溫度濕度超出上限下限的設(shè)定值,則相對應(yīng)的指示燈亮起同時蜂鳴器開始報警,當(dāng)溫濕度恢復(fù)到設(shè)定值的范圍內(nèi)時,報警自動關(guān)閉指示燈也同時熄滅。(2)通過煙霧探頭傳感器對環(huán)境中的各類煙霧進行檢測,它可以對煤氣、丁烷、乙烷、甲烷、抽煙產(chǎn)生的煙霧、著火所產(chǎn)生的煙霧等等進行濃度的監(jiān)控,當(dāng)濃度超出設(shè)定閾值時,相對應(yīng)的LED指示燈會亮起,蜂鳴器開始報警。在人們得到警示之后進行對煙霧的處理使其濃度低于設(shè)定值時,蜂鳴器停止蜂鳴報警并且LED指示燈熄滅。(3)紅外人體檢測模塊在開啟防盜模式之后啟動,啟動后會對七米內(nèi)的人體進行監(jiān)控,如果在布防后開啟的防盜模式時有人闖入檢測范圍,這時LED指示燈亮起并且蜂鳴器報警用來警示入侵者,直到人們主動撤防關(guān)閉防盜模式才可以解除報警狀態(tài)。同時STC89C52還具有掉電保存的功能,即使突然停電,在停電過后再次開機不會中斷報警,可以繼續(xù)報警。(4)設(shè)置有4個按鍵,第一個按鍵K1用來進入設(shè)置界面,選擇需要設(shè)置的目標,返回主界面;第二個按鍵K2用來向上調(diào)整數(shù)值;第三個按鍵K3用來向下調(diào)整數(shù)值;第四個按鍵用來防盜模式的布防以及撤防。2系統(tǒng)設(shè)計方案2.1系統(tǒng)構(gòu)成設(shè)計涉及主硬件為:蜂鳴器報警電路,LCD1602液晶顯示模塊,按鍵設(shè)置,MQ-2煙霧傳感器,DHT11溫濕度傳感器,人體紅外感應(yīng)器,STC89C52單片機組成。本研究設(shè)計框圖如圖2-1所示。報警電路煙霧傳感器AD轉(zhuǎn)換模塊報警電路煙霧傳感器AD轉(zhuǎn)換模塊液晶顯示溫濕度傳感器液晶顯示溫濕度傳感器主控電路紅外人體傳感器按鍵系統(tǒng)紅外人體傳感器按鍵系統(tǒng)圖2-1系統(tǒng)方框圖2.2方案設(shè)計2.2.1單片機的選擇第一個方案:選用單片機AT89C52。AT89C52單片機是ATMEL公司制作的一款擁有非易失性存儲技術(shù)生產(chǎn)、高密度、兼容標準MCS-51\t"/item/AT89C52/_blank"指令系統(tǒng)的單片機,單片機自帶了可以長久保存數(shù)據(jù)的Flash\t"/item/AT89C52/_blank"存儲單元和通用8位\t"/item/AT89C52/_blank"中央處理器。它是一個高性能,低電壓的CMOS8位單片機,這種單片機不需要太好的開發(fā)設(shè)備,一般不是損壞的設(shè)備都可以使用,并且開發(fā)時不需要太多的時間。AT89C52單片機可以將程序進行加密處理,開發(fā)者們可以放心大膽的將程序保存在單片機里面不用擔(dān)心有人從中盜取數(shù)據(jù)。同時,AT89C52非但不貴還相當(dāng)?shù)谋阋?,網(wǎng)絡(luò)市場上面貨物充足完全不擔(dān)心買不到它。AT89C52可以構(gòu)成單片機的最小系統(tǒng),這樣不僅大大減小了系統(tǒng)的體積還減少了系統(tǒng)的成本,甚至增加了系統(tǒng)的可靠性。只要是程序長度小于8K,用戶可以自由支配四個I/O口的使用權(quán)。能用5V電壓編程,擦寫的時間很短,只需要10ms,不但如此它是可以反復(fù)擦寫的有效的降低了開發(fā)成本。AT89C51芯片擁有著三級程序存儲器加密,提供了自由便捷而且過硬的加密手段,能完全保證系統(tǒng)或者程序不被意圖不軌之人利用。AT89C52擁有著3個程序加密的位置,可以對芯片當(dāng)中分別為LB1、LB2、LB3的3個加密位進行編程(P)或不編程(U)來得到。當(dāng)LB1加密位被編程時,處于復(fù)位的時候時,會鎖存并采樣EA端邏輯電平被,如果在通電之后單片機一直沒有復(fù)位,則會將一個隨機的數(shù)值作為鎖存起的初始值,而且這個隨機數(shù)值會被一直保存著直到單片機復(fù)位。為了能夠讓單片機可以正常不出差錯的運行,所以該引腳當(dāng)前的邏輯電平必須和被鎖存的EA電平值一模一樣。此外,想要清除加密位只有擦除整個單片機這一種方法。第二個方案:選用單片機STC89C52,它是一種具有高性能、低功耗的CMOS8位微控制器的單片機,嵌入式控制應(yīng)用系統(tǒng)在單片機STC89C52的幫助下可以擁有更加有效、更加靈活地解決方案。STC89C52與AT89C52的指令系統(tǒng)基本上是完全一致、完全兼容的,但實際操作我們發(fā)現(xiàn)兩者的操作以及功能上面有很大的不同。(1)STC89C52擁有ISP,可以在線編程,只需要接上相對應(yīng)的線即可。而AT89C52沒有ISP,需要取下來用編程器。(2)STC89C52單片機自身本來就帶有EEPROM,哪怕是關(guān)機之后再次開機你之前的程序數(shù)據(jù)也都還在不會丟失,比如設(shè)置好的需要在溫度濕度的上限下限報警的設(shè)定值,煙霧濃度的閾值等等。AT89C52則沒有這樣的功能,只有外接擴展存儲器才能夠?qū)崿F(xiàn)和STC89C52一樣的斷電保存功能。(3)在執(zhí)行指令的速度上STC89C52比起AT89C52快了很多很多,是它的3-30倍,雖然執(zhí)行速快是好事,但是由于STC89C52和AT89C52的程序是可以通用的,所以有可能在AT89C52上的程序到了STC89C52就運行得不盡人意,尤其是在那些對時序有著嚴格要求的模塊身上表現(xiàn)的最為明顯,在STC89C52上使用的時候可能需要加長延時。(4)STC89C52單片機的工作電壓為5.5V~3.3V(5V的單片機)/3.8V~2.0V9(3V的單片機),而AT89C52的工作電壓為5V。這樣對比之下STC89C52對于工作環(huán)境的要求并不高,可以應(yīng)用的環(huán)境比AT89C52要多得多。所以在有一個系統(tǒng)使用STC89C52時好用,用AT89C52不好用很有可能是供電的原因。對比了這兩種單片機我發(fā)現(xiàn)STC89C52的泛用性更強,可以更加方便的實現(xiàn)我所需要的要求,再加上我在學(xué)校學(xué)習(xí)過的數(shù)字電路、單片機原理中學(xué)習(xí)的也是STC89C52、C語言等等課程,以及同學(xué)和老師都對STC89C52更加了解,所以我選擇了STC89C52作為主控芯片,價格便宜,能夠在大部分環(huán)境使用,自身就能實現(xiàn)斷電保存功能,編程和下載程序更加方便。2.2.2傳感器的選擇第一個方案:選用DS18B20作為溫度傳感器模塊用來檢測環(huán)境的溫度。DS18B20是一個在單片機制作中經(jīng)常用到的優(yōu)秀的數(shù)字溫度傳感器。輸出的是數(shù)字信號。它擁有成本低,精密度高,接線方便,體積小,抗干擾能力高等特點。DS18B20的溫度測量范圍在-55℃~+125℃,-10℃~+85℃,誤差范圍在±0.5℃,最高精度可達0.0625℃。第二個方案:選用DHT11溫濕度傳感器,它不僅僅可以檢測溫度還可以檢測濕度,所以它可以用作溫度和濕度的傳感器檢測模塊。它已經(jīng)校準數(shù)字信號輸出。DHT11溫濕度傳感器的測量范圍是,濕度5~95%RH,溫度-20~+60℃,而誤差范圍是,濕度±5%RH,溫度±2℃。DHT11擁有著性價比高,功耗低,體積小,響應(yīng)快,抗干擾能力強等優(yōu)點。對比兩個方案我發(fā)現(xiàn)DHT11的精密度雖然不如DS18B20但是DHT11卻比DS18B20多了一個濕度檢測的功能,而且在溫度檢測的功能上也不算很差,再加上DHT11比較穩(wěn)定以及它的高性價比,所以我選擇來了DHT11。2.2.3顯示屏的選擇第一個方案:選用12864液晶屏顯示屏。這并不是指某一個型號的液晶顯示屏,而是說明這個顯示屏有什么樣的特性。12864是對于128*64點陣液晶模塊所擁有的點陣數(shù)的簡稱。這類顯示模塊能夠很好地顯示圖形圖像以及漢字也可以很好地顯示,在它的內(nèi)部自帶了64*256點陣顯示RAM、128個字符、以及8192個漢字。該點陣的屏顯經(jīng)常出現(xiàn)在各種小型設(shè)備之上,能夠很好地匹配這些小型設(shè)備,并且相對來說成本也是較低的。第二個方案:選用LCD1602液晶顯示屏。它是由M*N個顯示單元組成的\t"/item/LCD1602/_blank"點陣圖形式液晶。打個比方LCD顯示屏有64行,128列,每1個字節(jié)的8位對應(yīng)著顯示屏的8列,也就是每行有128位,16個字節(jié),共128個點組成。顯示RAM區(qū)的1024字節(jié)與顯示屏上1024個顯示單元相互對應(yīng),每一個顯示單元都和跟他相對應(yīng)的字節(jié)的內(nèi)容有關(guān),字節(jié)內(nèi)容控制著顯示單元的亮與暗。LCD1602還有一些顯示效果,比如讓字符從左向右依次顯示或者從右向左依次顯示等等。對比兩個顯示屏兩者之間的功能相差不大,編程的難度方面也基本一致,原理上也是,都是寫指令、地址、數(shù)據(jù)等等。不過12864液晶顯示屏顯示的東西明顯比LCD1602更多更全面。兩者都滿足本次設(shè)計的要求,但是一塊12864液晶顯示屏最低也要四五十塊錢,而LCD1602液晶顯示屏只需要五六塊錢,從價格上看LCD1602液晶顯示屏完勝12864液晶顯示屏。所以在我的精打細算之下我選擇了便宜的LCD1602液晶顯示屏。2.2.4防盜檢測的選擇對于防盜模塊來說HC-SR501人體紅外感應(yīng)器是一個很好的選擇。人體正常的體溫一般在37度左右,因此人體會發(fā)出一種特定的波長,這種特殊的波長是紅外線,在10UM左右。這種特殊的波長可以被被動式的紅外探頭所檢測到,所以用這種被動式的紅外探頭用來檢測這種特殊的波長就可以確定是否有人進入檢測范圍。為了增加這種紅外探頭對人體的敏感度和增加它的抗干擾性,所以人們用一種特殊的菲涅爾濾光片覆蓋在它的輻射照面,減少外來環(huán)境帶來的誤差干擾。這種被動式的紅外探頭,它的傳感器是由兩個相互串聯(lián)或者是并聯(lián)的熱釋電元所組成的。并且這兩個熱釋電元他們的極點化的方向是相反的,一般來說環(huán)境輻射對這兩個熱釋電元起到的作用是一樣的,所以兩者的釋電效應(yīng)也是一樣的大小,由于兩個電極化方向相反所以就會相互抵消,不會發(fā)出報警信號。但是人體進入檢測范圍時,人體所產(chǎn)生的特殊波長被捕捉,在通過部分鏡面聚焦之后,產(chǎn)生不同的熱量,這就導(dǎo)致兩個元件接收到的熱量不同從而釋放的熱釋電就不同無法相互抵消,產(chǎn)生報警信號。3硬件電路設(shè)計3.1系統(tǒng)硬件原理圖我選用的是STC89C52單片機作為控制器,用DHT11溫濕度傳感器來檢測溫度濕度是否超出人們的預(yù)期,用MQ-2煙霧傳感器檢測煙霧濃度是否超過閾值,用HC-SR501人體紅外感應(yīng)器來檢測是否有人進入布防范圍,并且將檢測到的數(shù)據(jù)發(fā)送到LCD1602液晶顯示屏上面讓人們方便觀察。在溫度濕度和煙霧濃度超出閾值以及有人進入布防范圍時發(fā)送信號到LED燈和蜂鳴器,接收到不同的報警信號相對應(yīng)的LED燈會亮起,蜂鳴器則是收到報警信號就會立即報警。此外,本次設(shè)計還擁有四個按鈕,分別有著進入設(shè)置界面/選擇/返回主界面、向上調(diào)整數(shù)值、向下調(diào)整數(shù)值以及布防/撤防的功能。存儲部分:主要由ROM和RAM來對數(shù)據(jù)進行儲存。這個是單片機存儲分開設(shè)計的一大特色。我們儲存較小的數(shù)據(jù)時用的是RAM,儲存較大的數(shù)據(jù)時用的是ROM。RST:復(fù)位。在單片機沒有出現(xiàn)異常的情況正常工作時,復(fù)位端的復(fù)位電壓應(yīng)該是保持低電平的狀態(tài),在需要復(fù)位的時候可以給復(fù)位端一個很短暫的高電平,這樣單片機就可以完成復(fù)位。這個功能簡單易懂,在使用單片機的過程中會經(jīng)常的用到它。復(fù)位按鍵電路,是將相關(guān)按鍵按下時起到一個等同于上電復(fù)位的作用;當(dāng)按鍵按下時,RST端經(jīng)過電阻和5V的電源相連,保證能夠擁有足夠的閾值電壓完成復(fù)位。單片機在開機的時候是必須要復(fù)位的,復(fù)位也可以從另一個角度來理解就是讓程序從頭開始再跑。單片機的初始化也是一樣,讓程序從頭開始跑起來。打個比方,日常生活中我們的電腦死機要讓它恢復(fù)的最簡單的方法就是重新啟動電腦,這樣電腦的一切功能都會回到一個初始值,這樣程序跑起來基本不會出現(xiàn)問題。其實在我們寫程序的時候,我們通常會寫一個初始化的代碼,這樣可以清除掉我們以前放入的程序。所有的單片機都有復(fù)位按鍵,斷電后需要復(fù)位,程序運行卡死的時候也需要復(fù)位,一般有兩種方式復(fù)位,上電復(fù)位和按鍵復(fù)位。本次設(shè)計的是按鍵復(fù)位,在程序運行時通過按鍵使CPU進入復(fù)位狀態(tài)進行復(fù)位。相關(guān)按鍵按下時等同于一個上電復(fù)位;當(dāng)按鍵被按下時,等同于一個上電復(fù)位;當(dāng)按鍵按下時,RST端經(jīng)過電阻和5V的電源相連,保證能夠擁有足夠的閾值電壓完成復(fù)位。復(fù)位電路原理圖如圖3-2所示。芯片擦除:PEROM陣列的三個鎖定位電擦除功能可以通過正確控制不同信號的組合,保持ALE管腳保持低電平10ms來完成此功能。在芯片擦過程中,代碼陣列會全被寫“1”且在任何非空存儲字節(jié)被重復(fù)編程以前,該操作必須被執(zhí)行。STC89C52單片機雖然看著很小巧但是該有的功能他是一個不缺,中央處理器,串口通信,32個I/O口,定時器,時鐘芯片,RAM閃存器,ROM,F(xiàn)LASH存儲器應(yīng)有盡有。STC89C52最小系統(tǒng)原理圖如圖3-1所示。圖3-1STC89C52最小系統(tǒng)原理圖圖3-2復(fù)位電路原理圖3.2主控電路STC89C52是STC公司擁有著低功耗、高性能的CMOS8位的微控制器,STC89C52使用的是MCS-51內(nèi)核,但是在STC公司的改進下芯片擁有了更多的傳統(tǒng)的單片機所沒有的功能。他擁有著8K字節(jié)容量的程序儲存空間,512字節(jié)容量的數(shù)據(jù)儲存空間,并且自帶EEPRMO儲存空間能夠容納4K的字節(jié)。不但如此,它還擁有著在線編程的功能和8位的CPU,這就使得STC89C52斷電存儲數(shù)據(jù)的功能可以實現(xiàn)在它的身上,不但如此嵌入式控制應(yīng)用系統(tǒng)在單片機STC89C52的幫助下可以擁有更加有效、更加靈活地解決方案。STC89C52是雙列直插式的封裝并且擁有40個引腳。單片機的引腳用于連接單片機與外設(shè),只有通過引腳單片機才可以與外設(shè)進行信息的交互。不過由于單片機的引腳數(shù)量有限,如何合理且高效的運用這些引腳就需要我們仔細的思考研究了?,F(xiàn)在通過改善引腳體積和外觀,采用雙功能或者多功能的引腳可以將單片機的功能拓展,提高單片機可能性。STC89C52單片機的封裝引腳圖如圖3-3所示。圖3-3STC89C52單片機封裝引腳圖下面依據(jù)引腳圖(1)主電源引腳VCC引腳(40號引腳),是輸入電源的正極,輸入電壓為5VVSS引腳(20號引腳),GND引腳,用來連接電源的負極和起到接地的作用。(2)時鐘源XTAL1引腳(19號引腳),用來連接晶振,根據(jù)晶振是否為外部震蕩有不同的接法,如果是外部震蕩的晶振此引腳需要接地。XTAL2引腳(18號引腳),用來連接晶振的另一端,和XTAL1引腳(19號引腳)一樣,如果連接外部震蕩的晶振需要接地使用。(3)多功能I/O單片機總共擁有32個I/O引腳并且分為4組,分別是P0,P1,P2,P3口,4個I/O口分別擁有著不同的功能,復(fù)位后為:P1、P2、P3是準雙向口/弱上拉,P0口是漏極開路輸出。P0口(32~39引腳),是漏極雙向I/O口,在作為I/O口在使用時這些引腳需要外加上拉電阻,不過作為總線擴展的時候則不需要上拉電阻,一般用于連接外接的顯示屏。對應(yīng)單片機的P0到P0.7引腳。P1口(1~8引腳),是準雙向I/O口,可以在單片機和外設(shè)直接進行雙向通信,具有上拉作用,對應(yīng)單片機的P1.0-P1.7引腳。P2口(21~28引腳)。這8個引腳是準雙向I/O口,和P1口一樣,也可以在單片機和外設(shè)直接雙向通信。P3口(10~17引腳)。這8個引腳是具有內(nèi)部上拉的準雙向I/O口,在進行雙向通信的同時,還具有變異的特殊功能。EA/Vpp引腳(31號引腳)。它的作用是作為單片機的信號輸入輸出端口,不管是單片機內(nèi)部還是外接的存儲器都可以連接。但是必須要在輸入低電平時才能夠有效。內(nèi)部電路圖如圖3-4所示。圖3-4單片機內(nèi)部電路圖3.3MQ-2煙霧檢測模塊MQ-2煙霧傳感器我們常常把它用于家庭和工廠的氣體檢測,主要檢測煤氣、液化氣、甲烷、丙烷、乙烷、氫氣、酒精等氣體。因為二氧化錫半導(dǎo)體是作為制作MQ-2的材料,所以在環(huán)境溫度200度~300度的時候,MQ-2會吸附空氣中的氧用來增加空氣的電阻,這樣子在MQ-2接觸到不同的煙霧之后電導(dǎo)率會發(fā)生明顯的變化,然后就可以通過這電導(dǎo)率的變化來識別出是什么樣的煙霧。當(dāng)遇到能夠被點燃的煙霧的時候,MQ-2會將之前所吸附的氧脫附,并且吸附能夠被點燃的煙霧的正離子;在氧脫附的時候會發(fā)射電子,MQ-2吸附正離子的時候也會發(fā)射電子,于是二氧化錫半導(dǎo)體的帶電子的密度就提高了。但如果沒有煙霧的時候,二氧化錫半導(dǎo)體開始自動的吸附氧的負離子,讓其電阻值變成到起始的時候。綜上所述,這就是MQ-2能夠檢測可燃煙霧的原理。MQ-2的檢測范圍及其的廣泛,它擁有著壽命長、驅(qū)動電路簡單、穩(wěn)定性好、響應(yīng)快、靈敏度高、抗干擾性強等優(yōu)點。它檢測可燃氣體與煙霧的范圍是100~10000ppm,電路設(shè)計電壓范圍寬泛,24V以下都可以,加熱電壓為5±0.2V。MQ-2采集到的煙霧信息我們需要數(shù)模轉(zhuǎn)換,這就需要ADC0832數(shù)模轉(zhuǎn)換器件。ADC0832擁有著8位分辨率,雙通道A/D轉(zhuǎn)換,輸出輸入電平都與CMOS相兼容,工作電壓為5V,工作頻率高轉(zhuǎn)換時間短等特點。芯片接口說明:CS_片選使能,低電平芯片使能;CH0模擬輸入通道0,或作為IN+/-使用;CH1模擬輸入通道1,或作為IN+/-使用;GND芯片參考0電位(地);DI數(shù)據(jù)信號輸入,選擇通道控制;DO數(shù)據(jù)信號輸出,轉(zhuǎn)換數(shù)據(jù)輸出;CLK芯片時鐘輸入;Vcc/REF電源輸入及參考電壓輸入(復(fù)用)。A/D轉(zhuǎn)換電路如圖3-5所示。圖3-5A/D轉(zhuǎn)換電路3.4DHT11溫濕度傳感器電路 本次設(shè)計采用的是DHT11溫濕度傳感器模塊,DHT11溫濕度傳感器模塊如同它的名字一樣不僅僅能夠檢測溫度還能檢測濕度,對于本次設(shè)計來說一舉兩得。DHT11擁有著不錯的測量范圍,濕度的測量范圍是5~95%RH,溫度的測量范圍是-20~+60℃,并且誤差的范圍比較小,濕度的誤差范圍是±5%RH,溫度的誤差范圍是±2℃。DHT11的應(yīng)用范圍也是非常廣泛:汽車數(shù)據(jù)記錄儀,氣象站,檢測與測試的設(shè)備,空調(diào),家電,醫(yī)療設(shè)備,溫濕度調(diào)節(jié)器,除濕器,通暖,消費品自動控制等場景。DHT11擁有著體積小,性價比高,抗干擾能力強,響應(yīng)快,功耗高等優(yōu)點。單線制串行接口的設(shè)計,讓系統(tǒng)集成變得簡易快捷。DHT11的體積很小,信號傳輸距離能夠達到20米以上,同時功耗有非常的低,這讓它成為了各類應(yīng)用甚至最為苛刻的應(yīng)用場景的最佳選擇。一般的DHT11為4針單排引腳封裝,連接十分的方便,還可以根據(jù)客戶的要求進行特殊的封裝。DHT11溫濕度傳感器電路圖如圖3-8所示。1~4引腳的功能分別是:Pin1:(VDD),作為電源引腳使用,其供電電壓為3~5.5V。Pin2:(DATA),串行數(shù)據(jù),單總線。Pin3:(NC),空腳。Pin4(VDD),接電源負極或者作為接地端。DHT11原理圖如圖3-6所示。圖3-6DHT11原理圖3.5人體紅外傳感器模塊紅外傳感器可以在不接觸到人的情況下就檢測到人體所散發(fā)出來的輻射紅外線,并且將它轉(zhuǎn)換成為電信號。傳感器不但靈敏度很高,而且它的成本很低。在實際使用的時候是需要在傳感器的前端安裝菲涅爾透鏡的,這樣能夠極大的提升接受時的靈敏度,正價檢測的距離范圍。菲涅爾透鏡的作用有兩點:第一個是聚焦,將熱釋紅外信號折射或者反射在PIR上面。第二個作用是將我們需要檢測的區(qū)域范圍劃分成為多個明區(qū)暗區(qū),這樣就可以在有物體進入檢測區(qū)域范圍的時候在PIR上面產(chǎn)生變化的熱釋紅外信號。經(jīng)過人們的實驗,不安裝菲涅爾透鏡的紅外傳感器實際檢測距離只有2m;而加裝上菲涅爾透鏡的紅外傳感器檢測距離可以有10m甚至更遠。電路原理圖如圖3-7所示。圖3-7人體紅外傳感器原理圖3.6LCD1602液晶顯示屏電路單片機設(shè)計中最常用的液晶顯示屏那一定是LCD1602,LCD1602是點陣式的LCD,是一種專門用來顯示符號、字母、數(shù)字等等的LCD,1602指的是現(xiàn)實的內(nèi)容為16*2,即顯示兩行,每行可以顯示16個字符(1個漢字占用兩個字符)。LCD1602引腳主要是以下幾個引腳:VDD,VSS是電源引腳;BLA,BLK是背光帶電源引腳;數(shù)據(jù)引腳D0-D7、RS、R/W、EN是數(shù)據(jù)引腳;VL是偏壓信號引腳;其中:VL引腳:它是液晶顯示屏的對比度調(diào)整端,對比度最弱的時候是接到正電源的時候,而對比度最低的時候就是接地的時候,對比度不能太高否則會產(chǎn)生“鬼影”,可以用一個10K的電位器來調(diào)整使用時的對比度;RS引腳:RS為寄存器選擇,高電平時選擇數(shù)據(jù)寄存器、低電平時選擇指令寄存器R/W引腳:R/W作為讀寫信號線使用,讀操作的時候為低電平的時候,寫操作的時候為高電平的時候。寫入顯示地址或者指令的時候需要RS和R/W都是低電平的時候,讀忙信號則需要二者都為高電平,寫入數(shù)據(jù)時要讓RS為高電平R/W為低電平。EN引腳:E端為使能端,在液晶顯示屏執(zhí)行命令的時候,E端則會有高電平跳變成低電平的情況。LCD1602液晶顯示屏的原理圖如圖3-8所示。圖3-8LCD1602原理圖3.7按鍵控制電路單片機的按鍵控制電路由4個開關(guān)并聯(lián)組成,按鍵開關(guān)的檢測其實就是高低電平的檢測,簡單易懂。按鍵開關(guān)由于按下的時間,難免會有一些誤差,所以在編寫案件程序的時候要去寫一個去抖函數(shù),用來減少誤差。本次設(shè)計的人體紅外報警的布防撤防,煙霧濃度的閾值設(shè)定,溫度濕度的上限下限設(shè)定值都是通過按鍵來實現(xiàn)的。第一個按鍵K1用來實現(xiàn)進入設(shè)置界面,選擇需要設(shè)置的目標,返回主界面這三個功能;第二個按鍵K2用來向上調(diào)整數(shù)值;第三個按鍵K3用來向下調(diào)整數(shù)值;第四個按鍵用來防盜模式的布防以及撤防。按鍵控制的電路原圖如圖3-9所示。圖3-9按鍵控制電路3.8報警電路報警電路由蜂鳴器報警電路和LED指示燈電路兩者共同組成。當(dāng)我們設(shè)定好溫濕度的上下限、煙霧濃度的閾值以及開啟防盜模式的時候,單片機正常運行并且反復(fù)進行監(jiān)控。蜂鳴器的工作原理非常簡單,供電就進行蜂鳴。蜂鳴器有一個小技巧,把蜂鳴器頂端的紙去掉可以提高蜂鳴的響度。在本次設(shè)計中如果單片機檢測到溫濕度、煙霧濃度超過設(shè)定的數(shù)值或者人體紅外檢測到有人蜂鳴器就會蜂鳴報警。蜂鳴器電路如圖3-10所示。LED燈是一塊電致發(fā)光的半導(dǎo)體材料芯片它可以將電能轉(zhuǎn)換為光能,轉(zhuǎn)換成我們可以看見的光。最初的LED作為一起儀表上的指示燈被廣泛使用,后來因為能夠發(fā)出各種顏色的光在交通信號燈和顯示屏中得到廣泛使用。本次設(shè)計中,不同原因引起的警報將會亮起不同顏色的LED燈,讓人們更加方便的觀察到發(fā)生了什么事情。LED電路原理圖如圖3-11所示。圖3-10蜂鳴器電路原理圖圖3-11LED電路原理圖3.9電路電源由于單片機的工作電壓一般都是在5V左右,所以采用5V直流供電,電源模塊由一個6腳的電源開關(guān)和一個3腳的電源座子所組成。電源開關(guān)用來控制整個電路的開與關(guān),電源座子則是連接外來的電源插頭的必不可少的東西。電源座子的2、3引腳接地并且起到固定的作用,沒有其他別的特殊作用,1引腳則是與電源開關(guān)的1引腳相連,電源開關(guān)的1、3和4、6引腳則是作用相同,用于電源的正極輸出。電源開關(guān)的2、5引腳是用來作為單片機的接地引腳來使用的,選取哪一個引腳作為接地引腳根據(jù)實際情況的不同來選擇,使用1、3引腳作為輸出的時候就選擇5引腳作為接地引腳,同理使用4、6引腳的時候2引腳就接地。電源開關(guān)電路如圖3-12所示。圖3-12電源開關(guān)電路原理圖

4軟件系統(tǒng)設(shè)計4.1軟件介紹KeilSoftware公司開發(fā)了一個關(guān)于51單片機C語言軟件開發(fā)的系統(tǒng),那就是KeilC51。C語言在功能上、結(jié)構(gòu)性、可維護性、結(jié)構(gòu)性都有著明顯的優(yōu)勢,學(xué)習(xí)簡單使用也方便。ARM作為國內(nèi)的代理商來提供KeilC51的服務(wù)與技術(shù)支持。開發(fā)KeilC51的目的就是為了解決嵌入式軟件開發(fā)商所遇到的各種各樣的疑難雜癥。圖4-1KeilC51操作界面

我的電路原理圖是用的AltiumDesigner10來繪制的。是一款A(yù)ltium公司所開發(fā)出來的專業(yè)化的電子電路pcb制作工具,它的功能十分強大,為用戶提供了設(shè)計輸出、信號完整性分析、拓撲邏輯自動布線、設(shè)計輸出、PCB繪制編輯和原理圖設(shè)計等諸多實用功能,AltiumDesigner10操作十分簡單方便,這使得設(shè)計者在設(shè)計電路原理圖的時候效率有了很大的提升,讓設(shè)計者更加輕松更加隨心隨遇。AltiumDesigner10的亮點有(1)提供了將設(shè)計數(shù)據(jù)管理置于設(shè)計流程核心地位的全新桌面平臺(2)提供了新的維度,以供器件數(shù)據(jù)的搜尋和管理,確保輸出到制造廠的設(shè)計數(shù)據(jù)具有準確性和可重復(fù)性(3)為設(shè)計環(huán)境提供供應(yīng)鏈信息的智能鏈接,確保對元器件的使用有更好的選擇(4)提供了涵蓋整個設(shè)計與生產(chǎn)生命周期的器件數(shù)據(jù)管理方案,而結(jié)構(gòu)性的輸出流程更是確保了輸出信息的完整性圖4-2使用AltiumDesigner10繪制的電路原理圖

4.2軟件主程序框圖當(dāng)硬件部分調(diào)試完畢之后緊接著就是要開始對軟件部分進行設(shè)計編程。在設(shè)計系統(tǒng)的時候要有一個清晰的思路,首先先要畫一個流程圖,然后按照每個模塊運行的先后順序進行設(shè)計。首先把所有的硬件初始化,DHT11溫濕度傳感器,MQ-2煙霧傳感器,LCD1602液晶顯示屏,人體紅外傳感器,蜂鳴器,之后各個模塊開始工作。不間斷的檢測溫度濕度是否正常,煙霧濃度是否超出設(shè)定閾值,是否有人出現(xiàn)在人體紅外傳感器的檢測范圍內(nèi)。按鍵設(shè)置溫度濕度的上限下限,煙霧濃度的閾值,防盜模式的布防撤防。當(dāng)有模塊發(fā)現(xiàn)有異常發(fā)生,模塊將信號傳輸過來,同時蜂鳴器報警,同時相對應(yīng)的LED燈亮起。主流程圖如圖4-3所示。圖4-3主程序流程圖PAGE28-4.3LCD1602顯示流程圖LCD液晶顯示屏通電之后,運行LCD1602子函數(shù),對屏幕進行初始化,清除屏幕上的數(shù)據(jù),將內(nèi)部儲存清空。在此之后LCD與單片機進行雙向通信,單片機開始進行控制,短暫等待后各個傳感器將采集到的數(shù)據(jù)發(fā)送過來并且顯示在屏幕上。此外,在使用按鍵設(shè)置溫度濕度的上限下限和煙霧濃度閾值時,屏幕實時變化。LCD1602顯示流程圖如圖4-4所示。圖4-4LCD1602顯示流程圖

4.4溫度濕度檢測流程圖開啟電源開關(guān)后,溫濕度傳感器開始工作,將空氣中的溫度溫度轉(zhuǎn)換成電信號輸出,單片機接收信號并且根據(jù)一定的算法進行計算,之后將計算后得到的數(shù)據(jù)顯示在LCD1602液晶顯示屏上。溫度濕度檢測流程圖如圖4-5所示。子程序入口子程序入口啟動信號啟動信號讀取溫濕度讀取溫濕度發(fā)送給單片機發(fā)送給單片機返回返回、圖4-5溫度濕度檢測流程圖

4.5按鍵流程圖設(shè)置按鍵是否按下設(shè)置按鍵是否按下子程序入口返回Y加減NY圖4-6按鍵流程圖4.6報警流程圖主函數(shù)執(zhí)行之后,一直檢測是否有中斷發(fā)生,首先通過按鍵設(shè)置溫度濕度的上限下限,煙霧濃度的閾值,布防開啟防盜模式。然后不斷地檢測溫度濕度是否超出上下限,煙霧濃度是否超過閾值,人體紅外檢測范圍內(nèi)是否有人。當(dāng)檢測到異常發(fā)生,蜂鳴器立刻蜂鳴報警,同時相應(yīng)的LED指示燈亮起。報警流程圖如圖4-7所示。圖4.7報警流程圖4.7煙霧傳感器流程圖當(dāng)傳感器采集到煙霧數(shù)據(jù)信息之后,傳感器將數(shù)據(jù)傳輸給ADC0832進行處理,ADC0832初始化后進行讀取數(shù)據(jù),一個字節(jié)8位,一位一位讀取,把讀取的數(shù)據(jù)信息轉(zhuǎn)換為數(shù)字量,進行換算,換算出電壓值。煙霧傳感器流程圖如圖4.8所示。

開始開始ADC0832初始化ADC0832初始化產(chǎn)生時鐘信號產(chǎn)生時鐘信號選擇數(shù)據(jù)通道0選擇數(shù)據(jù)通道0NN判斷ADC是否轉(zhuǎn)換完畢判斷ADC是否轉(zhuǎn)換完畢YY讀取字節(jié)讀取字節(jié)一位一位讀取數(shù)據(jù)一位一位讀取數(shù)據(jù)結(jié)束,計算當(dāng)前電壓值結(jié)束,計算當(dāng)前電壓值通過當(dāng)前電壓,得到轉(zhuǎn)換數(shù)據(jù),顯示當(dāng)前煙霧濃度通過當(dāng)前電壓,得到轉(zhuǎn)換數(shù)據(jù),顯示當(dāng)前煙霧濃度返回返回圖4.8通信模塊流程圖

5調(diào)試5.1硬件調(diào)試調(diào)試過程中第一步是先檢查所購買的元器件的外觀是否完好,之后檢測硬件電路設(shè)計的是否正確、能不能達到自己預(yù)期的效果。在焊接好電路之后,認真的檢查焊接完后的成品是不是有沒有焊接上的。再然后對買來的元器件的電路進行檢查,確認每個元器件都可以正常使用,達到它們該有的程度。調(diào)試的時候也發(fā)現(xiàn)了許多的問題:(1)選件的時候完全是一頭霧水,不知道該從什么地方獲得各種原件的資料,以及要用什么樣的元件才能更好的完成這次的設(shè)計,不過在參考了當(dāng)初學(xué)習(xí)用的學(xué)習(xí)板子對這方面的認知多了不少,然后順藤摸瓜選出了元器件,最后把看中的元器件進行對比確定,算是順利的解決了這個問題。(2)煙霧傳感器的數(shù)值一直很高,起初以為元器件損壞,在查詢資料以及賣家的指點下發(fā)現(xiàn)煙霧傳感器初次使用需要通電幾個小時才可以正常使用。圖5.1單片機正反面5.2軟件調(diào)試在將硬件部分調(diào)試完畢之后開始進行軟件部分的調(diào)試。首先我先給單片機錄入已經(jīng)寫好的程序代碼,通電然后進行各個硬件的初始化,最為直觀的就是液晶顯示屏了,我可以清楚的看到液晶屏亮起并且顯示出我所期待的界面。之后便是其他各個傳感器以及報警電路是否能夠正常運行了。進過測試溫度濕度和煙霧濃度在顯示屏上顯示的數(shù)據(jù)基本上與環(huán)境一致,當(dāng)有異常發(fā)生報警電路也可以正常運行進行報警。圖5.2單片機初始化圖5.3防盜模式下有人接近報警圖5.4超過溫度上限報警圖5.5超過溫度下限報警圖5.6超過濕度上限報警圖5.7超過濕度下限報警圖5.8超過煙霧上限報警結(jié)論歷經(jīng)一個月的努力,我的畢業(yè)設(shè)計順利完成了。從零開始完成一個設(shè)計是真的不容易,從當(dāng)初的題目選擇到之后的元器件的選擇,再到調(diào)試焊接,最后的軟件編程以及軟件調(diào)試這都讓我收獲頗豐。我從這次的畢業(yè)設(shè)計了解到了許多我們在課堂上沒有接觸過的知識,挑選元器件的時候各種各樣的元器件讓我眼花繚亂,不知道該從哪下手,找對了能夠完成設(shè)計的元器件之后還要挑選最適合自己的那一個進行設(shè)計。選好元器件之后還需要考慮它們與單片機之間的連接,單片機一共有40個引腳,需要合理分配這些引腳,把各個元器件正確無誤的連接到單片機上。為了避免元器件的浪費,我們就需要在AltiumDesigner10上面來繪制它們的原理圖,按照繪制好的原理圖就可以清晰的知道元器件是應(yīng)該怎么樣連線。最后就是按照已經(jīng)繪制好的,連好線的圖紙進行元器件的焊接工作。焊接的時候就需要準備相關(guān)的焊接設(shè)備,不過宿舍里面的同學(xué)有這樣的設(shè)備,并且我們對于焊接有一定的基礎(chǔ)。在自己焊接的時候,有時候不知道應(yīng)該如何焊接,就可以去問問同學(xué),在同學(xué)的幫助下可以更好地完成焊接工作,實在是不知道怎么弄得也可以詢問老師,老師也會竭盡所能的教我們。通過這次的設(shè)計,同學(xué)們之間互幫互助,老師也是傾囊相授大家的關(guān)系也是更近了一步。沒有他們的幫助我是完成不了這次的設(shè)計的,同時我也知道了自己還有許多地方不足,還需要繼續(xù)努力來完善自己讓自己變得更加的優(yōu)秀。

參考文獻[1]陳權(quán)昌,李興富.單片機原理及應(yīng)用[M].廣州:華南理工大學(xué)出版社,2007.8.[2]李慶亮.C語言程序設(shè)計實用教程[M].北京:機械工業(yè)出版社,2005.3.[3]楊志忠.數(shù)字電子技術(shù)[M].北京:高等教育出版社,2003.12.[4]及力.Protel99SE原理圖與PCB設(shè)計教程[M].北京:電子工業(yè)出版社,2007.8.[5]徐江海.單片機實用教程[M].北京:機械工業(yè)出版社,2006.12.[6]胡宴如.模擬電子技術(shù)[M].北京:高等教育出版社,2008.6.[7]劉寧.單片機多功能時鐘的設(shè)計[M].浙江:浙江海洋學(xué)院,2009.[8]汪文,陳林.單片機原理及應(yīng)用[M].湖北:華中科技大學(xué)出版社,2007.[9]康華光.電子技術(shù)基礎(chǔ)數(shù)字部分[M].北京:高等教育出版社,2008.[10]任向民.盧惠林.匯編語言程序設(shè)計使用教程[M].北京:清華大學(xué)出版社,2009.[11]趙德安.單片機原理與應(yīng)用[M].北京:機械工業(yè)出版社,2009.[12]劉文楷,蘇寧寧,戴瀾.霍爾傳感器讀出電路的低噪聲運算放大器設(shè)計[J].電子世界,2016(17).[13]許瑞慶.脈搏檢測系統(tǒng)設(shè)計及其信號處理算法研究[D].南京信息工程大學(xué),2008.[14]仝兆景,時俊嶺,李月,等.基于無線通訊技術(shù)脈搏檢測儀的設(shè)計與實現(xiàn)[J].計算機測量與控制,2017.附錄#include<reg52.h>#include<intrins.h>#include<absacc.h>#include<math.h> //包含頭文件#include"0832.h"#defineucharunsignedchar#defineuintunsignedint //宏定義#include"eeprom52.h" //包含stc單片機內(nèi)部EEPROM函數(shù)sbitDATA=P3^7;//溫濕度sbitE=P2^5; //1602使能引腳sbitRS=P2^7; //1602數(shù)據(jù)/命令選擇引腳sbitRW=P2^6;sbitK1=P1^3;//設(shè)置鍵sbitK2=P1^4;//加sbitK3=P1^5;//減sbitK4=P1^7;//人體sbitK5=P1^6;//布防撤防按鍵sbitLED1=P3^1; //煙霧報警sbitLED2=P3^2; //溫度上限sbitLED3=P3^3; //溫度下限sbitLED4=P3^4; //濕度上限sbitLED5=P3^5; //濕度下限sbitLED6=P3^6; //紅外報警sbitalarm=P3^0; //蜂鳴器ucharU8FLAG,U8temp,U8comdata,U8RH_data_H_temp,U8RH_data_L_temp,U8T_data_H_temp,U8T_data_L_temp,U8checkdata_temp;ucharU8RH_data_H,U8RH_data_L,U8T_data_H,U8T_data_L,U8checkdata; //定義全局變量用于讀取溫濕度ucharMode,humidity,temperature,smog; //定義模式變量,濕度,溫度,煙霧變量bitBJ_LED1=1,BJ_LED2=1,BJ_LED3=1,BJ_LED4=1,BJ_LED5=1,BJ_LED6=1; //定義LED報警變量bitbdataFlagStartRH; //開啟讀取標志位ucharflag;//記錄當(dāng)前設(shè)置狀態(tài)uintcount; //計數(shù)變量//定時器0初始化voidTimer0_Init(){ ET0=1;//允許定時器0中斷 TMOD=0x11;//定時器工作方式選擇 TL0=0xB0; TH0=0x3C;//定時器賦予初值 TH1=0xD8; TL1=0xF0; ET1=1; TR0=1;//啟動定時器}//定時器0中斷voidTimer0_ISR(void)interrupt1using0{ ucharRHCounter; TL0=0xB0; TH0=0x3C;//定時器賦予初值 RHCounter++;if(RHCounter>=20) //定時到1秒{FlagStartRH=1; //開啟讀取ad值報警 RHCounter=0; //變量清零}}voidDelay1(uintj) //延時函數(shù),大約延時30us{uchari;for(;j>0;j--){ for(i=0;i<27;i++);}}voiddelay_ms(uintz)//延時函數(shù){ uintx,y; for(x=z;x>0;x--) for(y=121;y>0;y--); //約1ms}voidDelay_10us(void) //大約延時10us{uchari;i--;i--;i--;i--; i--;i--;} voidCOM(void) //溫濕度讀取函數(shù){uchari;for(i=0;i<8;i++) { U8FLAG=2; while((!DATA)&&U8FLAG++); Delay_10us(); Delay_10us(); Delay_10us(); U8temp=0;if(DATA)U8temp=1; U8FLAG=2; while((DATA)&&U8FLAG++); //超時則跳出for循環(huán) if(U8FLAG==1)break; //判斷數(shù)據(jù)位是0還是1 //如果高電平高過預(yù)定0高電平值則數(shù)據(jù)位為1 U8comdata<<=1; U8comdata|=U8temp;//0}//rof}////溫濕度讀取子程序////以下變量均為全局變量//溫度高8位==U8T_data_H//溫度低8位==U8T_data_L//濕度高8位==U8RH_data_H//濕度低8位==U8RH_data_L//校驗8位==U8checkdata//調(diào)用相關(guān)子程序如下//Delay();,Delay_10us();,COM();//ucharRH(void){//主機拉低18msDATA=0; Delay1(180);//原來為5 DATA=1; //總線由上拉電阻拉高主機延時20us Delay_10us(); Delay_10us(); Delay_10us(); Delay_10us(); //主機設(shè)為輸入判斷從機響應(yīng)信號 DATA=1; //判斷從機是否有低電平響應(yīng)信號如不響應(yīng)則跳出,響應(yīng)則向下運行 if(!DATA) //T! { U8FLAG=2; //判斷從機是否發(fā)出80us的低電平響應(yīng)信號是否結(jié)束 while((!DATA)&&U8FLAG++); U8FLAG=2; //判斷從機是否發(fā)出80us的高電平,如發(fā)出則進入數(shù)據(jù)接收狀態(tài) while((DATA)&&U8FLAG++); //數(shù)據(jù)接收狀態(tài) COM(); U8RH_data_H_temp=U8comdata; COM(); U8RH_data_L_temp=U8comdata; COM(); U8T_data_H_temp=U8comdata; COM(); U8T_data_L_temp=U8comdata; COM(); U8checkdata_temp=U8comdata; DATA=1; //數(shù)據(jù)校驗 U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp); if(U8temp==U8checkdata_temp) { U8RH_data_H=U8RH_data_H_temp; U8RH_data_L=U8RH_data_L_temp; U8T_data_H=U8T_data_H_temp; U8T_data_L=U8T_data_L_temp; U8checkdata=U8checkdata_temp; } return1; } else//傳感器不響應(yīng) { return0; }}/*****************************************************************文件名:液晶1602顯示.c*描述:該程序?qū)崿F(xiàn)了對液晶1602的控制。****************************************************************//*****************************************************************名稱:delay()*功能:延時,延時時間大概為140US。*輸入:無*輸出:無****************************************************************/voiddelay(){ inti,j; for(i=0;i<=10;i++) for(j=0;j<=2;j++);} /*****************************************************************名稱:enable(uchardel)*功能:1602命令函數(shù)*輸入:輸入的命令值*輸出:無****************************************************************/voidwrite_1602com(uchardel) //括號內(nèi)為輸入?yún)?shù),也就是指令{ P0=del; //輸入數(shù)據(jù) RS=0; //RS拉低 E=1; //EN拉高 delay(); //延時 E=0; //EN拉低 delay(); //延時}/*****************************************************************名稱:write(uchardel)*功能:1602寫數(shù)據(jù)函數(shù)*輸入:需要寫入1602的數(shù)據(jù)*輸出:無****************************************************************/voidwrite_1602dat(uchardel) //寫數(shù)據(jù){ P0=del; RS=1; E=1; delay(); E=0; delay();}/*****************************************************************名稱:L1602_init()*功能:1602初始化,請參考1602的資料*輸入:無*輸出:無****************************************************************/voidL1602_init(void){ write_1602com(0x38);//設(shè)置液晶工作模式,意思:16*2行顯示,5*7點陣,8位數(shù)據(jù) write_1602com(0x0c);//開顯示不顯示光標 write_1602com(0x06);//整屏不移動,光標自動右移 write_1602com(0x01);//清屏要放在最后 delay_ms(2);}voiddisplay() //顯示函數(shù){write_1602com(0x83); //選中第一行第三個位置write_1602dat(temperature%100/10+0x30);//將溫度數(shù)據(jù)取余100再除以10得到溫度的十位數(shù),加0x30得到該數(shù)字對應(yīng)的字符碼,用于液晶顯示write_1602dat(temperature%100%10+0x30);//同上write_1602com(0x8c); write_1602dat(humidity%100/10+0x30);write_1602dat(humidity%100%10+0x30);write_1602com(0xc3); //液晶的第一行開始地址是0x80,第二行開始是0x80+0x40,也就是0xc0write_1602dat(smog%100/10+0x30);write_1602dat(smog%100%10+0x30); write_1602com(0x85); //選中溫度顯示位置 write_1602dat(0xdf); //顯示溫度的符號度 }voiddisplay_1() //顯示設(shè)置界面{write_1602com(0x83); //選中位置,注釋略同上面的顯示函數(shù)write_1602dat(TH%100/10+0x30);write_1602dat(TH%100%10+0x30);write_1602com(0x8c);write_1602dat(TL%100/10+0x30);write_1602dat(TL%100%10+0x30);write_1602com(0xc3);write_1602dat(HH%100/10+0x30);write_1602dat(HH%100%10+0x30);write_1602com(0xcc);write_1602dat(HL%100/10+0x30);write_1602dat(HL%100%10+0x30);}voidwrite_string(uchar*str) //發(fā)送字符串函數(shù){while(*str){write_1602dat(*str);str++;}}/***按鍵函數(shù)***/voidKEY(){if(K1==0) //按鍵1按下{Delay1(200); //延時去抖if(K1==0) //再次判斷{ flag++; //模式變量加,也就是設(shè)置哪個報警值 if(flag==1) //設(shè)置溫度上限時{ write_1602com(0x80); //進入設(shè)置狀態(tài)顯示 write_string("TH:CTL:C"); //設(shè)置狀態(tài)第一行顯示 write_1602com(0xc0); //選中第二行 write_string("HH:%HL:%"); //設(shè)置狀態(tài)第二行顯示 write_1602com(0x85); //選中溫度顯示位置 write_1602dat(0xdf); //顯示度符號 write_1602com(0x8e); write_1602dat(0xdf); display_1(); //調(diào)用設(shè)置狀態(tài)時顯示溫濕度上下限數(shù)據(jù) write_1602com(0x84); write_1602com(0x0f); //顯示對應(yīng)位置 } elseif(flag==2) //設(shè)置下限 write_1602com(0x8d); elseif(flag==3) //選中哪個位置就哪個位置閃爍 write_1602com(0xc4); elseif(flag==4) write_1602com(0xcd); elseif(flag==5) { //設(shè)置煙霧報警值 write_1602com(0xc0); //選中第二行 write_string(""); //空顯示 write_1602com(0x80); //第一行 write_string("Sg:mg/m3"); //顯示煙霧報警值界面 write_1602com(0x83); //選中第一行 write_1602dat(SM/10+0x30); //顯示煙霧報警值 write_1602dat(SM%10+0x30); write_1602com(0x84); //煙霧報警值位置閃爍 } else //設(shè)置完最后一個報警值煙霧值后跳出設(shè)置界面 { write_1602com(0x80); //回復(fù)到正常測量模式 write_string("Te:CHu:%"); write_1602com(0xc0); if(bufang==1) write_string("Sg:mg/m3B"); else write_string("Sg:mg/m3"); write_1602com(0x85);write_1602dat(0xdf);display(); write_1602com(0x0c); flag=0; write_eeprom(); //將報警值保存到單片機內(nèi)部eeprom } while(!K1); //按鍵釋放,按鍵如果一直按下,取反后就一直是1,while一直是真就一直執(zhí)行后面的分號,什么時候按鍵松開,就會跳出這個循環(huán)}}if(K2==0) //按鍵2按下{Delay1(200);if(K2==0){switch(flag){ /*以下的程序就是判斷是設(shè)置哪個報警值,就讓哪個報警值加,同時顯示對應(yīng)的報警值*/ case1:TH++;if(TH>99)TH=TL+1;write_1602com(0x83);write_1602dat(TH/10+0x30);write_1602dat(TH%10+0x30);write_1602com(0x84);break; case2:TL++;if(TL>=TH)TL=0;write_1602com(0x8c);write_1602dat(TL/10+0x30);write_1602dat(TL%10+0x30);write_1602com(0x8d);break; case3:HH++;if(HH>99)HH=TL+1;write_1602com(0xc3);write_1602dat(HH/10+0x30);write_1602dat(HH%10+0x30);write_1602com(0xc4);break; case4:HL++;if(HL>=HH)HL=0;write_1602com(0xcc);write_1602dat(HL/10+0x30);write_1602dat(HL%10+0x30);write_1602com(0xcd);break; case5:SM++;if(SM>255)SM=0;write_1602com(0x83);write_1602dat(SM/100+0x30);write_1602dat(SM%100/10+0x30);write_1602dat(SM%10+0x30);write_1602com(0x85);break; }while(!K2); //按鍵釋放}}if(K3==0) //按鍵3按下,就是減按鍵{Delay1(200);if(K3==0){switch(flag){/*以下的程序就是判斷是設(shè)置哪個報警值,就讓哪個報警值減,同時顯示對應(yīng)的報警值*/ase1:TH--;if(TH<=TL)TH=99;write_1602com(0x83);write_1602dat(TH/10+0x30);write_1602dat(TH%10+0x30);write_1602com(0x84);break; case2:TL--;if(TL<0)TL=TH-1;write_1602com(0x8c);write_1602dat(TL/10+0x30);write_1602dat(TL%10+0x30);write_1602com(0x8d);break; case3:HH--;if(HH<=HL)HH=99;write_1602com(0xc3);write_1602dat(HH/10+0x30);write_1602dat(HH%10+0x30);write_1602com(0xc4);break; case4:HL--;if(HL<0)HL=HH-1;write_1602com(0xcc);write_1602dat(HL/10+0x30);write_1602dat(HL%10+0x30);write_1602com(0xcd);break; case5:SM--;if(SM<0)SM=255;write_1602com(0x83);write_1602dat(SM/100+0x30);write_1602dat(SM%100/10+0x30);write_1602dat(SM%10+0x30);write_1602com(0x85);break;}while(!K3);}} if(K5==0) //布防按鍵按下 { Delay1(200); if(K5==0&&flag==0) // { if(bufang==2||bufang==1) //布防狀態(tài)或者是報警狀態(tài)時 { bufang=0; //撤防 count=0; //變量清零 TR1=0; //關(guān)閉定時器 write_eeprom(); //將布防信息存儲到單片機內(nèi)部eeprom write_1602com(0xcf); //顯示空白 write_1602dat(''); } else //撤防狀態(tài)時按下按鍵 { TR1=1; //打開定時器 write_1602com(0xcf); //顯示字母Z,代表正在布防 write_1602dat('Z'); bufang=2; //布防狀態(tài)置2 } while(K5==0); } }}voidOnealarm() //報警函數(shù){

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論