標(biāo)題: 溫室大棚溫濕度控制系統(tǒng)設(shè)計(jì)資料下載 [打印本頁]

作者: 51黑ff    時(shí)間: 2016-9-3 20:03
標(biāo)題: 溫室大棚溫濕度控制系統(tǒng)設(shè)計(jì)資料下載

完整的資料下載地址:
溫室大棚溫濕度控制系統(tǒng).rar (1.8 MB, 下載次數(shù): 286)



下面是文檔的部分內(nèi)容預(yù)覽:

                        緒論
                        1.1課題來源
                        1.2國內(nèi)外發(fā)展現(xiàn)狀、趨勢以及面臨的挑戰(zhàn)
                        1.3研究的目的、意義及主要內(nèi)容
                        2硬件設(shè)計(jì)
                        2.1系統(tǒng)總體結(jié)構(gòu)設(shè)計(jì)
                        2.2控制模塊的設(shè)計(jì)
                        2.2.1 STC89C51的主要特性
                        2.2.2 AT89C51的管腳說明
                        2.2.3震蕩電路
                        2.2.4 復(fù)位電路
                        2.2.5 單片機(jī)的CPU
                        2.2.6 單片機(jī)的中斷系統(tǒng)
                        2.2.7 單片機(jī)最小系統(tǒng)
                        2.3 傳感器設(shè)計(jì)
                        2.3.1 DHT11的簡介
                        2.3.2 引腳說明
                        2.3.3  電源引腳
                        2.3.4 串行接口(單線雙向)
                        2.4 無線模塊的設(shè)計(jì)
                        2.4.1 APC220的性能
                        2.4.2 無線傳輸模塊APC220的接口說明
                        2.4.3 APC220無線模塊的工作參數(shù)的設(shè)置
                        2.4.4 APC220無線模塊的技術(shù)指示
                        2.5鍵盤和顯示模塊的設(shè)計(jì)
                        2.5.1顯示模塊設(shè)計(jì)
                        2.5.2鍵盤模塊設(shè)計(jì)
                        2.6執(zhí)行模塊的設(shè)計(jì)
                        2.6.1調(diào)節(jié)模塊
                        2.6.2 報(bào)警模塊
                        3.軟件設(shè)計(jì)
                        3.1 初始化子程序
                        3.2 數(shù)據(jù)采集模塊   
                        3.3 顯示模塊
                        3.4 無線模塊
                        3.4.1 無線數(shù)據(jù)接收子程序
                        3.4.2 無線數(shù)據(jù)接收處理模塊
                        4.結(jié)束語
                        參考文獻(xiàn)
                        致謝
                                                               
                        美國是將計(jì)算機(jī)應(yīng)用于大棚和管理最早,最多的國家之一。美國開發(fā)的大棚計(jì)算
                        
                    
                        

機(jī)控制與管理系統(tǒng)可以根據(jù)作物的特點(diǎn)和生長所需要的條件,對大棚內(nèi)的光照,溫度,濕度等諸多因素進(jìn)行自動(dòng)控制。這種自動(dòng)控制系統(tǒng)需要種植者輸入溫室作物生長所需的環(huán)境的目標(biāo)參數(shù),計(jì)算編機(jī)根據(jù)傳感器的實(shí)際測量值與事先設(shè)定的目標(biāo)進(jìn)行比較,以決定大棚溫濕度的控制過程,按照相應(yīng)的機(jī)構(gòu)進(jìn)行加熱,降溫或者是澆水,通風(fēng)等。目前,我國絕大部分自主開發(fā)的大棚溫濕度控制或者進(jìn)口的國外設(shè)備都屬于這種系統(tǒng)。

                        

雖然這種自動(dòng)控制系統(tǒng)實(shí)現(xiàn)了自動(dòng)化,適合規(guī);a(chǎn),提高了勞動(dòng)生產(chǎn)率,通過改變大棚溫室度的設(shè)定目標(biāo),可以自動(dòng)的對大棚內(nèi)溫濕度進(jìn)行調(diào)節(jié),但是這種調(diào)節(jié)對作物的生長來說還是相對滯后的,難以介入作物生長的內(nèi)在規(guī)律。所以在這種自動(dòng)控制系統(tǒng)和實(shí)踐的基礎(chǔ)上,溫濕度自動(dòng)控制向著適合不同作物生長的智能化控制發(fā)展。

                        國外大棚業(yè)正致力于高科技發(fā)展,遙測技術(shù),網(wǎng)絡(luò)技術(shù),控制局域網(wǎng)已逐漸應(yīng)用于大棚的管理和控制中,近幾年各國溫度控制技術(shù)提出建立大棚行業(yè)標(biāo)準(zhǔn),朝著網(wǎng)絡(luò)化,大眾化,大規(guī)模,無人化的方向發(fā)展的思路。
                                                  本系統(tǒng)的設(shè)計(jì)的硬件主要包括:主要是單片機(jī)AT89C51,檢測系統(tǒng),顯示電路,A|D電路,報(bào)警電路等。利用傳感器測量大棚內(nèi)的溫濕度經(jīng)過信號(hào)處理,將傳感器測得的數(shù)據(jù)送至控制系統(tǒng)(AT89C51),與預(yù)設(shè)的農(nóng)作物最適合生長的溫濕度值的上下限進(jìn)行對比,并通過顯示電路將測得的溫濕度進(jìn)行實(shí)時(shí)顯示。如果不同作物的適合生長的溫度不一樣,可以通過鍵盤電路修改預(yù)設(shè)值?刂葡到y(tǒng)根據(jù)比較的結(jié)果對調(diào)節(jié)系統(tǒng)發(fā)出相應(yīng)的指令,啟動(dòng)相應(yīng)的調(diào)節(jié)設(shè)備如噴水機(jī),吹風(fēng)機(jī),加熱器,降溫等,調(diào)節(jié)大棚內(nèi)的溫濕度狀態(tài)。如果測得的數(shù)據(jù)超過了預(yù)設(shè)值的上下限,則報(bào)警電路會(huì)報(bào)警。這樣就實(shí)現(xiàn)了對大棚溫濕度的自動(dòng)控制。
    本文主要研究內(nèi)容如下:
              1.進(jìn)行溫濕度控制系統(tǒng)的整體研究與設(shè)計(jì)。
              2.利用鍵盤設(shè)置溫濕度的上下限值。
              3.利用數(shù)字溫濕度傳感器測量大棚內(nèi)的溫濕度。
              4.利用LCD對溫濕度進(jìn)行實(shí)時(shí)顯示。

                        
               
               
                                       
                                      5.當(dāng)大棚溫濕度值超出設(shè)定范圍值時(shí),系統(tǒng)可自動(dòng)報(bào)警,并輸出       驅(qū)動(dòng)信號(hào)控制繼電器對大棚溫濕度進(jìn)行調(diào)節(jié)。
                                         
     

【摘要】在農(nóng)業(yè)生產(chǎn)中,溫室大棚的應(yīng)用越來越廣泛,也能為人們創(chuàng)造更高的經(jīng)濟(jì)效益。在溫室大棚中,最關(guān)鍵的是溫濕度控制方法。傳統(tǒng)的溫濕度控制方法完全是人工的,不僅費(fèi)時(shí)費(fèi)力,而且效率很低。本文旨在論述一鐘溫室大棚溫濕度控制系統(tǒng)的設(shè)計(jì)及工作原理。該系統(tǒng)主要由單片機(jī)、數(shù)字溫濕度傳感器DHT11、無線通信模塊APC220、液晶顯示LCD1602、鍵盤等組成。采用溫濕度傳感器DHT11來測量溫濕度,它的精確度高,而且DHT11直接是輸出數(shù)字信號(hào),可直接與單片機(jī)相連。通過無線傳感器APC220來進(jìn)行信號(hào)傳送,這樣能夠降低布線的麻煩。顯示部分使用的是LCD1602來顯示溫濕度。本系統(tǒng)還有附帶鍵盤,能夠?qū)Υ笈锼枰臏貪穸壬舷孪拗抵苯釉O(shè)定和修改。本系統(tǒng)的核心是單片機(jī)AT89C51,接收傳感器所測的數(shù)據(jù)并處理,然后執(zhí)行各種操作,如噴水,吹風(fēng)等。

                        本系統(tǒng)智能度高,可靠性高,系統(tǒng)工作穩(wěn)定,且綜合性價(jià)比較高,具有較大的市場應(yīng)用前景。
                        【關(guān)鍵詞】 單片機(jī) 數(shù)字溫濕度傳感器DHT11  無線通信模塊APC220
                                   顯示模塊LCD1602
                        
               
               
                                        前言
                                  Greenhouse Temperature and Humidity Control System
                                     Student :Taoxiang Lin    Electronics & Information College
                                     Tutor: Tangtaobo        Electronics & Information College
                        

  【Abstract】 In agricultural production, shed greenhouse used more widely, but also can create more economic benefits for the people. In the shed greenhouse ,the most critical factor is the method of temperature and humidity control. The traditional temperature and humidity control method is completely artificial, not only time-consuming, but also inefficient. This paper aims to discusses the design and operating principle of shed greenhouse temperature and humidity control system. The system consist of the microcontroller ,digital temperature and humidity sensor DHT11,wireless sensor APC220,LCD1602,keyboard and other components. Temperature and humidity sensor DHT11 is used for measuring temperature and humidity ,its high precision ,and DHT11 can directly output digital signal, which can be directly connected with the microcontroller .This can reduce the trouble of wiring for signal transmission through wireless sensor APC220.The display selection is LCD1602 which is used for displaying the temperature and humidity. The system also comes with a keyboard ,can set and modify the upper and lower limits on the greenhouse temperature and humidity needed. The core of this system is the microcontroller AT89C51,receiving sensor measured the data and processing, and then carry out various operation ,such as water spray ,warming, cooling and ect.

                        

This system intelligent degree is high, high reliability, the system stable work, and comprehensive high cost performance, so it has great application prospect in the market.

                        key wordmicrocontroller  digital temperature and humidity sensor DHT11  wireless sensor APC220    display section LCD1602
                                                前言                        

在現(xiàn)代的大棚種植技術(shù)中,溫度、濕度是大棚蔬菜能否茁壯成長的重要因素。現(xiàn)在我國大棚生產(chǎn)規(guī)模雖然空前巨大,但是大棚的設(shè)備比較陳舊,溫度采集方式落后,廣大農(nóng)村采用煤油溫度計(jì)的溫度采集方式,不僅溫度采集較為老套,并且費(fèi)時(shí)費(fèi)力,不利于大棚生產(chǎn)規(guī)模的擴(kuò)大,也不利于信息化程度的提高,不符合黨中央提出的科技興農(nóng)的戰(zhàn)略目標(biāo)。

                        

農(nóng)業(yè)是人類社會(huì)最古老的行業(yè),是各行各業(yè)的基礎(chǔ),也是人類頓以生存的最重要的行業(yè),由傳統(tǒng)農(nóng)業(yè)向現(xiàn)代化農(nóng)業(yè)轉(zhuǎn)變,由粗放經(jīng)營向集約經(jīng)營轉(zhuǎn)變,必須要求農(nóng)業(yè)科技有一個(gè)大的發(fā)展,進(jìn)行一次新的農(nóng)業(yè)技術(shù)革命。科技的發(fā)展促進(jìn)了農(nóng)業(yè)的發(fā)展,溫室大棚在農(nóng)業(yè)中的應(yīng)用越來越廣泛。傳統(tǒng)的溫室大棚的自動(dòng)化程度很低,基本是是粗放型的人工操作,即便對于所給定的量,在操作中無法進(jìn)行有效的控制,很大程度上限制了溫室大棚的經(jīng)濟(jì)效益。

                        

