版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 畢 業(yè) 論 文(設(shè) 計(jì))</p><p> 題 目 基于單片機(jī)的室內(nèi)溫濕度計(jì)的設(shè)計(jì) </p><p> 二О一 三 年 五 月 十九 日</p><p><b> 內(nèi) 容 摘 要</b></p><p> 本次設(shè)計(jì)是采用MSC-51系列單片機(jī)中的STC89C52和DHT11的
2、低成本的溫濕度的檢測(cè)系統(tǒng)。本設(shè)計(jì)主要包括硬件電路的設(shè)計(jì)和系統(tǒng)軟件的設(shè)計(jì)。硬件電路主要包括單片機(jī)、溫濕度傳感器、顯示模塊、報(bào)警器以及鍵盤等5部分,由DHT11溫濕度傳感器及1602字符型液晶模塊構(gòu)成系統(tǒng)顯示模塊,該系統(tǒng)電路簡(jiǎn)單、工作穩(wěn)定、集成度高,調(diào)試方便,測(cè)試精度高,具有一定的實(shí)用價(jià)值。其中測(cè)溫濕度控制電路由溫濕度傳感器和預(yù)設(shè)溫度值比較報(bào)警電路組成,用戶根據(jù)需要輸入預(yù)設(shè)值,當(dāng)實(shí)際測(cè)量的溫濕度大于預(yù)設(shè)的溫濕度數(shù)值時(shí),發(fā)出報(bào)警信號(hào)(蜂鳴器蜂
3、鳴,led燈亮)。軟件部分包括了主程序、顯示子程序、測(cè)溫濕度子程序。本次設(shè)計(jì)采用的DHT11溫濕度傳感器是一款含有已校準(zhǔn)數(shù)字輸出的溫濕度復(fù)合傳感器,傳感器包括一個(gè)電阻式感濕原件和一個(gè)NTC測(cè)溫元件,并與一個(gè)高性能的8位單片機(jī)相連接。</p><p><b> 關(guān)鍵詞</b></p><p> 溫度測(cè)量; 濕度測(cè)量; STC89C52; DHT11</p
4、><p><b> Abstract</b></p><p> This design is the use of MSC-51 Series MCU STC89C52 and DHT11 in the low-cost temperature and humidity detection system. This design includes the design
5、 of hardware and system software design. Hardware circuit includes a microcontroller, temperature and humidity sensors, display module, the alarm and the keyboard 5, the DHT11 temperature and humidity sensor and 1602 con
6、stitute a system of character LCD module display module, the system circuit is simple, stable, high integration, commissioning </p><p> microcontroller connected.</p><p><b> Key words<
7、;/b></p><p> Temperature measurement; Humidity measurement;STC89C52; DHT11</p><p><b> 目 錄</b></p><p> 第一章 緒 論- 1 -</p><p> 1.1 研究背景及意義- 1 -<
8、;/p><p> 1.2 研究要實(shí)現(xiàn)的功能- 1 -</p><p> 第二章 設(shè)計(jì)分析及方案論- 3 -</p><p> 2.1 設(shè)計(jì)總體方案及方案論證- 3 -</p><p> 2.2 元器件的選擇- 4 -</p><p> 2.2.1 主控制器件:?jiǎn)纹瑱C(jī)- 4 -</p>
9、<p> 2.2.2 傳感器:溫濕度傳感器dht11- 5 -</p><p> 2.2.3 顯示器件:lcd1602- 8 -</p><p> 第三章 硬件電路圖的設(shè)計(jì)- 12 -</p><p> 3.1 報(bào)警電路- 12 -</p><p> 3.2 晶振電路- 13 -</p>&
10、lt;p> 3. 3 顯示電路- 14 -</p><p> 3.4 傳感器電路- 14 -</p><p> 3.5 復(fù)位電路- 15 -</p><p> 3.6 總體電路- 16 -</p><p> 第四章 軟件部分設(shè)計(jì)- 18 -</p><p> 4.1 程序流程圖
11、- 18 -</p><p> 總 結(jié)- 19 -</p><p> 致 謝- 20 -</p><p> 參考文獻(xiàn)- 20 -</p><p> 附 錄- 21 -</p><p> 源程序- 21 -</p><p> 第一章 緒 論</p>
12、<p> 1.1 研究背景及意義</p><p> 隨著人們生活水平的不斷提高,人們對(duì)其生存質(zhì)量做出更高的要求。因此家居內(nèi)的基本環(huán)境如濕度、溫度有必要做出一定精度的監(jiān)測(cè)以讓人們和最佳舒適感系數(shù)做出簡(jiǎn)單明了的判別,從而采取一定措施以達(dá)到最佳舒適度。環(huán)境控制也就成了人們安居樂(lè)業(yè)的基礎(chǔ),成了共建和諧環(huán)境的重要環(huán)節(jié)。尤其是目前生活節(jié)奏的加快,許多白領(lǐng)都出現(xiàn)了亞健康的狀態(tài),因此家庭溫濕度的檢測(cè)對(duì)于現(xiàn)代家庭
13、來(lái)說(shuō)也變得刻不容緩了。因此為了滿足最適宜人們生活的最佳溫度和濕度,我們需要研究一種家庭式的,便于提醒和控制溫濕度的裝置,人們可以根據(jù)不同季節(jié)以及個(gè)人的需要進(jìn)行不同的調(diào)整,以便達(dá)到最佳的居住環(huán)境,這不僅僅是對(duì)于環(huán)境要求的進(jìn)步,同時(shí)也體現(xiàn)了現(xiàn)代文明的發(fā)達(dá)與先進(jìn)。</p><p> 研究溫濕度的控制非常有必要,它可以優(yōu)化組合社區(qū)資源,提升服務(wù)水平,推動(dòng)反房地產(chǎn)等其他行業(yè)的發(fā)展,為他們帶來(lái)新的商機(jī)。并且可以移植到汽車,
14、倉(cāng)庫(kù),蔬菜大棚等有限空間的溫濕度數(shù)據(jù)采集系統(tǒng)中去。因此,具有廣闊的應(yīng)用前景和用途。</p><p> 1.2 研究要實(shí)現(xiàn)的功能</p><p> 本設(shè)計(jì)的目的就是了解對(duì)室內(nèi)的溫濕環(huán)境的實(shí)現(xiàn)方法,和應(yīng)用到的有關(guān)軟硬件知識(shí)。實(shí)現(xiàn)的功能有實(shí)時(shí)溫度,濕度智能顯示。并且能夠智能報(bào)警從而采取相應(yīng)措施。便于提醒和控制溫濕度的裝置,人們可以根據(jù)不同季節(jié)以及個(gè)人的需要進(jìn)行不同的調(diào)整,采用DHT11數(shù)字溫
15、濕度傳感器與單片機(jī)STC89C52相連外圍電路比較簡(jiǎn)單。 所以,本次設(shè)計(jì)以DHT11數(shù)字溫濕度傳感器為例,介紹基于單片機(jī)的數(shù)字溫濕度計(jì)的設(shè)計(jì)提出解決。</p><p> 第二章 設(shè)計(jì)分析及方案論</p><p> 2.1 設(shè)計(jì)總體方案及方案論證</p><p> 按照系統(tǒng)設(shè)計(jì)功能的要求,確定系統(tǒng)由5個(gè)模塊組成:主控制器,數(shù)字溫濕度傳感器,報(bào)警電路,按鍵電路
16、及驅(qū)動(dòng)顯示電路。如圖2.1</p><p> 圖2.1 總體電路框圖</p><p> 單片機(jī)作為主控制器,主要負(fù)責(zé)處理由溫濕度傳感器送來(lái)數(shù)據(jù),并把處理好的數(shù)據(jù)送向顯示器模塊,數(shù)據(jù)溫濕度傳感器主要用來(lái)采集周圍的環(huán)境參數(shù),并把所采集到得數(shù)據(jù)送向單片機(jī),按鍵電路主要是用來(lái)完成單片機(jī)的復(fù)位操作和溫濕度初始值的設(shè)定。蜂鳴器電路就是用三極管來(lái)實(shí)現(xiàn)的,用來(lái)判斷周圍的溫度或者濕度是否超出設(shè)定數(shù)值
17、,顯示電路主要用來(lái)顯示當(dāng)前的溫濕度。</p><p> 2.2 元器件的選擇</p><p> 2.2.1 主控制器件:?jiǎn)纹瑱C(jī)</p><p> STC89C52是STC公司生產(chǎn)的一種低功耗、高性能CMOS8位微控制器,具有 8K 在系統(tǒng)可編程Flash存儲(chǔ)器。STC89C52使用經(jīng)典的MCS-51內(nèi)核,但做了很多的改進(jìn)使得芯片具有傳統(tǒng)51單片機(jī)不具備的功能。
18、在單芯片上,擁有靈巧的8 位CPU 和在系統(tǒng)可編程Flash,使得STC89C52為眾多嵌入式控制應(yīng)用系統(tǒng)提供高靈活、超有效的解決方案。 具有以下標(biāo)準(zhǔn)功能: 8k字節(jié)Flash,512字節(jié)RAM, 32 位I/O 口,內(nèi)置8KB EEPROM,MAX810復(fù)位電路,3個(gè)16 位定時(shí)器/計(jì)數(shù)器,4個(gè)外部中斷,一個(gè)7向量4級(jí)中斷結(jié)構(gòu)(兼容傳統(tǒng)51的5向量2級(jí)中斷結(jié)構(gòu)),全雙工串行口。另外 STC89C52 可降至0Hz 靜態(tài)邏輯操作,支持2
19、種軟件可選擇節(jié)電模式。空閑模式下,CPU 停止工作,允許RAM、定時(shí)器/計(jì)數(shù)器、串口、中斷繼續(xù)工作。掉電保護(hù)方式下,RAM內(nèi)容被保存,振蕩器被凍結(jié),單片機(jī)一切工作停止,直到下一個(gè)中斷或硬件復(fù)位為止。最高運(yùn)作頻率35MHz,6T/12T可選。</p><p> 單片機(jī)管腳圖如2.2所示</p><p> 圖2.2 STC89C52單片機(jī)管腳圖</p><p>
20、 2.2.2 傳感器:溫濕度傳感器dht11</p><p> DHT11數(shù)字溫濕度傳感器是一款含有已校準(zhǔn)數(shù)字信號(hào)輸出的溫濕度復(fù)合傳感器,它應(yīng)用專用的溫濕度傳感和數(shù)字模塊采集技術(shù),具有很高的穩(wěn)定性和可靠性,DHT11傳感器內(nèi)含一個(gè)NTC測(cè)溫和一個(gè)電阻式感濕元件,并與一個(gè)8位的高性能單片機(jī)相連接,在精確的濕度校驗(yàn)室中DHT11傳感器進(jìn)行過(guò)校準(zhǔn),以程序的形式校準(zhǔn)系數(shù)儲(chǔ)存在0TP內(nèi)存中,檢測(cè)信號(hào)的時(shí)候,在處理過(guò)程中傳
21、感器內(nèi)部要調(diào)用這些校準(zhǔn)系數(shù),采用單線制的串行接口,使系統(tǒng)集成可以有較低的功耗,而且更加簡(jiǎn)單快速,信號(hào)傳輸距離超過(guò)20米,作為一個(gè)數(shù)字溫濕度傳感器DHT11具有響應(yīng)快速、抗干擾強(qiáng)、性價(jià)比高等優(yōu)點(diǎn),它的性能指標(biāo)如下:濕度測(cè)量范圍為20%~95%RH;濕度測(cè)量精度為±5%RH;溫度測(cè)量范圍為0~50 ℃,溫度測(cè)量精度為±2℃,工作電壓3.0~5.5 V,相應(yīng)時(shí)間<5S,DHT1l采用4針單排引腳封裝, 傳感器通電后,
22、需要等待1s,這是因?yàn)橐竭^(guò)不穩(wěn)定的狀態(tài),在此期間不需發(fā)送指令,電源引腳(VDD,GND)之間可增加一個(gè)100nF 的電容,用以去耦濾波[7]。傳感器應(yīng)用電路:圖2.3。實(shí)物圖:圖2.4</p><p> 圖2.3 傳感器電路</p><p> 圖2.4 dht1實(shí)物圖</p><p> 串行接口(單線雙向)</p><p>
23、 采用單總線數(shù)據(jù)格式,DATA 用于微處理器與DHT11之間的通訊和同步,一次通訊時(shí)間4ms左右,數(shù)據(jù)分小數(shù)部分和整數(shù)部分。</p><p> 通訊過(guò)程如圖2.5所示</p><p> 圖2.5 通訊過(guò)程</p><p> 總線空閑狀態(tài)為高電平的時(shí)候主機(jī)把總線拉低等待DHT11響應(yīng), DHT11能檢測(cè)到起始信號(hào),主機(jī)必須把總線拉低,至少大于18ms。DHT
24、11一旦接收到主機(jī)的開(kāi)始信號(hào),接著就等待開(kāi)始信號(hào)的結(jié)束,然后發(fā)送80us的低電平響應(yīng)信號(hào),要讀取DHT11的響應(yīng)信號(hào),必須等待開(kāi)始信號(hào)的結(jié)束,并延時(shí)等待20-40us后才能夠接受,主機(jī)發(fā)送開(kāi)始信號(hào)后,這時(shí)候就可輸出高電平或切換到輸入模式,接著總線由上拉電阻拉高。</p><p> DHT11發(fā)送響應(yīng)信號(hào)的時(shí)候總線為低電平 ,DHT11把總線拉高80us之前,必須等到響應(yīng)信號(hào)發(fā)送,準(zhǔn)備發(fā)送數(shù)據(jù)時(shí),每一bit數(shù)據(jù)都
25、以50us低電平時(shí)隙開(kāi)始,數(shù)據(jù)位是0或1是由高電平的長(zhǎng)或短來(lái)決定。假如響應(yīng)信號(hào)的讀取為高電平,但是DHT11無(wú)響應(yīng)響應(yīng),這時(shí)候說(shuō)明路線可能連接不正常,當(dāng)最后一bit數(shù)據(jù)傳送結(jié)束后,DHT11把總線拉低50us,接著總線由上拉電阻拉高進(jìn)入空閑狀態(tài)。</p><p> 數(shù)字0信號(hào)表示方法如圖2.6所示</p><p> 圖2.6 數(shù)字0信號(hào)表示方法</p><p>
26、; 數(shù)字1信號(hào)表示方法.如圖2.7所示:</p><p> 圖2.7 信號(hào)1 表示方法</p><p> 2.2.3 顯示器件:lcd1602</p><p> 液晶顯示的原理是利用液晶的物理特性,通過(guò)電壓對(duì)其顯示區(qū)域進(jìn)行控制,有電就有顯示,這樣即可以顯示出圖形。液晶顯示器具有厚度薄、適用于大規(guī)模集成電路直接驅(qū)動(dòng)、易于實(shí)現(xiàn)全彩色顯示的特點(diǎn),目前已經(jīng)被廣泛
27、應(yīng)用在便攜式電腦、數(shù)字?jǐn)z像機(jī)、PDA移動(dòng)通信工具等眾多領(lǐng)域。</p><p> 液晶顯示的分類方法有很多種,通常可按其顯示方式分為段式、字符式、點(diǎn)陣式等。除了黑白顯示外,液晶顯示器還有多灰度有彩色顯示等。如果根據(jù)驅(qū)動(dòng)方式來(lái)分,可以分為靜態(tài)驅(qū)動(dòng)(Static)、單純矩陣驅(qū)動(dòng)(Simple Matrix)和主動(dòng)矩陣驅(qū)動(dòng)(Active Matrix)三種。點(diǎn)陣圖形式液晶由M×N個(gè)顯示單元組成,假設(shè)LCD顯示
28、屏有64行,每行有128列,每8列對(duì)應(yīng)1字節(jié)的8位,即每行由16字節(jié),共16×8=128個(gè)點(diǎn)組成,屏上64×16個(gè)顯示單元與顯示RAM區(qū)1024字節(jié)相對(duì)應(yīng),每一字節(jié)的內(nèi)容和顯示屏上相應(yīng)位置的亮暗對(duì)應(yīng)。例如屏的第一行的亮暗由RAM區(qū)的000H——00FH的16字節(jié)的內(nèi)容決定,當(dāng)(000H)=FFH時(shí),則屏幕的左上角顯示一條短亮線,長(zhǎng)度為8個(gè)點(diǎn);當(dāng)(3FFH)=FFH時(shí),則屏幕的右下角顯示一條短亮線;當(dāng)(000H)=FF
29、H,(001H)=00H,(002H)=00H,……(00EH)=00H,(00FH)=00H時(shí),則在屏幕的頂部顯示一條由8段亮線和8條暗線組成的虛線。這就是LCD顯示的基本原理。</p><p> 用LCD顯示一個(gè)字符時(shí)比較復(fù)雜,因?yàn)橐粋€(gè)字符由6×8或8×8點(diǎn)陣組成,既要找到和顯示屏幕上某幾個(gè)位置對(duì)應(yīng)的顯示RAM區(qū)的8字節(jié),還要使每字節(jié)的不同位為“1”,其它的為“0”,為“1”的點(diǎn)亮,為“
30、0”的不亮。這樣一來(lái)就組成某個(gè)字符。但由于內(nèi)帶字符發(fā)生器的控制器來(lái)說(shuō),顯示字符就比較簡(jiǎn)單了,可以讓控制器工作在文本方式,根據(jù)在LCD上開(kāi)始顯示的行列號(hào)及每行的列數(shù)找出顯示RAM對(duì)應(yīng)的地址,設(shè)立光標(biāo),在此送上該字符對(duì)應(yīng)的代碼即可。</p><p> 漢字的顯示一般采用圖形的方式,事先從微機(jī)中提取要顯示的漢字的點(diǎn)陣碼(一般用字模提取軟件),每個(gè)漢字占32B,分左右兩半,各占16B,左邊為1、3、5……右邊為2、4、
31、6……根據(jù)在LCD上開(kāi)始顯示的行列號(hào)及每行的列數(shù)可找出顯示RAM對(duì)應(yīng)的地址,設(shè)立光標(biāo),送上要顯示的漢字的第一字節(jié),光標(biāo)位置加1,送第二個(gè)字節(jié),換行按列對(duì)齊,送第三個(gè)字節(jié)……直到32B顯示完就可以LCD上得到一個(gè)完整漢字。</p><p> 字符型液晶顯示模塊是一種專門用于顯示字母、數(shù)字、符號(hào)等點(diǎn)陣式LCD,目前常用16*1,16*2,20*2和40*2行等的模塊。下面以長(zhǎng)沙太陽(yáng)人電子有限公司的1602字符型液晶
32、顯示器為例,介紹其用法。一般1602字符型液晶顯示器實(shí)物如圖2.8所示:</p><p> 圖2.8 1602字符型液晶顯示器實(shí)物圖</p><p> 1602LCD的基本參數(shù)及引腳功能</p><p> 1602LCD分為帶背光和不帶背光兩種,基控制器大部分為HD44780,帶背光的比不帶背光的厚,是否帶背光在應(yīng)用中并無(wú)差別,兩者尺寸差別如圖2.9所示:&l
33、t;/p><p> 圖1.9 1602LCD尺寸圖</p><p> 圖 2.9 1602 基本參數(shù)</p><p> 1602LCD主要技術(shù)參數(shù):</p><p> 顯示容量:16×2個(gè)字符</p><p> 芯片工作電壓:4.5—5.5V</p><p> 工作電流:2.
34、0mA(5.0V)</p><p> 模塊最佳工作電壓:5.0V</p><p> 字符尺寸:2.95×4.35(W×H)mm</p><p> 顯示部分采用SMC 1602液晶屏進(jìn)行數(shù)據(jù)顯示,其主要技術(shù)參為:表1所示。信號(hào)說(shuō)明為表2所示.</p><p> 表1 液晶屏技術(shù)指標(biāo)</p><p
35、><b> 表2 信號(hào)說(shuō)明</b></p><p> 第三章 硬件電路圖的設(shè)計(jì)</p><p><b> 3.1 報(bào)警電路</b></p><p> 微型計(jì)算機(jī)控制系統(tǒng)中,為了安全起見(jiàn),對(duì)于一些重要的參數(shù)或系統(tǒng),都設(shè)定有緊急狀態(tài)報(bào)警系統(tǒng),以便于提醒操作人員注意,或者采取緊急措施,本設(shè)計(jì)采用把計(jì)算機(jī)采集
36、的數(shù)據(jù)進(jìn)行數(shù)據(jù)處理、標(biāo)度變換、數(shù)字濾波之后,與該參數(shù)上下限與給定值進(jìn)行比較,如果高于上限值則進(jìn)行報(bào)警,否則就作為采樣的正常值,進(jìn)行顯示。</p><p> 本設(shè)計(jì)采用峰鳴音報(bào)警電路。如圖3.1所示。蜂鳴器額定電流≤30Ma,而對(duì)于STC89C52單片機(jī),P1口的灌電流為15mA,由此可見(jiàn),僅靠單片機(jī)的P3口電流是不能驅(qū)動(dòng)蜂鳴器的,必須使用晶體管放大電路,為了使單片機(jī)的功率更小,所以使用PNP型晶體管,當(dāng)外部環(huán)境
37、的溫度或者濕度超過(guò)預(yù)設(shè)值的時(shí)候,基級(jí)變?yōu)榈碗娖?,蜂鳴器導(dǎo)通鳴叫。</p><p> 圖3.1 報(bào)警電路 </p><p><b> 3.2 晶振電路</b></p><p> 單片機(jī)系統(tǒng)都有晶振,在單片機(jī)系統(tǒng)中晶振的作用非常大,全稱叫做晶體振蕩器,它結(jié)合單片機(jī)內(nèi)部電路產(chǎn)生所需時(shí)鐘頻率,單片機(jī)晶振提供的時(shí)鐘頻率越高,那么單片機(jī)的運(yùn)行速度
38、就會(huì)越快,單片機(jī)的一切指令執(zhí)行都是建立在單片機(jī)晶振所提供的時(shí)鐘頻率。在通常的工作條件下,普通的晶振頻率的絕對(duì)精度可以達(dá)到百萬(wàn)分之五十,高級(jí)晶振精度更高,有些晶振還可以由外加的電壓在一定范圍內(nèi)調(diào)整頻率,稱為壓榨振蕩器,在共振的狀態(tài)下晶振用一種能把電能和機(jī)械能相互轉(zhuǎn)化的晶體工作,以提供穩(wěn)定,精確的單頻振蕩。</p><p> 單片機(jī)晶振的作用是為系統(tǒng)提供及本周的時(shí)鐘信號(hào),通常一個(gè)系統(tǒng)共用一個(gè)晶振,以便于各部分保持同
39、步,有些通訊系統(tǒng)的基頻和射頻使用不同的晶振,而是通過(guò)電子調(diào)整頻率的方法保持同步。晶振通常與鎖相環(huán)電路配合使用,以提供系統(tǒng)所需的時(shí)鐘頻率,可以用于同一個(gè)晶振項(xiàng)鏈的不同鎖相環(huán)來(lái)提供的。單片機(jī)STC89C52的晶振電路采用無(wú)源晶振,微調(diào)電容取33uf。圖3.2即為晶振電路。</p><p> 圖3.2 晶振電路</p><p> 3. 3 顯示電路</p><p&
40、gt; 在日常生活中,我們對(duì)液晶顯示器并不陌生,它已作為很多電子產(chǎn)品的通過(guò)器件,比方在計(jì)算器、萬(wàn)用表、電子表及很多家用電子產(chǎn)品中都可以看到,顯示的主要是數(shù)字、專用符號(hào)和圖形。顯示模塊選用1602字符型液晶模塊,它是目前工控系統(tǒng)中使用最廣泛的液晶屏之一,由于它顯示的質(zhì)量高,電路圖如圖3.3所示,1602字符型液晶模塊是點(diǎn)陣型液晶,驅(qū)動(dòng)方便,經(jīng)過(guò)編程后顯示內(nèi)容多樣化。</p><p> 圖 3.3 lcd1
41、602顯示電路</p><p> 3.4 傳感器電路</p><p> DHT11是數(shù)字型溫濕度傳感器,可直接以數(shù)字方式傳輸所采集的當(dāng)前環(huán)境溫濕度,DHT11采用的是單總線通信,因此只需將單片機(jī)的一個(gè)I/O端口與DHT11的通信接口連接就可以實(shí)現(xiàn)數(shù)據(jù)的采集和傳送,相對(duì)于其他電路來(lái)說(shuō)比較簡(jiǎn)單。如圖3.4所示:</p><p> 圖3.4 傳感器電路<
42、/p><p><b> 3.5 復(fù)位電路</b></p><p> 本次設(shè)計(jì)采用的是上電復(fù)位,而51單片機(jī)采用的都是高電平復(fù)位,當(dāng)RST引腳上出現(xiàn)了兩個(gè)周期以上的高電平就會(huì)觸發(fā)內(nèi)部復(fù)位,如圖3.5所示:</p><p> 圖3.5 復(fù)位電路</p><p><b> 3.6 總體電路</b&g
43、t;</p><p> 總體電路圖如圖3.6所示:</p><p> 圖 3.6 總體電路圖</p><p> 第四章 軟件部分設(shè)計(jì)</p><p> 4.1 程序流程圖</p><p><b> 總 結(jié)</b></p><p> 大學(xué)的學(xué)習(xí)中,畢
44、業(yè)設(shè)計(jì)是一個(gè)很重要的環(huán)節(jié),是我們步入社會(huì)參與社會(huì)實(shí)踐的很好鍛煉,從最初的選題,開(kāi)題構(gòu)思,繪圖,編程,仿真直到完成設(shè)計(jì),這中間,查找資料,老師指導(dǎo),同學(xué)交流,編寫調(diào)試程序,以及硬件焊接,每一個(gè)過(guò)程都是一次成長(zhǎng)和對(duì)自己的一次的檢驗(yàn)。本次設(shè)計(jì)是基于單片機(jī)的溫濕度設(shè)計(jì),包括硬件電路和軟件兩部分。設(shè)計(jì)初對(duì)于單片機(jī)的應(yīng)用并不是很了解,本科學(xué)習(xí)中初步接觸過(guò)C語(yǔ)言,由于本次設(shè)計(jì)需要硬件和軟件兩部分,因此我是從軟件部分先開(kāi)始的,然后才開(kāi)始硬件電路的設(shè)計(jì),
45、但是由于軟件的不完美影響了硬件電路設(shè)計(jì)的不是很美觀。</p><p> 在軟件設(shè)計(jì)過(guò)程中,我基本是一步步開(kāi)始學(xué)起的,在學(xué)習(xí)中遇到很多問(wèn)題,經(jīng)過(guò)同學(xué)的指點(diǎn)和討論,我學(xué)到了很多編程技巧,同時(shí)也掌握了一些編程思想。由于原器件的局限性,硬件電路不是很美觀,但是這并不影響結(jié)果,再畫原理圖的過(guò)程中我又進(jìn)一步掌握了proteus的基本應(yīng)用,并有了較為深入的了解。由于電路設(shè)計(jì)比較簡(jiǎn)單,所以并沒(méi)有涉及PCB板,直接手動(dòng)焊接完成電
46、路。通過(guò)本次設(shè)計(jì),對(duì)于主要芯片STC89C52有了基本的了解,并且對(duì)DHT11傳感器有了切實(shí)的了解何在實(shí)際中的應(yīng)用有了深刻的認(rèn)識(shí)。基本掌握了該芯片的基本功能。經(jīng)過(guò)軟件在硬件電路的時(shí)候,基本功能均能實(shí)現(xiàn),如果把手放在傳感器上面,溫度和濕度會(huì)立即發(fā)生變化。并且溫濕度上下限可以實(shí)時(shí)調(diào)節(jié)。</p><p><b> 致 謝</b></p><p> 四年的大學(xué)生活接近尾
47、聲,我的畢業(yè)設(shè)計(jì)也順利的完成了,這里首先向我的指導(dǎo)老師**老師表示最誠(chéng)摯的感謝,同時(shí)也感謝那些幫助過(guò)我的同學(xué)們。</p><p> 在本次的畢業(yè)設(shè)計(jì)中*老師給我提供了極大的幫助,首先在一開(kāi)始的選題中我便遇到了難題,由于當(dāng)時(shí)選題的時(shí)候不在學(xué)校,回到學(xué)校面對(duì)眾多選題不知該選哪一個(gè),好在老師在時(shí)間上給了我很大的寬限,讓我有足夠的時(shí)間回頭復(fù)習(xí)一下專業(yè)知識(shí),然后選題,最終選了一個(gè)自己擅長(zhǎng)和喜歡的方向。因此畢業(yè)設(shè)計(jì)對(duì)于自己
48、來(lái)說(shuō)也是充滿著興趣,這樣做出來(lái)的東西可能會(huì)更加完美和輕松。在畢業(yè)設(shè)計(jì)的過(guò)程中,*老師定期檢查督促我們的畢業(yè)設(shè)計(jì),幫我們解決遇到的問(wèn)題。*老師認(rèn)真負(fù)責(zé)的態(tài)度讓我倍受感激。同時(shí)在此也感謝**同學(xué),他們解決了許多我在畢業(yè)設(shè)計(jì)中遇到的問(wèn)題,特別是剛開(kāi)始軟件的學(xué)習(xí)中,他們給了我很大的幫助。</p><p> 在此向所有畢業(yè)設(shè)計(jì)的過(guò)程中給予我?guī)椭睦蠋熀屯瑢W(xué)表示最誠(chéng)摯的謝意。</p><p><
49、;b> 參考文獻(xiàn)</b></p><p> [1]徐 瑋.C51單片機(jī)高效入門 第二版 機(jī)械工業(yè)出版社</p><p> [2]湯武輝.Proteus仿真軟件與單片機(jī)實(shí)驗(yàn)教學(xué)長(zhǎng)江 大學(xué)學(xué)報(bào)</p><p> [3]李建民.單片機(jī)在溫度控制系統(tǒng)中的應(yīng)用 網(wǎng)絡(luò)信息資源</p><p> [4]陳汝全.實(shí)用微機(jī)與
50、單片機(jī)控制技術(shù) 電子科技大學(xué)出版社</p><p> [5]劉寶元.張玉虹 基于單片機(jī)的溫濕度監(jiān)控系統(tǒng)設(shè)計(jì) 國(guó)外電子測(cè)量技術(shù) </p><p><b> 附 錄</b></p><p><b> 源程序</b></p><p> #include<reg52.h><
51、;/p><p> #include<intrins.h></p><p> #define SIZE 5//定義存貯數(shù)組為五個(gè)字節(jié)</p><p> #define NUMBER 20</p><p> #define OK 1</p><p> #define ERROR 0</p>
52、<p> typedef unsigned char uchar;</p><p> typedef unsigned int uint;</p><p> uint shidu,wendu;</p><p> uint wen_sx=0;//溫度上限</p><p> uint shi_sx=0;//濕度上限&l
53、t;/p><p> uchar num;</p><p> uchar STATUS = OK; //狀態(tài)標(biāo)志</p><p> uchar code table[]="wendu:"; //溫度</p><p> uchar code table1[]="shidu:";//濕度</p>
54、;<p> uchar code table2[]={"0123456789"};</p><p> uchar value_array[SIZE];</p><p> uchar bai,shi,ge,bai1,shi1,ge1,num1,shi2,ge2,shi3,ge3; /*各個(gè)變量定義*/</p><p> uch
55、ar count,shidu_xiaoshu,wendu_xiaoshu;//標(biāo)志,問(wèn)四度小數(shù)部分</p><p> uchar num;</p><p> sbit e=P2^7;</p><p> sbit rs=P2^6;</p><p> sbit wr=P2^5;</p><p> sbit DHT
56、11=P1^7;// 傳感器傳輸總線定義</p><p> sbit s1=P1^1; //按鍵定義</p><p> sbit s2=P1^2;</p><p> sbit s3=P1^3;</p><p> sbit s4=P1^4;</p><p> sbit baojing=P1^5;// 報(bào)警位定義
57、</p><p> sbit led=P3^4; </p><p> void delay_5us()</p><p><b> {</b></p><p><b> _nop_();</b></p><p><b> _nop_();</b>
58、;</p><p><b> _nop_();</b></p><p><b> _nop_();</b></p><p><b> _nop_();</b></p><p><b> }</b></p><p> voi
59、d delay(uint delay)</p><p><b> {</b></p><p><b> uint i,j;</b></p><p> for(i=0;i<delay;i++)</p><p> for(j=0;j<120;j++);</p><
60、p><b> }</b></p><p> uchar read_one_byte(void)</p><p><b> {</b></p><p> uchar count,value=0,i=0;</p><p> STATUS = OK;</p><p>
61、; for(i=8;i>0;i--)</p><p><b> {</b></p><p> value <<= 1;</p><p> count = 0;</p><p> while(DHT11 == 0 && count++<NUMBER);</p>
62、<p> if(count>=NUMBER)</p><p><b> {</b></p><p> STATUS = ERROR;</p><p><b> return 0;</b></p><p><b> }</b></p>&
63、lt;p> delay_5us();</p><p> delay_5us();</p><p> delay_5us();</p><p> if(DHT11 != 0)</p><p><b> {</b></p><p><b> value ++;</b&
64、gt;</p><p> while(DHT11 != 0&& count++ <NUMBER)</p><p><b> {</b></p><p> DHT11 = 1;</p><p><b> }</b></p><p> if(cou
65、nt>=NUMBER)</p><p><b> {</b></p><p> STATUS = ERROR;</p><p><b> return 0;</b></p><p><b> }</b></p><p><b>
66、 }</b></p><p><b> }</b></p><p> return value;</p><p><b> }</b></p><p> uchar ReadValue(void)</p><p><b> {</b>
67、;</p><p> uchar count=0,check_value=0,i=0;</p><p> DHT11 = 0;</p><p> delay(20);</p><p> DHT11 = 1;</p><p> delay_5us();</p><p> delay_5
68、us();</p><p> delay_5us();</p><p> delay_5us();</p><p> if(DHT11 != 0)</p><p><b> {</b></p><p> return ERROR;</p><p><b>
69、; }</b></p><p> while(DHT11 == 0 && count++<NUMBER);</p><p> if(count>=NUMBER)</p><p><b> {</b></p><p> DHT11 = 1;</p><p
70、> return ERROR;</p><p><b> }</b></p><p> count = 0;</p><p> DHT11 = 1;</p><p> while(DHT11 != 0 &&count++<NUMBER);</p><p>
71、if(count>=NUMBER)</p><p><b> {</b></p><p> DHT11 = 1;</p><p> return ERROR;</p><p><b> }</b></p><p> for(i=0;i<SIZE;i++)
72、</p><p><b> {</b></p><p> value_array[i]=read_one_byte();</p><p> if(STATUS==ERROR)</p><p><b> {</b></p><p> DHT11 = 1;</p&
73、gt;<p> return ERROR;</p><p><b> }</b></p><p> if(i!=SIZE-1)</p><p><b> {</b></p><p> check_value+=value_array[i];</p><p&
74、gt;<b> }</b></p><p><b> }</b></p><p> if(check_value==value_array[SIZE-1])</p><p><b> {</b></p><p> shidu = value_array[0]*10 +
75、 value_array[1]/100;</p><p> wendu = value_array[2]*10 + value_array[3]/100;</p><p> DHT11 = 1;</p><p> return OK;</p><p><b> }</b></p><p>
76、<b> else</b></p><p><b> {</b></p><p> return ERROR;</p><p><b> }</b></p><p><b> }</b></p><p> void de
77、layms(uint z) </p><p><b> {</b></p><p><b> uint x,y;</b></p><p> for(x=z;x>0;x--)</p><p> for(y=110;y>0;y--);</p><p><
78、;b> }</b></p><p> void writedata1602(uchar Data)</p><p><b> {</b></p><p><b> e=0;</b></p><p><b> rs=0;</b></p>
79、<p> rs=1; //rs為一時(shí)寫數(shù)據(jù)</p><p> delayms(1);</p><p><b> P0=Data;</b></p><p><b> e=1;</b></p><p> delayms(1);</p><p><b&g
80、t; e=0;</b></p><p><b> rs=0;</b></p><p><b> }</b></p><p> void writecom1602(uchar Data1)</p><p><b> {</b></p>&
81、lt;p><b> e=0;</b></p><p><b> rs=1;</b></p><p> rs=0; //rs為0時(shí)寫命令</p><p> delayms(1);</p><p><b> P0=Data1;</b></p><
82、p><b> e=1;</b></p><p> delayms(1);</p><p><b> e=0;</b></p><p><b> rs=1;</b></p><p><b> }</b></p><p
83、> void lcd_int()//lcd初始化</p><p><b> {</b></p><p><b> e=0;</b></p><p> writecom1602(0x38);</p><p> writecom1602(0x0c);</p><p&g
84、t; writecom1602(0x06);</p><p> writecom1602(0x80);</p><p><b> }</b></p><p> void interrupt_init()</p><p><b> {</b></p><p> TM
85、OD=0X01;</p><p> TH0=(65536-50000)/256;</p><p> TL0=(65536-50000)%256;</p><p><b> EA=1;</b></p><p><b> ET0=1;</b></p><p><b&
86、gt; TR0=1; </b></p><p><b> }</b></p><p> void keyscan()</p><p><b> {</b></p><p><b> if(s1==0)</b></p><p> d
87、elay(50);</p><p><b> if(s1==0)</b></p><p><b> {</b></p><p> if(wen_sx<50) wen_sx++;//按鍵1按下時(shí)溫度上限增加</p><p> else( wen_sx=0); //當(dāng)上限大于五
88、十時(shí),變?yōu)?</p><p><b> }</b></p><p><b> if(s2==0)</b></p><p> delay(50);</p><p><b> if(s2==0)</b></p><p><b> {<
89、;/b></p><p> if(wen_sx>0) wen_sx--;//溫度上限大于0時(shí),使溫度上限減小</p><p> else( wen_sx=50); //當(dāng)減小到零時(shí),為50</p><p><b> }</b></p><p><b> if(s3==0)</b>
90、</p><p> delay(50);</p><p><b> if(s3==0)</b></p><p><b> {</b></p><p> if(shi_sx<95) shi_sx++;//使?jié)穸壬舷拗翟黾?lt;/p><p> else(
91、 shi_sx=0); //上限大于95時(shí),變?yōu)?</p><p><b> }</b></p><p><b> if(s4==0)</b></p><p> delay(50);</p><p><b> if(s4==0)</b></p><p
92、><b> {</b></p><p> if(shi_sx>0) shi_sx--; //使?jié)穸壬舷拗禍p小</p><p> else( shi_sx=95); // 減小到零時(shí)變?yōu)?5</p><p><b> } </b></p><p><b>
93、 }</b></p><p> void kongzhi()//控制報(bào)警</p><p><b> {</b></p><p> if((wendu/10>=wen_sx)||(shidu/10>=shi_sx)) //此處 設(shè)定預(yù)設(shè)溫度</p><p><b> {&l
94、t;/b></p><p> baojing=0; //報(bào)警,蜂鳴器響</p><p> led=0; //led燈亮</p><p><b> num++;</b></p><p> if(num==20)</p><p><b> {</b><
95、;/p><p><b> num=0;</b></p><p> baojing=~baojing;//取反</p><p><b> led=~led;</b></p><p><b> }</b></p><p><b> }<
96、;/b></p><p><b> else</b></p><p><b> {</b></p><p> baojing=1; //不報(bào)警,燈不亮</p><p><b> led=1;</b></p><p><b>
97、}</b></p><p><b> }</b></p><p> /*----------------------中斷處理液晶顯示函數(shù)---------------------*/</p><p> void timer0() interrupt1</p><p><b> {</
98、b></p><p> TH0=(65536-50000)/256;</p><p> TL0=(65536-50000)%256;</p><p><b> count++;</b></p><p> if(count==3)</p><p><b> {</b&
99、gt;</p><p> ReadValue(); //讀溫度值</p><p> keyscan(); //按鍵掃描程序</p><p> bai=wendu/100;//溫度,濕度值各位進(jìn)行分離</p><p> shi=wendu%100/10;</p><p> ge=wendu%10;&l
100、t;/p><p> bai1=shidu/100;</p><p> shi1=shidu%100/10;</p><p> ge1=shidu%10;</p><p> shi2=wen_sx/10;</p><p> ge2=wen_sx%10/1;</p><p> shi3=sh
101、i_sx/10;</p><p> ge3=shi_sx%10/1;</p><p> writecom1602(0x80);//寫指令</p><p> for(num=0;num<6;num++)</p><p><b> {</b></p><p> writedata
102、1602(table[num]);</p><p> // delay(20);</p><p><b> }</b></p><p> /* 寫入溫濕度以及溫濕度上限值數(shù)據(jù)*/</p><p> writedata1602(table2[bai]);</p><p> writeda
103、ta1602(table2[shi]);</p><p> writedata1602('.');</p><p> writedata1602(table2[ge]);</p><p> writedata1602(0xdf);</p><p> writedata1602('C');</p&g
104、t;<p> writedata1602('-');</p><p> writedata1602(table2[shi2]);</p><p> writedata1602(table2[ge2]);</p><p> writecom1602(0x80+0x40);</p><p> for(num
105、1=0;num1<6;num1++)</p><p><b> {</b></p><p> writedata1602(table1[num1]);</p><p><b> }</b></p><p> writedata1602(table2[bai1]);</p>
106、<p> writedata1602(table2[shi1]);</p><p> writedata1602('.');</p><p> writedata1602(table2[ge1]);</p><p> writedata1602('%');</p><p> writeda
107、ta1602('-');</p><p> writedata1602(table2[shi3]);</p><p> writedata1602(table2[ge3]);</p><p><b> count=0;</b></p><p><b> }</b></p
108、><p><b> }</b></p><p> void main()</p><p><b> {</b></p><p><b> wr=0;</b></p><p> interrupt_init();</p><p&g
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 畢業(yè)設(shè)計(jì)-- 單片機(jī)的溫濕度計(jì)設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)--基于單片機(jī)技術(shù)的數(shù)字溫濕度計(jì)設(shè)計(jì)
- 多功能溫濕度計(jì)設(shè)計(jì)畢業(yè)論文
- 多功能溫濕度計(jì)設(shè)計(jì)畢業(yè)論文
- 數(shù)字溫濕度計(jì)--硬件設(shè)計(jì)畢業(yè)論文
- 基于單片機(jī)的溫濕度檢測(cè)畢業(yè)論文
- 基于單片機(jī)的溫濕度檢測(cè)畢業(yè)論文
- 畢業(yè)設(shè)計(jì)(論文)--數(shù)字溫濕度計(jì)的設(shè)計(jì)
- 數(shù)字溫濕度計(jì)設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)(論文)+基于msp430單片機(jī)的便攜式溫濕度計(jì)設(shè)計(jì)與開(kāi)發(fā)
- 畢業(yè)論文-基于單片機(jī)的溫濕度控制系統(tǒng)
- 畢業(yè)論文----基于單片機(jī)的土壤溫濕度采集系統(tǒng)設(shè)計(jì)
- 畢業(yè)論文--基于51單片機(jī)的溫濕度采集系統(tǒng)設(shè)計(jì)
- 單片機(jī)溫濕度畢業(yè)設(shè)計(jì)
- 基于單片機(jī)的溫濕度檢測(cè)
- 基于單片機(jī)的cc1100無(wú)線溫濕度【畢業(yè)論文】
- 基于單片機(jī)的溫濕度檢測(cè)
- 電子溫濕度計(jì)選型
- 基于單片機(jī)的濕度計(jì)課程設(shè)計(jì)
- 基于單片機(jī)的溫室溫濕度控制系統(tǒng)的設(shè)計(jì) 畢業(yè)論文
評(píng)論
0/150
提交評(píng)論