




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
基于單片機的智能溫室溫濕度控制系統(tǒng)的設(shè)計摘要:在農(nóng)業(yè)生產(chǎn)中,溫室大棚的應(yīng)用越來越廣泛,為人們創(chuàng)造了更高的經(jīng)濟效益。在溫室大棚中,最關(guān)鍵的是溫濕度控制方法。傳統(tǒng)的溫濕度控制方法完全是人工的,不僅費時費力,而且效率低。本文旨在論述一種溫室大棚溫濕度控制系統(tǒng)的設(shè)計,該系統(tǒng)主要由單片機AT89S52、溫濕度傳感器DHT11、無線通信模塊nRF2401、液晶顯示LCD1602等組成。采用溫濕度傳感器DHT11來測量溫濕度,它的精確度高,而且DHT11直接是輸出數(shù)字信號,可直接與單片機相連。通過無線傳感器nRF2401來進行信號傳送,這樣能夠降低布線的麻煩。顯示局部使用的是LCD1602來顯示溫濕度。本系統(tǒng)的核心是單片機AT89S52,接收傳感器所測的數(shù)據(jù)并處理,然后執(zhí)行各種操作。本系統(tǒng)智能度高,可靠性高,系統(tǒng)工作穩(wěn)定,且綜合性價比擬高,具有較大的市場應(yīng)用前景。關(guān)鍵詞:單片機,溫濕度控制系統(tǒng),溫濕度傳感器DHT11,LCD顯示,無線模塊nRF2401DesignoftemperatureandhumidityintelligentgreenhousecontrolsystembasedonSCMAbstract:Inagriculturalproduction,moreandmoreextensiveapplicationinthegreenhouse,createmoreeconomicbenefitsforthepeople.Inthegreenhouse,themostcriticalisthetemperatureandhumiditycontrolmethod.Temperatureandhumiditycontroloftraditionalmethodsisentirelyartificial,notonlytime-consumingeffort,andlowefficiency.ThesystemconsistofthemicrocontrollerAT89S52,digitaltemperatureandhumiditysensorDHT11,wirelesssensorNRF2401,LCD1602andothercomponents.TomeasurethetemperatureandhumidityusingtemperatureandhumiditysensorDHT11,itsprecisionishigh,andtheDHT11isdirectlyoutputdigitalsignal,canbedirectlyconnectedwiththesingle-chipmicrocomputer.ThroughtheNRF2401totransmitsignals,itcanreducethetroubleofwiring.ThedisplaypartisusingLCD1602todisplaythetemperatureandhumidity.ThecoreofthissystemisAT89S52,themeasuredsensordatareceivedandprocessed,andthenperformvariousoperations.Thesystemofhighintelligence,highreliability,thesystemisstable,andthehigherprice,hasgreatmarketprospect.Keyword:SCM,Temperatureandhumiditycontrolsystem,TemperatureandhumiditysensorDHT11,LCDdisplay,WirelessmoduleNRF2401目錄1引言11.1課題背景11.2立題的目的及意義11.3國內(nèi)外的研究現(xiàn)狀及開展趨勢21.4本系統(tǒng)主要研究內(nèi)容32系統(tǒng)總體設(shè)計32.1系統(tǒng)功能設(shè)計32.2系統(tǒng)的組成42.3系統(tǒng)工作原理43系統(tǒng)硬件設(shè)計63.1單片機系統(tǒng)設(shè)計63.2溫濕度傳感器設(shè)計113.3無線模塊設(shè)計163.4液晶顯示裝置設(shè)計213.5報警系統(tǒng)設(shè)計234系統(tǒng)軟件設(shè)計254.1系統(tǒng)初始化模塊264.2數(shù)據(jù)采集模塊264.3無線模塊274.4顯示模塊294.5報警模塊305硬件調(diào)試31結(jié)論36附錄37參考文獻71致謝741引言1.1課題背景在現(xiàn)代的大棚種植技術(shù)中,溫度、濕度是大棚蔬菜能否茁壯成長的重要因素。目前我國大棚生產(chǎn)規(guī)模雖然空前巨大,但是大棚的設(shè)備比擬陳舊,溫度采集方式落后,農(nóng)村采用煤油溫度計的溫度采集方式,不僅溫度采集較為老套,并且費時費力,不利于大棚生產(chǎn)規(guī)模的擴大,也不利信息化程度的提高[1]。農(nóng)業(yè)是人類社會最古老的行業(yè),是各行各業(yè)的根底,也是人類頓以生存的最重要的行業(yè),由傳統(tǒng)農(nóng)業(yè)向現(xiàn)代化農(nóng)業(yè)轉(zhuǎn)變,由粗放經(jīng)營向集約經(jīng)營轉(zhuǎn)變,必須要求農(nóng)業(yè)科技有一個大的開展,進行一次新的農(nóng)業(yè)技術(shù)革命[2]。科技的開展促進了農(nóng)業(yè)的開展,溫室大棚在農(nóng)業(yè)中的應(yīng)用越來越廣泛。傳統(tǒng)的溫室大棚的自動化程度很低,根本是是粗放型的人工操作,即便對于所給定的量,在操作中無法進行有效的控制,很大程度上限制了溫室大棚的經(jīng)濟效益。以前種植植被一般都用溫室栽培,為了充分的利用好溫室栽培這一高效技術(shù),就必需有一套科學(xué)的,先進的管理方法,用以對不同種類植被生長的各個時期所需的溫度及濕度等進行實時的監(jiān)控。溫濕度控制對于單片機的應(yīng)用具有一定的實際意義,它代表了一類自動控制的方法,而且其應(yīng)用十分廣泛。1.2立題的目的及意義AT89S52單片機是常用于控制的芯片,在智能儀器儀表、工業(yè)檢測控制、機電一體化等方面取得了令人矚目的成果,用其作為溫濕度控制系統(tǒng)的實例也很多。使用AT89S52單片機能夠?qū)崿F(xiàn)溫濕度全程的自動控制,而且AT89S52單片機易于學(xué)習(xí)、掌握,性價比高。使用AT89S52單片機設(shè)計溫濕度控制系統(tǒng),可以及時、精確的反映室內(nèi)的溫度以及濕度的變化。完成諸如升溫到特定溫度、降溫到特定溫度、在溫度上下限范圍內(nèi)保持恒溫等多種控制方式,在濕度控制方面也是如此[3]。將此系統(tǒng)應(yīng)用到溫室當(dāng)中無疑為植被的生長提供了更加適宜的環(huán)境。1.3國內(nèi)外的研究現(xiàn)狀及開展趨勢美國是將計算機應(yīng)用于大棚和管理最早,最多的國家之一。美國開發(fā)的大棚計算機控制與管理系統(tǒng)可以根據(jù)作物的特點和生長所需要的條件,對大棚內(nèi)的光照,溫度,濕度等諸多因素進行自動控制。這種自動控制系統(tǒng)需要種植者輸入溫室作物生長所需的環(huán)境的目標(biāo)參數(shù),計算機根據(jù)傳感器的實際測量值與事先設(shè)定的目標(biāo)進行比擬,以決定大棚溫濕度的控制過程,按照相應(yīng)的機構(gòu)進行加熱,降溫或者是澆水,通風(fēng)等[4]。目前,我國絕大局部自主開發(fā)的大棚溫濕度控制或者進口的國外設(shè)備都屬于這種系統(tǒng)。雖然這種自動控制系統(tǒng)實現(xiàn)了自動化,適合規(guī)?;a(chǎn),提高了勞動生產(chǎn)率,通過改變大棚溫濕度的設(shè)定目標(biāo),可以自動的對大棚內(nèi)溫濕度進行調(diào)節(jié),但是這種調(diào)節(jié)對作物的生長來說還是相對滯后的,難以介入作物生長的內(nèi)在規(guī)律。所以在這種自動控制系統(tǒng)和實踐的根底上,溫濕度自動控制向著適合不同作物生長的智能化控制開展。國外大棚業(yè)正致力于高科技開展,遙測技術(shù),網(wǎng)絡(luò)技術(shù),控制局域網(wǎng)已逐漸應(yīng)用于大棚的管理和控制中,近幾年各國溫度控制技術(shù)提出建立大棚行業(yè)標(biāo)準(zhǔn),朝著網(wǎng)絡(luò)化,群眾化,大規(guī)模,無人化的方向開展的思路[5]。目前國內(nèi)外的溫濕度檢測使用的溫濕度檢測元件種類繁多、應(yīng)用范圍也較廣泛加之單片機和大規(guī)模集成電路技術(shù)的不斷提高,出現(xiàn)了高性能、高可靠性的單片機數(shù)據(jù)采集系統(tǒng)[6]?;趩螜C片的溫濕度監(jiān)測控制系統(tǒng)的設(shè)計研究較少。隨著經(jīng)濟和社會的不斷開展,人們對自己的生活環(huán)境要求越來越高。特別在溫室大棚中,對溫濕度要求更為嚴(yán)格?;趩纹瑱C的溫室溫濕度控制統(tǒng)設(shè)計,將對環(huán)境的溫濕度監(jiān)測系統(tǒng)做詳細的設(shè)計與實現(xiàn)。1.4本系統(tǒng)主要研究內(nèi)容本系統(tǒng)主要完成的任務(wù):進行溫濕度控制系統(tǒng)的整體研究與設(shè)計。利用數(shù)字溫濕度傳感器DHT11測量大棚內(nèi)的溫濕度。通過采集溫度及濕度值,準(zhǔn)確的判斷標(biāo)準(zhǔn)值與當(dāng)前值之間的差異,及時的啟動報警裝置〔包括警報燈的提示功能以及提示音等〕進行報警,并采取相應(yīng)的方案。利用LCD對溫濕度進行實時顯示。利用NRF24L01無線模塊實現(xiàn)數(shù)據(jù)的遠距離傳輸2系統(tǒng)總體設(shè)計2.1系統(tǒng)功能設(shè)計1.溫濕度監(jiān)控:實現(xiàn)對溫室大棚溫濕度參數(shù)的實時采集,測量空間的溫度和濕度,由單片機對采集的溫濕度值進行循環(huán)檢測、數(shù)據(jù)處理、顯示,實現(xiàn)溫濕度的智能檢測。2.控制處理:當(dāng)溫濕度越限時報警,并根據(jù)報警信號提示采取一定手段控制。3.無線傳輸:用溫濕度傳感器將測量的溫濕度數(shù)據(jù)通過無線模塊進行傳輸。溫濕度傳感器到達的技術(shù)指標(biāo):測量范圍:濕度20-90%RH,溫度0-50℃測量精度:濕度+5%RH,溫度+2℃2.2系統(tǒng)的組成以單片機為控制核心,采用溫濕度測量技術(shù),通信技術(shù),控制技術(shù)等技術(shù),以溫濕度傳感器作為測量元件,構(gòu)成智能溫濕度測量控制系統(tǒng)??煞譃闇貪穸葴y量電路,顯示電路,報警電路,無線模塊,圖2.1選用的主要器件有:單片機AT89S52,溫濕度傳感器DHT11,1602LCD顯示模塊,LED燈,報警裝置蜂鳴器,NRF2401無線模塊等。圖2.1系統(tǒng)組成2.3系統(tǒng)工作原理本系統(tǒng)以單片機AT89S52為核心,數(shù)據(jù)采集、傳輸、顯示、報警都要通過單片機。數(shù)據(jù)采集通過單總線的智能數(shù)字溫濕度傳感器DHT11完成;通過單片機把采集的數(shù)據(jù)顯示在1602LCD上;當(dāng)采集的數(shù)據(jù)超出給定范圍時,有蜂鳴器實時報警,并將數(shù)據(jù)通過NRF2401無線傳輸給另一個單片機上顯示。單片機采用C語言編程。圖2.2流程框圖3系統(tǒng)硬件設(shè)計3.1單片機系統(tǒng)設(shè)計經(jīng)過上面的總體方案和實施措施的討論后可以開始著手硬件系統(tǒng)的設(shè)計,硬件系統(tǒng)是應(yīng)用系統(tǒng)的根底、軟件系統(tǒng)設(shè)計的依據(jù),根據(jù)總體功能和性價比及其運行速度等因素的考慮,選用AT89S52單片機。AT89S52是一種低功耗、高性能CMOS8位微控制器,具有8K在系統(tǒng)可編程Flash存儲器。AT89S52使用Atmel公司高密度非易失性存儲器技術(shù)制造,與工業(yè)80C51產(chǎn)品指令和引腳完全兼容。片上Flash允許程序存儲器在系統(tǒng)可編程,亦適于常規(guī)編程器。在單芯片上,AT89S52擁有靈巧的8位CPU和在系統(tǒng)可編程Flash,使得AT89S52為眾多嵌入式控制應(yīng)用系統(tǒng)提供高靈活、超有效的解決方案[11]。AT89S52具有以下標(biāo)準(zhǔn)功能:8k字節(jié)Flash,256字節(jié)RAM,32位I/O口線,看門狗定時器,2個數(shù)據(jù)指針,三個16位定時器/計數(shù)器,一個6向量2級中斷結(jié)構(gòu),全雙工串行口,片內(nèi)晶振及時鐘電路。另外,AT89S52可降至0Hz靜態(tài)邏輯操作,支持2種軟件可選擇節(jié)電模式??臻e模式下,CPU停止工作,允許RAM、定時器/計數(shù)器、串口中斷繼續(xù)工作。掉電保護方式下,RAM內(nèi)容被保存,振蕩器被凍結(jié),單片機一切工作停止,直到下一個中斷或硬件復(fù)位為止[12]。其引腳排列如圖3.1所示:圖3.1AT89S52引腳圖〔1〕電源及時鐘引腳〔4個〕VCC:電源接入引腳;GND:接地引腳;XTAL1:晶體振蕩器接入的一個引腳〔采用外部振蕩器時,此引腳接地〕;XTAL2:晶體振蕩器接入的另一個引腳〔采用外部振蕩器時,此引腳作為外部振蕩信號的輸入端〕?!?〕控制線引腳〔4個〕RST/VPD:復(fù)位信號輸入引腳/備用電源輸入引腳;ALE/PROG:地址鎖存允許信號輸出引腳/編程脈沖輸入引腳(低電平有效〕;EA/Vpp:內(nèi)外存儲器選擇引腳〔低電平有效〕/片內(nèi)EPROM〔或FlashROM〕編程電壓輸入引腳;PSEN:外部存儲器選通信號輸出引腳〔低電平有效〕。(3)并行I/O引腳〔32個,分成4個8位口〕P0.0~P0.7:一般I/O引腳或數(shù)據(jù)/低位地址總線服用引腳;P1.0~P1.7:一般I/O引腳;P2.0~P2.7:一般I/O引腳或高位地址總線引腳;P3.0~P3.7:一般I/O引腳或第二功能引腳。其內(nèi)部主要由CPU、RAM、ROM、通用I/O及總線構(gòu)成,內(nèi)部結(jié)構(gòu)如圖3.2所示:80518051時鐘程序存儲器數(shù)據(jù)存儲器定時計數(shù)器并行I/O口串行通信口中斷系統(tǒng)數(shù)據(jù)總線地址總線控制總線圖3.2AT89S52內(nèi)部結(jié)構(gòu)圖CPU:由運算和控制邏輯組成,同時還包括中斷系統(tǒng)和局部外部特殊功能存放器;RAM:用以存放可以讀寫的數(shù)據(jù),如運算的中間結(jié)果、最終結(jié)果以及欲顯示的數(shù)據(jù);ROM:用以存放程序、一些原始數(shù)據(jù)和表格;單片機的存放器MCS-51器件有單獨的程序存儲器和數(shù)據(jù)存儲器。外部程序存儲器和數(shù)據(jù)存儲器都可以64K尋址。程序存儲器:如果EA引腳接地,程序讀取只從外部存儲器開始。對于89S52,如果EA接VCC,程序讀寫先從內(nèi)部存儲器〔地址為0000H~1FFFH〕開始,接著從外部尋址,尋址地址為:2000H~FFFFH。數(shù)據(jù)存儲器:AT89S52有256字節(jié)片內(nèi)數(shù)據(jù)存儲器。高128字節(jié)與特殊功能存放器重疊。也就是說高128字節(jié)與特殊功能存放器有相同的地址,而物理上是分開的。當(dāng)一條指令訪問高于7FH的地址時,尋址方式?jīng)Q定CPU訪問高128字節(jié)RAM還是特殊功能存放器空間。直接尋址方式訪問特殊功能存放器〔SFR〕[12]。機器周期和指令周期〔1〕振蕩周期:也稱時鐘周期,是指為單片機提供時鐘脈沖信號的振蕩源的周期?!?〕狀態(tài)周期:每個狀態(tài)周期為時鐘周期的2倍,是振蕩周期經(jīng)二分頻后得到的?!?〕機器周期:一個機器周期包含6個狀態(tài)周期S1~S6,也就是12個時鐘周期。在一個機器周期內(nèi),CPU可以完成一個獨立的操作。指令周期:它是指CPU完成一條操作所需的全部時間。每條指令執(zhí)行時間都是有一個或幾個機器周期組成。中斷AT89S52有6個中斷源:兩個外部中斷〔INT0和INT1〕,三個定時中斷〔定時器0、1、2〕和一個串行中斷。每個中斷源都可以通過置位或去除特殊存放器IE中的相關(guān)中斷允許控制位分別使得中斷源有效或無效。IE還包括一個中斷允許總控制位EA,它能一次禁止所有中斷。IE.6位是不可用的,對于AT89S52,IE.5位也是不能用的。用戶軟件不應(yīng)給這些位寫1。它們?yōu)锳T89系列新產(chǎn)品預(yù)留。定時器2可以被存放器T2CON中的TF2和EXF2的或邏輯觸發(fā)。程序進入中斷效勞后,這些標(biāo)志位都可以由硬件清0。實際上,中斷效勞程序必須判定是否是TF2或EXF2激活中斷,標(biāo)志位也必須由軟件清0。定時器0和定時器1標(biāo)志位TF0和TF1在計數(shù)溢出的那個周期的S5P2被置位。它們的值一直到下一個周期被電路捕捉下來。然而,定時器2的標(biāo)志位TF2在計數(shù)溢出的那個周期的S2P2被置位,在同一個周期被電路捕捉下來。復(fù)位電路本系統(tǒng)采用上電+按鍵復(fù)位,是上電復(fù)位和按鍵電平復(fù)位的組合,無論是上電還是按動按鍵都能使單片機復(fù)位。如圖3.3所示:R21KR21KR310KC310ufRESET圖3.3復(fù)位電路在單片機系統(tǒng)中,系統(tǒng)上電啟動的時候復(fù)位一次,當(dāng)按鍵按下的時候系統(tǒng)再次復(fù)位,如果釋放后再按下,系統(tǒng)還會復(fù)位。所以可以通過按鍵的斷開和閉合在運行的系統(tǒng)中控制其復(fù)位。復(fù)位電路的原理是單片機RST引腳接收到2US以上的電平信號,只要保證電容的充放電時間大于2US,即可實現(xiàn)復(fù)位,所以電路中的電容值是可以改變的。按鍵按下系統(tǒng)復(fù)位,是電容處于一個短路電路中,釋放了所有的電能,電阻兩端的電壓增加引起的[13]。時鐘電路時鐘引腳為XTAL1、XTAL2,時鐘引腳外接晶體與片內(nèi)的反向放大器構(gòu)成了一個振蕩器,它提供單片機的時鐘控制信號,時鐘引腳也可外接晶體振蕩器。XTAL1〔19腳〕:接外部晶體的一個引腳。在單片機內(nèi)部,它是一個反向放大器的輸入端。這個放大器構(gòu)成了片內(nèi)振蕩器。當(dāng)采用外接晶體振蕩器時,此引腳應(yīng)接地。XTAL2〔18腳〕:接外部晶體的另一端,在單片機內(nèi)部接至內(nèi)部反向放大器的輸出端。假設(shè)采用外部振蕩器時,該引腳接收振蕩器的信號,即把此信號直接接到內(nèi)部時鐘發(fā)生器的輸入端[14]。本系統(tǒng)采用晶振時鐘電路。外部晶振以及電容C1和C2構(gòu)成并聯(lián)諧振電路,接在放大器的反應(yīng)回路中。對外接電容的值雖然沒有嚴(yán)格要求,但電容的大小多少會影響振蕩器頻率的上下,振蕩器的穩(wěn)定性,起振的快速性和穩(wěn)定性。外接晶振時,C1和C2通常選擇30pf,晶振采用12MHz。本設(shè)計時鐘電路如下列圖3.4所示:XTAL2XTAL218XTAL11912MHZCRYSTALC130pC230p圖3.4時鐘電路3.2溫濕度傳感器設(shè)計DHT11數(shù)字溫濕度傳感器是一款含有已校準(zhǔn)數(shù)字信號輸出的溫濕度復(fù)合傳感器,它應(yīng)用專用的數(shù)字模塊采集技術(shù)和溫濕度傳感技術(shù),確保產(chǎn)品具有極高的可靠性和卓越的長期穩(wěn)定性。傳感器包括一個電阻式感濕元件和一個NTC測溫元件,并與一個高性能8位單片機相連接[15]。因此該產(chǎn)品具有品質(zhì)卓越、超快響應(yīng)、抗干擾能力強、性價比極高等優(yōu)點。每個DHT11傳感器都在極為精確的濕度校驗室中進行校準(zhǔn)。校準(zhǔn)系數(shù)以程序的形式存在OTP內(nèi)存中,傳感器內(nèi)部在檢測型號的處理過程中要調(diào)用這些校準(zhǔn)系數(shù)。單線制串行接口,使系統(tǒng)集成變得簡易快捷。超小的體積、極低的功耗,使其成為給類應(yīng)用甚至最為苛刻的應(yīng)用場合的最正確選擇。產(chǎn)品為4針單排引腳封裝,連接方便。DHT11的簡介·相對濕度和溫度測量·全部校準(zhǔn),數(shù)字輸出·卓越的長期穩(wěn)定性·無需外加器件·超長的信號傳輸距離·超低能耗·4引腳安裝·完全互換圖3.5DHT11引腳說明建議接線長度短于20米時,用5K上拉電阻,大于20米時根據(jù)實際情況使用適宜的上拉電阻。引腳1:VDD供電3-5.5V引腳2:DATA串行數(shù)據(jù),單總線引腳3:NC空腳,懸空引腳4:GND接地,電源負極圖3.6典型應(yīng)用電源引腳DHT11的供電電壓為3-5.5V。傳感器上電后,要等待1s以越過不穩(wěn)定狀態(tài)在此期間無需發(fā)送任何指令。電源引腳〔VDD,GND〕之間可增加一個100nF的電容,用以去耦濾波。串行接口〔單線雙向〕1.單總線說明DHT11器件采用簡化的單總線通信。單總線即只有一根數(shù)據(jù)線,系統(tǒng)中的數(shù)據(jù)交換、控制均由單總線完成。設(shè)備〔主機或從機〕通過一個漏極開路或三態(tài)端口連至該數(shù)據(jù)線,以允許設(shè)備在不發(fā)送數(shù)據(jù)時能夠釋放總線,而讓其它設(shè)備使用總線;單總線通常要求外接一個約5.1kΩ的上拉電阻,這樣,當(dāng)總線閑置時,其狀態(tài)為高電平。由于它們是主從結(jié)構(gòu),只有主機呼叫從機時,從機才能應(yīng)答,因此主機訪問器件都必須嚴(yán)格遵循單總線序列,如果出現(xiàn)序列混亂,器件將不響應(yīng)主機[16]。2.單總線傳送數(shù)據(jù)位定義DATA用于微處理器與DHT11之間的通訊和同步,采用單總線數(shù)據(jù)格式,一次傳送40位數(shù)據(jù),高位先出。數(shù)據(jù)格式:8bit濕度整數(shù)數(shù)據(jù)+8bit濕度小數(shù)數(shù)據(jù)+8bit溫度整數(shù)數(shù)據(jù)+8bit溫度小數(shù)數(shù)據(jù)+8bit校驗位。3.校驗位數(shù)據(jù)定義“8bit濕度整數(shù)數(shù)據(jù)+8bit濕度小數(shù)數(shù)據(jù)+8bit溫度整數(shù)數(shù)據(jù)+8bit溫度小數(shù)數(shù)據(jù)〞8bit校驗位等于所得結(jié)果的末8位。4.數(shù)據(jù)時序圖用戶MCU發(fā)送一次開始信號后,DHT11從低功耗模式轉(zhuǎn)換到高速模式,等待主機開始信號結(jié)束后,DHT11發(fā)送響應(yīng)信號,送出40bit的數(shù)據(jù),并觸發(fā)一次信號采集,用戶可選擇讀取局部數(shù)據(jù).從模式下,DHT11接收到開始信號觸發(fā)一次溫濕度采集,如果沒有接收到主機發(fā)送開始信號,DHT11不會主動進行溫濕度采集.采集數(shù)據(jù)后轉(zhuǎn)換到低速模式。圖3.7數(shù)據(jù)時序圖5.外設(shè)讀取〔1〕DHT11上電后,測試環(huán)境溫濕度數(shù)據(jù),并記錄數(shù)據(jù),同時DHT11的DATA數(shù)據(jù)線由上拉電阻拉高一直保持高電平;此時DHT11的DATA引腳處于輸入狀態(tài),時刻檢測外部信號?!?〕微處理器的I/O設(shè)置為輸出同時輸出低電平,且低電平保持時間不能小于18ms,然后微處理器的I/O設(shè)置位輸入狀態(tài),由于上拉電阻,微處理器的I/O即DHT11的DATA數(shù)據(jù)線也隨之變高,等待DHT11作出答復(fù)信號。圖3.8主機發(fā)送起始信號〔3〕DHT11的DATA引腳檢測到外部信號有低電平時,等待外部信號低電平結(jié)束,延遲后DHT11的DATA引腳處于輸出狀態(tài),輸出80us的低電平作為應(yīng)答信號,緊接著輸出80us的高電平通知外設(shè)準(zhǔn)備接受數(shù)據(jù),微處理器的I/O此時處于輸入狀態(tài),檢測到I/O有低電平〔DHT11回應(yīng)信號〕后,等待80us的高電平后的數(shù)據(jù)接收。圖3.9發(fā)送信號〔4〕由DHT11的DATA引腳輸出40位數(shù)據(jù),微處理器根據(jù)I/O電平的變化接收40位數(shù)據(jù),位數(shù)據(jù)“0〞的格式為:50us的低電平和26-28us的高電平;位數(shù)據(jù)“1〞的格式為:50us的低電平加70us的高電平。圖3.10位數(shù)據(jù)“0〞的格式圖3.11位數(shù)據(jù)“1〞的格式測量分辨率測量分辨率分別為8bit〔溫度〕、8bit〔濕度〕。電氣特性VDD=5V,T=25℃,除非特殊標(biāo)注表3.1電氣特性表參數(shù)條件mintypmax單位供電DC355.5V供電電流測量0.52.5mA平均0.21mA待機100150uA采樣周期秒1次3.3無線模塊設(shè)計nRF24.L01是一款新型單片射頻收發(fā)器件,工作于2.4GHz~2.5GHzISM頻段。內(nèi)置頻率合成器、功率放大器、晶體振蕩器、調(diào)制器等功能模塊,并融合了增強型ShockBurst技術(shù),其中輸出功率和通信頻道可通過程序進行配置。nRF24L01功耗低,在以-6dBm的功率發(fā)射時,工作電流也只有9mA;接收時,工作電流只有12.3mA,多種低功率工作模式〔掉電模式和空閑模式〕使節(jié)能設(shè)計更方便[17]。主要特點1.GFSK調(diào)制,硬件集成OSI鏈路層2.具有自動應(yīng)答和自動再發(fā)射功能3.片內(nèi)自動生成報頭和CRC校驗碼4.?dāng)?shù)據(jù)傳輸率為lMb/s或2Mb/s5.SPI速率為0Mb/s~10Mb/s6.125個頻道與其他nRF24系列射頻器件相兼容7.雙通道數(shù)據(jù)接收,內(nèi)置環(huán)行天線,開闊地?zé)o干擾條件通信距離20-50米8.QFN20引腳4mm×4mm封裝9.供電電壓為1.9V~3.6V引腳說明圖3.12nRF24L01nRF24L01引腳排列如圖3.12所示。各引腳功能如下:CE:使能發(fā)射或接收;CSN,SCK,MOSI,MISO:SPI引腳端,微處理器可通過此引腳配置nRF24L01;IRQ:中斷標(biāo)志位;VDD:電源輸入端;VSS:電源地;XC2,XC1:晶體振蕩器引腳;VDD_PA:為功率放大器供電,輸出為1.8V;ANT1,ANT2:天線接口。工作模式通過配置存放器可將nRF24L01配置為發(fā)射、接收、空閑及掉電四種工作模式,如表3.2所示:表3.2工作模式模式PWR_UPPRIM_RXCEFIFO存放器狀態(tài)接收模式111-發(fā)射模式101數(shù)據(jù)在TX
FIFO
存放器中發(fā)射模式101→0停留在發(fā)送模式,直至數(shù)據(jù)發(fā)送完待機模式2101TX_FIFO為空待機模式11-0無數(shù)據(jù)傳輸?shù)綦?待機模式1主要用于降低電流損耗,在該模式下晶體振蕩器仍然是工作的;待機模式2那么是在當(dāng)FIFO存放器為空且CE=1時進入此模式;待機模式下,所有配置字仍然保存。在掉電模式下電流損耗最小,同時nRF24L01也不工作,但其所有配置存放器的值仍然保存。工作原理圖3.13電路原理圖發(fā)射數(shù)據(jù)時,首先將nRF24L01配置為發(fā)射模式:接著把接收節(jié)點地址TX_ADDR和有效數(shù)據(jù)TX_PLD按照時序由SPI口寫入nRF24L01緩存區(qū),TX_PLD必須在CSN為低時連續(xù)寫入,而TX_ADDR在發(fā)射時寫入一次即可,然后CE置為高電平并保持至少10μs,延遲130μs后發(fā)射數(shù)據(jù);假設(shè)自動應(yīng)答開啟,那么nRF24L01在發(fā)射數(shù)據(jù)后立即進入接收模式,接收應(yīng)答信號〔自動應(yīng)答接收地址應(yīng)該與接收節(jié)點地址TX_ADDR一致〕。如果收到應(yīng)答,那么認(rèn)為此次通信成功,TX_DS置高,同時TX_PLD從TXFIFO中去除;假設(shè)未收到應(yīng)答,那么自動重新發(fā)射該數(shù)據(jù)(自動重發(fā)已開啟),假設(shè)重發(fā)次數(shù)(ARC)到達上限,MAX_RT置高,TXFIFO中數(shù)據(jù)保存以便再次重發(fā);MAX_RT或TX_DS置高時,使IRQ變低,產(chǎn)生中斷,通知MCU。最后發(fā)射成功時,假設(shè)CE為低那么nRF24L01進入空閑模式1;假設(shè)發(fā)送堆棧中有數(shù)據(jù)且CE為高,那么進入下一次發(fā)射;假設(shè)發(fā)送堆棧中無數(shù)據(jù)且CE為高,那么進入空閑模式2[19]。接收數(shù)據(jù)時,首先將nRF24L01配置為接收模式,接著延遲130μs進入接收狀態(tài)等待數(shù)據(jù)的到來。當(dāng)接收方檢測到有效的地址和CRC時,就將數(shù)據(jù)包存儲在RXFIFO中,同時中斷標(biāo)志位RX_DR置高,IRQ變低,產(chǎn)生中斷,通知MCU去取數(shù)據(jù)。假設(shè)此時自動應(yīng)答開啟,接收方那么同時進入發(fā)射狀態(tài)回傳應(yīng)答信號。最后接收成功時,假設(shè)CE變低,那么nRF24L01進入空閑模式1。圖3.14單片機與nRF24L01連接圖配置字SPI口為同步串行通信接口,最大傳輸速率為10Mb/s,傳輸時先傳送低位字節(jié),再傳送高位字節(jié)。但針對單個字節(jié)而言,要先送高位再送低位。與SPI相關(guān)的指令共有8個,使用時這些控制指令由nRF24L01的MOSI輸入。相應(yīng)的狀態(tài)和數(shù)據(jù)信息是從MISO輸出給MCU[20]。nRF24L0l所有的配置字都由配置存放器定義,這些配置存放器可通過SPI口訪問。nRF24L01的配置存放器共有25個,常用的配置存放器如表3.3所示:表3.3配置存放器地址〔H〕存放器名稱功能00CONFIG設(shè)置24L01工作模式01EN_AA
設(shè)置接收通道及自動應(yīng)答02EN_RXADDR使能接收通道地址03SETUP_AW設(shè)置地址寬度04SETUP_RETR設(shè)置自動重發(fā)數(shù)據(jù)時間和次數(shù)07STATUS狀態(tài)存放器,用來判定工作狀態(tài)0A~0FRX_ADDR_P0~P5設(shè)置接收通道地址10TX_ADDR設(shè)置接收接點地址11~16RX_PW_P0~P5設(shè)置接收通道的有效數(shù)據(jù)寬度3.4液晶顯示裝置設(shè)計液晶簡介1602液晶也叫1602字符型液晶它是一種專門用來顯示字母、數(shù)字、符號等的點陣型液晶模塊,它有假設(shè)干個5x7或者5x11等點陣字符位組成,每個點陣字符位都可以顯示一個字符。每位之間有一個點距的間隔,每行之間也有間隔,起到了字符間距和行間距的作用,正因為如此,他不能顯示圖形〔用自定義CGRAM,顯示效果也不好〕1602LCD是指顯示的內(nèi)容為16x2,即可以顯示兩行,每行16個字符液晶模塊〔顯示字符和數(shù)字〕目前市面上字符液晶絕大多數(shù)是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780寫的控制程序可以很方便地應(yīng)用于市面上大局部的字符型液晶[23]。1602LCD主要技術(shù)參數(shù):顯示容量:16×2個字符芯片工作電壓:4.5-5.5V工作電流:2.0mA(5.0V)模塊最正確工作電壓:5.0V字符尺寸:2.95×4.35(W×H)mm圖3.151602LCD引腳圖引腳功能說明:1602LCD采用標(biāo)準(zhǔn)的14腳〔無背光〕或16腳〔帶背光〕接口,各引腳接口說明如下:第1腳:VSS為地電源。第2腳:VDD接5V正電源。第3腳:VL為液晶顯示器比照度調(diào)整端,接正電源時比照度最弱,接地時比照度最高,比照度過高時會產(chǎn)生“鬼影〞,使用時可以通過一個10K的電位器調(diào)整比照度。第4腳:RS為存放器選擇,高電平時選擇數(shù)據(jù)存放器、低電平時選擇指令存放器。第5腳:R/W為讀寫信號線,高電平時進行讀操作,低電平時進行寫操作。當(dāng)RS和R/W共同為低電平時可以寫入指令或者顯示地址,當(dāng)RS為低電平R/W為高電平時可以讀忙信號,當(dāng)RS為高電平R/W為低電平時可以寫入數(shù)據(jù)。第6腳:E端為使能端,當(dāng)E端由高電平跳變成低電平時,液晶模塊執(zhí)行命令。第7~14腳:D0~D7為8位雙向數(shù)據(jù)線。第15腳:背光源正極。第16腳:背光源負極。液晶顯示原理讀寫操作時序如圖3.16和圖3.17所示:圖3.16讀操作時序圖3.17寫操作時序3.5報警系統(tǒng)設(shè)計本系統(tǒng)采用紅LED燈作為光報警提示,當(dāng)系統(tǒng)檢測到的數(shù)據(jù)不符合給定的要求時,現(xiàn)場為紅燈報警提示;本系統(tǒng)采用蜂鳴器作為聲報警提示,當(dāng)系統(tǒng)檢測到的數(shù)據(jù)符合給定的要求時,現(xiàn)場沒有蜂鳴器報警提示;當(dāng)系統(tǒng)檢測到的數(shù)據(jù)不符合給定的要求時,現(xiàn)場蜂鳴器報警提示。如圖3.18:圖3.18報警系統(tǒng)電路圖4系統(tǒng)軟件設(shè)計本系統(tǒng)軟件系統(tǒng)設(shè)計包括:系統(tǒng)初始化模塊,數(shù)據(jù)采集模塊,無線模塊,1602LCD顯示模塊,報警模塊。系統(tǒng)軟件總體流程圖如圖4.1:圖4.1系統(tǒng)流程圖4.1系統(tǒng)初始化模塊系統(tǒng)初始化模塊的主要功能是完成系統(tǒng)的初始化以及設(shè)定系統(tǒng)的工作狀態(tài),初始化局部包括以下方面的內(nèi)容:1.單片機初始化以及各種引腳定義2.1602液晶初始化及工作方式3.系統(tǒng)進入正常工作狀態(tài)4.2數(shù)據(jù)采集模塊溫濕度檢測模塊是本系統(tǒng)中的核心模塊之一,它負責(zé)完成溫度和濕度的測量及模擬量轉(zhuǎn)換為數(shù)字量的全過程,這也是它為什么重要的原因。數(shù)字式溫濕度傳感器DHT11直接把檢測到的模擬量轉(zhuǎn)化為數(shù)字量送給單片機,在經(jīng)過單片機的處理,把溫濕度值顯示在1602液晶上。溫濕度傳感器的精確度值直接影響到整個系統(tǒng)的檢測與控制,所以本系統(tǒng)采用數(shù)字式溫濕度傳感器DHT11采集溫室內(nèi)的溫濕度[25]。溫濕度判斷控制模塊也是系統(tǒng)的核心模塊之一,所謂判斷控制模塊,就是對當(dāng)前溫室內(nèi)的實際溫濕度與給定的溫濕度范圍進行比擬,先進行判斷,然后再進行控制,控制模塊是決定系統(tǒng)將要進行什么工作的。如溫度和濕度高于上限時或低于下限時需要進行啟動警報,并且將溫濕度結(jié)果以無線進行通信等。溫濕度傳感器程序流程圖如圖4.2所示:圖4.2溫濕度傳感器程序流程圖4.3無線模塊無線發(fā)射模塊局部首先進行初始化操作,初始化包括設(shè)置單片機I/O和SPI相關(guān)存放器兩局部其可以和nRF24L01通信。通過SPI總線配置射頻芯片使其進入正確的工作模式。發(fā)射數(shù)據(jù)時,首先將nRF24L01配置為發(fā)射模式[26]。接著把發(fā)送端待發(fā)射數(shù)據(jù)的目標(biāo)地址TX-ADDR和數(shù)據(jù)TX-PLD寫入nRF24L01緩沖區(qū),延時后發(fā)射數(shù)據(jù),其流程圖如圖4.3所示:圖4.3無線發(fā)射軟件流程圖無線接收模塊局部接收數(shù)據(jù)時,首先將nRF24L01配置為接收模式。接著延遲進入接收狀態(tài)等待數(shù)據(jù)的到來。當(dāng)接收方檢測到有效地址和CRC時,就將數(shù)據(jù)包儲存在接收堆棧中,同時狀態(tài)存放器中的中斷標(biāo)志位RX-DR置高,產(chǎn)生中斷使IRQ引腳變?yōu)榈碗娖剑员阃ㄖ狹CU去取數(shù)據(jù),其流程圖如圖4.4所示:圖4.4無線接收軟件流程圖4.4顯示模塊本系統(tǒng)采用1602液晶顯示溫濕度值,當(dāng)系統(tǒng)剛開始上電時1602液晶不顯示任何數(shù)據(jù),等待AM2301的監(jiān)測數(shù)據(jù),雙行顯示在1602液晶上。第一行顯示:TRHRH:--%,第二行顯示:TRHT:--。C。對LCD1602A進行初始化開始對LCD1602A進行初始化開始否否是否按下是否按下否掃描按鍵掃描按鍵延時消抖延時消抖否否首行掃描字R3列掃描送P1首行掃描字R3列掃描送P1掃描判定鍵值掃描判定鍵值鍵值入棧保護鍵值入棧保護否鍵值轉(zhuǎn)化為ASII碼,存入存放否鍵值轉(zhuǎn)化為ASII碼,存入存放器繼續(xù)掃描判釋放按鍵繼續(xù)掃描判釋放按鍵判第七位是否為0判第七位是否為0LCD1602A寫命令lingLCD1602A寫命令lingllin令顯示顯示延時延時結(jié)束結(jié)束圖4.5顯示流程圖4.5報警模塊報警模塊具備兩項功能,即為報警燈和聲音報警。報警燈模塊是完成LED有規(guī)律的轉(zhuǎn)換,以便從視覺上提醒用戶。LED是由單片機控制LED燈組成的,其轉(zhuǎn)換規(guī)律為:1.系統(tǒng)溫濕度值在給定的范圍時,LED不亮。2.系統(tǒng)溫濕度值超出給定的范圍時,紅色LED亮。在LED燈轉(zhuǎn)換的同時,聲音報警也會同時啟動,可采用延時的方式來延長聲音報警的聲音。警報燈由1個LED燈組成,一共需要1根數(shù)據(jù)線,使用單片機AT89S52控制。要實現(xiàn)的功能是使LED燈有規(guī)律亮與熄滅,當(dāng)系統(tǒng)上電后,系統(tǒng)進行實時的采樣,并判斷出當(dāng)前溫濕度與給定溫濕度之間的差異,如果當(dāng)前溫濕度低于用戶給定的下限溫濕度值,那么說明當(dāng)前溫濕度過低,系統(tǒng)自動啟動紅色警報燈,直至溫濕度值升到適合范圍時警報燈熄滅。反之,如果當(dāng)前溫濕度高于用戶設(shè)定的上限溫濕度值,那么說明當(dāng)前溫濕度過高,系統(tǒng)也會自動啟動警報燈,直至溫濕度值降到適當(dāng)范圍時警報燈熄滅。5硬件調(diào)試使用AT89S52單片機為控制核心芯片,DHT11溫濕度傳感器為空氣溫濕度檢測模塊,nRF24L01無線模塊進行數(shù)據(jù)傳輸,進行數(shù)據(jù)的實時顯示。在單片機開發(fā)板上連接好電路進行調(diào)試:圖5.1正常室溫中溫濕度檢測結(jié)果〔濕度:22%,溫度:31。C〕圖5.2使用熱水進行高溫加熱,查看其溫濕度變化圖5.3不斷的進行使用熱水加熱,當(dāng)溫度超過其范圍時報警,LED等同時亮圖5.4當(dāng)溫度上升到超過適當(dāng)范圍時檢測的溫濕度值圖5.5顯示為無線模塊NRF24L01,溫度超過正常范圍時進行數(shù)據(jù)的無線發(fā)送與接收圖5.6溫濕度數(shù)據(jù)接收板圖5.7無線模塊接收發(fā)送的數(shù)據(jù)后經(jīng)單片機處理后在顯示屏上顯示的結(jié)果結(jié)論到此智能溫室溫濕度控制系統(tǒng)的設(shè)計已經(jīng)完成了,在這段時間里,先后完成了資料的收集、設(shè)計方案的擬訂、畫圖等多方面的工作。首先,通過這次應(yīng)用系統(tǒng)設(shè)計,在很大程度上提高了自己的獨立思考能力和單片機的專業(yè)知識,其次,我也深刻了解寫一篇應(yīng)用系統(tǒng)的步驟和格式,有過這樣的一次訓(xùn)練,相信在接下來的日子我們都會了,而且會做得更好。本系統(tǒng)主要根據(jù)目前溫室大棚技術(shù)的開展趨勢和國內(nèi)實際的應(yīng)用特點和要求,采用了自動化的結(jié)構(gòu)形式,實現(xiàn)對空氣溫濕度的自動檢測和控制。系統(tǒng)以單片機AT89S52為核心部件,單片機系統(tǒng)完成對溫濕度信號的采集、處理、顯示等功能。該系統(tǒng)的主要特點是:1.適用性強,用戶只需對參數(shù)進行設(shè)置并啟動系統(tǒng)正常運行便可實現(xiàn)對溫室溫濕度的實時監(jiān)控。2.實現(xiàn)無線信號傳輸。3.可對作物的生產(chǎn)環(huán)境進行適時、適當(dāng)?shù)目刂?,不僅有利于作物的生長發(fā)育,而且防止了了資源的浪費,起到了提高作物產(chǎn)量的作用。附錄發(fā)送局部程序#include<reg52.h>#include<intrins.h>typedefunsignedcharuchar;typedefunsignedcharuint;//****************NRF24L01端口定義*********************sbit MISO=P1^5;sbitMOSI=P1^1;sbitSCK=P1^4;sbit CE=P1^3;sbitCSN=P1^0;sbit IRQ=P1^2;//*************************按鍵*************************sbitTRH=P2^1;//溫濕度傳感器DHT11數(shù)據(jù)接入//**********************發(fā)送緩沖區(qū)**********************ucharTxBuf[32]={0};unsignedcharreceive_buf[32]={0};unsignedcharreceive_data,receive_s,flag;unsignedcharreceive_beg;//**********************NRF24L01************************#defineTX_ADR_WIDTH5 //5uintsTXaddresswidth#defineRX_ADR_WIDTH5 //5uintsRXaddresswidth#defineTX_PLOAD_WIDTH32 //20uintsTXpayload#defineRX_PLOAD_WIDTH32 //20uintsTXpayloaduintconstTX_ADDRESS[TX_ADR_WIDTH]={0x34,0x43,0x10,0x10,0x01};//本地地址uintconstRX_ADDRESS[RX_ADR_WIDTH]={0x34,0x43,0x10,0x10,0x01};//接收地址//******************NRF24L01存放************************#defineREAD_REG0x00 //讀存放器指令#defineWRITE_REG0x20 //寫存放器指令#defineRD_RX_PLOAD0x61 //讀取接收數(shù)據(jù)指令#defineWR_TX_PLOAD0xA0//寫待發(fā)數(shù)據(jù)指令#defineFLUSH_TX0xE1 //沖洗發(fā)送FIFO指令#defineFLUSH_RX0xE2//沖洗接收FIFO指令#defineREUSE_TX_PL0xE3//定義重復(fù)裝載數(shù)據(jù)指令#defineNOP0xFF//保存//*****************SPI(nRF24L01)存放器地址****************#defineCONFIG0x00//配置收發(fā)狀態(tài),CRC校驗?zāi)J揭约笆瞻l(fā)狀態(tài)響應(yīng)方式#defineEN_AA0x01//自動應(yīng)答功能設(shè)置#defineEN_RXADDR0x02//可用信道設(shè)置#defineSETUP_AW0x03//收發(fā)地址寬度設(shè)置#defineSETUP_RETR0x04//自動重發(fā)功能設(shè)置#defineRF_CH0x05//工作頻率設(shè)置#defineRF_SETUP0x06//發(fā)射速率、功耗功能設(shè)置#defineSTATUS0x07//狀態(tài)存放器#defineOBSERVE_TX0x08//發(fā)送監(jiān)測功能#defineCD0x09//地址檢測#defineRX_ADDR_P00x0A//頻道0接收數(shù)據(jù)地址#defineRX_ADDR_P10x0B//頻道1接收數(shù)據(jù)地址#defineRX_ADDR_P20x0C//頻道2接收數(shù)據(jù)地址#defineRX_ADDR_P30x0D//頻道3接收數(shù)據(jù)地址#defineRX_ADDR_P40x0E//頻道4接收數(shù)據(jù)地址#defineRX_ADDR_P50x0F//頻道5接收數(shù)據(jù)地址#defineTX_ADDR0x10//發(fā)送地址存放器#defineRX_PW_P00x11//接收頻道0接收數(shù)據(jù)長度#defineRX_PW_P10x12//接收頻道0接收數(shù)據(jù)長度#defineRX_PW_P20x13//接收頻道0接收數(shù)據(jù)長度#defineRX_PW_P30x14//接收頻道0接收數(shù)據(jù)長度#defineRX_PW_P40x15//接收頻道0接收數(shù)據(jù)長度#defineRX_PW_P50x16//接收頻道0接收數(shù)據(jù)長度#defineFIFO_STATUS0x17//FIFO棧入棧出狀態(tài)存放器設(shè)置//********************************************************unsignedcharTH_data,TL_data,RH_data,RL_data,CK_data;unsignedcharTH_temp,TL_temp,RH_temp,RL_temp,CK_temp;unsignedcharcom_data,untemp,temp;unsignedcharrespond;voidDelay(unsignedints);voidinerDelay_us(unsignedcharn);voidStartUART(void);voidinit_NRF24L01(void);uintSPI_RW(uintuchar);ucharSPI_Read(ucharreg);voidSetRX_Mode(void);uintSPI_RW_Reg(ucharreg,ucharvalue);uintSPI_Read_Buf(ucharreg,uchar*pBuf,ucharuchars);uintSPI_Write_Buf(ucharreg,uchar*pBuf,ucharuchars);unsignedcharnRF24L01_RxPacket(unsignedchar*rx_buf);voidnRF24L01_TxPacket(unsignedchar*tx_buf);voidread_TRH();charreceive();//**********************長延時***************************voidDelay(unsignedints){ unsignedinti;for(i=0;i<s;i++);for(i=0;i<s;i++);}voiddelay_ms(unsignedcharms){unsignedchari;while(ms--){for(i=0;i<150;i++){_nop_();_nop_();_nop_();_nop_();}}}/*********************************************************//*********************************************************///5us級延時程序/*********************************************************/voiddelay_us(){unsignedchari;i--;i--;i--;i--;i--;i--;}//********************************************************uint bdatasta;//狀態(tài)標(biāo)志sbit RX_DR=sta^6;sbitTX_DS=sta^5;sbitMAX_RT=sta^4;/**********************************************************/*延時函數(shù)/**********************************************************/voidinerDelay_us(unsignedcharn){ for(;n>0;n--) _nop_();}//**********************************************************/*NRF24L01初始化//**********************************************************/voidinit_NRF24L01(void){inerDelay_us(100); CE=0;//chipenable CSN=1;//Spidisable SCK=0;//Spiclocklineinithigh SPI_Write_Buf(WRITE_REG+TX_ADDR,TX_ADDRESS,TX_ADR_WIDTH);//寫本地地址 SPI_Write_Buf(WRITE_REG+RX_ADDR_P0,RX_ADDRESS,RX_ADR_WIDTH);//寫接收端地址 SPI_RW_Reg(WRITE_REG+EN_AA,0x01);//頻道0自動 ACK應(yīng)答允許 SPI_RW_Reg(WRITE_REG+EN_RXADDR,0x01);//允許接收地址只有頻道0,如果需要多頻道可以參考Page21 SPI_RW_Reg(WRITE_REG+RF_CH,0);//設(shè)置信道工作為2.4GHZ,收發(fā)必須一致 SPI_RW_Reg(WRITE_REG+RX_PW_P0,RX_PLOAD_WIDTH);//設(shè)置接收數(shù)據(jù)長度,本次設(shè)置為32字節(jié) SPI_RW_Reg(WRITE_REG+RF_SETUP,0x07); //設(shè)置發(fā)射速率為1MHZ,發(fā)射功率為最大值0dB SPI_RW_Reg(WRITE_REG+CONFIG,0x0e); //IRQ收發(fā)完成中斷響應(yīng),16位CRC,主發(fā)送}/********************************************************/*函數(shù):uintSPI_RW(uintuchar)/*功能:NRF24L01的SPI寫時序/********************************************************/uintSPI_RW(uintuchar){ uintbit_ctr;for(bit_ctr=0;bit_ctr<8;bit_ctr++)//output8-bit {MOSI=(uchar&0x80);//output'uchar',MSBtoMOSIuchar=(uchar<<1);//shiftnextbitintoMSB..SCK=1;//SetSCKhigh..uchar|=MISO;//capturecurrentMISObit SCK=0;//..thensetSCKlowagain }return(uchar);//returnreaduchar}/********************************/*函數(shù):ucharSPI_Read(ucharreg)/*功能:NRF24L01的SPI時序/********************************************************/ucharSPI_Read(ucharreg){ ucharreg_val; CSN=0;//CSNlow,initializeSPIcommunication... SPI_RW(reg);//Selectregistertoreadfrom.. reg_val=SPI_RW(0);//..thenreadregistervalue CSN=1;//CSNhigh,terminateSPIcommunication return(reg_val);//returnregistervalue}/*********************************************************//*功能:NRF24L01讀寫存放器函數(shù)/*********************************************************/uintSPI_RW_Reg(ucharreg,ucharvalue){ uintstatus; CSN=0;//CSNlow,initSPItransaction status=SPI_RW(reg);//selectregister SPI_RW(value);//..andwritevaluetoit.. CSN=1;//CSNhighagain return(status);//returnnRF24L01statusuchar}/**********************************************************//*函數(shù):uintSPI_Read_Buf(ucharreg,uchar*pBuf,ucharuchars)/*功能:用于讀數(shù)據(jù),reg:為存放器地址,pBuf:為待讀出數(shù)據(jù)地址,uchars:讀出數(shù)據(jù)的個數(shù)/************************************************************/uintSPI_Read_Buf(ucharreg,uchar*pBuf,ucharuchars){ uintstatus,uchar_ctr; CSN=0;//SetCSNlow,initSPItranaction status=SPI_RW(reg);//Selectregistertowritetoandreadstatusuchar for(uchar_ctr=0;uchar_ctr<uchars;uchar_ctr++)pBuf[uchar_ctr]=SPI_RW(0);// CSN=1; return(status);//returnnRF24L01statusuchar}/***************************************************/*函數(shù):uintSPI_Write_Buf(ucharreg,uchar*pBuf,ucharuchars)/*功能:用于寫數(shù)據(jù):為存放器地址,pBuf:為待寫入數(shù)據(jù)地址,uchars:寫入數(shù)據(jù)的個數(shù)/**********************************************************/uintSPI_Write_Buf(ucharreg,uchar*pBuf,ucharuchars){ uintstatus,uchar_ctr; CSN=0;//SPI使能 status=SPI_RW(reg); for(uchar_ctr=0;uchar_ctr<uchars;uchar_ctr++)// SPI_RW(*pBuf++); CSN=1;//關(guān)閉SPI return(status);//}/***********************************************************/*函數(shù):voidnRF24L01_TxPacket(unsignedchar*tx_buf)/*功能:發(fā)送tx_buf中數(shù)據(jù)/************************************************/voidnRF24L01_TxPacket(unsignedchar*tx_buf){ CE=0; //StandByI模式 SPI_Write_Buf(WRITE_REG+RX_ADDR_P0,TX_ADDRESS,TX_ADR_WIDTH);//裝載接收端地址 SPI_Write_Buf(WR_TX_PLOAD,tx_buf,TX_PLOAD_WIDTH); //裝載數(shù)據(jù) // SPI_RW_Reg(WRITE_REG+CONFIG,0x0e); //IRQ收發(fā)完成中斷響應(yīng),16位CRC,主發(fā)送 CE=1; //置高CE,激發(fā)數(shù)據(jù)發(fā)送 inerDelay_us(10);}//*************************主函數(shù)***************************voidmain(void){ uchartemp=0; init_NRF24L01(); nRF24L01_TxPacket(TxBuf); //TransmitTxbufferdata Delay(6000); while(1) { read_TRH();nRF24L01_TxPacket(TxBuf);//TransmitTxbufferdata Delay(10000);//可變 SPI_RW_Reg(WRITE_REG+STATUS,0XFF); flag=0; }}charreceive(){unsignedchari;//ST=0;com_data=0;for(i=0;i<=7;i++){respond=2;while((!TRH)&&respond++);delay_us();delay_us();delay_us();if(TRH){temp=1;respond=2;while((TRH)&&respond++);}elsetemp=0;com_data<<=1;com_data|=temp;}return(com_data);}/******************************************************//******************************************************///濕度讀取子程序//溫度高8位==TL_data//溫度低8位==TH_data//濕度高8位==RH_data//濕度低8位==RH_data//校驗8位==CK_data//調(diào)用的程序有delay();,Delay_5us();,RECEIVE();/****************************************************/voidread_TRH(){//主機拉低18msTRH=0;delay_ms(18);TRH=1;//DATA總線由上拉電阻拉高主機延時20usdelay_us();delay_us();delay_us();delay_us();//delay_us();//delay_us();delay_us();delay_us();delay_us();//主機設(shè)為輸入判斷從機響應(yīng)信號TRH=1;//判斷DHT11是否有低電平響應(yīng)信號如不響應(yīng)那么跳出,響應(yīng)那么向下運行if(!TRH){respond=2;//判斷DHT11發(fā)出80us的低電平響應(yīng)信號是否結(jié)束while((!TRH)&&respond++);respond=2;//判斷從機是否發(fā)出80us的高電平,如發(fā)出那么進入數(shù)據(jù)接收狀態(tài)while(TRH&&respond++);//數(shù)據(jù)接收狀態(tài)RH_temp=receive();RL_temp=receive();TH_temp=receive();TL_temp=receive();CK_temp=receive();TRH=1;//ST=1;//數(shù)據(jù)校驗untemp=(RH_temp+RL_temp+TH_temp+TL_temp);if(untemp==CK_temp){RH_data=RH_temp;RL_data=RL_temp;TH_data=TH_temp;TL_data=TL_temp;CK_data=CK_temp;}}//濕度整數(shù)局部TxBuf[0]=(char)(0X30+RH_data/10);TxBuf[1]=(char)(0X30+RH_data%10);TxBuf[2]=0x2e;//小數(shù)點//濕度小數(shù)局部TxBuf[3]=(char)(0X30+RL_data/10);TxBuf[4]=0X25;//"%"TxBuf[5]=0X52;//"R"TxBuf[6]=0X48;//"H"http://溫度整數(shù)局部TxBuf[7]=(char)(0X30+TH_data/10);TxBuf[8]=(char)(0X30+TH_data%10);TxBuf[9]=0x2e;//小數(shù)點//溫度小數(shù)局部TxBuf[10]=(char)(0X30+TL_data/10);TxBuf[11]=0X27;//"'"TxBuf[12]=0X43;//"C"}接收局部程序#include<reg52.h>#include<intrins.h>typedefunsignedcharuchar;typedefunsignedcharuint;//************************IO端口定義************************sbit MISO=P0^5;sbitMOSI=P0^1;sbitSCK=P0^4;sbit CE=P0^3;sbitCSN=P0^0;sbit IRQ=P0^2;ucharRxBuf[32]={0};unsignedcharcodedianya1[]={"溫度顯示:"};unsignedcharcodedianya2[]={"濕度顯示:"};//*************************按鍵**************************//*******************數(shù)碼管0-9編碼**********************ucharseg[10]={0xC0,0xCF,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//0~~9段碼voiddelayms(unsignedchar);voidkeyscan();//記憶按鍵狀態(tài)voidda_in();//將按鍵值轉(zhuǎn)化并送入到DA中voiddianliu_to_lcd();//將按鍵狀態(tài)值送入LCDvoiddianya_to_lcd();//將按鍵狀態(tài)值送入LCDvoidad();//得到AD采樣的值voidsendcom(unsignedcharcom);//向LCD發(fā)命令voidsenddata(unsignedchardat);//向LCD發(fā)數(shù)據(jù)voidlcd_init();//LCD初始化voidT_init();//定時器初始化voidautosaodianliu(); intod_data,op_data,oz_data;voidchange(intdat);unsignedcharcodedianliu1[]={"設(shè)置電流:mA"};unsignedcharcodedianliu2[]={"實際電流:mA";sbitsid=P3^6;//LCD串行數(shù)據(jù)輸入端sbitclk=P3^4;//LCD時鐘輸入端sbitcs=P3^5;//LCD片選unsignedcharkey_button=0;unsignedcharkey[3],j=0,i=0;//KEY數(shù)組用來存放按鍵按下的值unsignedintad1,ad2,advalue;//用于取AD采樣值bitflag=0;intd_data,pf_data,t_data;unsignedcharz1_data,z2_data;intknum,aa=0,p_data,z_data,t_on;//****************************************************#defineTX_ADR_WIDTH5 //5uintsTXaddresswidth#defineRX_ADR_WIDTH5 //5uintsRXaddresswidth#defineTX_PLOAD_WIDTH32 //20uintsTXpayload#defineRX_PLOAD_WIDTH32 //20uintsTXpayloaduintconstTX_ADDRESS[TX_ADR_WIDTH]={0x34,0x43,0x10,0x10,0x01}; //本地地址uintconstRX_ADDRESS[RX_ADR_WIDTH]={0x34,0x43,0x10,0x10,0x01}; //接收地址//*******************NRF24L01存放器指令*******************#defineREAD_REG0x00 //讀存放器指令#defineWRITE_REG0x20 //寫存放器指令#defineRD_RX_PLOAD0x61 //讀取接收數(shù)據(jù)指令#defineWR_TX_PLOAD0xA0 //寫待發(fā)數(shù)據(jù)指令#defineFLUSH_TX0xE1 //沖洗發(fā)送FIFO指令#defineFLUSH_RX0xE2 //沖洗接收FIFO指令#defineREUSE_TX_PL0xE3 //定義重復(fù)裝載數(shù)據(jù)指令#defineNOP0xFF
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 環(huán)保設(shè)施運維合同樣本
- 專項信托外匯固定資產(chǎn)貸款合作合同
- 玫瑰貸記卡動產(chǎn)質(zhì)押合同協(xié)議
- 員工合同解除合同書
- 贍養(yǎng)義務(wù)履行合同范文
- 聯(lián)合購房按揭貸款合同
- 精簡版商業(yè)租賃合同范本
- 租賃合同季度范本:機械設(shè)備篇
- 南湖區(qū):合同科技創(chuàng)新與合作新機遇
- 出租車股份合作合同條款
- 干式變壓器培訓(xùn)課件
- 2023年上海中考語文試卷(附答案)
- 理發(fā)店業(yè)務(wù)轉(zhuǎn)讓協(xié)議書范本
- 2024年江蘇省中學(xué)生生物學(xué)奧林匹克初賽理論試題
- 環(huán)境年度報告
- 生產(chǎn)流水線的規(guī)劃方案
- 小針刀療法教學(xué)課件
- 打造寫生基地方案
- 寫作:廣告詞-【中職專用】高二語文高效課堂(高教版2023·職業(yè)模塊)
- 爆發(fā)性心肌炎護理查房課件
- 銷售人員人才畫像
評論
0/150
提交評論