現(xiàn)代智能控制系統(tǒng)是進(jìn)行溫室大棚溫濕度控制的有效手段和工具,它可以提高操作的準(zhǔn)確性,有利于控制過程的科學(xué)管理,也降低了對操作者本身素質(zhì)的要求和體力勞動(dòng)強(qiáng)度。除此之外,它還能準(zhǔn)確、定時(shí)、定量、高效的進(jìn)行溫濕度控制,可以節(jié)省人力、體力而提高質(zhì)量和產(chǎn)量。智能溫室大棚控制系統(tǒng)在我國農(nóng)業(yè)中的使用為數(shù)不多,與發(fā)達(dá)國家相比,有較大的差距,有很多是基本停留在人工操作,即使有些使用的了自動(dòng)控制系統(tǒng),但是也是以經(jīng)驗(yàn)來自行設(shè)定很多參數(shù),使得不能物盡其用而又造成浪費(fèi)。只有提高自動(dòng)控制系統(tǒng)的智能,使得在農(nóng)業(yè)生產(chǎn)中更加智能和方便并采用廉價(jià)的器材使其價(jià)格能被廣大農(nóng)業(yè)生產(chǎn)者所接受,才能促進(jìn)智能溫室大棚溫濕度控制在農(nóng)業(yè)中的廣泛應(yīng)用和提高其經(jīng)濟(jì)效益。

                        

隨著微型計(jì)算機(jī)和傳感器技術(shù)的迅猛發(fā)展,其價(jià)格低、可靠性高,給改造農(nóng)業(yè)帶來了很多便利。用高新技術(shù)改造農(nóng)業(yè)生產(chǎn),是我國農(nóng)業(yè)和國民經(jīng)濟(jì)持續(xù)發(fā)展的根本大事。本文旨在對溫室大棚溫濕度監(jiān)控系統(tǒng)的設(shè)計(jì),一種基于mcs-51單片機(jī)的控制系統(tǒng),通過高靈敏度的溫濕度傳感器檢測大棚內(nèi)的溫濕度,并通過控制系統(tǒng)進(jìn)行溫室度調(diào)節(jié)。

                        1頁(共48頁)
               
               
                                        前言
                        
                        緒論                        
                        1.1課題來源                           來源于生產(chǎn)/社會(huì)實(shí)踐
                        1.2國內(nèi)外發(fā)展現(xiàn)狀、趨勢以及面臨的挑戰(zhàn)                        

   美國是將計(jì)算機(jī)應(yīng)用于大棚和管理最早,最多的國家之一。美國開發(fā)的大棚計(jì)算機(jī)控制與管理系統(tǒng)可以根據(jù)作物的特點(diǎn)和生長所需要的條件,對大棚內(nèi)的光照,溫度,濕度等諸多因素進(jìn)行自動(dòng)控制。這種自動(dòng)控制系統(tǒng)需要種植者輸入溫室作物生長所需的環(huán)境的目標(biāo)參數(shù),計(jì)算編機(jī)根據(jù)傳感器的實(shí)際測量值與事先設(shè)定的目標(biāo)進(jìn)行比較,以決定大棚溫濕度的控制過程,按照相應(yīng)的機(jī)構(gòu)進(jìn)行加熱,降溫或者是澆水,通風(fēng)等。目前,我國絕大部分自主開發(fā)的大棚溫濕度控制或者進(jìn)口的國外設(shè)備都屬于這種系統(tǒng)。

                        

雖然這種自動(dòng)控制系統(tǒng)實(shí)現(xiàn)了自動(dòng)化,適合規(guī);a(chǎn),提高了勞動(dòng)生產(chǎn)率,通過改變大棚溫室度的設(shè)定目標(biāo),可以自動(dòng)的對大棚內(nèi)溫濕度進(jìn)行調(diào)節(jié),但是這種調(diào)節(jié)對作物的生長來說還是相對滯后的,難以介入作物生長的內(nèi)在規(guī)律。所以在這種自動(dòng)控制系統(tǒng)和實(shí)踐的基礎(chǔ)上,溫濕度自動(dòng)控制向著適合不同作物生長的智能化控制發(fā)展。

                        國外大棚業(yè)正致力于高科技發(fā)展,遙測技術(shù),網(wǎng)絡(luò)技術(shù),控制局域網(wǎng)已逐漸應(yīng)用于大棚的管理和控制中,近幾年各國溫度控制技術(shù)提出建立大棚行業(yè)標(biāo)準(zhǔn),朝著網(wǎng)絡(luò)化,大眾化,大規(guī)模,無人化的方向發(fā)展的思路。
                                       
               
               
                                        前言
                        1.3研究的目的、意義及主要內(nèi)容                        

      本系統(tǒng)的設(shè)計(jì)的硬件主要包括:主要是單片機(jī)AT89C51,檢測系統(tǒng),顯示電路,A|D電路,報(bào)警電路等。利用傳感器測量大棚內(nèi)的溫濕度經(jīng)過信號(hào)處理,將傳感器測得的數(shù)據(jù)送至控制系統(tǒng)(STC89C51),與預(yù)設(shè)的農(nóng)作物最適合生長的溫濕度值的上下限進(jìn)行對比,并通過顯示電路將測得的溫濕度進(jìn)行實(shí)時(shí)顯示。如果不同作物的適合生長的溫度不一樣,可以通過鍵盤電路修改預(yù)設(shè)值?刂葡到y(tǒng)根據(jù)比較的結(jié)果對調(diào)節(jié)系統(tǒng)發(fā)出相應(yīng)的指令,啟動(dòng)相應(yīng)的調(diào)節(jié)設(shè)備如噴水機(jī),吹風(fēng)機(jī),加熱器,降溫等,調(diào)節(jié)大棚內(nèi)的溫濕度狀態(tài)。如果測得的數(shù)據(jù)超過了預(yù)設(shè)值的上下限,則報(bào)警電路會(huì)報(bào)警。這樣就實(shí)現(xiàn)了對大棚溫濕度的自動(dòng)控制。
    本文主要研究內(nèi)容如下:
              1.進(jìn)行溫濕度控制系統(tǒng)的整體研究與設(shè)計(jì)。
              2.利用鍵盤設(shè)置溫濕度的上下限值。
              3.利用數(shù)字溫濕度傳感器DHT11測量大棚內(nèi)的溫濕度。
              4.利用LCD對溫濕度進(jìn)行實(shí)時(shí)顯示。

                        5.利用315M無線傳輸系統(tǒng)進(jìn)行農(nóng)田與監(jiān)控室之間的數(shù)據(jù)傳輸。
                                      5.當(dāng)大棚溫濕度值超出設(shè)定范圍值時(shí),系統(tǒng)可自動(dòng)報(bào)警,并輸出驅(qū)動(dòng)信號(hào)控制繼電器對大棚溫濕度進(jìn)行調(diào)節(jié)。
                        2硬件設(shè)計(jì)                          2.1系統(tǒng)總體結(jié)構(gòu)設(shè)計(jì)                             根據(jù)題目要求和單片機(jī)的工作原理,以AT89c51為控制器,進(jìn)行主要的信息處理。系統(tǒng)只要由檢測電路、顯示電路、復(fù)位電路、報(bào)警電路、鍵盤電路以及調(diào)節(jié)電路組成?傮w結(jié)構(gòu)框圖如圖1:
                        

                        
                        
                                        圖1   總體結(jié)構(gòu)框圖
                        
                        2.2控制模塊的設(shè)計(jì)                           從節(jié)約成本和實(shí)用的角度考慮,本系統(tǒng)采用51單片機(jī)。采用STC89C51作為主控制單片機(jī)。單片機(jī)算術(shù)運(yùn)算功能強(qiáng),軟件編程靈活、自由度大,可用軟件編程實(shí)現(xiàn)各種算法和邏輯控制,并且由于其功耗低、體積小、技術(shù)成熟和成本低等優(yōu)點(diǎn),使其在各個(gè)領(lǐng)域應(yīng)用廣泛。
                        單片機(jī)STC89C52的簡介及工作原理
                         2.2.1 STC89C51的主要特性                               · 與MCS-51產(chǎn)品指令系統(tǒng)兼容
                               ·4K字節(jié)可重復(fù)擦寫閃存儲(chǔ)器
                               ·1000次寫/擦循環(huán),數(shù)據(jù)可保存10年
                               ·全靜態(tài)工作:0HZ-24MHZ
                               ·三級加密程序存儲(chǔ)器
                               · 128字節(jié)內(nèi)部RAM
                               ·32個(gè)可編程I/O口線
                        1頁(共48頁)
               
               
                                        前言
                               ·2個(gè)16位定時(shí)/計(jì)數(shù)器
                               ·6個(gè)中斷源
                               ·可編程UART串行通信口
                               ·低功耗的空閑和掉電模式?臻e方式停止CPU的工作,但允許RAM,定時(shí)/計(jì)數(shù)器,串行通信口及中斷系統(tǒng)繼續(xù)工作。掉電方式保存RAM中的內(nèi)容,但振蕩器停止工作并禁止其它所有部件工作直到下一個(gè)硬件復(fù)位。
                               ·片內(nèi)震蕩和時(shí)鐘電路
                        2.2.2 AT89C51的管腳說明                        

                                

                        

                                 圖2   AT89C51的管腳圖
                           ·VCC:供電電壓。
   · GND:接地。
   ·P0口:P0口為一個(gè)8位漏級開路雙向I/O口,每腳可吸收8TTL門電流。當(dāng)P1口的管腳第一次寫1時(shí),被定義為高阻輸入。P0能夠用于外部程序數(shù)據(jù)存儲(chǔ)器,它可以被定義為數(shù)據(jù)/地址的第八位。在FIASH編程時(shí),P0 口作為原碼輸入口,當(dāng)FIASH進(jìn)行校驗(yàn)時(shí),P0輸出原碼,此時(shí)P0外部必須被拉高。
    · P1口:P1口是一個(gè)內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1后,被內(nèi)部上拉為高,可用作輸入,P1口被
                        1頁(共48頁)
               
               
                                        前言
                        外部下拉為低電平時(shí),將輸出電流,這是由于內(nèi)部上拉的緣故。在FLASH編程和校驗(yàn)時(shí),P1口作為第八位地址接收。
                        

·P2口:P2口為一個(gè)內(nèi)部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個(gè)TTL門電流,當(dāng)P2口被寫“1”時(shí),其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時(shí),P2口的管腳被外部拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。P2口當(dāng)用于外部程序存儲(chǔ)器或16位地址外部數(shù)據(jù)存儲(chǔ)器進(jìn)行存取時(shí),P2口輸出地址的高八位。在給出地址“1”時(shí),它利用內(nèi)部上拉優(yōu)勢,當(dāng)對外部八位地址數(shù)據(jù)存儲(chǔ)器進(jìn)行讀寫時(shí),P2口輸出其特殊功能寄存器的內(nèi)容。P2口在FLASH編程和校驗(yàn)時(shí)接收高八位地址信號(hào)和控制信號(hào)。
  · P3口:P3口管腳是8個(gè)帶內(nèi)部上拉電阻的雙向I/O口,可接收輸出4個(gè)TTL門電流。當(dāng)P3口寫入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。P3除了作為一般的I/O口線外,更重要的用途是它的第二功能,如下表(表1)所示:

                         表1  P3口的第二功能
                        
                                                端口引腳
                                       
                                                第二功能
                                       
                                                P3.0
                                       
                                                RXD(串行口輸入)
                                       
                                                P3.1
                                       
                                                TXD(串行口輸出)
                                       
                                                P3.2
                                       
                                                

                                                        

