【《基于單片機的溫濕度測量系統(tǒng)設(shè)計與實現(xiàn)》15000字(論文)】_第1頁
【《基于單片機的溫濕度測量系統(tǒng)設(shè)計與實現(xiàn)》15000字(論文)】_第2頁
【《基于單片機的溫濕度測量系統(tǒng)設(shè)計與實現(xiàn)》15000字(論文)】_第3頁
【《基于單片機的溫濕度測量系統(tǒng)設(shè)計與實現(xiàn)》15000字(論文)】_第4頁
【《基于單片機的溫濕度測量系統(tǒng)設(shè)計與實現(xiàn)》15000字(論文)】_第5頁
已閱讀5頁,還剩55頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

基于單片機的溫濕度測量系統(tǒng)設(shè)計與實現(xiàn)摘要對于人們的日常生活、生產(chǎn)工作活動而言,溫度和濕度都是兩項十分關(guān)鍵的環(huán)境因素,并且溫濕度二者之間彼此具有緊密的聯(lián)系,人類不會單一的僅受二者之中的某一者的一項,而是受到其共同影響與作用。在工業(yè)生產(chǎn)加工制造環(huán)境中,往往要求對于溫濕度情況進行實時監(jiān)察掌控,而在農(nóng)業(yè)領(lǐng)域也不例外,在開展種植活動時,也是需在此方面做好調(diào)控。人們能夠通過掌握所處工作與生活環(huán)境之下的溫濕度狀況,從而采取有效的方案作出反應(yīng),以此來實現(xiàn)對環(huán)境的合理改進。因此,各類溫濕度測量調(diào)控系統(tǒng)逐漸受到了人們的重視,開始以家電或是智能硬件等方式走進普通居民家中。將生活中人感受很舒暢時的具體溫濕度范圍參數(shù)值預(yù)先輸入到單片機內(nèi)。系統(tǒng)的數(shù)據(jù)采集分項是通過把DHT11溫濕度傳感器安放在室內(nèi),測量出對應(yīng)的數(shù)值,然后輸入至STC89C52單片機內(nèi),其后再運用1602顯示器將其輸出,單片機能夠把預(yù)先設(shè)好的參數(shù)值與測量出的數(shù)值之間加以對比,再按照比較結(jié)果進行判斷,通過程序分析整合發(fā)出對應(yīng)指令,以此來操控執(zhí)行模塊運作,連接或是斷開各個執(zhí)行模塊的繼電器,從而實現(xiàn)對干濕器、空調(diào)等機器的調(diào)控,起到調(diào)節(jié)當(dāng)前室內(nèi)溫度與濕度的作用。在上述流程的反復(fù)循環(huán)進行下,能夠讓溫濕度情況和預(yù)先設(shè)定的數(shù)值之間處于一致水平,而且在其超出可接受的誤差區(qū)域時,系統(tǒng)還會及時發(fā)出聲光警告?;趯φw系統(tǒng)中最為重要的單片機進行設(shè)計,以此實現(xiàn)對調(diào)控溫濕度的功能的改進。關(guān)鍵詞:STC89C52單片機;1602顯示器;DHT11溫濕度傳感器目錄TOC\o"1-2"\h\u20105目錄 I22823第1章緒論 13131.1研究意義 1275681.2國內(nèi)外發(fā)展概述 153671.3設(shè)計內(nèi)容和預(yù)期結(jié)果 227920第2章溫濕度測量系統(tǒng)方案設(shè)計 3325512.1系統(tǒng)總體設(shè)計 3305122.2系統(tǒng)方案的選擇 4194182.3本章小結(jié) 6123第3章硬件設(shè)計 7204573.1主控模塊 7189713.2顯示模塊 12206753.3溫濕度采集模塊 1443573.4鍵盤模塊 17306533.5報警模塊 1883323.6繼電器模塊 19217423.7存儲器模塊 2067313.8本章小結(jié) 245593第4章軟件設(shè)計 2598994.1主程序模塊程序設(shè)計 25303244.21602顯示模塊程序設(shè)計 27264394.3DHT11模塊程序設(shè)計 29164304.4鍵盤控制模塊程序設(shè)計 31311694.5本章小結(jié) 3213599第5章實驗測量結(jié)果及分析 3327635結(jié)論 3426912參考文獻 3525091附錄 375089程序 37PAGE30第1章緒論1.1研究意義溫度和濕度是兩個基礎(chǔ)的環(huán)境因素。在人們的日常生活過程中,只有通過對于周邊環(huán)境狀況變化的充分了解,及時采取有效的調(diào)節(jié)應(yīng)對方式,方可確保自身良好、健康的生存下去。例如,在養(yǎng)殖場中所有畜禽的生長發(fā)育是與溫濕度條件之間有著密不可分的聯(lián)系的,只有當(dāng)其處于適宜的環(huán)境條件之下,方可實現(xiàn)快速的成長,而且自身的品質(zhì)才會更佳,養(yǎng)殖者方可取得更高的效益。不論是在生物醫(yī)學(xué)、食品加工制造還是化工等行業(yè)領(lǐng)域之中,對于溫濕度的實施監(jiān)控與調(diào)節(jié)均是十分關(guān)鍵的一項工作。總而言之,不論是在平日的生活之中,亦或是在工農(nóng)業(yè)的生產(chǎn)活動之中,都是無法與周邊環(huán)境溫濕度的了解控制工作相脫離開來的。所以,在此方面加強研究與探索有著十分深刻的現(xiàn)實內(nèi)涵??紤]到傳感器可以把各類物理、化學(xué)、生物方面的數(shù)值轉(zhuǎn)換成為電信號的形式,讓人們能夠通過計算機來達成自動與智能化測量與監(jiān)控。傳感器大多運用在測量和控制系統(tǒng)之中,其性能的優(yōu)劣會對系統(tǒng)功能是否能夠充分發(fā)揮作用帶來較大影響。所以,應(yīng)當(dāng)充分了解熟知各類傳感器的結(jié)構(gòu)構(gòu)造、內(nèi)在原理與性能指標(biāo),基于對傳感器的全面掌握之后,以此來使其與信息通信、處理加以銜接融合,讓其具適應(yīng)更多的應(yīng)用場景,能夠獲得更為廣泛的運用。目前在國內(nèi),溫濕度傳感器研究進展較快,而且所投入實際使用的領(lǐng)域也十分廣闊,展望未來也具有極大的研發(fā)應(yīng)用前景,是一項值得大力投入人力、物力和財力進行研究探索的課題。為使得對于傳感器有更加深入的理解,特別是對于溫濕度傳感器實行擴展性研究,依照及時、準(zhǔn)確等原則開展了相應(yīng)的設(shè)計[1]。本篇文章是立足于單片機STC89C52來實現(xiàn)對于溫濕度測控系統(tǒng)的一系列設(shè)計規(guī)劃的,其中主要所使用的傳感器為DHT11,由其來實現(xiàn)對于溫濕度數(shù)據(jù)的收集處理,并且還有著測量準(zhǔn)確度高、電路構(gòu)成簡單、數(shù)據(jù)傳遞簡便、可適應(yīng)使用的范圍廣等優(yōu)勢。此外,將其和控制電路連接之后,便能實現(xiàn)對于閾值的設(shè)置,從而讓溫濕度參數(shù)能夠控制在預(yù)設(shè)范圍之中,而無需人工加以調(diào)節(jié)。1.2國內(nèi)外發(fā)展概述智能溫度傳感器最初研發(fā)誕生于上世紀(jì)90年代中期,是集合了微電子、計算機與自動測試等多項技術(shù)加以有機整合而產(chǎn)生的。當(dāng)前,全球范圍內(nèi)已經(jīng)有在此方面研發(fā)出了多種類型的產(chǎn)品。此種傳感器主要構(gòu)成元素有溫度傳感器、A/D轉(zhuǎn)換器、信號處理器、存儲器與接口電路。部分產(chǎn)品還有裝設(shè)多路選擇器、中央控制器、RAM與ROM。其功能是,可以實現(xiàn)對當(dāng)前測得溫度信息的對外輸出,并適應(yīng)配合各類微控制器發(fā)出指令,而且能夠利用軟件來達成測試功能等[2]。要想對溫度與濕度進行有效測量,主要需使用溫濕度傳感器。在以往,溫濕度的測量并未被整合在一體,而伴隨著科學(xué)技術(shù)的日益更新發(fā)展,以及人們生活需求的日漸豐富,開始研發(fā)制造出了能夠同時測量溫濕度的傳感器。溫度傳感器的發(fā)展演變大致歷經(jīng)了下述三個時期:分立式、模擬集成式、智能集成式。當(dāng)前,全球中有關(guān)于溫度傳感器的創(chuàng)新研發(fā)工作已經(jīng)慢慢地從模擬式朝著數(shù)字化、集成式再朝著智能化、網(wǎng)絡(luò)化的路徑不斷演變,而溫濕度傳感器亦是通過上述一系列革新迭代之后開始邁向了數(shù)字智能化的階段。1.3設(shè)計內(nèi)容和預(yù)期結(jié)果1.3.1主要完成內(nèi)容(1)制定系統(tǒng)整體功能設(shè)計方案;(2)落實好設(shè)計方案原理圖的編制;(3)處理好硬件電路的焊接與調(diào)試;(4)實現(xiàn)對軟件系統(tǒng)的設(shè)計及編譯。1.3.2預(yù)期結(jié)果當(dāng)軟件與硬件之間正常連接且電路完善的狀況下,能夠在顯示屏中查看到通過軟硬件編譯處理后的相應(yīng)數(shù)據(jù)信息,而在此顯示出的溫濕度數(shù)據(jù)超出了預(yù)先設(shè)下的數(shù)值范圍之時,系統(tǒng)就會發(fā)出警告,并驅(qū)動繼電器開始工作:溫度過高時風(fēng)扇開始轉(zhuǎn)動;溫度過低時加熱片開始工作;濕度過高時干燥機(風(fēng)扇代替)開始工作;濕度過低時加濕器開始工作。當(dāng)溫濕度值沒有超過預(yù)設(shè)的溫濕度范圍,測系統(tǒng)接收下一次的溫濕度采集值。第2章溫濕度測量系統(tǒng)方案設(shè)計2.1系統(tǒng)總體設(shè)計系統(tǒng)需要具備以下四項功能:(1)能夠?qū)λ幁h(huán)境的溫濕度信息做到及時采集,通過單片機來對數(shù)據(jù)信息加以反復(fù)測驗、處理以及輸出顯示,要能夠做到對于溫濕度的持續(xù)性測量;(2)要能夠在超出范圍時立即報警并驅(qū)動繼電器工作;(3)所有的檢測設(shè)備都應(yīng)當(dāng)具備良好的靈敏性、穩(wěn)定性以及抗干擾性;(4)軟件系統(tǒng)應(yīng)當(dāng)具有能夠完整、全面的收集數(shù)據(jù),對數(shù)據(jù)加以處理,操作便捷以及運行速度較快等功能。設(shè)計時需達成的技術(shù)指標(biāo):(1)測量范圍。濕度20-90%RH,溫度0-50℃;(2)測量精度。濕度±5%RH,溫度±2℃;(3)分辨率:濕度1%RH,溫度1℃。溫濕度傳感器能夠采集到相應(yīng)信號,然后再將其轉(zhuǎn)化成為數(shù)字信號,接著使用單片機實行數(shù)據(jù)分析與處理工作,同時將目前溫濕度顯示出來。系統(tǒng)中涵蓋的溫濕度采集程序、顯示程序、按鍵程序及主程序等。本設(shè)計能夠基于按鍵操作,手動調(diào)控溫濕度的最高和最低值。傳感器把測量到的數(shù)值傳遞至單片機中,若是該數(shù)值超出了預(yù)設(shè)范圍,則會控制蜂鳴器發(fā)出警告與啟動繼電器。溫濕度監(jiān)控系統(tǒng)原理圖如圖2.1所示。顯示器顯示器溫濕度傳感器單片機繼電器電源報警器圖2.1溫濕度監(jiān)控系統(tǒng)原理圖2.2系統(tǒng)方案的選擇2.2.1單片機的選擇方案一:使用AT89C51單片機。其具有下述基礎(chǔ)功能:32KB閃存,容量為512B的隨機存取存儲器,32位I/O線,3個16位定時器,1個六矢量兩級中斷體系結(jié)構(gòu)、全雙工串行口、片上振蕩器和時鐘電路。此外,該單片機是采取靜態(tài)邏輯結(jié)構(gòu),能夠?qū)⒐ぷ黝l率降低至0,同時還能夠在兩種軟件下進行調(diào)整,以達到節(jié)電的作用。當(dāng)處于空閑模式下,會將CPU停止運作,此時會依舊支持RAM、定時器、串行端口以及中斷系統(tǒng)持續(xù)運行。在處于斷電模式知識,會將RAM內(nèi)容保存下來,不過會把內(nèi)存振蕩器凍結(jié),且不會再使用全體其它的芯片功能,直至下一次外部中斷或是硬件發(fā)生重置[3、4]。方案二:使用STC89C52單片機。其屬于一種CMOS8位微控制器,是由STC公司所研發(fā)制作的,不僅功耗率較低,而且釋放性能非常高,有著十分輕巧的8位CPU以及ISPFlash,能夠為許多嵌入型控制系統(tǒng)提供高度便捷、靈活且合理的處理方案,其內(nèi)部使用的為MCS-51內(nèi)核,不過實行了較多的優(yōu)化處理,讓此芯片擁有普通51單片機所不具有的功能作用。其具有下述基礎(chǔ)功能:8KB閃存,容量為512B的隨機存取存儲器、32位I/O口線,看門狗定時器(WDT),內(nèi)置4KBEEPROM,MAX810復(fù)位電路,3個16位定時器,4個外部中斷,一個7向量4級中斷結(jié)構(gòu),全雙工串行口。此外,該單片機是采取靜態(tài)邏輯結(jié)構(gòu),能夠?qū)⒐ぷ黝l率降低至0,同時還能夠在兩種軟件下進行調(diào)整,以達到節(jié)電的作用。其在空閑、斷電模式下的運行方式與方案一中所用單片機相同。最大運行頻率為35兆赫,6T/12T可選[5、6],而且其還具有價格低廉實惠的優(yōu)勢?;趯Ρ疚南到y(tǒng)中的各項技術(shù)需求與經(jīng)濟性的考量,最終決定選取方案二。2.2.2顯示器的選擇方案一:使用數(shù)碼管。按照其驅(qū)動模式的差異,又可細分成靜態(tài)型與動態(tài)型兩種。(1)靜態(tài)顯示驅(qū)動其又可稱作直流驅(qū)動,具體是指所有數(shù)碼管的全部段碼都是通過某個單片機的I/O接口實現(xiàn)運行,又或是利用譬如BCD碼譯碼器來實現(xiàn)驅(qū)動。其所具有的優(yōu)勢為,編程復(fù)雜度不高,顯示呈現(xiàn)的整體亮度較高;缺陷則是需要占用較多數(shù)量的I/O接口,在具體運用過程中必須要配置譯碼驅(qū)動器來輔助其實現(xiàn)驅(qū)動,因此使得硬件電路的復(fù)雜程度較高。(2)動態(tài)顯示驅(qū)動這是單片機中運用最為普遍的一類顯示形式,其主要是把全部的數(shù)碼管的各個顯示筆劃的同名端連接成為一體,此外能夠給所有數(shù)碼管的公共電極增設(shè)位選通控制電路,其中位選通是通過彼此相互獨立的I/O線來加以控制,在單片機將字形碼輸出之后,全部數(shù)碼管均會收到同樣的字形碼信息,不過到底會是哪一個數(shù)碼管來講字形顯示出來,主要是由單片機對位選通公共端電路的控制所決定,因此往往只用把需要作出顯示的數(shù)碼管選通控制開啟,其便會顯現(xiàn)出對應(yīng)的信息,而未選通的數(shù)碼管則不會亮起。利用分時輪流操控每個數(shù)碼管的公共端,便能實現(xiàn)對每個數(shù)碼管依次控制顯示,這即為所謂的動態(tài)驅(qū)動。當(dāng)前,由于數(shù)碼管具有亮度較高、運行電壓低、功耗量低、規(guī)模較小、使用壽命較長、抗沖擊性強、穩(wěn)定性良好等優(yōu)勢,因此而獲得了普遍的運用,不過其在用于溫濕度的顯示時存在諸多不便,并且電路連線頗為復(fù)雜[7]。方案二:使用1602液晶屏。其原理為,借助液晶的物理性質(zhì),在通電之后便會進行顯示,從而便能將圖形顯示在屏幕之中。此型號的顯示屏有著質(zhì)量較輕、運行電壓低、功能量不高、體積規(guī)模較小、不會產(chǎn)生敷設(shè)、平面直角顯示、畫面穩(wěn)定性高且不會發(fā)生閃爍等優(yōu)勢,此外,同時還有著可視面積較大、顯示效果較佳、分辨率較高、防抗擾性能較強等特點,比較適宜運用在對于字母、數(shù)字以及符號等類型的信息的顯示場景中,并且也不用拓展太多的外部電路,能夠使用單片機直接實現(xiàn)其顯示功能[8]。相較之下,方案二不僅在質(zhì)量、體積以及功耗水平方面都十分突出,同時還咋電路設(shè)計上更具優(yōu)勢,為此最終決定選取方案二。2.2.3溫濕度傳感器的選擇DHT11電阻式溫濕度傳感器:是一種已經(jīng)對數(shù)字信號輸出功能加以校正的復(fù)合式傳感器,其融合了專門的數(shù)據(jù)采集與溫濕度傳感技術(shù),能夠充分保障產(chǎn)品具備良好的穩(wěn)定運行能力與較長的使用壽命。其分別包含了一個電阻式測濕與NTC測溫組件,而且和一個高性能8位單片機加以接通。所以,此產(chǎn)品具備十分優(yōu)異的性能、快速的反應(yīng)性、十分強勁的抗干擾功能,同時還在市場上同類型產(chǎn)品中占有性價比優(yōu)勢。此類傳感器均會在高精度的濕度校正室內(nèi)實行校正處理,處理后的參數(shù)通過程序的模式存儲與OTP內(nèi)存之中,當(dāng)傳感器在開展對于檢測信號的處理操作時,便會調(diào)取使用到這些參數(shù)。其采取的為單線制串行輸出接口,能夠讓系統(tǒng)集成更為看簡單、迅速、便捷。由于具有體積小、低功能的特征,促使其已然成為各種不同應(yīng)用場景下的最優(yōu)選項,哪怕是處于十分嚴(yán)苛的環(huán)境下依然可發(fā)揮出不俗的應(yīng)用效果[9]。產(chǎn)品參數(shù):可以實現(xiàn)對溫濕度的同時檢測。對外輸出的信號為數(shù)字型。