(外部中斷0)

                                       
                                                P3.3
                                       
                                                

                                                        

(外部中斷1)

                                       
                                                P3.4
                                       
                                                T0(定時(shí)/計(jì)數(shù)器0外部輸入)
                                       
                                                P3.5
                                       
                                                

                                                        

(定時(shí)/計(jì)數(shù)器1外部輸入)

                                       
                                                P3.6
                                       
                                                

                                                        

(外部數(shù)據(jù)存儲(chǔ)器寫選通)

                                       
                                                P3.7
                                       
                                                

                                                        

(外部數(shù)據(jù)存儲(chǔ)器讀選通)

                                       
                        
                        ·RST:復(fù)位輸入。當(dāng)振蕩器工作時(shí),RST引腳出現(xiàn)兩個(gè)機(jī)器周期以上高電平將使單片機(jī)復(fù)位。
                        ·ALE/PROG: 當(dāng)訪問外部程序存儲(chǔ)器或數(shù)據(jù)存儲(chǔ)器時(shí),ALE(地址鎖存允許)輸出脈沖用于鎖存地址的低8位字節(jié)。即使不訪問外部存儲(chǔ)器,ALE 仍以時(shí)鐘振蕩
                        1頁(共48頁)
               
               
                                        前言
                        頻率的 l/6 輸出固定的正脈沖信號(hào),因此它可對外輸出時(shí)鐘或用于定時(shí)目的。要注意的是:每當(dāng)訪問外部數(shù)據(jù)存儲(chǔ)器時(shí)將跳過一個(gè)ALE脈沖。
                        ·PSEN:程序儲(chǔ)存允許(PSEN)輸出是外部程序存儲(chǔ)器的讀選通信號(hào),當(dāng) AT89C51 由外部程序存儲(chǔ)器取指令(或數(shù)據(jù))時(shí),每個(gè)機(jī)器周期兩次 有效,即輸出兩個(gè)脈沖。在此期間,當(dāng)訪問外部數(shù)據(jù)存儲(chǔ)器,這兩次有效的 信號(hào)不出現(xiàn)。
                        

·EA/VPP:外部訪問允許。欲使CPU僅訪問外部程序存儲(chǔ)器(地址為0000H—FFFFH),EA端必須保持低電平(接地)。需注意的是:如果加密位LB1被編程,復(fù)位時(shí)內(nèi)部會(huì)鎖存EA端狀態(tài)。 如EA端為高電平(接VCC端),CPU則執(zhí)行內(nèi)部程序存儲(chǔ)器中的指令。 Flash存儲(chǔ)器編程時(shí),該引腳加上+12V的編程允許電源Vpp,當(dāng)然這必須是該器件是使用12V編程電壓Vpp。

                        ·XTAL1:振蕩器反相放大器的及內(nèi)部時(shí)鐘發(fā)生器的輸入端。
                        ·XTAL2:振蕩器反相放大器的輸出端。
                        2.2.3震蕩電路                        

  XTAL1和XTAL2分別為反向放大器的輸入和輸出。該反向放大器可以配置為片內(nèi)振蕩器。石晶振蕩和陶瓷振蕩均可采用。如采用外部時(shí)鐘源驅(qū)動(dòng)器件,XTAL2應(yīng)不接。有余輸入至內(nèi)部時(shí)鐘信號(hào)要通過一個(gè)二分頻觸發(fā)器,因此對外部時(shí)鐘信號(hào)的脈寬無任何要求,但必須保證脈沖的高低電平要求的寬度。

                        2.2.4 復(fù)位電路                        

整個(gè)PEROM陣列和三個(gè)鎖定位的電擦除可通過正確的控制信號(hào)組合,并保持ALE管腳處于低電平10ms 來完成。在芯片擦操作中,代碼陣列全被寫“1”且在任何非空存儲(chǔ)字節(jié)被重復(fù)編程以前,該操作必須被執(zhí)行。
    此外,AT89C51設(shè)有穩(wěn)態(tài)邏輯,可以在低到零頻率的條件下靜態(tài)邏輯,支持兩種軟件可選的掉電模式。在閑置模式下,CPU停止工作。但RAM,定時(shí)器,計(jì)數(shù)器,串口和中斷系統(tǒng)仍在工作。在掉電模式下,保存RAM的內(nèi)容并且凍結(jié)振蕩器,禁止所用其他芯片功能,直到下一個(gè)硬件復(fù)位為止。

                                                1頁(共48頁)
               
               
                                        前言
                        2.2.5 單片機(jī)的CPU                        MCS-51單片機(jī)的CPU由運(yùn)算器、控制器和若干個(gè)特殊功能寄存器組成,運(yùn)算器可以加、減以及各種邏輯運(yùn)算,還可以進(jìn)行乘除運(yùn)算?刂破髟趩纹瑱C(jī)內(nèi)部協(xié)調(diào)各功能部件之間的數(shù)據(jù)傳送、數(shù)據(jù)運(yùn)算等操作,并對單片機(jī)外部發(fā)出若干控制信息。
                        CPU中使用的特殊功能寄存器ACC、B、PSW、SP和DPTR。ACC就是累加器,在指令中一般寫為A。在做乘除運(yùn)算時(shí),B寄存器用來存放一個(gè)操作數(shù),也用來存放運(yùn)算后的一部分結(jié)果;若不作乘除操作時(shí),則B可用做通用寄存器。
                        程序狀態(tài)字寄存器PSW相當(dāng)于一般微處理器中的狀態(tài)寄存器,其中各位的定義如表2所示。
                        表2  PSW狀態(tài)寄存器
                        
                                                D7
                                       
                                                D6
                                       
                                                D5
                                       
                                                D4
                                       
                                                D3
                                       
                                                D2
                                       
                                                D1
                                       
                                                D0
                                       
                                                CY
                                       
                                                AC
                                       
                                                F0
                                       
                                                RS1
                                       
                                                RS0
                                       
                                                OV
                                       
                                                -
                                       
                                                P
                                       
                        
                        其中各位的意義如下:
                        CY(PSW.7):高位進(jìn)位標(biāo)志位。常用“C”表示。
                        AC(PSW.6):輔助進(jìn)位標(biāo)志。
                        F0(PSW.5):用戶標(biāo)志位。
                        RS1(PSW.4)、RS0(PSW.3):寄存器組選擇控制位。8051共有4個(gè)8位工作寄存器,分別命名為R0~R7。用戶通過改變RS1和 RS0的狀態(tài)可以方便地決定R0~R7的實(shí)際物理地址。RS1和 RS0與寄存器區(qū)的對應(yīng)關(guān)系如表3所示。
                        表3 RS1、RS2與工作寄存器組的關(guān)系
                        
                                                RS1
                                       
                                                RS0
                                       
                                                寄存器組
                                       
                                                RAM中的地址
                                       
                                                0
                                                0
                                                1
                                                1
                                       
                                                0
                                                1
                                                0
                                                1
                                       
                                                0
                                                1
                                                2
                                                3
                                       
                                                00H-07H
                                                08H-0FH
                                                10H-17H
                                                18H-1FH
                                       
                        OV(PSW.2):溢出標(biāo)志位。
                        -(PSW.1):保留位,無定義。
                        1頁(共48頁)
               
               
                                        前言
                        P(PSW.0):奇偶校驗(yàn)位,在每一個(gè)指令周期中,若累加器(A)中的“1”的位個(gè)數(shù)是奇數(shù)個(gè)則P=1,偶數(shù)個(gè)則P=0
                        單片機(jī)的內(nèi)存空間
                          從物理地址空間看,89C51有4個(gè)存儲(chǔ)器地址空間,片內(nèi)程序存儲(chǔ)器、片外程序存儲(chǔ)器、片內(nèi)數(shù)據(jù)存儲(chǔ)器和片外數(shù)據(jù)存儲(chǔ)器,其存儲(chǔ)情況如下:
                        (1)內(nèi)部程序存儲(chǔ)器(ROM)4K字節(jié)。
                        (2)外部程序存儲(chǔ)器(EPROM)64K字節(jié)。
                        (3)內(nèi)部數(shù)據(jù)存儲(chǔ)器(RAM)256字節(jié)。
                        (4)外部數(shù)據(jù)存儲(chǔ)器(EPRAM)64K字節(jié)。
                        表4 C51單片機(jī)的特殊功能寄存器地址及符號(hào)表示
                        
                                                特殊功能寄存器符號(hào)
                                       
                                                片內(nèi)RAM地址
                                       
                                                名稱
                                       
                                                *ACC
                                       
                                                E0H
                                       
                                                累加器
                                       
                                                *B
                                       
                                                F0H
                                       
                                                乘法寄存器
                                       
                                                *PSW
                                       
                                                D0H
                                       
                                                程序狀態(tài)字寄存器
                                       
                                                SP
                                       
                                                81H
                                       
                                                堆棧指針
                                       
                                                DPL、DPH
                                       
                                                82H、83H
                                       
                                                數(shù)據(jù)指針(低8位和高8位)
                                       
                                                *IE
                                       
                                                A8H
                                       
                                                中斷允許寄存器
                                       
                                                *IP
                                       
                                                B8H
                                       
                                                中斷優(yōu)先級寄存器
                                       
                                                *P0
                                       
                                                80H
                                       
                                                P0口鎖存器
                                       
                                                *P1
                                       
                                                90H
                                       
                                                P1口鎖存器
                                       
                                                *P2
                                       
                                                A0H
                                       
                                                P2口鎖存器
                                       
                                                *P3
                                       
                                                B0H
                                       
                                                P3口鎖存器
                                       
                                                PCON
                                       
                                                87H
                                       
                                                電源控制及波特率選擇寄存器
                                       
                                                *SCON
                                       
                                                98H
                                       
                                                串行口控制寄存器
                                       
                                                SBUF
                                       
                                                99H
                                       
                                                串行數(shù)據(jù)緩沖器
                                       
                                                *TCON
                                       
                                                88H
                                       
                                                定時(shí)器控制寄存器
                                       
                                                TMOD
                                       
                                                89H
                                       
                                                定時(shí)器方式選擇寄存器
                                       
                                                TL0、TH0
                                       
                                                8AH、8BH
                                       
                                                定時(shí)器0低8位、高8位
                                       
                                                TL1、TH1
                                       
                                                8CH、8DH
                                       
                                                定時(shí)器1低8位、高8位
                                       
                        1頁(共48頁)
               
               
                                        前言
                        
                        

89C51單片機(jī)的片內(nèi)RAM雖然字節(jié)數(shù)雖然不很多,但卻起著很重要的作用。256個(gè)字節(jié)被分為兩個(gè)區(qū)域:11~7FH是真正的RAM區(qū),可以讀寫各種數(shù)據(jù);80~FFH是專用寄存器(SFR)區(qū)。對于51系列單片機(jī)安排里21個(gè)特殊功能寄存器。每個(gè)寄存器均為8位(一個(gè)字節(jié)),所以實(shí)際上這128個(gè)字節(jié)并未全部利用。表4所示為89C51單片機(jī)特殊功能寄存器地址及符號(hào)表。表中帶*號(hào)的為可位尋址的特殊功能寄存器。

                        2.2.6 單片機(jī)的中斷系統(tǒng)                        

單片機(jī)與外部設(shè)備交換信息一般采用兩種方式,即查詢方式和中斷方式。中斷方式具有CPU效率高,適合于實(shí)時(shí)控制,將從現(xiàn)場采集到的數(shù)據(jù)通過中斷方式及時(shí)傳送給CPU,經(jīng)過處理后就可立即做出響應(yīng),實(shí)現(xiàn)現(xiàn)場控制。而采用查詢方式就很難做到及時(shí)采集、實(shí)時(shí)控制。從面向用戶的角度來看,8051單片機(jī)的中斷系統(tǒng)就是由如下幾個(gè)殊功能寄存器組成:

                        ·定時(shí)器控制寄存器TCON
                        ·中斷允許寄存器IE
                        ·中斷優(yōu)先級寄存器IP
                        ·串行口控制器SCON
                                      89C51單片機(jī)是一個(gè)多中斷源系統(tǒng)。有5個(gè)中斷源,即兩個(gè)外部中斷,兩個(gè)外部中斷、兩個(gè)定時(shí)器/計(jì)數(shù)器中斷和一個(gè)串行口中斷。
                                                       表5 TCON控制位的分布  
                        
                                                
                                       
                                                D7
                                       
                                                D6
                                       
                                                D5
                                       
                                                D4
                                       
                                                D3
                                       
                                                D2
                                       
                                                D1
                                       
                                                D0
                                       
                                                控制位
                                       
                                                TF1
                                       
                                                TR1
                                       
                                                TF0
                                       
                                                TR0
                                       
                                                IE1
                                       
                                                IT1
                                       
                                                IE0
                                       
                                                IT0
                                       
                           ·TF1(TCON.7):計(jì)時(shí)器 1溢出標(biāo)志,當(dāng)計(jì)時(shí)溢出時(shí),由硬件設(shè)定為 1,在執(zhí)行相對的中斷服務(wù)程序后則自動(dòng)清 0。
                           ·TR1(TCON.6):計(jì)時(shí)器1啟動(dòng)控制位,可以由軟件來設(shè)定或清除。TR1時(shí)啟動(dòng)計(jì)時(shí)器工作,TRl=0 時(shí)關(guān)閉。
                           ·TF0(TCON.5):計(jì)時(shí)器 0溢出標(biāo)志,當(dāng)計(jì)時(shí)溢出時(shí),由硬件設(shè)定為 1,在執(zhí)行相對的中斷服務(wù)程序后則自動(dòng)清 0。
                        1頁(共48頁)
               
               
                                        前言
                           ·TR0(TCON.4):計(jì)時(shí)器 0啟動(dòng)控制位,可以由軟件來設(shè)定或清除。TR0=1時(shí),啟動(dòng)計(jì)時(shí)器工作,TR0=時(shí)關(guān)閉。
                           ·IE1(TCON.3):外部中斷 1工作標(biāo)志,當(dāng)外部中斷被檢查出來時(shí),硬件自動(dòng)設(shè)定此位,在執(zhí)行中斷服務(wù)程序后,則清 0。
                           ·IT1 (TCON.2):外部中斷 1工作形式選擇,IT1=1時(shí),由下降緣產(chǎn)生外部中斷,IT1=0時(shí),則為低電位產(chǎn)生中斷。
                           ·IE0(TCON.1):外部中斷 0 工作標(biāo)志,當(dāng)外部中斷被檢查出來時(shí),硬件自動(dòng)設(shè)定此位,在執(zhí)行中斷服務(wù)程序后,則清 0。
                           ·IT0 (TCON.0):外部中斷 0工作形式選擇,IT1=1時(shí),由下降緣產(chǎn)生外部中斷,IT1=0時(shí),則為低電位產(chǎn)生中斷。
                                                表6 SCON控制位的分布
                        
                                                
                                       
                                                D7
                                       
                                                D6
                                       
                                                D5
                                       
                                                D4
                                       
                                                D3
                                       
                                                D2
                                       
                                                D1
                                       
                                                D0
                                       
                                                控制位
                                       
                                                SM0
                                       
                                                SM1
                                       
                                                SM2
                                       
                                                REN
                                       
                                                TB8
                                       
                                                RB8
                                       
                                                TI
                                       
                                                RI
                                       
                        · SM0、SM1為串行口的工作方式選擇位
                         表7  串行口工作方式                                                  
                        
                                                SM0
                                       
                                                SM1
                                       
                                                工作方式
                                       
                                                0
                                       
                                                0
                                       
                                                方式0:移位寄存器方式
                                       
                                                0
                                       
                                                1
                                       
                                                方式1:8位UART,波特率可變
                                       
                                                1
                                       
                                                0
                                       
                                                方式2:9位UART,波特率為fosc/64或fosc/32
                                       
                                                1
                                       
                                                1
                                       
                                                方式3:9位UART,波特率可變
                                       
                        