(3)采取的是單總線結(jié)構(gòu)輸出,能夠更好的減少用戶控制器對于I/O口的占用數(shù)量。(4)特殊的單總數(shù)據(jù)傳輸線協(xié)議使得在進行數(shù)據(jù)讀取的時候更為便捷、易于操作。

(5)全部校準(zhǔn)。采取8位二進制編碼。

(6)40bit二進制數(shù)據(jù)輸出。溫濕度整數(shù)與小數(shù)均為1Byte。濕度則是高16位。最后1Byte為校驗和。

(7)可實現(xiàn)持續(xù)穩(wěn)定的運作,功耗低。

(8)4引腳,安裝簡單,尺寸小。

(9)各型號引腳完全可以交換。外型與引腳排列如圖2.2:正面(有通氣孔一面)看過去引腳依次是VCC、Dout、NC、GND[10]。圖2.2DHT11溫濕度傳感器外型2.3本章小結(jié)本章主要分為兩部分,一部分介紹設(shè)計的總體思路,另一部分介紹主要元器件的選型,根據(jù)設(shè)計的思路以及需要的功能來確定所需要的性價比最高的元器件。選取STC89C52單片機和LCD1602液晶顯示屏,傳感器選用DHT11數(shù)字溫濕度傳感器。PAGE30硬件設(shè)計本文所設(shè)計的硬件系統(tǒng)大致包括了主控、顯示、溫濕度采集、鍵盤、報警以及繼電器模塊與存儲器模塊等。3.1主控模塊以STC89C52單片機作為主控模塊,利用DHT11將收集獲取的數(shù)字信號利用單片機傳遞至顯示器中,從而實現(xiàn)對此時此刻溫濕度具體數(shù)值的顯示。本設(shè)計方案能夠基于手動操控的方式來調(diào)整預(yù)設(shè)溫濕度的最高和最低值,若是當(dāng)溫濕度數(shù)據(jù)超出此預(yù)設(shè)的區(qū)間范圍,那么系統(tǒng)就會報警,蜂鳴器發(fā)出聲響,并伴隨著繼電器工作。使所測環(huán)境的溫濕度處于預(yù)定范圍內(nèi)。3.1.1STC89C52單片機的引腳功能STC89C52單片機的引腳圖如圖3.1所示。圖3.1STC89C52單片機引腳圖⑴主電源引腳Vcc(40腳):接+5V電源Vss(20腳):接地通常情況下,此兩者中間需要連接電容以此進行去耦與濾波。⑵外接晶體引腳XTAL1(19腳):連接外部晶振的其中某個引腳。其在單片機之中,屬于一個反向放大器的輸入寬口,組成片內(nèi)振蕩器。在運用外部振蕩器的時候,這一引腳需要做接地處理。XTAL2(18腳):接通外部晶振的另外一處引腳。與片內(nèi)接反向放大器輸出端口以及內(nèi)側(cè)時鐘電路的輸入端口。在運用外部振蕩器之時,該引腳需要與其輸出端口進行連接。⑶控制信號線RST/VPD(9腳):復(fù)位信號輸入端。在單片機處于斷連或是復(fù)位階段時,會接通內(nèi)部隨機存取存儲器的預(yù)備電源的輸入端口。ALE/PROG(30腳):地址鎖存允許/編程脈沖輸入。使用ALE鎖存自P0口輸出的低8位地址;在實行片內(nèi)EPROM程序編制的時候,脈沖從此處通入。PSEN(29腳):外儲存器讀選通信號,當(dāng)處于低電平狀態(tài)下之時可發(fā)揮作用。EA/VPP(31腳):訪問外儲存器允許/編程電壓輸入。當(dāng)EA處于高電平狀態(tài)下之時,會向內(nèi)儲存器發(fā)出訪問;當(dāng)處于低電平狀態(tài)下之時,便會向外儲存器發(fā)出申請。在實行EPROM程序編制的時候,這一引腳需要連接21V的電壓。⑷多功能I/O口引腳8052單片機中有設(shè)置四個I/O接口(P0~3),且每個I/O口線均能夠相對獨立的作為輸入/出接口來進行使用:P0口(32~39腳)——雙向口(三態(tài)),能夠充當(dāng)輸入或者是輸出端口,能夠操控8個LSTTL。在具體運用過程中,一般會將其用作分時地址或者是數(shù)據(jù)總線口,在實行外部程序或者是外儲存器地址檢索的時候,低8位地址和數(shù)據(jù)總線分時便會運用此接口,具體流程為:先把低8位地址信息傳遞至P0口,基于地址鎖存信號的下降側(cè)把目標(biāo)信息鎖定在鎖存器之后,然后再充當(dāng)數(shù)據(jù)總線口線來實行對數(shù)據(jù)信息的輸入或者是輸出操作。P1口(1~8腳)——準(zhǔn)雙向口(三態(tài)),其所能夠操控的LSTTL數(shù)量僅為P0的1/2。將其用作輸入線路使用的時候,口鎖存器一定要讓單片機最先輸入“1”,每位均能夠編程作為輸入/出線。P2口(21~28)——準(zhǔn)雙向口(三態(tài)),能夠操控的LSTTL數(shù)量與P1一致,能夠充當(dāng)輸入/出口進行使用,在具體運用過程中,大多是用作地址總線高8為,和P0扣一同構(gòu)成16位地址總線,主要的功能作用是對外儲存器接口電路實行尋址操作。P3口(10~17腳)——準(zhǔn)雙向口(三態(tài)),能夠操控的LSTTL數(shù)量與P2一致,具有兩種功能,當(dāng)其運用第一功能時,則和P1相同[11];而在運用第二功能的時候,每一位都有特定用處,其特殊用處如表3.1所示:引腳號復(fù)用功能P3.0RXD(串行輸入口)P3.1TXD(串行輸出口)P3.2(外部中斷0)P3.3(外部中斷1)P3.4T0(定時器0的外部輸入)P3.5T1(定時器1的外部輸入)P3.6(外部數(shù)據(jù)存儲器寫選通)P3.7(外部數(shù)據(jù)存儲器讀選通)表3.1P3口引腳復(fù)用功能3.1.2STC89C52單片機的控制接口其中的P0口與顯示器進行連接,P1.2、P1.3依次接通液晶的RS、EN腳,以此實現(xiàn)對顯示器的有效操控。鍵盤模塊的操控接口為P2,且P2.2與設(shè)置進行連接,對其按壓一次便表示進入到溫濕度警告范圍的設(shè)置功能,此時可以實行對溫度最高值的設(shè)置,再按壓一次,便可預(yù)設(shè)溫度最低值,然后再進行一次按壓,可實行濕度的最高值設(shè)定,再按壓一次,可進行最低濕度值的設(shè)定,四個模式依次往復(fù)。P2.0、P2.1分別是對溫濕度的閾值進行減加控制的。P2.3是設(shè)置好后進行確認(rèn)的。P1.7與DHT11的數(shù)據(jù)接口相連。詳細接線情況可參照圖3.19。3.1.3單片機復(fù)位電路主要包括了上電自動、按鍵手動以及看門狗強制復(fù)位幾種類型,前兩種比較常見,其各自的電路圖可見下圖3.2。(a)上電復(fù)位(b)按鍵脈沖復(fù)位(c)按鍵電平復(fù)位圖3.2單片機復(fù)位電路在本設(shè)計的系統(tǒng)復(fù)位模塊之中,所使用的是上電復(fù)位類型。其中,電容設(shè)于上方連接高電平,電阻設(shè)于下方進行接地,中部則是RST。此種類型的復(fù)位電路即為高電平復(fù)位,具體的運作原理為:在接通電源之后,電容兩側(cè)便等同于是處于短路狀態(tài),因此RST引腳處屬于高電平,其后電源能夠經(jīng)過電阻來實現(xiàn)對電容的電能供應(yīng),這時RST端的電壓值會逐漸降低,當(dāng)降低到一定水平之時,就轉(zhuǎn)變成為低電平,此時單片機會啟動運作。具體的電路圖可見下圖3.3。圖3.3復(fù)位電路RST保持兩個機器周期以上的高電平時自動復(fù)位。3.1.4單片機時鐘電路時鐘往往是通過兩類方式形成,一類為內(nèi)部方式,還有一類為外部方式,對應(yīng)的電路圖可見下圖3.4。(a)內(nèi)部方式(b)外部方式圖3.4單片機時鐘電路本文的設(shè)計中選取的是內(nèi)部時鐘,主要借助12兆赫晶振與30皮法電容來構(gòu)成相應(yīng)的電路,可見下圖3.5。圖3.5時鐘電路3.1.5單片機的上拉電阻從本質(zhì)上來看,排阻便是通過8個電阻來構(gòu)成的,某一段全都連接成一個整體,其在電路之中主要發(fā)揮著“上拉”的效果,因此也被稱作上拉電阻。所謂的上拉,即是指把尚且無法確定的信號利用一個電阻固定在高電平,此時電阻還會發(fā)揮著一定的限流作用,而下拉的原理與之相反。上拉的目的是向設(shè)備中輸入電流,而下拉則是將電流輸出,且電流的強弱程度主要取決于電阻值的高低,并未存在任何嚴(yán)格區(qū)別,在用于漏極開路輸出型電路之中時,在提升電流或者是電壓方面的效果有一定的局限性。通常在剛開始接通電源之時,端口處的電壓尚且處于不穩(wěn)定的狀態(tài),為使其變?yōu)楦唠妷夯蚴堑碗妷旱姆€(wěn)定狀態(tài),那么就需要使用上拉或者是下拉電阻。某些芯片內(nèi)有安裝上拉電阻,因此外部便不需要再設(shè)置此電阻。不過也存在一些開漏的,那么外部就一定要裝設(shè)此電阻。圖3.6單片機的上拉電阻3.2顯示模塊本設(shè)計中所使用的為1602液晶屏,各個參數(shù)細節(jié)可見上文的2.2.2部分。實物圖可見下圖3.7。圖3.71602顯示屏3.2.11602顯示屏的引腳功能使用的為14腳(無背光)或16腳(帶背光)接口[12],各個引腳說明可見下表3.2所示。編號符號引腳說明編號符號引腳說明1VSS電源地9D2數(shù)據(jù)2VDD電源正極10D3數(shù)據(jù)3VL液晶顯示偏壓11D4數(shù)據(jù)4RS數(shù)據(jù)/命令選擇12D5數(shù)據(jù)5R/W讀/寫選擇13D6數(shù)據(jù)6E使能信號14D7數(shù)據(jù)7D0數(shù)據(jù)15BLA背光源正極8D1數(shù)據(jù)16BLK背光源負(fù)極表3.21602顯示屏引腳功能表3.2.21602顯示屏與單片機的接口其第一、二個腳分別接通電路板的地面與電源。第三腳則設(shè)置為顯示器對比度調(diào)節(jié)端口,接在兩個電阻之間,通過兩個電阻之間的電壓確定顯示屏的對比度,兩個電阻一個接電源,一個接地。第四腳是寄存器選擇端,接單片機的I/O口P1.2,當(dāng)處于高電平的時候便選取數(shù)據(jù)寄存器,在處于低電平狀態(tài)下的時候則選取指令寄存器。第5個腳設(shè)置為RW讀寫信號端,其做接地處理,實現(xiàn)低電平狀態(tài)下的寫操作。第6個腳為E/EN端,與P1.3進行連接,當(dāng)處于高電平狀態(tài)下則會實行信息的讀取,在處于低電平狀態(tài)下時則會按照相應(yīng)的指令實行操作。第7至14腳為D0~D7,是8位雙向數(shù)據(jù)端,接單片機I/O口P0,進行數(shù)據(jù)傳輸最終顯示在顯示器上。第15與16腳為空腳或背燈電源,前者背光正極和電源進行連接,后者背光負(fù)極則是和地面接通。如下圖3.8所示,為對應(yīng)的接口電路。圖3.81602顯示屏與單片機接口電路原理圖3.2.31602顯示屏指令說明其控制器中一共存在11條指令,詳細情況可見下表3.3。序號指令RSR/WD7D6D5D4D3D2D1D01清顯示00000000012光標(biāo)返回000000001*3置輸入模式00000001I/DS4顯示開/關(guān)控制0000001DCB5光標(biāo)或字符移位000001S/CR/L**6置功能00001DLNF**7置字符發(fā)生存貯器地址0001字符發(fā)生存貯器地址8置數(shù)據(jù)存貯器地址001顯示數(shù)據(jù)存貯器地址9讀忙標(biāo)志或地址01BF計數(shù)器地址10寫數(shù)到CGRAM或DDRAM10要寫的數(shù)據(jù)內(nèi)容11從CGRAM或DDRAM讀數(shù)11讀出的數(shù)據(jù)內(nèi)容表3.31602顯示屏內(nèi)部控制3.3溫濕度采集模塊本設(shè)計采用DHT11溫濕度傳感器,產(chǎn)品詳情簡介在2.2.3章節(jié)。3.3.1DHT11電氣特性可見下表3.4。其中,VDD為5V,T為25攝氏度。采取樣本的時間間隔不可超過一秒。參數(shù)條件mintypmax單位供電DC355.5V供電電流測量0.52.5mA平均0.21mA待機100150uA采樣周期秒1次 表3.4DHT11電氣特性3.3.2引腳與接口(1)引腳介紹:Pin1(VDD):接3~5.5V電壓Pin2(DATA):串行口,單總線Pin3(NC):空腳Pin4(GND):接地(2)接口說明:當(dāng)連接線不超過20m長的時候,可使用5K上拉電阻,而若是超過20m之時,則需要按照具體狀況選取適宜的電阻。接口圖可見下圖3.9。單片機中的P1.7能夠用作收發(fā)串行數(shù)據(jù),也就是充當(dāng)數(shù)據(jù)口,與傳感器中的Pin2加以接通。圖3.9DHT11接口圖3.3.3DHT11的傳輸時序當(dāng)主機將開始信號發(fā)出之后,在延時等待約為30微秒左右以后,便會讀取到DH11T發(fā)出的反饋信號,若是讀取總線處于低電平狀態(tài),則表示有作出反饋,而在信號發(fā)出之后,就會把總線拉高,做好發(fā)送信息的輸出準(zhǔn)備,每一字節(jié)的數(shù)據(jù)都會從低電平開始,詳細流程可見下圖3.10。若是讀取到的信號屬于高電平,則表明DH11T并未作出反饋,此時需要對線路加以檢查,查看其有否存在連接異常的情況[13]。圖3.10DHT11通訊過程主機復(fù)位信號和DHT11響應(yīng)信號如圖3.11所示。圖3.11主機復(fù)位與DHT11響應(yīng)信號圖數(shù)字“0”信號電平信號如圖3.12所示。圖3.12數(shù)字0信號電平變化圖數(shù)字“1”信號電平變化圖如圖3.13所示。圖3.13數(shù)字1信號電平變化圖3.4鍵盤模塊本設(shè)計由于按鍵使用數(shù)量不多,所以使用獨立按鍵,比較方便簡單。(1)總開關(guān):主要控制硬件系統(tǒng)的開/關(guān)機,此次設(shè)計選取的為自鎖開關(guān)(詳細可見下圖3.14),其具有機械鎖定的功能,在將其按下之后,然后松開手,此時按鈕并不會充分彈起,而是進入到了鎖定狀態(tài),若是再按壓一次,此時解鎖方會完全跳開。經(jīng)常會斷開的一腳連接DC電源接口,另外的端則與VCC相連。(2)數(shù)字設(shè)置鍵:S1是模式選擇鍵,按1次進入溫濕度設(shè)置模式,并設(shè)置溫度最大值,按2次是設(shè)置溫度最小值,按3下是設(shè)置濕度最大值,按4下是設(shè)置濕度最小值。S2和S3只有在溫濕度的設(shè)置模式下即按下S1才有效,分別為閾值增加和閾值減小。S4是OK鍵,即是設(shè)置完所需的閾值后按下S4,系統(tǒng)進行工作。鍵盤模塊的電路圖如圖3.15所示。圖3.14自鎖開關(guān)電路圖3.15按模塊電路3.5報警模塊此次設(shè)計采取的為壓電式蜂鳴器,利用STC89C52的一根I/O口線來控制驅(qū)動器發(fā)出警示聲音。其驅(qū)動電流為10mA,且單片機的I/O口輸出電流相對較低,因此使用9012三極管來把電流做放大處理,從而確保蜂鳴器可以正常工作。3.5.1蜂鳴器電路連接報警模塊主要包括了電阻、三極管以及蜂鳴器三大部分,其中三極管的作用是將電流放大,從而操控蜂鳴器發(fā)出聲音。電阻的作用則是將三極管基極電壓加以降低,其中一側(cè)接通單片機的P3.5,另外一側(cè)和三極管基極相連,在單片機采集到的溫濕度信息超過了預(yù)先設(shè)定的數(shù)值范圍之時,便會將P3.5接口設(shè)置成低電平,此時三極管與之連通,催動蜂鳴器運作,若是溫濕度信息尚且處于合理范圍以內(nèi),那么就會將P3.5接口設(shè)置成高電平,三極管斷開,蜂鳴器此時就不會運作。對應(yīng)的電路圖可見下圖3.16所示。圖3.16蜂鳴器與單片機連接圖3.6繼電器模塊繼電器屬于一類電控制元件,在輸入量的變動情況符合某一標(biāo)準(zhǔn)時,就會在電氣輸出電路之中讓被控量發(fā)生預(yù)先設(shè)定好的階躍性變動。其存在輸入與輸出回路間的某種聯(lián)系,能夠借助小電流來操控大電流,因此其在電路之中主要發(fā)揮著自動調(diào)整、安全防護、轉(zhuǎn)接電路等功能。3.6.1繼電器主要作用主要作用(1)放大:例如靈敏式和中間繼電器等,能夠利用相對更小的控制量來實現(xiàn)對于更大功率電路的調(diào)控。(2)綜合信號:若是存在數(shù)個控制信號依照標(biāo)準(zhǔn)模式傳遞進多繞組繼電器之中的時候,能夠通過比較分析處理,來取得預(yù)先設(shè)定好的控制效果。(3)自動調(diào)控與監(jiān)測:譬如,自動設(shè)備中安裝的繼電器可以和其它電器元件一同構(gòu)成程序控制線路,以此來做到自動化運作。(4)擴寬控制范圍:例如當(dāng)多觸點繼電器操控信號到達某一限度值時,能夠根據(jù)觸點組的各種模式,同時實現(xiàn)對于多條線路的換連、開閉與連接。3.6.2繼電器的基本結(jié)構(gòu)和工作原理其運作原理為,基于電磁效應(yīng),于線圈兩端施加電壓,線圈之中存在電流通過,就此發(fā)生了電磁效應(yīng),此時銜鐵會受到電磁作用力以此抵消掉彈簧的彈性作用力轉(zhuǎn)而被吸往鐵芯,進而構(gòu)成了回路。在斷開電源之后,電磁力就會消散,銜鐵又會回到原位,形成另外一個回路。這樣銜鐵貼到不同的地方,形成不同回路,從而達到了在電路中的導(dǎo)通、隔斷的目的。繼電器通常設(shè)有兩條電路,分別是低壓控制與高壓工作電路[14]。在繼電器之中,其線圈與接線端子之間是處于彼此獨立、互補作用的關(guān)心,而其觸點只會起到等同于開關(guān)的作用。如圖3.17所示。圖3.17繼電器原理圖3.7存儲器模塊本設(shè)計采用24C02EEPROM存儲器。3.7.124C02工作原理1、24C02的容量為2Kb,即代表其最大能夠容納255個字節(jié)的數(shù)據(jù)信息;2、ATMEl24C02有32頁,在每一頁之中均能夠存儲8個字節(jié)的信息;3、24C02存在兩類運作形式:(1)字節(jié)寫入:既能夠在隨意的一處地址之中寫入一個字節(jié)的數(shù)據(jù),也能夠做到在某一處地址之中不間斷的寫入多個字節(jié),并且不用進行翻頁;(2)頁寫入:在這一運作形式下,每一頁能夠存入8個字節(jié)的信息量,而當(dāng)超過8的時候,就會將之前存儲的信息覆蓋掉,而這一情況也常被人們稱為“翻轉(zhuǎn)”。若是在將一頁全部寫滿之后,想把剩下的信息存放于下一頁,頁指針需要自己來設(shè)定[15]。3.7.224C02A引腳配置及功能24C02A引腳圖如圖3.18所示。圖3.1824C02引腳圖引腳功能如表3.5所示。引腳名稱功能A0、A1、A2器件地址選擇SDA串行數(shù)據(jù)/地址SCL串行時鐘WP寫保護Vcc+1.8V-6.0V工作電壓Vss地表3.524C02A引腳功能表SCL:其主要作用在于把正邊緣時鐘信息傳遞到每個端口EEPROM設(shè)備之中。SDA:主要功能作用為,實現(xiàn)對串行數(shù)據(jù)傳遞的雙向引腳。此引腳只通過開路漏極操控,能夠和任意數(shù)目的其他開路集電極/漏極進行設(shè)備的連通。A2、A1、A0:為AT24C01A硬接線的地址輸入。這三個輸入引腳在運用到多元件級聯(lián)的時候進行對應(yīng)地址的設(shè)置,且在其處于懸空狀態(tài)下默認(rèn)設(shè)為0。由于本文設(shè)計僅僅存在一處24C02A被總線尋址,因此上述三個引腳均處于懸空或者是接地的狀態(tài)。WP:AT24C02A設(shè)有寫保護引腳來實現(xiàn)對硬件中數(shù)據(jù)信息的保護。當(dāng)其處于接地狀態(tài)下時,可進行正常讀或?qū)懖僮鳌T谂cVcc接通之后,全部信息數(shù)據(jù)均會受到寫保護,此時便只能實行讀操作。3.7.324C02A電路連接24C02A的SCL和SDA引腳接在單片機P1.0和P1.1串口上。如圖3.19所示。圖3.1924C02與單片機連接圖整體電路原理圖、PCB圖與實物圖可見下方3圖。圖3.20整體電路圖原理圖圖3.21PCB圖圖3.22實物圖3.8本章小結(jié)本文設(shè)計中涉及到的硬件系統(tǒng)包括了主控、顯示、溫濕度采集、鍵盤、警報、繼電器以及存儲器幾個模塊。此次設(shè)計的關(guān)鍵目的為,將采集獲取到的溫濕度數(shù)據(jù)信息傳遞到單片機之中,在通過一系列的分析處理以后,再輸送至顯示器上,并且單片機還會把收集到的信息與預(yù)先設(shè)好的標(biāo)準(zhǔn)范圍值加以比對,若是超出了所設(shè)范圍,那么就會催動蜂鳴器產(chǎn)生警報提示音,并使繼電器開始工作。如果沒有超出閾值,單片機就會繼續(xù)采集溫濕度數(shù)據(jù)。軟件設(shè)計在完成了硬件設(shè)計后,再設(shè)計系統(tǒng)軟件,首先要構(gòu)建程序的框架流程,對整個的設(shè)計劃分成各個小模塊,先讓各個小模塊實現(xiàn)其功能,再把各個小模塊整理結(jié)合形成總程序。本次設(shè)計中主要使用C語言來實行程序編輯,其具有下述優(yōu)勢:(1)C語言不僅結(jié)構(gòu)簡潔、邏輯緊密,而且靈活性強、使用起來十分方便。雖然僅有32個關(guān)鍵字與9類控制語句,但是能夠?qū)崿F(xiàn)全面化的程序匯編工作,可以把高階與低階語言相互融合起來一同運用。(2)具有種類豐富的運算符。其運算符的種類高達34中,不論是括號、賦值,又或是強制類型轉(zhuǎn)換,均能夠?qū)⑵渫ㄟ^運算符的處理方式來達成目的。(3)數(shù)據(jù)種類多樣化。主要涵蓋了整型、實型、字符型等多種類型的數(shù)據(jù)。(4)在語法方面不存在嚴(yán)格的限制,所以在進行程序匯編的時候自由性更強。(5)屬于一種結(jié)構(gòu)式的語言。其有將代碼和數(shù)據(jù)分割開來,這樣一來就會讓程度層次變得更加的清楚明了,在進行運行、調(diào)試以及修改時都會更加的方便。(6)能夠直接訪問物理地址,也能夠?qū)崿F(xiàn)對硬件的調(diào)用。(7)程序代碼質(zhì)量水平較高,而且在實際運行時具有較高的效率。4.1主程序模塊程序設(shè)計此次設(shè)計中程序大致的運作順序為:先和電源連接好,系統(tǒng)之中的各個模塊實行初始化。當(dāng)初始化結(jié)束之后,便會對鍵盤加以掃描分析,其后會稍微延時一定的時間,在此時間段內(nèi)傳感器會監(jiān)測收集對應(yīng)的信息數(shù)據(jù),在獲得數(shù)據(jù)之后便會將數(shù)據(jù)傳遞到單片機之中加以處理,其后再傳遞至顯示器中進行對應(yīng)數(shù)值的輸出顯示。同時,還會分析溫濕度數(shù)值有否超出預(yù)設(shè)的標(biāo)準(zhǔn)值,若是尚未超過,那么就會持續(xù)重復(fù)數(shù)據(jù)采集工作,若是存在某一數(shù)值超出標(biāo)準(zhǔn)范圍,那么就會運行警報程序,讓蜂鳴器產(chǎn)生警示聲音,繼電器開始工作,溫濕度檢測結(jié)束。主程序流程圖如圖4.1所示。溫濕度檢測并傳送數(shù)據(jù)回單片機溫濕度檢測并傳送數(shù)據(jù)回單片機延時開始初始化報警系統(tǒng)啟動(即蜂鳴器發(fā)聲)繼電器開始工作1602顯示數(shù)值據(jù)判斷溫度和濕度是否超出閾值結(jié)束鍵盤掃描NONOYESYES4.1主程序流程圖部分核心代碼:while(1) { if(FlagStartRH==1) { TR0=0;testnum=RH(); FlagStartRH=0; TR0=1; humidity=U8RH_data_H; temperature=U8T_data_H; if(Mode==0) { if(temperature>TH) { Led_jiangwen=0; hot=1; Led_shengwen=1; cold=0; // BJ=1; } elseif(temperature<TL) { Led_shengwen=0; cold=1; Led_jiangwen=1; hot=0; buzz=0; // BJ=1; }4.21602顯示模塊程序設(shè)計LCD1602進行數(shù)據(jù)顯示的步驟主要是,現(xiàn)將液晶初始化,然后便是運行延時程序,待到取得相應(yīng)數(shù)據(jù)之后,LCD就會率先輸入部分指令與顯示目標(biāo)地址,其后選取顯示首地址,接著單片機會對LCD進行數(shù)據(jù)寫入操作,當(dāng)數(shù)據(jù)輸送完畢以后,LCD便會讀出寫入信息的地質(zhì)再將對應(yīng)內(nèi)容予以顯示,最后返回。運作流程可見下圖4.2所示。延時延時寫LCD指令開始液晶1602初始化寫顯示行列地址寫數(shù)據(jù)取顯示首地址讀數(shù)據(jù)并顯示返回圖4.21602顯示屏程序流程圖部分核心代碼: if(hot==1&&cold==0&&humid==0&&dry==0) {L1602_string(2,1,"It'sveryhot!");BJ=1;} elseif(hot==1&&cold==0&&humid==1&&dry==0) {L1602_string(2,1,"Hotandhumid!");BJ=1;} elseif(hot==1&&cold==0&&humid==0&&dry==1) {L1602_string(2,1,"Hotanddry!");BJ=1;} elseif(hot==0&&cold==1&&humid==0&&dry==0) {L1602_string(2,1,"It'sverycold!");BJ=1;} elseif(hot==0&&cold==1&&humid==1&&dry==0) {L1602_string(2,1,"Coldandhumid!");BJ=1;} elseif(hot==0&&cold==1&&humid==0&&dry==1) {L1602_string(2,1,"Coldanddry!");BJ=1;} elseif(hot==0&&cold==0&&humid==1&&dry==0) {L1602_string(2,1,"It'sveryhumid!");BJ=1;} elseif(hot==0&&cold==0&&humid==0&&dry==1) {L1602_string(2,1,"It'sverydry!");BJ=1;} elseif(hot==0&&cold==0&&humid==0&&dry==0) {L1602_string(2,1,"Goodenvironment");BJ=0;}4.3DHT11模塊程序設(shè)計按照傳輸器的通信協(xié)議,先是利用單片機I/O口自動形成對應(yīng)的激發(fā)信號,其后把數(shù)據(jù)線操控權(quán)移交至傳感器,其后,單片機利用循環(huán)語句持續(xù)反復(fù)的檢驗I/O接口的電平狀況,以此實現(xiàn)對時序的精準(zhǔn)掌握,進而準(zhǔn)確分辨出傳輸信息。其運行流程可見下圖4.3。結(jié)束并保持高電平結(jié)束并保持高電平開始P1.7輸出低電平延時18msP1.7輸出高電平讀P1.7引腳判斷是否為低電平從機80us低電平是否結(jié)束從機80us高電平是否結(jié)束單片機進行數(shù)據(jù)接收將數(shù)據(jù)按十進制數(shù)位存入數(shù)組延時40msNOYESYESNONOYES圖4.3DHT11程序流程圖部分核心代碼:if(!DATA) {U8FLAG=2;while((!DATA)&&U8FLAG++);U8FLAG=2; while((DATA)&&U8FLAG++);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; 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{return0;}在此模塊之中主要功能便是實行對溫度與濕度信息的測量收集,先是從P1.7將低電平輸出,在經(jīng)歷一定延時以后,此引腳會再次輸出高電平,然后進行再一次的巖石,此時可對其加以讀取,若是屬于高電平,那么便繼續(xù)進行反復(fù)的讀取,若是未低電平就要作出判斷,確定從機80us高電平有否已經(jīng)結(jié)束,若是結(jié)果得出尚未結(jié)束,那么便要接著進行判斷,若是已經(jīng)結(jié)束,那么就要通過單片機來實現(xiàn)數(shù)據(jù)的錄入,把輸入的數(shù)據(jù)以十進制模式存進對應(yīng)的數(shù)組內(nèi),結(jié)束此次數(shù)據(jù)采集工作并進入至下一次采集流程中。4.4鍵盤控制模塊程序設(shè)計鍵盤模塊是用來設(shè)置系統(tǒng)溫濕度的上下限值的。首先接入電源,等待電路工作,按下模式按鍵經(jīng)過延時進入溫濕度的閾值設(shè)定界面,再通過加減鍵對上下限值進行設(shè)定,設(shè)定完成后按下確認(rèn)鍵,系統(tǒng)繼續(xù)工作。按鍵操作具體可看3.4小結(jié)。鍵盤模塊程序流程圖如圖4.4所示。溫度或濕度閾值加減開始模式選擇延時確認(rèn)溫度或濕度閾值加減開始模式選擇延時確認(rèn)圖4.4按鍵模塊程序流程圖部分核心代碼:elseif(Key_ADD==0) { Delay1(200); if(Key_ADD==0) { if(Mode==1) { TH++; if(TH>=100) TH=99; L1602_int(1,4,TH); enable(0x80+6); } elseif(Mode==2) { TL++; if(TL>=TH) TL=TH-1; L1602_int(2,4,TL); enable(0x80+0x40+6); } elseif(Mode==3) { HH++; if(HH>=100) HH=99; L1602_int(1,12,HH); enable(0x80+14); } elseif(Mode==4) { HL++; if(HL>=HH) HL=HH-1; L1602_int(2,12,HL); enable(0x80+0x40+14); } while(!Key_ADD); } }4.5本章小結(jié)通過運用C語言來進行編程,所要實現(xiàn)的功能為,當(dāng)傳輸器采集獲取有效的溫濕度信息之后,將其傳入單片機中加以處理,再輸入顯示屏中將其顯示出來。報警模塊只用對蜂鳴器所接通的I/O口編制相關(guān)程度即可,在溫濕度數(shù)值超出利用按鍵所設(shè)下的范圍值時,便會使此模塊處于運行狀態(tài),接著催動繼電器運作。通過上述流程便能夠?qū)崿F(xiàn)對所處環(huán)境中溫濕度的準(zhǔn)確檢測與有效調(diào)節(jié)。實驗測量結(jié)果及分析DHT11把測量獲得的數(shù)值傳遞到單片機中,接著再通過單片機的一系列處理以后傳遞至顯示器中,并就此顯示出目前環(huán)境的具體溫濕度情況,而且會和設(shè)定的標(biāo)準(zhǔn)范圍值加以比較,若超出所設(shè)置的閾值則蜂鳴器將會報警,相應(yīng)LED燈點亮,并伴隨著繼電器工作。溫濕度的閾值可通過按鍵進行設(shè)置,圖5.1是顯示的室內(nèi)溫濕度,Tem代表溫度值,Hum代表濕度值,在所測得的溫濕度數(shù)據(jù)處于預(yù)先設(shè)好的標(biāo)準(zhǔn)值范圍內(nèi)的時候,顯示器會在第二行中輸出“Goodenvironment”,而在溫濕度超出了設(shè)下的標(biāo)準(zhǔn)范圍時,顯示器第二行會顯示不同的英文。圖5.2是通過按鍵對溫濕度的閾值進行調(diào)整。圖5.3是溫度過高時硬件工作。圖5.4是濕度過低是硬件工作。圖5.1不超過閾值的溫濕度測量圖5.2按鍵調(diào)整溫濕度閾值圖5.3溫度過高時硬件圖圖5.4濕度過低硬件圖結(jié)論此次設(shè)計中包含了溫濕度的測量、顯示輸出與調(diào)節(jié)控制。硬件層面則涵蓋了主控、顯示、溫濕度采集、鍵盤、報警、繼電器以及存儲器模塊。軟件層面是運用了C語言來實行程序編制,利用單片機燒錄器實行燒錄。傳感器模塊運用的為DHT11,以此實現(xiàn)對所處環(huán)境中具體溫濕度信息的測量與收集,并把得到的數(shù)據(jù)信息值提交到單片機中加以處理。在處理結(jié)束之后,再將數(shù)據(jù)進一步傳遞至顯示器內(nèi),由顯示器進行數(shù)值的顯示。上面一行顯示溫濕度的數(shù)值,下面一行顯示當(dāng)前狀態(tài),即“熱、冷、干、濕”相對應(yīng)的英文表示及其組合。報警模塊主要使用到的設(shè)備有蜂鳴器與LED燈,在溫濕度超過了預(yù)設(shè)的標(biāo)準(zhǔn)值時,對應(yīng)的蜂鳴器就會發(fā)生警告提醒,而且會驅(qū)動繼電器運行,以此來調(diào)整所處環(huán)境的溫濕度,使其處在預(yù)定值的范圍內(nèi)。閾值設(shè)置模塊即利用幾個按鍵來完成對于溫濕度標(biāo)準(zhǔn)值的輸入設(shè)置。在此功能下,就能夠讓系統(tǒng)使用者對于環(huán)境所提出的具體溫濕度需求得到充分的滿足,不用每一次都要在程序中加以調(diào)整再進行燒錄,如此一來省掉了許多不必要的復(fù)雜操作。本次設(shè)計方案的優(yōu)點在于電路簡單,閾值設(shè)置方便,溫濕度精度較高,且整體設(shè)計花費金額較少。但是當(dāng)真正運用到生活還有生產(chǎn)中時,方案任需要繼續(xù)改進,在傳感器選擇上可以選擇精度更加精確和測量范圍更加廣泛的傳感器,單片機選擇上也可以選擇功能更加完善,運行更加穩(wěn)定的單片機。參考文獻[1]孫學(xué)智.基于單片機的溫濕度檢測系統(tǒng)設(shè)計與實現(xiàn)分析[J].科學(xué)技術(shù)創(chuàng)新.

2020(13)[2]裴立寧.濕度傳感器發(fā)展與趨勢[J].工程技術(shù)與管理(英文),2019,003(009):P.109-111.[3]峰劉.DesignandPracticeBasedonAT89C51Microcontroller:TakingSmartNon-SensitiveDebrisBucketasanExample[J].ComputerScienceandApplication,2020,10(4):641-648.[4]DasA,DhuriV,PalR.RainSensingAutomaticCarWiperUsingAT89C51Microcontroller[J].2021.[5]LiuY.ADesignofSolarPowerElectricZipperforTentBasedonMicrocomputerSTC89C52[J].IOPConferenceSeries:MaterialsScienceandEngineering,2019,612:042067-.[6]白桂峰.DesignofIntelligentHouseholdTrashCansBasedonSTC89C52[J].自動化與儀表,2019,034(003):97-100.[7]龍志.基于51單片機實現(xiàn)LED數(shù)碼管靜態(tài)與動態(tài)顯示的設(shè)計淺析[J].產(chǎn)業(yè)科技創(chuàng)新,2020,v.2(22):37-38.[8]趙華峰.LCD1602模塊的漢字顯示研究[J].現(xiàn)代信息科技,2020(17).[9]李順.基于DHT11溫濕度傳感器的搖床應(yīng)用研究[J].數(shù)字化用戶,2019,025(003):50.[10]張偉,胡雄強,王明倩,等.一種基于物聯(lián)網(wǎng)的智能家居系統(tǒng)設(shè)計[J].信息技術(shù),2019(03):56-59.[11]倪丹艷.基于STC89C52單片機的溫濕度環(huán)境監(jiān)測系統(tǒng)設(shè)計與實現(xiàn)[J].產(chǎn)業(yè)科技創(chuàng)新,2020,v.2(19):47-48.[12]紀(jì)峰,徐壯,郝靜.基于單片機PIC18F87J11串行通信模塊驅(qū)動LCD1602的設(shè)計與實現(xiàn)[J].電子世界,2019(13).[13]毛敏.RemotelyIntelligentAgriculturalMonitoringSystemBasedonArduinoandLabview[J].微型電腦應(yīng)用,2019,035(006):35-37,46.[14]程法勇,張凱虹.5V直流繼電器的驅(qū)動板設(shè)計[J].電子質(zhì)量,2020,No.398(05):30-34.

[15]陳雪小.數(shù)字顯示溫度計系統(tǒng)設(shè)計[J].計算機產(chǎn)品與流通,2019(07):122-122.附錄程序#include<reg52.h>#include<intrins.h>#include<absacc.h>#include<math.h>#defineucharunsignedchar#defineuintunsignedint//定義四個輸出端口sbitLed_jiashi=P3^4; //加濕sbitLed_qushi=P3^3; //去濕sbitLed_jiangwen=P3^1; //降溫sbitLed_shengwen=P3^2; //升溫//定義四個設(shè)置按鍵sbitKey_SET=P2^0;sbitKey_ADD=P2^1;sbitKey_SUB=P2^2;sbitKey_OK=P2^3;//定義24C02數(shù)據(jù)口sbitSCL=P1^0;sbitSDA=P1^1;//定義DHT11數(shù)據(jù)口sbitDATA=P1^7;sbitbuzz=P3^5;//定義LCD1602端口sbitE=P1^3; //1602使能引腳//sbitRW=P2^6; //1602讀寫引腳 sbitRS=P1^2; //1602數(shù)據(jù)/命令選擇引腳//定義全局變量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;charTH,TL,HH,HL;bitbdataFlagStartRH,hot,cold,humid,dry,BJ;//定時器0初始化voidTimer0_Init(){ ET0=1;//允許定時器0中斷 TMOD=0x11;//定時器工作方式選擇 TL0=0xFF; TH0=0x4B;//定時器賦予初值 TR0=1;//啟動定時器}//定時器0中斷voidTimer0_ISR(void)interrupt1using0{ ucharRHCounter; TL0=0xFF; TH0=0x4B;//定時器賦予初值 RHCounter++; if(RHCounter%10==0&&BJ==1) buzz=!buzz; elseif(BJ==0) buzz=1; //每2秒鐘啟動一次溫濕度轉(zhuǎn)換if(RHCounter>=40){FlagStartRH=1; RHCounter=0;}}/*********************************BASEDRIVE**********************************/voidDELAY(unsignedintt){ while(t!=0) t--;}/******************************IICDRIVE******************************/voidIICStart(void){SCL=0; DELAY(1);SDA=1;SCL=1;DELAY(1);SDA=0;DELAY(1);SCL=0;}voidIICStop(void){ SDA=0;SCL=1;DELAY(1);SDA=1;DELAY(1);SCL=0; }voidSEND0(void){ SDA=0; SCL=1; DELAY(1); SCL=0;}voidSEND1(void){ SDA=1; DELAY(1); SCL=1; DELAY(1); SCL=0;}bitCheck_Ack(void){ unsignedcharerrtime=250; DELAY(1); SCL=1; DELAY(1); CY=SDA; while(CY) { errtime--; CY=SDA; if(!errtime) { IICStop(); return1; } } DELAY(1); SCL=0; return0;}voidWrite_byte(unsignedchardat){unsignedchari; for(i=0;i<8;i++) { if((dat<<i)&0x80) SEND1(); else SEND0(); }}unsignedcharRead_byte(void){ unsignedchari,temp=0; for(i=0;i<8;i++) {SDA=1; SCL=1; DELAY(1); if(SDA==1) { temp=temp<<1; temp=temp|0x01; } else temp=temp<<1; SCL=0; } returntemp;}/************************************EEPROMDRIVE Addr:from0x00-->*************************************/unsignedcharrdeeprom(unsignedcharaddr){unsignedchartemp=0; bitflag=0; IICStart(); Write_byte(0xa0);Check_Ack(); Write_byte(addr); Check_Ack(); IICStart(); Write_byte(0xa1); Check_Ack(); temp=Read_byte(); SEND1(); IICStop(); returntemp;}voidwrteeprom(unsignedcharaddr,unsignedchardat){ IICStart(); Write_byte(0xa0); Check_Ack(); Write_byte(addr); Check_Ack(); Write_byte(dat); Check_Ack(); IICStop();}voidDelay1(uintj){uchari;for(;j>0;j--){ for(i=0;i<27;i++);}}voidDelay_10us(void){uchari;i--;i--;i--;i--;i--;i--;} voidCOM(void){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ù)*輸入:輸入的命令值*輸出:無***********************************************************************/voidenable(uchardel){ P0=del; RS=0; E=1; delay(); E=0; delay();}/*********************************************************************名稱:write(uchardel)*功能:1602寫數(shù)據(jù)函數(shù)*輸入:需要寫入1602的數(shù)據(jù)*輸出:無***********************************************************************/voidwrite(uchardel){ P0=del; RS=1; E=1; delay(); E=0; delay();}/*********************************************************************名稱:L1602_init()*功能:1602初始化,請參考1602的資料*輸入:無*輸出:無***********************************************************************/voidL1602_init(void){ enable(0x38); enable(0x0c); enable(0x06); enable(0x01);//清屏要放在最后}/*********************************************************************名稱:L1602_char(ucharhang,ucharlie,charsign)*功能:改變液晶中某位的值,如果要讓第一行,第五個字符顯示"b",調(diào)用該函數(shù)如下 L1602_char(1,5,'b')*輸入:行,列,需要輸入1602的數(shù)據(jù)*輸出:無***********************************************************************/voidL1602_char(ucharhang,ucharlie,charsign){ uchara; if(hang==1)a=0x80; if(hang==2)a=0xc0; a=a+lie-1; enable(a); write(sign);}/*********************************************************************名稱:L1602_string(ucharhang,ucharlie,uchar*p)*功能:改變液晶中某位的值,如果要讓第一行,第五個字符開始顯示"abcdef",調(diào)用該函數(shù)如下 L1602_string(1,5,"abcdef;")*輸入:行,列,需要輸入1602的數(shù)據(jù)*輸出:無***********************************************************************/voidL1602_string(ucharhang,ucharlie,uchar*p){ uchara; if(hang==1)a=0x80; if(hang==2)a=0xc0; a=a+lie-1; enable(a); while(1) { if(*p=='\0')break; write(*p); p++; }}//顯示整型的溫濕度數(shù)據(jù)用,共占用4位,其中一位符號位voidL1602_int(ucharhang,ucharlie,intnum){uinttemp;uintgewei,shiwei,baiwei,sign;if(num>=0)sign=0;elsesign=1;temp=abs(num);baiwei=temp/100;temp=temp-baiwei*100;shiwei=temp/10;gewei=temp-shiwei*10;num=abs(num);if(num>=100){//L1602_char(hang,lie+1,baiwei+48); L1602_char(hang,lie+2,shiwei+48); L1602_char(hang,lie+3,gewei+48);}elseif(num>=10){if(sign==1) L1602_char(hang,lie+1,'-'); L1602_char(hang,lie+2,shiwei+48);L1602_char(hang,lie+3,gewei+48);}else{if(sign==1) L1602_char(hang,lie+2,'-'); else L1602_char(hang,lie+2,'');L1602_char(hang,lie+3,gewei+48);}}voiddisplay(){ if(Mode==0) { L1602_int(1,3,temperature); L1602_char(1,7,0xdf); L1602_int(1,12,humidity); if(hot==1&&cold==0&&humid==0&&dry==0) {L1602_string(2,1,"It'sveryhot!");BJ=1;} elseif(hot==1&&cold==0

溫馨提示

  • 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)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論