·SM2 (SCON.5):允許方式 2 或方式 3 多機(jī)通訊控制位。在方式 2 或方式 3 時(shí),如SM2=1,REN=1,則從機(jī)處于只有接收到 RB8=1(地址幀)才激發(fā)中斷請求標(biāo)志RI=1,向主機(jī)請求中斷處理。被確認(rèn)為尋址的從機(jī)復(fù)位SM2=0,才能接收 RB8=0 的數(shù)據(jù)幀;在方式 1 時(shí),如 SM2=l,則只有在接收到有效停止位時(shí)才置位中斷請求標(biāo)志位RI=1;在方式0時(shí),SM2應(yīng)為 0。

                        ·REN(SCON.4):REN,允許/禁止串行接收控制位。由軟件置位REN=1為允許串行接收狀態(tài),可啟動(dòng)串行接收器RXD,開始接收信息。軟件復(fù)位REN=0,則禁止接收。
                        1頁(共48頁)
               
               
                                        前言
                        ·TB8(SCON.3):在方式2或方式3,它為要發(fā)送的第 9位數(shù)據(jù),按需要由軟件置位。
                                                 表8  IE控制字
                        
                        
                                                
                                       
                                                D7
                                       
                                                D6
                                       
                                                D5
                                       
                                                D4
                                       
                                                D3
                                       
                                                D2
                                       
                                                D1
                                       
                                                D0
                                       
                                                控制位
                                       
                                                EA
                                       
                                                -
                                       
                                                -
                                       
                                                ES
                                       
                                                ET1
                                       
                                                EX1
                                       
                                                ET0
                                       
                                                EX0
                                       
                        ·EA(IE.7):EA=0時(shí),所有中斷停用(禁止中斷)。EA=1時(shí),各中斷的產(chǎn)生由個(gè)別的允許位決定。
                        ·-(IE.6、IE`5):保留位,無定義。
                        ·ES(IE.4):允許串行端口的中斷(ES=1允許,ES=0禁止)。
                        ·ET1(IE.3):允許計(jì)時(shí)器 1中斷(ET1=1允許,ET1=0 禁止)。
                        ·EX1(IE.2):允許外部中斷 INT1的中斷(EX1=1允許,EX1=0 禁止)。
                        ·ET0(IE.1):允許計(jì)時(shí)器 0中斷(ET0=1允許,ET0=0 禁止)。
                        ·EX0(IE.0):允許外部中斷 INT0的中斷(EX0=1允許,EX0=0 禁止)。
                                                   表9  IP控制字
                        
                                                
                                       
                                                D7
                                       
                                                D6
                                       
                                                D5
                                       
                                                D4
                                       
                                                D3
                                       
                                                D2
                                       
                                                D1
                                       
                                                D0
                                       
                                                控制位
                                       
                                                -
                                       
                                                -
                                       
                                                -
                                       
                                                PS
                                       
                                                PT1
                                       
                                                PX1
                                       
                                                PT0
                                       
                                                PX0
                                       
                        ·-(IP.7):保留位,無定義。  
                        ·-(IP.6):保留位,無定義。
                        ·-(IP.5):保留位,無定義。
                        ·PS(IP.4):設(shè)定串行端口的中斷優(yōu)先次序。
                        ·PT1(IP.3):設(shè)定時(shí)/計(jì)時(shí)器 1的優(yōu)先次序。
                        ·PX1(IP.2):設(shè)定外部中斷 INT1的優(yōu)先次序。
                        ·PT0(IP.1):設(shè)定計(jì)時(shí)器 0的優(yōu)先次序。
                        ·PX0(IP.0):設(shè)定外部中斷 INT0的優(yōu)先次序。
                        上述每位IP.*=1時(shí),則定義為高優(yōu)先級中斷,IP.*=0 時(shí),則定義為低優(yōu)先級中斷。如果同時(shí)有兩個(gè)或兩個(gè)以上優(yōu)先級相同的中斷請求時(shí),則由內(nèi)部按查詢優(yōu)
                        1頁(共48頁)
               
               
                                        前言
                        先順序來。
                                                      表10  TMODE控制字
                        
                                                
                                       
                                                D7
                                       
                                                D6
                                       
                                                D5
                                       
                                                D4
                                       
                                                D3
                                       
                                                D2
                                       
                                                D1
                                       
                                                D0
                                       
                                                控制位
                                       
                                                GATE
                                       
                                                C/T
                                       
                                                M1
                                       
                                                M0
                                       
                                                GATE
                                       
                                                C/T
                                       
                                                M1
                                       
                                                M0
                                       
                        

低4位為T0的控制字,高4位為T1的控制字。GATE為門控位,對定時(shí)器/計(jì)數(shù)器的啟動(dòng)起輔助控制作用。GATE=1時(shí),定時(shí)器/計(jì)數(shù)器的計(jì)數(shù)受外部引腳輸入電平的控制,此時(shí)只有P3口的P3.2(或P3.3)引腳即INT0(或INT1)為1才啟動(dòng)計(jì)數(shù);GATE=0時(shí),定時(shí)器/計(jì)數(shù)器的運(yùn)行不受外部輸入引腳的控制。

                        C/T為方式選擇位。C/T=0為定時(shí)器方式,采用單片機(jī)內(nèi)部振蕩脈沖的12分頻信號(hào)人作為時(shí)鐘計(jì)數(shù)脈沖,若采用12MHz的振蕩器,則定時(shí)器的計(jì)數(shù)頻率為1MHz,從定時(shí)器的計(jì)數(shù)值便可得定時(shí)時(shí)間。
                          M1、M0二位的狀態(tài)確定定時(shí)器的工作方式,詳見下表:
                             表11  定時(shí)器/計(jì)數(shù)器的方式選擇
                        
                                                M1
                                       
                                                M0
                                       
                                                工作方式
                                       
                                                0
                                       
                                                0
                                       
                                                方式0:為13位定時(shí)器/計(jì)數(shù)器
                                       
                                                0
                                       
                                                1
                                       
                                                方式1:為16位定時(shí)器/計(jì)數(shù)器
                                       
                                                1
                                       
                                                0
                                       
                                                方式2:為自動(dòng)重裝常數(shù)的8位定時(shí)器/計(jì)數(shù)器
                                       
                                                1
                                       
                                                1
                                       
                                                方式3:僅適用于T0,分成兩個(gè)8位定時(shí)器/計(jì)數(shù)器
                                       
                        2.2.7 單片機(jī)最小系統(tǒng)                        要使用單片機(jī)工作首先要知道單片機(jī)的最小系統(tǒng)。單片機(jī)最小系統(tǒng)包括晶體振蕩電路、復(fù)位開關(guān)和電源部分,單片機(jī)最小系統(tǒng)如圖3
                        
                        1頁(共48頁)
               
               
                                        前言
                        

                                

                        

                                  圖3  單片機(jī)的最小系統(tǒng)
                        
                        (1) 振蕩電路
                        

單片機(jī)是一種時(shí)序電路,必須提供脈沖信號(hào)才能正常工作,在單片機(jī)內(nèi)部已集成了振蕩器,使用晶體振蕩器,接18、19腳。如圖3所示,外部時(shí)鐘振蕩電路由晶體振蕩器和電容C1、C2構(gòu)成并聯(lián)諧振電路,連接在XTAL1、XTAL2腳兩端。對外部C1、C2的取值雖然沒有嚴(yán)格的要求,但電容的大小會(huì)影響到振蕩器頻率的高低、振蕩器的穩(wěn)定性、起振的快速性。C1、C2通常取值C1=C2=30—30PF;8051的晶振最高振蕩頻率為12M,AT89C51的外部晶振最高頻率可到24M。典型的晶振取11.0592MHz(因?yàn)榭梢詼?zhǔn)確地得到9600波特率和19200波特率,用于有串口通訊的場合)/12MHz(產(chǎn)生精確的us級時(shí)歇,方便定時(shí)操作)。

                        (2)電源電路
                        1頁(共48頁)
               
               
                                        前言
                        這當(dāng)然是必不可少的了。單片機(jī)使用的是5V電源,其中正極接40引腳,負(fù)極(地)接20引腳。
                        (3) 復(fù)位電路
                        

由電容串聯(lián)電阻構(gòu)成,由圖并結(jié)合“電容電壓不能突變”的性質(zhì),可以知道,當(dāng)系統(tǒng)一上電,RST腳將會(huì)出現(xiàn)高電平,并且,這個(gè)高電平持續(xù)的時(shí)間由電路的RC值來決定。典型的51單片機(jī)當(dāng)RST腳的高電平持續(xù)兩個(gè)機(jī)器周期以上就將復(fù)位,所以,適當(dāng)組合RC的取值就可以保證可靠的復(fù)位。一般教科書推薦C 取10u,R取10K。當(dāng)然也有其他取法的,原則就是要讓RC組合可以在RST腳上產(chǎn)生不少于2個(gè)機(jī)周期 的高電平。至于如何具體定量計(jì)算,可以參考電路分析相關(guān)書籍。

                        (4) EA
                        

訪問程序存儲(chǔ)器控制信號(hào),當(dāng)EA為低電平時(shí),對ROM的讀操作限制在外部程序存儲(chǔ)器;當(dāng)EA為高電平時(shí),則對ROM的讀操作是從內(nèi)部程序存儲(chǔ)器開始,并可延至外部程序存儲(chǔ)器。高電平就是選用內(nèi)部ROM,低電平就是不選用內(nèi)部ROM,8031內(nèi)部根本沒有ROM,需接外接ROM,所以要低電平。

                        2.3 傳感器設(shè)計(jì)                        測量溫濕度所用的傳感器為數(shù)字溫濕度傳感器DHT11.DHT11是一款含有已校準(zhǔn)數(shù)字信號(hào)輸出的溫濕度復(fù)合傳感器。它應(yīng)用專用的數(shù)字模塊采集技術(shù)和溫濕度傳感技術(shù),確保產(chǎn)品具有極高的可靠性與卓越的長期穩(wěn)定性。傳感器包括一個(gè)電阻式感濕元件和一個(gè)NTC測溫元件,并與一個(gè)高性能8位單片機(jī)相連接。因此該產(chǎn)品具有品質(zhì)卓越、超快響應(yīng)、抗干擾能力強(qiáng)、性價(jià)比極高等優(yōu)點(diǎn)。每個(gè)DHT11傳感器都在極為精確的濕度校驗(yàn)室中進(jìn)行校準(zhǔn)。校準(zhǔn)系數(shù)以程序的形式儲(chǔ)存在OTP內(nèi)存中,傳感器內(nèi)部在檢測信號(hào)的處理過程中要調(diào)用這些校準(zhǔn)系數(shù)。單線制串行接口,使系統(tǒng)集成變得簡易快捷。超小的體積、極低的功耗,信號(hào)傳輸距離可達(dá)20米以上,使其成為各類應(yīng)用甚至最為苛刻的應(yīng)用場合的最佳選則。產(chǎn)品為 4 針單排引腳封裝。連接方便,特殊封裝形式可根據(jù)用戶需求而提供。
                        
                                                1頁(共48頁)
               
               
                                        前言
                        2.3.1 DHT11的簡介                        ·相對濕度和溫度測量
                        

                                

·全部校準(zhǔn),數(shù)字輸出

                        ·卓越的長期穩(wěn)定性
                        ·無需外加器件
                        ·超長的信號(hào)傳輸距離
                        ·超低能耗
                        ·4引腳安裝
                        ·完全互換                                     圖4  DHT11
                        
                        2.3.2 引腳說明                        建議接線長度短于20米時(shí),用5K上拉電阻,大于20米時(shí)根據(jù)實(shí)際情況使用合適的上拉電阻。
                        引腳1:VDD供電3-5.5V
                        引腳2:DATA串行數(shù)據(jù),單總線
                        引腳3:NC空腳,懸空
                        引腳4:GND接地,電源負(fù)極
                        

                                

                        

                        
                                                           圖5  典型應(yīng)用電路  
                        
                                                1頁(共48頁)
               
               
                                        前言
                        2.3.3  電源引腳                          DHT11的供電電壓為35.5V。傳感器上電后,要等待 1s 以越過不穩(wěn)定狀態(tài)在此期間無需發(fā)送任何指令。電源引腳(VDD,GND)之間可增加一個(gè)100nF 的電容,用以去耦濾波。
                        2.3.4 串行接口(單線雙向)                        1.單總線傳送數(shù)據(jù)位定義
                        DATA 用于微處理器與 DHT11之間的通訊和同步,采用單總線數(shù)據(jù)格式,一次通訊時(shí)間4ms左右,數(shù)據(jù)分小數(shù)部分和整數(shù)部分,具體格式在下面說明,當(dāng)前小數(shù)部分用于以后擴(kuò)展,現(xiàn)讀出為零.操作流程如下:
                        一次完整的數(shù)據(jù)傳輸為40bit,高位先出。
                        數(shù)據(jù)格式:8bit濕度整數(shù)數(shù)據(jù)+8bit濕度小數(shù)數(shù)據(jù)
                        +8bi溫度整數(shù)數(shù)據(jù)+8bit溫度小數(shù)數(shù)據(jù)
                                     +8bit校驗(yàn)和
                        數(shù)據(jù)傳送正確時(shí)校驗(yàn)和數(shù)據(jù)等于“8bit濕度整數(shù)數(shù)據(jù)+8bit濕度小數(shù)數(shù)據(jù)+8bi溫度整數(shù)數(shù)據(jù)+8bit溫度小數(shù)數(shù)據(jù)”所得結(jié)果的末8位。
                        2.數(shù)據(jù)時(shí)序圖
                        用戶MCU發(fā)送一次開始信號(hào)后,DHT11從低功耗模式轉(zhuǎn)換到高速模式,等待主機(jī)開始信號(hào)結(jié)束后,DHT11發(fā)送響應(yīng)信號(hào),送出40bit的數(shù)據(jù),并觸發(fā)一次信號(hào)采集,用戶可選擇讀取部分?jǐn)?shù)據(jù).從模式下,DHT11接收到開始信號(hào)觸發(fā)一次溫濕度采集,如果沒有接收到主機(jī)發(fā)送開始信號(hào),DHT11不會(huì)主動(dòng)進(jìn)行溫濕度采集.采集數(shù)據(jù)后轉(zhuǎn)換到低速模式。
                        
                        

                                

                        

                        1頁(共48頁)
               
               
                                        前言
                                              圖6  數(shù)據(jù)時(shí)序圖
                        
                                                  (1)DHT11上電后,測試環(huán)境溫濕度數(shù)據(jù),并記錄數(shù)據(jù),同時(shí)DHT11的DATA數(shù)據(jù)線由上拉電阻拉高一直保持高電平;此時(shí)DHT11的DATA引腳處于輸入狀態(tài),時(shí)刻檢測外部信號(hào)。
                           (2)微處理器的I/O設(shè)置為輸出同時(shí)輸出低電平,且低電平保持時(shí)間不能小于18ms,然后微處理器的I/O設(shè)置位輸入狀態(tài),由于上拉電阻,微處理器的I/O即DHT11的DATA數(shù)據(jù)線也隨之變高,等待DHT11作出回答信號(hào),
                             
                                             圖7  主機(jī)發(fā)送起始信號(hào)
                        

(3)DHT11的DATA引腳檢測到外部信號(hào)有低電平時(shí),等待外部信號(hào)低電平結(jié)束,延遲后DHT11的DATA 引腳處于輸出狀態(tài),輸出80us的低電平作為應(yīng)答信號(hào),緊接著輸出80us的高電平通知外設(shè)準(zhǔn)備接受數(shù)據(jù),微處理器的I/O此時(shí)處于輸入狀態(tài),檢測到I/O有低電平(DHT11回應(yīng)信號(hào))后 ,等待80us 的高電平后的數(shù)據(jù)接收。

                               
                                        圖8  發(fā)送信號(hào)
                         (4)由DHT11的DATA引腳輸出40位數(shù)據(jù),微處理器根據(jù)I/O電平的變化接收40位數(shù)據(jù),位數(shù)據(jù)“0”的格式為:50us的低電平和26-28us的高電平;位數(shù)據(jù)
                        1頁(共48頁)
               
               
                                        前言
                        “1”的格式為:50us的低電平加70us的高電平。
                               
                                          圖9   位數(shù)據(jù)“0”的格式        
                           
                                           圖10 位數(shù)據(jù)“1”的格式
                          2.4 無線模塊的設(shè)計(jì)                              進(jìn)入21世紀(jì)以來,無線通訊技術(shù)有了突飛猛進(jìn)的發(fā)展,包括各種無線模塊的設(shè)計(jì)制作,目前應(yīng)用于無線數(shù)據(jù)傳輸?shù)募夹g(shù)非常多,如紅外技術(shù),藍(lán)牙技術(shù),RF技術(shù),GPRS,CDMA等。本系統(tǒng)采用微功率短距離無線通訊技術(shù),采用APC220-43。
                             APC220-43模塊是高度集成微功率半雙工無線數(shù)據(jù)傳輸模塊,其嵌入了高速單片機(jī)及高性能射頻芯片,最大可以糾24bits連續(xù)突發(fā)錯(cuò)誤。APC220模塊可以提供多個(gè)頻道的選擇,可在線修改串口速度,射頻速率,發(fā)射功率等各種工作參數(shù)。
                          2.4.1 APC220的性能                               ·1000米傳感距離(2400bps)
                        1頁(共48頁)
               
               
                                        前言
                               ·工作頻率418-455MHZ( 1KHZ步進(jìn))
                               ·靈活的軟件編程選項(xiàng)設(shè)置
                               ·內(nèi)置看門狗,保證長期可靠運(yùn)行
                         2.4.2 無線傳輸模塊APC220的接口說明                        

       APC220-43模塊內(nèi)設(shè)256B的緩沖區(qū),在緩沖區(qū)為空的情況下,用戶可以不用考慮空中波特率與串口波特率的大小關(guān)系1次傳輸256B的數(shù)據(jù),當(dāng)空中波特率大于設(shè)置的串口波特率時(shí),可1次傳輸無限長度的數(shù)據(jù)。APC220模塊有UART和USB兩種接口類型可供選擇,支持7種串口波特率設(shè)置。最重要的是它采用透明的數(shù)據(jù)傳輸模式,寫發(fā)送模塊什么,接收模塊就可以讀到什么。收發(fā)模塊采用默認(rèn)的工作參數(shù)就可以正常的進(jìn)行數(shù)據(jù)的收發(fā)。

                              APC220-43模塊共有9個(gè)接腳,具體定義如下表:
                        
                                                APC220引腳定義
                                       
                                                引腳
                                       
                                                定義
                                       
                                                說明
                                       
                                                1
                                       
                                                GND
                                       
                                                地0V
                                       
                                                2
                                       
                                                VCC
                                       
                                                3.3V-5.5V
                                       
                                                3
                                       
                                                EN
                                       
                                                電源是能端,>=1.6v或者懸空使能,<=0.5v休眠   
                                       
                                                4
                                       
                                                RXD
                                       
                                                URAT輸入口,TTL電平
                                       
                                                5
                                       
                                                TXD
                                       
                                                UART輸出口,TTL電平
                                       
                                                6
                                       
                                                AUX
                                       
                                                UART口的收發(fā)指示輸出,低接收,高輸出
                                       
                                                7
                                       
                                                SET
                                       
                                                參數(shù)設(shè)置,低有效
                                       
                                                8
                                       
                                                NC
                                       
                                                空腳
                                       
                                                9
                                       
                                                NC
                                       
                                                空腳
                                       
                        
                               表12  APC220無線模塊引腳定義
                        1頁(共48頁)
               
               
                                        前言
                        

                                

                        

                                     圖6  APC220與單片機(jī)的連接
                        2.4.3 APC220無線模塊的工作參數(shù)的設(shè)置                        

     通過SET腳進(jìn)行在線修改。在線軟件設(shè)置是通過模塊的UART/TTL口完成的(4,5PIN)和SET腳完成的,時(shí)序圖見圖7.當(dāng)EN腳置高50ms后,模塊即可正常工作(T1)。設(shè)置時(shí)首先將SET腳置低,此時(shí)無論UART口是何狀態(tài),模塊自動(dòng)將UART口轉(zhuǎn)變?yōu)?600bps,無校驗(yàn)?zāi)J剑s1ms后模塊進(jìn)入設(shè)置狀態(tài)(T2).用戶可以通過向RXD口發(fā)送設(shè)置命令,模塊校驗(yàn)后,在200ms內(nèi)TXD腳將開始返回參數(shù)信息(T3),用戶在確定設(shè)置信息無誤后置高SET腳,模塊在10ms內(nèi)切換至用戶設(shè)置的參數(shù)模式運(yùn)行(T4)。需注意的是當(dāng)模塊進(jìn)入設(shè)置狀態(tài)(SET腳為低),用戶只能發(fā)送一次設(shè)置命令 ,如發(fā)送設(shè)置命令出錯(cuò),或已經(jīng)完成設(shè)置,若需再次設(shè)置必須將SET腳置高,后重新進(jìn)入設(shè)置狀態(tài)。

                        1頁(共48頁)
               
               
                                        前言
                        

                                

                        

                        
                                    圖7  APC220在線設(shè)置工作參數(shù)時(shí)序圖
                             APC220-43設(shè)置時(shí)采用的編碼為ASCII碼,采用的波特率為9600bps,無校驗(yàn)?zāi)J剑O(shè)置命令有讀寫各一個(gè),用大寫字母表示,參數(shù)之間用空格間隔開,回車表示換行結(jié)束,格式如下:
                                                          表13 APC220設(shè)置參數(shù)表示方法
                        
                                                參數(shù)表示方法
                                       
                                                參數(shù)
                                       
                                                字節(jié)數(shù)
                                       
                                                說明
                                       
                                                頻率
                                       
                                                6
                                       
                                                單位KHZ,如434MHZ表示為434000
                                       
                                                空中速率
                                       
                                                6
                                       
                                                2400,4800,9600,19200bps用1,2,3,4表示
                                       
                                                發(fā)射功率
                                       
                                                1
                                       
                                                0至9,設(shè)置0為-1dBm,9為13dBm(20mW)
                                       
                                                串口速率
                                       
                                                1
                                       
                                                1200,2400,4800,9600,19200,38400,57600bps用0,1,2,3,4,5,6表示
                                       
                                                串口校驗(yàn)
                                       
                                                1
                                       
                                                串口校驗(yàn)0為無效校驗(yàn),1為偶校驗(yàn),2為奇校驗(yàn)
                                       
                        1頁(共48頁)
               
               
                                        前言
                        
                        2.4.4 APC220無線模塊的技術(shù)指示                                  表14  APC220無線模塊的技術(shù)指示
                        
                                                APC220-43技術(shù)指示
                                       
                                                工作方式
                                       
                                                418MHZ to 455MHZ(1MHZ步進(jìn))
                                       
                                                調(diào)制方式
                                       
                                                GFSK
                                       
                                                頻率間隔
                                       
                                                200KHZ
                                       
                                                發(fā)射功率
                                       
                                                20mw(10級可調(diào))
                                       
                                                接收靈敏度
                                       
                                                -118dBm@1200bps
                                       
                                                空中傳輸速率
                                       
                                                2400-9600bps
                                       
                                                接口速率
                                       
                                                1200-57600bps
                                       
                                                接口校驗(yàn)方式
                                       
                                                8E1/8N1/801
                                       
                                                接口緩沖空間
                                       
                                                256bytes
                                       
                                                工作濕度
                                       
                                                10%-90%
                                       
                                                工作溫度
                                       
                                                -30 -85
                                       
                                                電源
                                       
                                                3.3- 5.5V(50mv紋波)
                                       
                                                發(fā)射電流
                                       
                                                <=35mV@20mW
                                       
                                                接收電源
                                       
                                                <=28mA
                                       
                                                休眠電源
                                       
                                                <=5uA
                                       
                                                傳輸距離
                                       
                                                1200米傳輸距離(1200bps開闊的可視距離)
                                       
                                                尺寸
                                       
                                                37.5mm×18.3mm×7.0mm
                                       
                        
                        2.5鍵盤和顯示模塊的設(shè)計(jì)                           2.5.1顯示模塊設(shè)計(jì)                             考慮到整個(gè)應(yīng)用系統(tǒng)的工作環(huán)境特別是對亮度的要求等因素,我們選擇了
                        1頁(共48頁)
               
               
                                        前言
                        LCD1602液晶顯示器進(jìn)行溫濕度數(shù)據(jù)的顯示。液晶顯示器LCD體積小,質(zhì)量輕,功耗極低。
                        
                                                         
                        
                                           圖8  顯示電路原理圖
                            2.5.2鍵盤模塊設(shè)計(jì)                           鍵盤是數(shù)據(jù)輸入、參數(shù)設(shè)定和手動(dòng)控制的輸入設(shè)備,它的作用是進(jìn)行十六進(jìn)制字符的輸入。本文采用4×4式鍵盤陣列通過8各I/O口線識(shí)別16各按鍵。該按鍵需要兩組信號(hào)線,一組作為輸出信號(hào)線(稱為行線),另一組作為輸入信號(hào)線(稱為列線)。
                        1頁(共48頁)
               
               
                                        前言
                                    
                                                圖9    鍵盤接線電路
                        
                        
                                                         
                                           圖10  鍵盤電路
                        按鍵識(shí)別有兩種方法:一是行掃描法,另一種是線反轉(zhuǎn)法。本系統(tǒng)采用行掃描法,CPU通過輸出鎖存器在某一行線上送出0,通過輸入緩沖器檢查列線是否有0,進(jìn)行按鍵識(shí)別。若有按鍵壓下,則轉(zhuǎn)入逐行掃描,同時(shí)檢測列線狀態(tài)。
                                                1頁(共48頁)
               
               
                                        前言
                        2.6執(zhí)行模塊的設(shè)計(jì)                        執(zhí)行模塊包括調(diào)節(jié)設(shè)備如噴水機(jī),吹風(fēng)機(jī),加熱器,降溫等,調(diào)節(jié)大棚內(nèi)的溫濕度狀態(tài),還有報(bào)警裝置。
                            2.6.1調(diào)節(jié)模塊                         考慮到單片機(jī)的引腳的驅(qū)動(dòng)能力有限,在本系統(tǒng)中采用了單片機(jī)的I/O口連接三極管的基集控制三極管的通斷,用三極管的集電極電流Ic來驅(qū)動(dòng)控制5V繼電器的吸合,從而控制12V電磁閥的開關(guān),實(shí)現(xiàn)對植物滴灌的控制,以調(diào)節(jié)濕度。電路中,因?yàn)閱纹瑱C(jī)輸出口的電流很小,無法驅(qū)動(dòng)繼電器,所以在繼電器輸入端應(yīng)該接一個(gè)PNP三極管,用來放大電流,驅(qū)動(dòng)繼電器工作。而為了保護(hù)此三極管的正常工作,還應(yīng)在三極管的輸出端(集電極)加上一個(gè)二極管用來保護(hù)三極管不被過流擊穿。在protuse仿真中找不到電磁閥,用電燈泡代替表示電磁閥。下圖為單片機(jī)的I/O口通過繼電器驅(qū)動(dòng)電磁閥噴水:
                              
                                    圖11   單片機(jī)通過繼電器驅(qū)動(dòng)電磁閥  
                        1頁(共48頁)
               
               
                                        前言
                        當(dāng)濕度過高時(shí),單片機(jī)I/O口通過繼電器驅(qū)動(dòng)風(fēng)扇的電動(dòng)機(jī)使風(fēng)扇運(yùn)轉(zhuǎn)來降低濕度。
                        
                        
                                 2.6.2 報(bào)警模塊                        當(dāng)所測溫度或濕度超過設(shè)定值的上下限,就會(huì)報(bào)警。電磁式蜂鳴器由振蕩器、電磁線圈、磁鐵、振動(dòng)膜片及外殼等組成。接通電源后,振蕩器產(chǎn)生的音頻信號(hào)電流通過電磁線圈,使電磁線圈產(chǎn)生磁場,振動(dòng)膜片在電磁線圈和磁鐵的相互作用下,周期性地振動(dòng)發(fā)聲。
                                                   
                                                    圖12 電磁式蜂鳴器
                        

蜂鳴器發(fā)聲原理是電流通過電磁線圈,使電磁線圈產(chǎn)生磁場來驅(qū)動(dòng)振動(dòng)膜發(fā)聲的,因此需要一定的電流才能驅(qū)動(dòng)它,單片機(jī)IO引腳輸出的電流較小,單片機(jī)輸出的TTL電平基本上驅(qū)動(dòng)不了蜂鳴器,因此需要增加一個(gè)電流放大的電路。S51增強(qiáng)型單片機(jī)實(shí)驗(yàn)板通過一個(gè)三極管來放大驅(qū)動(dòng)蜂鳴器,原理圖見下面圖12:

                        1頁(共48頁)
               
               
                                        前言
                        

                                

                        

                                        圖13   單片機(jī)驅(qū)動(dòng)蜂鳴器
                        

如圖所示,蜂鳴器的正極接到VCC(+5V)電源上面,蜂鳴器的負(fù)極接到三極管的發(fā)射極E,三極管的基級B經(jīng)過限流電阻R1后由單片機(jī)的I/O口控制,當(dāng)該I/O輸出高電平時(shí),三極管T1截止,沒有電流流過線圈,蜂鳴器不發(fā)聲;當(dāng)I/O口輸出低電平時(shí),三極管導(dǎo)通,這樣蜂鳴器的電流形成回路,發(fā)出聲音。因此,我們可以通過程序控制I/O口的電平來使蜂鳴器發(fā)出聲音和關(guān)閉。程序中改變單片機(jī)I/O口輸出波形的頻率,就可以調(diào)整控制蜂鳴器音調(diào),產(chǎn)生各種不同音色、音調(diào)的聲音。另外,改變單片機(jī)I/O口輸出電平的高低電平占空比,則可以控制蜂鳴器的聲音大小。

                        
                                                1頁(共48頁)
               
               
                                        前言
                        3.軟件設(shè)計(jì)                              與硬件設(shè)計(jì)相對應(yīng),軟件設(shè)計(jì)也采用模塊化程序設(shè)計(jì)的方式,包括主程序模塊,初始化參數(shù)設(shè)置模塊,無線通訊發(fā)送模塊,無線通訊接收模塊,數(shù)據(jù)采集程序模塊,顯示模塊。
                              3.1 初始化子程序                               初始化程序主要完成以下功能:當(dāng)系統(tǒng)啟動(dòng)時(shí)確定電磁閥關(guān)閉、程序設(shè)置溫濕度的上下限值的初始值、用于定時(shí)器T1、TO的初始化、串口中斷的初始化。
                        /*------------------------------------------------
                                        定時(shí)器0初始化
                        ------------------------------------------------*/
                        void TIM0init(void)//定時(shí)器0初始化
                        {
                        
                          TMOD=0x02;//定時(shí)器0工作方式2,TH0是重裝值,TL0是初值
                          TH0=0x00; //重載值
                          TL0=0x00; //初始化值
                          ET0=1;   //開中斷
                          TR0=1;   
                        }
                        /*------------------------------------------------
                                          外部中斷0初始化
                        ------------------------------------------------*/
                        void EX0init(void)
                        {
                         IT0 = 1;   //指定外部中斷0下降沿觸發(fā),INT0 (P3.2)
                         EX0 = 1;   //使能外部中斷
                         EA = 1;    //開總中斷
                        }
                        
                        
                                                1頁(共48頁)
               
               
                                        前言
                        3.2 數(shù)據(jù)采集模塊                        軟件流程
                        準(zhǔn)備開始標(biāo)志:
                        當(dāng)?shù)碗娖降陀?8ms后,單片機(jī)將輸出端口改為輸入,開始讀取DHT11的數(shù)據(jù)。然后將電平拉高,等待DHT11響應(yīng),DHT11將電平信號(hào)拉低以示響應(yīng)單片機(jī)信號(hào),而后將電平拉高準(zhǔn)備發(fā)送數(shù)據(jù)信息。
                        讀取數(shù)據(jù)過程:
                        

DHT11先發(fā)送12—14us的低電平信號(hào),然后緊跟高電平,如果在116—118us左右,將自動(dòng)識(shí)別為1,如果在26—28us左右將識(shí)別為0。這樣循環(huán)40次,共40位二進(jìn)制數(shù),每八位為一組,其中包括八位濕度整數(shù)位、八位濕度小數(shù)位、八位溫度整數(shù)位,八位溫度小數(shù)位、八位較檢位。由于設(shè)計(jì)的需要,現(xiàn)只讀取八位濕度整數(shù)值,將讀取的濕度值傳給單片機(jī)。

                        程序如下:
                        #include"DHT11.h"
                        unsigned char wendu,shidu;
                        
                        void delay_us()              // 延時(shí)子程序
                        {
                                  unsigned char i;
                                  i--;
                                  i--;
                                  i--;
                                  i--;
                                  i--;
                                  i--;
                        }
                        
                        void delayms(unsigned int x)   // 根據(jù)給定值進(jìn)行延時(shí)子程序
                        1頁(共48頁)
               
               
                                        前言
                        
                        {
                        
                        unsigned char n;
                        
                        while((x--)!=0)
                        
                        {
                        
                        for(n=0;n<115;n++){;}
                        
                        }
                        
                        }
                        
                        
                        char receive()
                        {
                                      unsigned int i;                  
                                      unsigned char temp,respond;      
                                      unsigned char com_data=0;
                                      for(i=0;i<=7;i++)               
                                      {
                                                    respond=2;
                                                    while((!TRH)&&respond++);
                                                    delay_us();
                                                    delay_us();
                                                    delay_us();
                                         if(TRH)
                        1頁(共48頁)
               
               
                                        前言
                                         {
                                                                      temp=1;
                                                                   respond=2;
                                                                   while((TRH)&&respond++);
                                         }
                                         else
                                                                     temp=0;
                                         com_data<<=1;
                                         com_data|=temp;
                                      }
                                      return(com_data);
                        }
                        //濕度讀取子程序
                        //溫度高8位== TL_data
                        //溫度低8位== TH_data
                        //濕度高8位== RH_data
                        //濕度低8位== RH_data
                        //校驗(yàn) 8位 == CK_data
                        //調(diào)用的程序有 delay();, Delay_5us();,RECEIVE();
                        
                        void read()
                        {
                                      unsigned int respond;
                                      unsigned int RH_temp,RL_temp,TH_temp,TL_temp,CK_temp,untemp,
                              RH_data,RL_data,TH_data,TL_data,CK_data;
                                      //主機(jī)拉低18ms
                                      TRH=0;
                                      delayms(18);
                                      TRH=1;
                        1頁(共48頁)
               
               
                                        前言
                                      //DATA總線由上拉電阻拉高 主機(jī)延時(shí)20us
                                      delay_us();
                                      delay_us();
                                      delay_us();
                                      delay_us();
                                      TRH=1;
                                      //判斷DHT11是否有低電平響應(yīng)信號(hào) 如不響應(yīng)則跳出,響應(yīng)則向下運(yùn)行
                                      if(!TRH)
                                      {
                                                     respond=2;
                                                     //判斷DHT11發(fā)出 80us 的低電平響應(yīng)信號(hào)是否結(jié)束
                                                     while((!TRH)&&respond++);
                                                     respond=2;
                                                     //判斷從機(jī)是否發(fā)出 80us 的高電平,如發(fā)出則進(jìn)入數(shù)據(jù)接收狀態(tài)
                                                     while((TRH)&&respond++);
                                                     //數(shù)據(jù)接收
                                                     RH_temp=receive();
                                                     RL_temp=receive();
                                                     TH_temp=receive();
                                                     TL_temp=receive();
                                                     CK_temp=receive();
                                                     TRH=1;
                                                     untemp=(RH_temp+RL_temp+TH_temp+TL_temp);
                                                     //數(shù)據(jù)校驗(yàn)
                                                    if(CK_temp==untemp)
                                                    {
                                                                  RH_data=RH_temp;
                                                                  RL_data=RL_temp;
                                                                  TH_data=TH_temp;
                        1頁(共48頁)
               
               
                                        前言
                                                                  TL_data=TL_temp;
                                                                  CK_data=CK_temp;
                                                    }
                                      }
                                      //x是溫度值   y是濕度值
                                      wendu=(unsigned char)              (TH_data );
                                      shidu=(unsigned char)              (RH_data );
                        }
                        
                        
                        3.3 顯示模塊                           初始化LCD1602顯示模塊,設(shè)置8位格式,2行,5*7矩陣顯示,整體顯示,關(guān)光標(biāo),不閃爍設(shè)定輸入方式,增量不移位,清除屏幕顯示,延時(shí)等待,將采集到的溫濕度數(shù)據(jù)進(jìn)行轉(zhuǎn)換,十六進(jìn)制轉(zhuǎn)換成十進(jìn)制,輸入相應(yīng)的地址數(shù)據(jù),延時(shí)等待,輸入需要顯示的數(shù)據(jù)。
                        /*------------------------------------------------
                                            主函數(shù)
                        ------------------------------------------------*/
                        void main(void)
                        {
                         EX0init(); //初始化外部中斷
                         TIM0init();//初始化定時(shí)器
                        
                         LCD_Init();           //初始化液晶
                         delayms(20);          //延時(shí)有助于穩(wěn)定
                         LCD_Clear();          //清屏
                         LCD_Write_String(5,0,"RECEIVE");
                         LCD_Write_Char(9,1,0xdf);//右上角點(diǎn)
                         LCD_Write_Char(10,1,'C');//
                         LCD_Write_Char(15,1,'%');//用于顯示溫度濕度單位
                        
                         while(1)//主循環(huán)
                           {
                        1頁(共48頁)
               
               
                                        前言
                        
                            if(irok)                        //如果接收好了進(jìn)行數(shù)據(jù)處理
                                        {   
                                        Ircordpro();
                                          irok=0;
                                        }
                        
                            if(irpro_ok)                  //如果處理好后進(jìn)行工作處理
                             {  
                                          LCD_Write_Char(1,1,display[adres1]); //寫地址位
                                            LCD_Write_Char(2,1,display[adres2]);              
                                            LCD_Write_Char(7,1,display[dat1]); //寫數(shù)據(jù)1
                                             LCD_Write_Char(8,1,display[dat2]);              
                                            LCD_Write_Char(13,1,display[dat3]); //寫數(shù)據(jù)2
                                            LCD_Write_Char(14,1,display[dat4]);
                                      irpro_ok=0;                       //處理完成標(biāo)志   
                                      delay500ms(); delay500ms();
                             }
                           }
                        }
                        
                        終端液晶顯示程序
                        
                        
                        #include "1602.h"
                        
                        #include "delay.h"
                        sbit RS = P2^4;   //定義端口
                        sbit RW = P2^5;
                        sbit EN = P2^6;
                        
                        #define RS_CLR RS=0
                        #define RS_SET RS=1
                        
                        #define RW_CLR RW=0
                        #define RW_SET RW=1
                        
                        #define EN_CLR EN=0
                        #define EN_SET EN=1
                        
                        #define DataPort P0
                        
                        1頁(共48頁)
               
               
                                        前言
                        /*------------------------------------------------
                                      判忙函數(shù)
                        ------------------------------------------------*/
                         bit LCD_Check_Busy(void)
                         {
                         DataPort= 0xFF;
                         RS_CLR;
                         RW_SET;
                         EN_CLR;
                         _nop_();
                         EN_SET;
                         return (bit)(DataPort & 0x80);
                         }
                        /*------------------------------------------------
                                      寫入命令函數(shù)
                        ------------------------------------------------*/
                         void LCD_Write_Com(unsigned char com)
                         {  
                         while(LCD_Check_Busy()); //忙則等待
                         RS_CLR;
                         RW_CLR;
                         EN_SET;
                         DataPort= com;
                         _nop_();
                         EN_CLR;
                         }
                        /*------------------------------------------------
                                      寫入數(shù)據(jù)函數(shù)
                        ------------------------------------------------*/
                         void LCD_Write_Data(unsigned char Data)
                         {
                         while(LCD_Check_Busy()); //忙則等待
                         RS_SET;
                         RW_CLR;
                         EN_SET;
                         DataPort= Data;
                         _nop_();
                         EN_CLR;
                         }
                        
                        /*------------------------------------------------
                                        清屏函數(shù)
                        1頁(共48頁)
               
               
                                        前言
                        ------------------------------------------------*/
                         void LCD_Clear(void)
                         {
                         LCD_Write_Com(0x01);
                         delayms(5);
                         }
                        /*------------------------------------------------
                                      寫入字符串函數(shù)
                        ------------------------------------------------*/
                         void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s)
                         {     
                         if (y == 0)
                                       {     
                                       LCD_Write_Com(0x80 + x);    //表示第一行
                                       }
                         else
                                       {      
                                       LCD_Write_Com(0xC0 + x);      //表示第二行
                                       }        
                         while (*s)
                                       {     
                         LCD_Write_Data( *s);     
                         s ++;     
                                       }
                         }
                        /*------------------------------------------------
                                      寫入字符函數(shù)
                        ------------------------------------------------*/
                         void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data)
                         {     
                         if (y == 0)
                                       {     
                                       LCD_Write_Com(0x80 + x);     
                                       }   
                         else
                                       {     
                                       LCD_Write_Com(0xC0 + x);     
                                       }        
                         LCD_Write_Data( Data);  
                         }
                        /*------------------------------------------------
                                      初始化函數(shù)
                        1頁(共48頁)
               
               
                                        前言
                        ------------------------------------------------*/
                         void LCD_Init(void)
                         {
                           LCD_Write_Com(0x38);    /*顯示模式設(shè)置*/
                           delayms(5);
                           LCD_Write_Com(0x38);
                           delayms(5);
                           LCD_Write_Com(0x38);
                           delayms(5);
                           LCD_Write_Com(0x38);  
                           LCD_Write_Com(0x08);    /*顯示關(guān)閉*/
                           LCD_Write_Com(0x01);    /*顯示清屏*/
                           LCD_Write_Com(0x06);    /*顯示光標(biāo)移動(dòng)設(shè)置*/
                           delayms(5);
                           LCD_Write_Com(0x0C);    /*顯示開及光標(biāo)設(shè)置*/
                           }
                        
                        
                        3.4 無線模塊                         3.4.1 無線數(shù)據(jù)接收子程序                        /*****************************************************
                        發(fā)送8位地址和溫度濕度
                        地址位定為0x01  
                        ******************************************************/
                        //#include
                        #include
                        sbit send0=P1^0;
                        sbit send1=P1^1;//接LED用于顯示P1.0,P1.1的電位
                        unsigned char temp,n;
                        unsigned char Adress=0x01;//定義地址
                        unsigned char  check=0;
                        
                        1頁(共48頁)
               
               
                                        前言
                        void Send(unsigned char x)//     發(fā)送數(shù)據(jù)函數(shù)
                        {
                            unsigned char i;
                            temp=0x80;         //temp用于取位
                            for(i=0;i<8;i++)
                                       {
                                         
                                          if(temp&x)//如果對應(yīng)位為1,則發(fā)送011
                                          {
                                                                  send0=0;send1=send0;
                                                                  delayms(1);
                                                                  send0=1;send1=send0;
                                                                  delayms(2);
                        
                                                                  check++;                                                          //              校驗(yàn)位生成
                                           }
                                          else          //否則發(fā)送01
                                            {
                                                          send0=0;send1=send0;
                                     delayms(1);
                                     send0=1;send1=send0;
                                           delayms(1);
                                          }
                                         
                                          temp>>=1;     //將對應(yīng)位右移,取下一位
                        
                                       }
                        }
                        
                        1頁(共48頁)
               
               
                                        前言
                        void Send_check(unsigned char x)//     發(fā)送數(shù)據(jù)函數(shù)
                        {
                            unsigned char i;
                            temp=0x80;         //temp用于取位
                            for(i=0;i<8;i++)
                                       {
                                         
                                          if(temp&x)//如果對應(yīng)位為1,則發(fā)送011
                                           {
                                                                  send0=0;send1=send0;
                                                                  delayms(1);
                                                                  send0=1;send1=send0;
                                                                  delayms(2);
                        
                                           }
                                          else          //否則發(fā)送01
                                            {
                                                          send0=0;send1=send0;
                                     delayms(1);
                                     send0=1;send1=send0;
                                           delayms(1);
                                          }
                                         
                                          temp>>=1;     //將對應(yīng)位右移,取下一位
                        
                                       }
                        }
                        
                        void main()
                        1頁(共48頁)
               
               
                                        前言
                        {
                          while(1)
                         {
                                      read();              //讀取溫度濕度函數(shù)
                        
                                       n=2;
                                       while(n)
                                         {
                                                                       //頭碼發(fā)送
                        
                                                       check=0;       //校驗(yàn)碼數(shù)據(jù)
                                          send0=1;
                                          send1=1;
                                          delayms(20);//間隔
                                         
                                         
                                          Send(Adress);//發(fā)送地址
                                          Send(wendu);//發(fā)送數(shù)據(jù)1
                                          Send(shidu);//發(fā)送數(shù)據(jù)2
                        
                        /**********發(fā)送校驗(yàn)位************校驗(yàn)碼值為  地址  溫度   濕度  所有1的個(gè)數(shù)*/
                                                    Send_check(check);                             //發(fā)送校驗(yàn)位一共發(fā)送了1 8 8 8 8=33位
                                                    
                        
                        /***************************************************************/
                                      
                                          send0=0;
                                          send1=0;
                        1頁(共48頁)
               
               
                                        前言
                                          delayms(20);
                        
                                          --n;     //循環(huán)2次
                                           }
                                       delayms(1000);// delayms(4000);                2S鐘發(fā)送一次
                        
                                      
                                       
                                      }
                        }
                        3.4.2 無線數(shù)據(jù)接收處理模塊                        /*-----------------------------------------------
                             接收1個(gè)頭碼   8位地址碼   2個(gè)8位數(shù)據(jù)  25位
                        液晶分別顯示 地址數(shù),數(shù)據(jù)1,數(shù)據(jù)2  
                        
                        ------------------------------------------------*/
                        //#include    //包含頭文件,一般情況不需要改動(dòng),頭文件包含特殊功能寄存器的定義
                        
                        #include<1602.h>
                        sbit IR=P3^2; //無線接口標(biāo)志
                        
                        /*------------------------------------------------
                                        全局變量聲明
                        ------------------------------------------------*/
                        
                        
                        unsigned char  irtime;//紅外用全局變量
                        
                        bit irpro_ok,irok;
                        unsigned char adres1,adres2,dat1,dat2,dat3,dat4;//顯示變量,地
                            址,數(shù)據(jù)1,數(shù)據(jù)2 的個(gè)位和十位
                        unsigned char irdata[25];//存儲(chǔ)變量
                        Unsigned char display[10]={'0','1','2','3','4','5','6','7','8','9'};//顯示字符數(shù)組
                        unsigned char recv_data[3];
                        1頁(共48頁)
               
               
                                        前言
                        /*------------------------------------------------
                                          函數(shù)聲明
                        ------------------------------------------------*/
                        
                        //void Ir_work(void);
                        void Ircordpro(void);
                        
                        /*------------------------------------------------
                                          定時(shí)器0中斷處理
                        ------------------------------------------------*/
                        
                        void tim0_isr (void) interrupt 1 using 1
                        {
                         irtime++; //用于計(jì)數(shù)2個(gè)下降沿之間的時(shí)間
                        }
                        
                        /*------------------------------------------------
                                          外部中斷0中斷處理
                        ------------------------------------------------*/
                        void EX0_ISR (void) interrupt 0 //外部中斷0服務(wù)函數(shù)
                        {
                         static unsigned char  i;             //接收無線信號(hào)處理
                         static bit startflag;                //是否開始處理標(biāo)志位
                        
                          if(startflag)                         
                           {
                                  if(irtime<160&&irtime>=140)//引導(dǎo)碼 TC9012的頭碼,2*19ms/0.256ms
                                     i=0;
                                            irdata=irtime;//存儲(chǔ)每個(gè)電平的持續(xù)時(shí)間,用于以后判斷是0還是1
                                           irtime=0;
                                            i++;
                        
                                           if(i==25)       //接收完頭碼和24位數(shù)據(jù),數(shù)據(jù)自加到25
                                   {
                        
                                           irok=1;
                                           i=0;
                                         }
                            }
                           else
                        1頁(共48頁)
               
               
                                        前言
                                      {
                                      irtime=0;
                                      startflag=1;
                                      }
                        
                        }
                        /*------------------------------------------------
                                        無線碼值處理
                        ------------------------------------------------*/
                        void Ircordpro(void)//無線碼值處理函數(shù)
                        {
                          unsigned char i, j, k ;
                          unsigned char cord,value;
                        
                          if(irdata[0]>140&&irdata[0]<160)
                           {
                              k=1;
                             for(i=0;i<=2;i++)
                             {
                                for(j=1;j<=8;j++) //處理1個(gè)字節(jié)8
                                 {
                                    cord=irdata[k];
                        if(cord>10)    //大于某值為1,這個(gè)和晶振有絕對關(guān)系,這里使用12M計(jì)算,此值可以有一定誤差    3ms-/0.256
                                       value|=0x01;
                                    if(j<8)
                                                               {
                                                    value<<=1;
                                                         }
                                           k++;
                                  }
                                       recv_data=value;[ i]
                                      value=0;
                             }
                             adres1=recv_data[0]/10;//地址個(gè)位十位
                            adres2=recv_data[0]%10;
                                      
                             dat1=recv_data[1]/10;//數(shù)據(jù)1個(gè)位十位
                            dat2=recv_data[1]%10;
                        
                             dat3=recv_data[2]/10;//數(shù)據(jù)2個(gè)位十位
                            dat4=recv_data[2]%10;
                        

                        
                            irpro_ok=1;//處理完畢標(biāo)志位置1
                           }
                        }
                        
                        
                        
                         4.結(jié)束語                            到此為止,我的《溫室大棚溫濕度控制》已經(jīng)完成了。在這幾個(gè)月的時(shí)間里,先后完成了資料的收集、設(shè)計(jì)方案的擬訂、畫圖等多方面的工作。首先,通過這次應(yīng)用系統(tǒng)設(shè)計(jì),在很大程度上提高了自己的獨(dú)立思考能力和單片機(jī)的專業(yè)知識(shí),其次,我也深刻了解寫一篇應(yīng)用系統(tǒng)的步驟和格式,有過這樣的一次訓(xùn)練,相信在接下來的日子我們都會(huì)了,而且會(huì)做得更好。
                             我所寫的系統(tǒng)主要根據(jù)目前溫室大棚技術(shù)的發(fā)展趨勢和國內(nèi)實(shí)際的應(yīng)用特點(diǎn)和要求,采用了自動(dòng)化的結(jié)構(gòu)形式,實(shí)現(xiàn)對土壤濕度的自動(dòng)檢測和控制。
                            系統(tǒng)以單片機(jī)AT89C51為核心部件,單片機(jī)系統(tǒng)完成對溫濕度信號(hào)的采集、處理、顯示等功能;用Protuse軟件繪制電路原理圖。該系統(tǒng)的主要特點(diǎn)是:
                        1)適用性強(qiáng),用戶只需對界面參數(shù)進(jìn)行設(shè)置并啟動(dòng)系統(tǒng)正常運(yùn)行便可實(shí)現(xiàn)對濕度大棚溫濕度的實(shí)時(shí)監(jiān)控。
                            2)可對作物的生產(chǎn)環(huán)境進(jìn)行適時(shí)、適當(dāng)?shù)目刂,不僅有利于作物的生長發(fā)育,而且避免了了資源的浪費(fèi),起到了提高作物產(chǎn)量的作用。
                                                 由于水平有限,我的設(shè)計(jì)還存在許多不足之處,有許多地方需要完善,還望各位老師多加批評指點(diǎn)。
                        



作者: 人生如夢超    時(shí)間: 2016-9-7 11:15
pcb有嗎?
作者: 牌面滿滿    時(shí)間: 2018-4-10 10:23
謝謝啊,有的參考的東西了
作者: 18246288682    時(shí)間: 2018-5-1 21:43
謝謝 分享
作者: lexbunre    時(shí)間: 2020-7-13 17:14
你好,請問有原理圖嗎?





歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1