基于單片機(jī)的室內(nèi)無線環(huán)境監(jiān)控系統(tǒng)_第1頁
基于單片機(jī)的室內(nèi)無線環(huán)境監(jiān)控系統(tǒng)_第2頁
基于單片機(jī)的室內(nèi)無線環(huán)境監(jiān)控系統(tǒng)_第3頁
基于單片機(jī)的室內(nèi)無線環(huán)境監(jiān)控系統(tǒng)_第4頁
基于單片機(jī)的室內(nèi)無線環(huán)境監(jiān)控系統(tǒng)_第5頁
已閱讀5頁,還剩33頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

本科畢業(yè)設(shè)計(論文)基于單片機(jī)的室內(nèi)無線環(huán)境監(jiān)控系統(tǒng)學(xué)院物理與光電工程學(xué)院專業(yè)電子科學(xué)與技術(shù)(應(yīng)用電子方向)年級班別學(xué)號學(xué)生姓名指導(dǎo)教師2016年6月基于單片機(jī)的室內(nèi)無線環(huán)境監(jiān)控系統(tǒng)基于單片機(jī)的室內(nèi)無線環(huán)境監(jiān)控系統(tǒng) 物理與光電工程學(xué)院摘要我們知道溫濕度是溫室大棚種植里面關(guān)鍵的環(huán)境變量,因此對溫度和濕度進(jìn)行監(jiān)控成為溫室大棚種植的重要任務(wù)之一。本系統(tǒng)是以溫室大棚種植為背景,設(shè)計一個基于STC12C560S2單片機(jī)的溫室內(nèi)無線環(huán)境監(jiān)控系統(tǒng),可以遠(yuǎn)程監(jiān)控溫度和濕度。溫濕度傳感器DHT21采集到室內(nèi)的溫度和濕度后,通過單總線將數(shù)據(jù)發(fā)送給上位機(jī)進(jìn)行處理。單片機(jī)把處理好的數(shù)據(jù)經(jīng)過SPI接口傳輸給無線收發(fā)模塊NRF905。無線模塊將數(shù)據(jù)進(jìn)行打包,加上CRC檢驗碼后,放入發(fā)送數(shù)據(jù)寄存器。系統(tǒng)等待NRF905啟動發(fā)送模式,然后把溫室度的數(shù)據(jù)和接收端的地址一起發(fā)送出去。下位機(jī)的NRF905無線模塊不斷地檢測空中的電磁波。當(dāng)接收到與自身的地址相配的地址后,模塊開始接收到數(shù)據(jù)。對數(shù)據(jù)進(jìn)行解包,去除CRC檢驗碼后,無線模塊把數(shù)據(jù)存儲在數(shù)據(jù)接收寄存器。下位機(jī)通過SPI接口讀取數(shù)據(jù),將溫度和濕度顯示在液晶屏上,同時判斷是否需要啟動報警。系統(tǒng)采用C語言進(jìn)行編程,同時可以通過按鍵對溫度和濕度的報警范圍進(jìn)行設(shè)定。關(guān)鍵字:單片機(jī),無線收發(fā)模塊,溫濕度傳感器,室內(nèi)環(huán)境AbstractWeknowthattemperatureandhumidityarekeyenvironmentalvariablessingreenhousesplanting,thereforetomonitortemperatureandhumiditybecomeoneoftheimportanttasksofgreenhousesplanting.Thissystemisbasedonbackgroundofgreenhousesplanting.DesigningawirelessenvironmentmonitoringsystemingreenhousebasedonSTC12C560S2microcontroller.Thissystemcanremotelymonitorandcontroltemperatureandhumidity.AftertemperatureandhumiditysensorsDHT21havecollectedtheindoortemperatureandhumidity,thedataissenttothemastermachineforprocessingthroughthesinglebus.MCUprocessesthedataandthentransmittoNRF905wirelesstransceivermodulethroughSPIinterface.Afterpackagingdataandaddingthecheckcodeintothedata,wirelessmoduleputsthedataintoregister.ThesystemwaitforNRF905startingdeliverymode,andthenthedataofgreenhouseandaddressissenttogethertothereceivingend.TheNRF905wirelessmoduleofslavemachinecontinuouslydetectstheelectromagneticwavesintheair.Whenreceivingmatchingaddress,themodulebegantoreceivedata.TounpackthedataafterremovingCRCcheckcode,thewirelessmodulestoresthedatainthedatareceiveregister.SlavermachinereadsdatafromtheSPIinterface,andthendisplaysthetemperatureandhumidityontheLCDscreen,andjudgeswhethertostartthealarmatthesametime.SystemusestheClanguagetoprogram,andcanbesetalarmrangeoftemperatureandhumiditythroughthebutton.Keywords:Singlechipmicrocomputer,Wirelesstransceivermodule,Temperatureandhumiditysensor,Indoorenvironment目錄1緒論 11.1課題研究的背景和意義 11.2我國溫室種植的發(fā)展及研究現(xiàn)狀 11.3論文研究的主要內(nèi)容 22室內(nèi)無線環(huán)境監(jiān)控系統(tǒng)總體方案 32.1系統(tǒng)設(shè)計的基本思想 32.2系統(tǒng)總體架構(gòu) 32.3系統(tǒng)軟件開發(fā)環(huán)境 53系統(tǒng)器件方案選擇 63.1單片機(jī)選型 63.2溫濕度傳感器的選擇 73.3無線收發(fā)模塊選擇 83.4液晶顯示屏及穩(wěn)壓器件的選擇 94硬件設(shè)計 104.1溫濕度傳感器的電路設(shè)計 104.2無線模塊電路設(shè)計 104.3無線模塊的工作方式 114.4液晶顯示電路 125系統(tǒng)軟件設(shè)置 145.1軟件設(shè)計的總體架構(gòu) 145.2溫濕度傳感器程序設(shè)計 165.3無線模塊程序設(shè)計 205.4.1無線模塊寄存器配置 225.4.2發(fā)送程序設(shè)計 245.4.3接收數(shù)據(jù)程序設(shè)計 255.4.4數(shù)據(jù)顯示程序設(shè)計 275.4.5報警電路程序設(shè)計 29結(jié)論 30參考文獻(xiàn) 31致謝 321緒論1.1課題研究的背景和意義溫室大棚是一項重要的農(nóng)業(yè)基礎(chǔ)設(shè)施,通過溫室給農(nóng)作物提供適宜的濕度、水分、溫度、空氣、光照等生長條件,使農(nóng)作物不受外界天氣變化和季節(jié)變化的影響。這樣不但能提高農(nóng)作物的產(chǎn)量,而且可以生產(chǎn)反季節(jié)的產(chǎn)品。因此提高溫室大棚種植技術(shù),生產(chǎn)管理等方面具有重要意義。本文重點研究溫室大棚的溫濕度遠(yuǎn)程無線監(jiān)控方面,旨在提高自動化生產(chǎn)水平,減少人力物力的投入,提高溫室大棚的產(chǎn)量[1]。近年來,溫室大棚已經(jīng)逐漸發(fā)展到較高的水平,正在往自動化、智能化與網(wǎng)絡(luò)化的方向發(fā)展,為了達(dá)到提高溫室的環(huán)境監(jiān)控能力的目的。而環(huán)境監(jiān)控是為了對復(fù)雜的環(huán)境中使用的設(shè)備的運行狀態(tài)進(jìn)行監(jiān)測,同時搭配各種環(huán)境因素進(jìn)行監(jiān)測診斷,從而決定采用何種控制策略和管理決策,以達(dá)到更好的經(jīng)濟(jì)效益[2]。現(xiàn)有的監(jiān)測系統(tǒng)大多數(shù)使用現(xiàn)場布線的方式,安裝工作量較大而且成本較高。這種系統(tǒng)的覆蓋范圍比較小,而且線路長期工作容易被腐蝕或者老化,引發(fā)漏電等安全隱患,局限性明顯[3]。將無線通信技術(shù)運用在監(jiān)控方面,可以很好地解決現(xiàn)場布線方式的缺陷。無線技術(shù)很多優(yōu)勢,比如實時、低成本和便利等,可以說將無線通信技術(shù)應(yīng)用到溫室大棚里面,有助于改進(jìn)環(huán)境監(jiān)控技術(shù),降低系統(tǒng)成本,提高自動化水平。1.2我國溫室種植的發(fā)展及研究現(xiàn)狀我國人口基數(shù)大,還是個農(nóng)業(yè)大國,農(nóng)業(yè)的發(fā)展受到很大的重視。傳統(tǒng)的耕作方式已經(jīng)滿足不了社會的需求,因此要將現(xiàn)代化的技術(shù)運用到傳統(tǒng)農(nóng)業(yè)中,提高生產(chǎn)力,提高農(nóng)產(chǎn)品的產(chǎn)量。這是目前的重點研究方向。而加強(qiáng)溫室大棚的管理和控制也是目前研究的重要領(lǐng)域。傳統(tǒng)的總線方式系統(tǒng)有很大的局限性,難以適應(yīng)社會的發(fā)展。采用無線通信技術(shù),可以遠(yuǎn)程數(shù)據(jù)采集監(jiān)控,適應(yīng)未來發(fā)展的需求。近年來我國開展了許多對溫室的無線傳感器和網(wǎng)絡(luò)技術(shù)相結(jié)合的探索,取得了一些成就。江蘇大學(xué)的毛罕平教授等開發(fā)了一個溫室內(nèi)的全自動環(huán)境控制系統(tǒng),可以很好地實現(xiàn)對環(huán)境因素的綜合控制,而且在我國溫室環(huán)境監(jiān)控中成功推廣。在上海蔬菜高科技推廣中心,建造了智能溫室兩棟,每棟占地一千平方米,每公頃的費用一千二百萬元,智能溫室主要控制因素有水分、濕度、溫度、光照、肥料,并且使用各種小型機(jī)械完成施肥、覆膜、松土等功能,達(dá)到了國際領(lǐng)先水平??偟膩碚f,國內(nèi)目前的溫室控制技術(shù)還不成熟,還處在探索和發(fā)展的階段。智能化、自動化程度相比于國外同類產(chǎn)品有一定的差距,需要進(jìn)一步加強(qiáng)研究力度,才能取得長遠(yuǎn)的發(fā)展[4]。1.3論文研究的主要內(nèi)容針對溫室大棚種植需要對溫度和濕度進(jìn)行監(jiān)控的需要,使用STC12C560S2單片機(jī)和NRF905無線收發(fā)模塊,設(shè)計集合無線傳輸、數(shù)據(jù)處理、液晶顯示和聲光報警為一體的無線環(huán)境監(jiān)控系統(tǒng)。本文將從以下幾個方面進(jìn)行研究:如何通過程序控制溫濕度傳感器DHT21,并采集到室內(nèi)的溫度和濕度。SPI通信協(xié)議。使用NRF905無線收發(fā)模塊對采集的數(shù)據(jù)進(jìn)行發(fā)送與接收。STC12C560S2單片機(jī)如何通過程序協(xié)調(diào)各個模塊有序工作。2室內(nèi)無線環(huán)境監(jiān)控系統(tǒng)總體方案2.1系統(tǒng)設(shè)計的基本思想本系統(tǒng)的處理和控制所采用的核心器件都是STC12C560S2單片機(jī),該單片機(jī)是STC生產(chǎn)的單時鐘/機(jī)械周期的單片機(jī),是高速/低功耗/超強(qiáng)抗干擾的新一代8051單片機(jī)。它的指令代碼完全兼容傳統(tǒng)的51單片機(jī),但是速度快8-12倍。內(nèi)部集成了8路高速10位A/D轉(zhuǎn)換模塊,2路PWM,I/O口的資源豐富,因此被廣泛地應(yīng)用于各個領(lǐng)域[5]。系統(tǒng)的組成分為兩個部分:數(shù)據(jù)采集與發(fā)送部分和數(shù)據(jù)接收與顯示部分。數(shù)據(jù)采集由溫濕度傳感器DHT21負(fù)責(zé)。這是一款單總線數(shù)字傳感器,精度高,抗干擾能力強(qiáng)。單片機(jī)可以通過一個與DHT21連接的I/O口讀取傳感器采集到的40位數(shù)據(jù),其中前16位是濕度數(shù)據(jù),中間16位為溫度數(shù)據(jù),后8位作為校驗碼。上位機(jī)通過SPI接口將溫度和濕度數(shù)據(jù)傳輸給NRF905進(jìn)行打包發(fā)送。數(shù)據(jù)采集與發(fā)射部分不斷重復(fù)采集與發(fā)送數(shù)據(jù)這個過程。與下位機(jī)連接的NRF905處于等待接收狀態(tài),一旦接收到匹配的地址后,進(jìn)行數(shù)據(jù)接收與解包,并通過SPI接口將數(shù)據(jù)傳輸給下位機(jī)進(jìn)行處理。下位機(jī)將數(shù)據(jù)顯示在LCD1602上,并且檢測溫濕度是否超過設(shè)定范圍,以決定是否啟動聲光報警。數(shù)據(jù)接收與顯示部分不斷地重復(fù)上述過程。這樣整個系統(tǒng)實現(xiàn)了對數(shù)據(jù)的采集、無線傳輸、接收與顯示,可以實時地遠(yuǎn)程監(jiān)控室內(nèi)的溫度和濕度。監(jiān)控范圍可達(dá)數(shù)百米。2.2系統(tǒng)總體架構(gòu)整個系統(tǒng)采用模塊化的設(shè)計理念,其中上位機(jī)系統(tǒng)主要有溫濕度傳感器、無線發(fā)射模塊和微處理器等主要模塊組成,主要負(fù)責(zé)數(shù)據(jù)的采集與發(fā)送任務(wù)。下位機(jī)系統(tǒng)主要由無線接收模塊、微處理器、液晶顯示屏和報警裝置等功能模塊組成,用來實現(xiàn)數(shù)據(jù)的接收、顯示與報警功能。系統(tǒng)的結(jié)構(gòu)框圖如圖2.1所示:溫濕度傳感器溫濕度傳感器發(fā)射處理器發(fā)射模塊接收處理器顯示模塊報警裝置接收模塊圖2.1系統(tǒng)總體結(jié)構(gòu)框圖系統(tǒng)的主要器件包括單片機(jī)微處理器、無線收發(fā)系統(tǒng)和采集溫室度的傳感器。單片機(jī)在系統(tǒng)中的功能是數(shù)據(jù)處理和控制調(diào)度。它把溫濕度傳感器所采集到的數(shù)據(jù)信號經(jīng)過處理之后,經(jīng)過無線收發(fā)模塊將數(shù)據(jù)發(fā)送出去。接收處理器控制無線模塊進(jìn)行數(shù)據(jù)接收,并且把接收到的數(shù)據(jù)通過液晶屏顯示出來,同時判斷是否要啟動聲光報警模塊。其中傳感器和無線收發(fā)模塊是本系統(tǒng)的關(guān)鍵。傳感器的精度與性能是整個系統(tǒng)的穩(wěn)定性與可靠性的關(guān)鍵。因此,在溫濕度傳感器采集到準(zhǔn)確的室內(nèi)環(huán)境參數(shù)的前提下,整個系統(tǒng)才能實現(xiàn)真正意義上的環(huán)境監(jiān)控。無線收發(fā)模塊是溫濕度數(shù)據(jù)采集與處理顯示的橋梁,是實現(xiàn)遠(yuǎn)程監(jiān)控室內(nèi)環(huán)境參數(shù)的關(guān)鍵部分。從框圖可以看出,傳感器將采集到的數(shù)據(jù)傳輸給微處理器進(jìn)行處理后,再發(fā)送給無線收發(fā)模塊。無線發(fā)射模塊將數(shù)據(jù)打包后,發(fā)送匹配地址給接收模塊。接收模塊只有在檢測到與自己的地址相匹配的地址后,才進(jìn)行數(shù)據(jù)的接收與數(shù)據(jù)解包。單片機(jī)檢測到NRF905已經(jīng)成功接收到數(shù)據(jù)后,馬上將數(shù)據(jù)讀取出來,進(jìn)行數(shù)據(jù)處理,判斷溫度與濕度是否在允許的范圍內(nèi),以此決定是否要啟動聲光報警,同時將溫度值與濕度值在液晶屏上面顯示出來。溫度和濕度的范圍可以直接通過按鍵進(jìn)行設(shè)定,操作簡單,使得整個系統(tǒng)更加人性化。2.3系統(tǒng)軟件開發(fā)環(huán)境本系統(tǒng)的軟件開發(fā)選擇的是keilsoftware公司推出的KeiluVision4軟件。它幾乎支持所有8051內(nèi)核的單片機(jī),集仿真與調(diào)試與一體。在整個項目的軟件編寫與程序調(diào)試過程中,該軟件都能滿足,因為它集成了編輯器、編譯器與仿真器。除此之外,該軟件知道匯編和C語言編程,人機(jī)交互界面友好,容易學(xué)習(xí)。因此進(jìn)行51單片機(jī)開發(fā),該軟件是首選[6]。在編程語言方面,本系統(tǒng)的程序設(shè)計選擇C語言進(jìn)行編寫。匯編語言涉及到很多底層的驅(qū)動和寄存器讀寫,編寫較為麻煩,而C語言結(jié)構(gòu)性強(qiáng)、可讀性強(qiáng)并且容易維護(hù),所以選擇C語言能夠提供本系統(tǒng)的編程效率[7]。KeiluVision4的使用步驟如下:打開軟件,在菜單欄選擇“工程”后“新建工程”,選擇對應(yīng)的目標(biāo)芯片,再配置一下軟件。新建一個C語言源文件,保存到工程文件夾內(nèi),在文件名后加.c。擇左方框中的Target1文件夾展開,選擇SoueceGroup1點擊鼠標(biāo)右鍵,選擇增加文件到組,把C語言源文件添加進(jìn)去。編譯項目并且生成可以燒錄到單片機(jī)存儲器內(nèi)部的HEX文件。STC12系列單片機(jī)的內(nèi)部已經(jīng)固化了在線可編程系統(tǒng)即ISP,引導(dǎo)固件程序。通過ISP,用戶可以很方面地把程序燒錄到目標(biāo)單片機(jī)內(nèi)部。通過ISP,將編譯好的項目中的HEX文件下載到單片機(jī)中運行驗證。值得注意的是,當(dāng)單片機(jī)重新上電之后,它會首先運行內(nèi)部固化的ISP程序。當(dāng)重新上電后,單片機(jī)檢測P3.0引腳是否有有效的程序下載命令,如果有就好下載用戶程序,如果沒有則跳到單片機(jī)內(nèi)部的程序存儲區(qū),運行里面的用戶程序。3系統(tǒng)器件方案選擇3.1單片機(jī)選型51系列單片機(jī)以其成本低,功耗低,能滿足大多數(shù)工業(yè)控制和商業(yè)運用,因此被廣發(fā)運用于各個領(lǐng)域,包括科學(xué)研究,教育等多方面。本系統(tǒng)的控制與處理的核心是一款STC12C560S2單片機(jī),它也是8051內(nèi)核的,可以兼容傳統(tǒng)的51單片機(jī)指令集。隨著社會的進(jìn)步,對于技術(shù)的要求也越來越高。特別是對于微處理器,要求其能以更快的速度去處理更大的數(shù)據(jù)量,而且功耗要越來越低。因此,傳統(tǒng)的8051單片機(jī)在速度、程序存儲空間和功能上,逐漸難以滿足這樣的需求。一些國內(nèi)外的研究機(jī)構(gòu)開始對傳統(tǒng)的8051單片機(jī)進(jìn)行改進(jìn)。本系統(tǒng)所使用的STC12C560S2是一款由宏晶科技有限公司研制的增強(qiáng)型51單片機(jī)。這款單片機(jī)是單時鐘/機(jī)械周期的,而傳統(tǒng)的單片機(jī)是12個時鐘/機(jī)械周期的,所以STC12系列單片機(jī)運行速度更快,是傳統(tǒng)的51單片機(jī)的8-12倍。而且該單片機(jī)增加了加密技術(shù),能保護(hù)內(nèi)部分用戶程序不被竊取。一般的工業(yè)應(yīng)用,這款單片機(jī)都能滿足使用要求。雖然功能更加強(qiáng)大了,但是單片機(jī)的體積并沒發(fā)生改變,處理個別引腳的復(fù)用功能不同,其他的I/O口跟傳統(tǒng)的51單片機(jī)完全兼容。它內(nèi)部集成了許多模塊,包括復(fù)位電路,看門狗電路,PWM輸出和A/D轉(zhuǎn)化電路等。下面是該單片機(jī)的主要特性介紹[8]:是傳統(tǒng)的51單片機(jī)的增強(qiáng)版,功能升級,不但支持先進(jìn)的指令集,而且還兼容傳統(tǒng)的8051單片機(jī)的一些指令集。除此之外,內(nèi)部還加入了硬件乘法和除法指令。單片機(jī)工作的頻率范圍更大,最高可達(dá)35MHz。用戶的應(yīng)用程序存儲空間為60KB。40個I/O口引腳,大多數(shù)都具有復(fù)用功能。而且可以設(shè)置I/O口的工作模式,比如準(zhǔn)雙向口/弱上拉輸出、強(qiáng)推挽輸出、高阻輸入和開漏輸出等。單片機(jī)內(nèi)集成了1280字節(jié)的RAM。比傳統(tǒng)的51單片機(jī)多出一個16位的定時器,而且兩路PCA也可以作為2個16位定時器用。具有可以編程的時鐘輸出功能,T0在P3.4輸出時鐘,T1在P3.5輸出時鐘,BRTZ在P1.0輸出時鐘。7路外部中斷I/O引腳,既兼容了傳統(tǒng)51的下降沿中斷,還具有支持上升沿觸發(fā)的PCA模塊。具有SPI引腳,支持在線編程功能。兩個全雙工的UART。P0口的作用主要有兩個,一是用作地址或者是數(shù)據(jù)總線的低8位,另外就是當(dāng)做普通的I/O口來使用。內(nèi)部不帶弱上拉。P1口的復(fù)用功能較多,有ADC轉(zhuǎn)換接口,SPI通訊接口等等。P2口可以作為普通的I/O口來使用,也可以作為高8位的地址指針。P3口有一些重要的復(fù)用功能,例如P3.0和P3.1可以作為串行通信的輸入輸出引腳,P2.3到P2.5引腳可以用作定時器與外部中斷的輸入端。P4.7是復(fù)位引腳。本系統(tǒng)使用的STC12C560S2單片機(jī)在上電復(fù)位后,各個端口為準(zhǔn)雙向模式。其中高電平為2V以上,低電平為0.8V以下。3.2溫濕度傳感器的選擇傳感器是可以把外界的模擬量通過敏感元件和轉(zhuǎn)換電路,得到可以進(jìn)行處理的電信號。它屬于電子檢測設(shè)備。從定義上來看,傳感器是能夠感受規(guī)定的被測量并且按照一定的規(guī)律轉(zhuǎn)換成可用輸出的信號的器件和裝置。傳感器在生活中隨處可見,是自動化控制和智能領(lǐng)域的重要元件[9]。DHT21是奧松公司生產(chǎn)的一款溫濕度傳感器,屬于電容式的。這款溫濕度傳感器不但功耗低而且傳輸距離遠(yuǎn),還具有自動校準(zhǔn)功能[10]。該傳感器在使用時要注意兩點:一讓采樣周期大于或者等于最小值才不至于引起錯誤;二是與單片機(jī)的I/O口連接的時候,在連接線小于20米的情況下,最后加一個5K的上拉電阻。DHT21可以同時測溫度和濕度,是一款雙用的數(shù)字溫濕度傳感器。它具有穩(wěn)定性好,使用壽命長的優(yōu)點。元件內(nèi)部集成了分別用來測濕度和溫度的模塊,采集濕度的傳感器是電容式的,而采集溫度的器件是一個NTC測溫元件。通過一條DATA線就可以與單片機(jī)連接,進(jìn)行讀寫操作。從DHT21傳輸給單片機(jī)的數(shù)據(jù)為40位,其中前16位是濕度值,中間16位是溫度值,后8位是校驗碼。也就是說,該傳感器的濕度和溫度的分辨率都是16位的。3.3無線收發(fā)模塊選擇收發(fā)模塊是本系統(tǒng)里面另一個重要的組成部分,它是實現(xiàn)系統(tǒng)的實時監(jiān)控,無線傳輸,遠(yuǎn)程控制等功能的關(guān)鍵。系統(tǒng)的收發(fā)模塊采用NRF905芯片搭建的一個電路。nRF905射頻發(fā)射器芯片是由Nordic公司出品的一款低于1GHz無線芯片[11]。NRF905的工作頻段有433MHz、868MHz和915MHz,而在我國使用的是433MHz這一個免費的頻段。如果不使用模塊外部的聲表濾波器,可以獲得良好的通信效果。無線模塊與單片機(jī)的通信是通過SPI接口來實現(xiàn)的,通過軟件編程可以配置無線模塊的通信頻道、通信地址和輸出功率。它的ShockBurstTM模式可以配置成自動處理發(fā)送和接收的數(shù)字包字頭,增加CRC檢驗功能,使模塊之間更加可靠地完成數(shù)據(jù)的發(fā)送與接收。另外,NRF905的功耗很低,如果以-10dBm的功率向外發(fā)送數(shù)據(jù),它的工作電流為11mA,而當(dāng)作接收端時,其工作電流為12.5mA。通過軟件設(shè)置,可以讓NRF905工作在不同模式,其中,空閑模式和掉電模式可以達(dá)到降低功耗的目的。NRF905的基本特點如下[12]:可工作在433MHz的免費頻段。還可以通過配置,使該模塊工作在不同頻段,達(dá)到多點通信和跳頻通信的目的。傳輸速率高,可高達(dá)50kb/s。有效傳輸距離為300米。采用GFSK調(diào)制技術(shù),抗干擾能力強(qiáng),非常適合在工業(yè)控制場合。片內(nèi)集成了8位與16位的CRC校驗硬件,單對多通信的地址控制。工作電壓為1.9V-3.6V,待機(jī)模式下的工作電流僅為2.5μA,可以實現(xiàn)超低功耗。不同模式的切換時間為650μs。內(nèi)置SPI接口,通過編程設(shè)置通信地址。模塊的接口間距為標(biāo)準(zhǔn)的2.54mm,方便安裝連接。3.4液晶顯示屏及穩(wěn)壓器件的選擇 本系統(tǒng)通過液晶屏直接實時顯示溫度和濕度給用戶,這里采用一款1602字符型LCD顯示屏。顯示數(shù)據(jù)分為兩行,每行16個字符。工作電壓為4.5V-5.5V,工作電流為2mA。外圍配置簡單,價格較便宜,性價比高,因此被廣泛的使用在工業(yè)設(shè)備和教學(xué)實驗中。 單片機(jī)、溫濕度傳感器、液晶顯示等模塊的供電為5V,而NRF905的供電電壓為3.3V,所以需要對系統(tǒng)的供電電源進(jìn)行降壓后,再對無線模塊進(jìn)行供電。本系統(tǒng)選擇的3.3V穩(wěn)壓芯片為AMS1117。在該芯片的輸入、輸出端加上退耦、濾波電容后就可以為無線模塊提供穩(wěn)定的3.3V電壓。4硬件設(shè)計4.1溫濕度傳感器的電路設(shè)計溫度傳感器的供電電源為5V,當(dāng)連接距離少于20米時,DTH21的DATA引腳通過一個5KΩ的上拉電阻與單片機(jī)進(jìn)行連接。DHT21傳感器的引腳特性如表4.1所示:表4.1 DHT21傳感器的引腳特性表管腳名稱注釋1VDD供電3.3-5.5VDC2DATA串行數(shù)據(jù),單總線3GND接地,電源負(fù)極4NC空腳在使用DHT21的過程中,要注意以下兩點:如果器件工作在非規(guī)定的范圍內(nèi),則在濕度的測量過程中可能會造成3%RH左右的短暫性的漂移信號。當(dāng)返回到正常的工作環(huán)境后,器件可以慢慢恢復(fù)到校準(zhǔn)狀態(tài)。若傳感器長時間工作在非規(guī)定的范圍,會加速器件的老化。為了使傳感器測得的數(shù)據(jù)更加準(zhǔn)確,應(yīng)確保室內(nèi)穩(wěn)定相對穩(wěn)定,這樣才能測出相對準(zhǔn)確的濕度值。在器件的放置時,應(yīng)該使傳感器遠(yuǎn)離發(fā)熱量大的器件,同時保持傳感器外殼良好痛風(fēng)性。4.2無線模塊電路設(shè)計無線收發(fā)模塊是本系統(tǒng)的一個很重要的模塊,是兩個單片機(jī)實現(xiàn)通信的橋梁。采用NRF905來設(shè)計,可以滿足系統(tǒng)設(shè)計的需求。在使用該收發(fā)模塊時,有以下幾點需要特別說明:電源引腳的電壓應(yīng)為1.9V-3.6V。如果超過3.6V,會燒壞模塊,所以一般采用3.3V的電源給模塊進(jìn)行供電。模塊的13引腳與14引腳要跟整個系統(tǒng)的邏輯地相連接。如果單片機(jī)沒有集成硬件SPI,可以使用一般的I/O口,模擬SPI的讀寫時序,從而實現(xiàn)SPI通信。如果使用的微處理器是51系列單片機(jī),模塊引腳與P0口相接,需要加10K的上拉電阻,其他接口不需要。如果是與5V的單片機(jī)相連,最好加限流電阻,如果與3.3V的單片機(jī),可以直接跟I/O口相連。4.3無線模塊的工作方式NRF905有四種不同的工作模式,分別為掉電模式、空閑模式、發(fā)送模式和接收模式。前兩種是節(jié)電模式,后兩種是正常模式。通過對TRX_CE、TX_EN和PWR_UP的設(shè)置來控制NRF905的工作模式。如表4.2所示:表4.2 NRF905工作模式PWR_UPTX_ENTRX_CE工作模式0XX掉電和SPI編程1X0Standby和SPI編程101RX111TX無線模塊工作在ShockBurstTM模式,為了降低功耗,使用模塊片內(nèi)的先入先出堆棧區(qū),將數(shù)據(jù)從單片機(jī)內(nèi)以高速發(fā)送出去。因此,即使是低俗的單片機(jī),數(shù)據(jù)發(fā)送速度也可以非常高。這樣數(shù)據(jù)在空中停留的時間變短,增強(qiáng)了抗干擾能力,提高系統(tǒng)可靠性。由于條件限制,系統(tǒng)還得考慮功耗問題。在此模式下,模塊的平均工作電流減少,降低了能耗。NRF905還會自動處理數(shù)據(jù)包頭與CRC校驗碼。即發(fā)送數(shù)據(jù)時,自動加上數(shù)據(jù)包頭與CRC檢驗碼,在接收數(shù)據(jù)時,自動去掉數(shù)據(jù)包頭與CRC校驗碼。數(shù)據(jù)在發(fā)送和接收完成的情況下,DR引腳都會被拉高。NRF905的節(jié)能模式分別是關(guān)機(jī)模式和掉電模式。當(dāng)模塊工作在掉電模式下的時候,電流很小,僅為2.5uA左右。當(dāng)模塊處于關(guān)機(jī)模式時,停止工作。系統(tǒng)不再進(jìn)行接收或者發(fā)送數(shù)據(jù),但是配置字中的數(shù)據(jù)將保存原來的狀態(tài)。當(dāng)系統(tǒng)處于等待接收狀態(tài)時,功耗會非常低。此時,模塊上的晶振仍處于工作狀態(tài)。這種工作模式可以節(jié)能,因為工作電流很小。模塊從空閑模式轉(zhuǎn)換到接收或者發(fā)送模式的時間很短,僅為650us[13]。4.4液晶顯示電路液晶顯示屏的種類很多,不同的設(shè)計需要選擇不同的產(chǎn)品。本系統(tǒng)對液晶屏的顯示要求很低,所以選擇LCD1602液晶屏。這款液晶屏共16個引腳,帶背光接口。1602的各個引腳接口如表4.3所示:表4.3 1602的各個引腳接口表編號符號引腳說明編號符號引腳說明1VSS電源地9D2數(shù)據(jù)2VDD電源正極10D3數(shù)據(jù)3VL液晶顯示偏壓11D4數(shù)據(jù)4RS數(shù)據(jù)/命令選擇12D5數(shù)據(jù)5R/W讀/寫選擇13D6數(shù)據(jù)6EN使能信號14D7數(shù)據(jù)7D0數(shù)據(jù)15BLA背光源正極8D1數(shù)據(jù)16BLK背光源負(fù)極1602的主要引腳介紹:LCD1602的電源和地引腳分別為VDD和VSS,只有當(dāng)這兩個引腳正確連接時,液晶才能正常工作。VL引腳是用來實現(xiàn)對比度調(diào)節(jié)功能的。通過電位器調(diào)整VL引腳的分壓,可以改變液晶的對比度。當(dāng)VL接地時,對比度最高,會造成看不清液晶屏上顯示的字符。RS引腳是一個重要的引腳,控制寄存器的選擇。不同的寄存器控制液晶不同的功能。當(dāng)RS為高電平時選中數(shù)據(jù)寄存器。當(dāng)RS為低電平時選中指令寄存器。R/W為讀寫選擇引腳。該引腳為高電平時,是讀操作;該引腳為低電平時,是寫操作。EN引腳為液晶使能引腳,從高電平變?yōu)榈碗娖綍r,進(jìn)行寫入操作。D0-D7為數(shù)據(jù)引腳。LCD1602的這8位數(shù)據(jù)引腳是雙向的,不但可以對1602寫入數(shù)據(jù),也可以讀取1602上面的數(shù)據(jù)。讀寫功能由R/W引腳控制。BLA和BLK分別是背光調(diào)節(jié)的正極跟負(fù)極。由于STC12C560S2的I/O口的電流驅(qū)動能力有限,每個I/O口平均為20毫安,不足以驅(qū)動蜂鳴器進(jìn)行發(fā)聲報警。因此要采用三極管對I/O口的電流進(jìn)行放大,然后再去驅(qū)動蜂鳴器。蜂鳴器分為有源蜂鳴器和無源蜂鳴器。只要給有源蜂鳴器兩端加上何時的電壓電流,它就會發(fā)出聲音,因為它內(nèi)部集成了振蕩源;而對于無源蜂鳴器,內(nèi)部沒有振蕩源,所以需要給它加上2K~5KHz的方波才會發(fā)出響聲。因為本系統(tǒng)只要蜂鳴器發(fā)出警報聲,因此采用有源蜂鳴器,這樣電路更加簡單。用于報警電路作為電流放大的三極管8050是非常常見的NPN型晶體三極管,在各種放大電路中經(jīng)常看到它,應(yīng)用范圍很廣,主要用于功率放大、開關(guān)。該三極管的集電極最大電流為0.5A,直流電增益為10~60,功耗為625毫瓦。5系統(tǒng)軟件設(shè)置5.1軟件設(shè)計的總體架構(gòu)整個系統(tǒng)的程序設(shè)計采用模塊化思想,將各個模塊的功能編程獨立的子函數(shù),在主函數(shù)中調(diào)用各個子函數(shù),從而實現(xiàn)本系統(tǒng)的功能。主要的模塊功能包括:初始化程序、溫濕度傳感器采集溫濕度程序、無線模塊收發(fā)數(shù)據(jù)程序、液晶顯示程序和蜂鳴器報警程序。其中,初始化程序分別包括:傳感器初始化、LCD1602初始化和NRF905初始化。無線收發(fā)模塊程序包括:打包發(fā)送溫濕度數(shù)據(jù),接收溫濕度數(shù)據(jù)并進(jìn)行拆包。系統(tǒng)的上位機(jī)程序流程圖如圖5.1所示:上電開始上電開始系統(tǒng)初始化讀取溫濕度存儲數(shù)據(jù)是否發(fā)送完畢?發(fā)送數(shù)據(jù)否是圖5.1 上位機(jī)發(fā)送數(shù)據(jù)程序流程圖由上面的流程圖可以看出:當(dāng)系統(tǒng)上電后,首先進(jìn)行初始化操作,即初始化傳感器和NRF905無線模塊。然后單片機(jī)讀取溫濕度傳感器的數(shù)據(jù),將其存儲起來。通過無線模塊將數(shù)據(jù)進(jìn)行打包,加上CRC檢驗碼后,發(fā)送出去。如果數(shù)據(jù)還沒發(fā)送完成,即DR引腳還沒被置高,則繼續(xù)執(zhí)行發(fā)送程序。當(dāng)發(fā)送完畢后,再讀取下一次數(shù)據(jù),接著發(fā)送出去。圖5.2 下位機(jī)接收數(shù)據(jù)流程圖由下位機(jī)的流程圖可以看出,當(dāng)系統(tǒng)上電后,也是首先進(jìn)行一系列初始化處理。其中包括1602液晶顯示初始化,NRF905初始化。當(dāng)檢測到匹配的地址后,NRF905開始接收數(shù)據(jù),對數(shù)據(jù)進(jìn)行解包,去除CRC檢驗碼后把數(shù)據(jù)存儲到寄存器內(nèi)。單片機(jī)讀取NRF905上的數(shù)據(jù),在液晶屏上顯示出來。同時判斷溫濕度的范圍,如果超出設(shè)定的范圍,則蜂鳴器發(fā)出警報聲。溫濕度的范圍可以通過系統(tǒng)上的按鍵進(jìn)行設(shè)定。5.2溫濕度傳感器程序設(shè)計DHT21的供電電壓為5V,當(dāng)系統(tǒng)上電后,溫濕度傳感器會有1秒的不穩(wěn)定狀態(tài),因此在系統(tǒng)中要通過延時等操作,跳過這個不穩(wěn)定狀態(tài)后再對DHT21進(jìn)行讀寫操作。設(shè)計電路時,最后在電源與地間加上一個去耦濾波電容,使系統(tǒng)更加穩(wěn)定。單片機(jī)與溫濕度傳感器是通過單總線進(jìn)行通信的,通訊時間大約為5毫秒。40位傳輸數(shù)據(jù)下面所示:數(shù)據(jù)格式=16位濕度數(shù)據(jù)+16位溫度數(shù)據(jù)+8位檢驗和。其中,40位數(shù)據(jù)里面,高位在前,低位在后。后八位檢驗和由前面濕度的高8位加上低8位,再加上溫度的高8位與低8位組成。如圖5.3所示:圖5.3 40位數(shù)據(jù)組成系統(tǒng)上電工作后,單片機(jī)給溫濕度傳感器發(fā)送指令,使DHT21從低功耗模式迅速切換到高速模式,給單片機(jī)傳回一個應(yīng)答信號。接著發(fā)送采集到的40bit數(shù)據(jù)給單片機(jī)進(jìn)行處理。因為傳感器傳輸兩次數(shù)據(jù)給單片機(jī)有一定的時間間隔,當(dāng)這個間隔時間比較長的時候,需要再采集一次數(shù)據(jù)才能獲得最新、最準(zhǔn)確的數(shù)據(jù)。當(dāng)上位機(jī)不工作的時候,單片機(jī)與傳感器直接的單總線處于高電平狀態(tài)。兩者開始通信的時候,單片機(jī)需要先將總線拉低1~10毫秒,然后再釋放。接著延時20~40微秒后,單片機(jī)檢測傳感器發(fā)來的應(yīng)答信號。兩者的通訊時序圖如圖5.4所示:圖5.4 通訊時序圖DHT21的應(yīng)答信號是一個大約80微秒的低電平,然后再拉高總線約80微秒,接著系統(tǒng)將進(jìn)入數(shù)據(jù)傳輸狀態(tài)。時序圖如圖5.5所示:圖5.5 數(shù)據(jù)傳輸時序圖經(jīng)過80微秒后,開始傳送數(shù)據(jù)位。每一位數(shù)據(jù)是由一段高電平和一段低電平組成。所有數(shù)據(jù)位的低電平維持的時間相同,大約為50微秒,代表數(shù)據(jù)位的開始。后面的高電平維持的時間長短決定該數(shù)據(jù)位是“1”還是“0”。其中,高電平維持時間長的為數(shù)據(jù)“1”,高電平維持時間短的為數(shù)據(jù)“0”。當(dāng)傳輸完最后一位,DHT21將總線拉為低電平,維持大約50微秒,再將總線釋放。DHT21傳感器采集濕度和溫度的程序如下所示://溫濕度讀取子函數(shù)voidread_byte(){uchari,temp,delay;for(i=0;i<8;i++){delay=2;while((!DHT)&&delay++);//等待DHT變高電平delay:防止死循環(huán)delay_1us(30); //延時30us如果還是高電平則為1temp=0;if(DHT)temp=1; //高位先出delay=2; while((DHT)&&delay++);if(delay==0) break;//超時讀取就錯誤comdata<<=1;comdata|=temp;}}//溫濕度讀取函數(shù)voidread_rh(){uchardelay,check,error=0;DHT=0;Delay_1ms(18);//DHT=1;delay_1us(20);DHT=1;if(!DHT){delay=2;while((!DHT)&&delay++);delay=2;while((DHT)&&delay++);read_byte();dht_date[0]=comdata;read_byte();dht_date[1]=comdata;read_byte();dht_date[2]=comdata;read_byte();dht_date[3]=comdata;check=comdata;DHT=1;if(check=(uchar)(dht_date[0]+dht_date[1]+dht_date[2]+dht_date[4])){humidity=dht_date[0];humidity<<=8;humidity|=dht_date[1];temperature=dht_date[2];temperature<<=8;temperature|=dht_date[3];}}}由溫濕度讀取函數(shù)可以看出,當(dāng)進(jìn)行數(shù)據(jù)采集時,通過程序?qū)慰偩€拉低1~10毫秒,然后再釋放總線。經(jīng)過20~40微秒的等待時間后,單片機(jī)檢測DHT21傳感器的應(yīng)答信號。在進(jìn)行數(shù)據(jù)傳輸之前,傳感器先給一個大約80微秒左右的低電平。之后再被傳感器拉高大約80微秒。然后通過調(diào)用讀取溫濕度子函數(shù),將采集到的數(shù)據(jù)存儲到數(shù)組里面。當(dāng)數(shù)據(jù)讀取完畢后,進(jìn)行檢驗碼判斷,如果兩者相等,則讀取數(shù)據(jù)正確。5.3無線模塊程序設(shè)計無線模塊程序由兩部分組成,分別是上位機(jī)發(fā)送數(shù)據(jù)與下位機(jī)接收數(shù)據(jù)。即上位機(jī)給下位機(jī)發(fā)送命令與地址。如果下位機(jī)應(yīng)答,則上位機(jī)進(jìn)入數(shù)據(jù)發(fā)送狀態(tài)。當(dāng)發(fā)送完成一次數(shù)據(jù)后,進(jìn)入下一次的命令與地址的發(fā)送。下位機(jī)主要是等待上位機(jī)發(fā)送的地址和命令,當(dāng)檢測到跟自己地址匹配的地址后,進(jìn)入數(shù)據(jù)接收模式。成功接收完一次數(shù)據(jù)后,進(jìn)入下一次數(shù)據(jù)的接收。無線模塊與單片機(jī)之間的通信是通過SPI協(xié)議進(jìn)行的,一般的I/O口可以通過軟件模擬SPI的讀寫時序?qū)崿F(xiàn)無線模塊NRF905與STC12C560S2單片機(jī)的通信。本系統(tǒng)采用軟件模擬SPI讀寫時序的方式。程序如下://SPI讀函數(shù)unsignedcharSpiRead(void){ unsignedcharj; for(j=0;j<8;j++) {DATA_BUF=DATA_BUF<<1; SCK=1; if(MISO)//讀取最高位,保存至最末尾,通過左移位完成整個字節(jié) { DATA_BUF|=BYTE_BIT0; } else { DATA_BUF&=~BYTE_BIT0; } SCK=0; } returnDATA_BUF;}由SPI讀函數(shù)可以看出,讀取的數(shù)據(jù)將存儲在變量DATA_BUF內(nèi)。將SCK置高后看,讀取MISO上的數(shù)據(jù),然后保存到DATA_BUF的最低位。讀取完畢后將SCK拉低,把DATA_BUF上的數(shù)據(jù)全部往左移動一位,再進(jìn)行下一次數(shù)據(jù)的讀取。這樣循環(huán)8次后,直到讀完一個字節(jié)數(shù)據(jù)。讀取數(shù)據(jù)時,總是高位在前,低位在后。//SPI寫函數(shù)voidSpiWrite(unsignedcharsend){ unsignedchari; DATA_BUF=send; for(i=0;i<8;i++) { if(DATA7) //總是發(fā)送最高位 { MOSI=1; } else { MOSI=0; } SCK=1; DATA_BUF=DATA_BUF<<1; SCK=0; }}由SPI寫函數(shù)可以看出,首先準(zhǔn)備好需要發(fā)送的數(shù)據(jù),通過參數(shù)send傳遞給DATA_BUF變量。然后從最高位開始發(fā)送,判斷DATA_BUF最高位的狀態(tài),如果為數(shù)字“1”,則把MOSI賦值為“1”;如果為數(shù)字“0”,則把MOSI賦值為“0”。將SCK拉高后,把DATA_BUF上的數(shù)據(jù)左移一位,再將SCK置低。這樣循環(huán)8次,就把一個字節(jié)的數(shù)據(jù)通過MOSI發(fā)送出去了。5.4.1無線模塊寄存器配置在系統(tǒng)上電的時候,首先要進(jìn)行一些的初始化操作,初始化SPI控制寄存器、初始化SPI接口和初始化NRF905。無線收發(fā)模塊NRF905的SPI接口由五個寄存器控制。分別為:接收數(shù)據(jù)有效寄存器、發(fā)送有效數(shù)據(jù)寄存器、發(fā)送地址寄存器、RF配置寄存器和狀態(tài)寄存器。狀態(tài)寄存器的狀態(tài)分為數(shù)據(jù)就緒和地址匹配兩種狀態(tài)。它的功能主要是用來確定系統(tǒng)是否進(jìn)入準(zhǔn)備階段,主要判斷數(shù)據(jù)是否準(zhǔn)備好,地址是否匹配。RF配置寄存器的功能主要是配置收發(fā)的頻率和輸出功率等。發(fā)送地址寄存器的作用是存儲目標(biāo)寄存器的地址,字節(jié)的長度可以通過配置寄存器進(jìn)行設(shè)置。發(fā)送有效寄存器是用來發(fā)送有效的ShockBurst數(shù)據(jù)包,而接收有效數(shù)據(jù)寄存器是用來接收有效的ShockBurst數(shù)據(jù)包。配置好NRF905內(nèi)部的五個控制SPI的寄存非常重要,因為這些寄存器與數(shù)據(jù)的發(fā)送與接收相關(guān)。首先將無線模塊進(jìn)行初始化,設(shè)置工作模式為節(jié)電模式,然后通過SPI協(xié)議向NRF905無線模塊內(nèi)部寫配置信息。主要代碼如下://NRF905初始化voidnRF905Init(void){CSN=1; //Spi disable SCK=0; //Spiclocklineinitlow DR=1; //InitDRforinput AM=1; //InitAMforinput CD=1; //InitCDforinput PWR=1; //nRF905poweron TRX_CE=0; //SetnRF905instandbymode TXEN=0; //setradioinRxmode}//NRF905寄存器配置信息unsignedcharidataRFConf[11]={0x00,//配置命令//0x4c,//CH_NO,配置頻段在430MHZ0x0c,//輸出功率為10db,不重發(fā),節(jié)電為正常模式0x44,//地址寬度設(shè)置,為4字節(jié)0x20,0x20,//接收發(fā)送有效數(shù)據(jù)長度為32字節(jié)0xCC,0xCC,0xCC,0xCC,//接收地址0x58,//CRC充許,8位CRC校驗,外部時鐘信號不使能,16M晶振};//初始化寄存器voidConfig905(void){ uchari; CSN=0; //Spienableforwriteaspicommand SpiWrite(WC); //Writeconfigcommand寫放配置命令 for(i=0;i<11;i++) //Writeconfigrationwords寫放配置字 { SpiWrite(RFConf[i]); } CSN=1; //DisableSpi}由初始化函數(shù)可以看出,通過SPI配置NRF905,首先要講SCN拉低,即SPI使能。通過調(diào)用SPI向NRF905寫入WC指令,然后開始寫入配置信息。利用for循環(huán)依次寫入11個配置信息。最后再將SCN置高,關(guān)閉SPI接口的讀寫功能。5.4.2發(fā)送程序設(shè)計發(fā)送程序是用來將上位機(jī)的溫濕度傳感器采集到的溫濕度經(jīng)過打包與加CRC檢驗碼后發(fā)送給下位機(jī)。發(fā)送過程是單片機(jī)控制NRF905無線模塊進(jìn)行的,單片機(jī)通過SPI將數(shù)據(jù)傳輸給無線模塊。無線模塊將數(shù)據(jù)放入發(fā)送數(shù)據(jù)寄存器,再發(fā)送出去,同時將接收端的地址一起發(fā)送出去。發(fā)送數(shù)據(jù)的程序代碼如下://設(shè)置發(fā)送狀態(tài)voidSetTxMode(void){ TRX_CE=0; TXEN=1; Delay(3); //delayformodechange(>=650us)}通過NRF905的TRX_CE引腳和TXEN引腳控制無線模塊的工作模式,當(dāng)TRX_CE=0并且TXEN=1的時候,系統(tǒng)處于發(fā)射狀態(tài)。狀態(tài)的轉(zhuǎn)換時間大約為650微秒。將數(shù)據(jù)進(jìn)行打包發(fā)送和發(fā)送匹配地址的程序代碼如下://發(fā)送數(shù)據(jù)voidTxPacket(uchar*TxRxBuf){ uchari; CSN=0; //Spienableforwriteaspicommand SpiWrite(WTP); //Writepayloadcommand for(i=0;i<1;i++) { SpiWrite(TxRxBuf[i]); //Write32bytesTxdata } CSN=1; //Spidisable Delay(1); CSN=0; //Spienableforwriteaspicommand SpiWrite(WTA); //Writeaddresscommand for(i=0;i<4;i++) //Write4bytesaddress { SpiWrite(TxAddress[i]); } CSN=1; //Spidisable TRX_CE=1; //SetTRX_CEhigh,startTxdatatransmission Delay(1); // TRX_CE=0; //SetTRX_CElow}從上面的發(fā)送程序可以看出:首先拉低SCN,使能SPI,然后通過調(diào)后SPI寫函數(shù),向NRF905寫入WTP命令,才能進(jìn)行下一步數(shù)據(jù)的傳輸。然后通過for循環(huán),調(diào)用SPI寫函數(shù),將發(fā)送數(shù)據(jù)寫到發(fā)送數(shù)據(jù)寄存器內(nèi)。將SCN置高,然后再拉低,寫入WTA命令,然后再利用for循環(huán)寫入接收端的地址。然后將數(shù)據(jù)和地址發(fā)送出去,如果DR引腳被置高說明數(shù)據(jù)和地址被成功發(fā)送出去[14]。5.4.3接收數(shù)據(jù)程序設(shè)計首先要初始化NRF905為standby模式,配置相關(guān)寄存器。然后通過RX_CE引腳和TXEN引腳將無線模塊設(shè)置為接收模式。接收端將一直處于檢測狀態(tài),檢測空中的載波信號,當(dāng)檢測到與自己地址相匹配的信號后,開始進(jìn)入數(shù)據(jù)接收狀態(tài),將數(shù)據(jù)進(jìn)行解包,去掉CRC校驗碼后,放入數(shù)據(jù)接收寄存器內(nèi)。接收完畢后,將DR引腳拉高。當(dāng)單片機(jī)檢測到DR引腳被置高后,從NRF905無線模塊的接收數(shù)據(jù)寄存器內(nèi),通過SPI讀取有效數(shù)據(jù)。單片機(jī)對數(shù)據(jù)進(jìn)行處理之后,判斷溫濕度的范圍,超出預(yù)設(shè)的范圍將啟動蜂鳴器報警。同時將溫度和濕度實時地顯示到LCD上。接收數(shù)據(jù)代碼如下://接收模式設(shè)置函數(shù)voidSetRxMode(void){ TXEN=0; TRX_CE=1; Delay(3); //delayformodechange(>=650us)}通過NRF905的TRX_CE引腳和TXEN引腳控制無線模塊的工作模式,當(dāng)TRX_CE=1并且TXEN=0的時候,系統(tǒng)處于接收數(shù)據(jù)模式。狀態(tài)的轉(zhuǎn)換時間大約為650微秒。接收數(shù)據(jù)的程序代碼如下:voidRxPacket(void) { uchari;Delay(100);TRX_CE=0; //SetnRF905instandbymode Delay(1); CSN=0; //SpienableforwriteaspicommandDelay(1); SpiWrite(RRP); for(i=0;i<1;i++) { TxRxBuf[i]=SpiWrite(0xFF); //Readdataandsavetobuffer } CSN=1;Delay(10); while(DR||AM); TRX_CE=1; }從上面的程序代碼可以知道接收過程只要分為:通過語句TRX_CE=0,使無線模塊處于standby模式。單片機(jī)給無線模塊發(fā)送RRP指令,這樣才能調(diào)用SPI讀函數(shù),讀取NRF905無線模塊接收到的溫濕度的數(shù)據(jù)。然后等待DR引腳和AM引腳被拉低。因為當(dāng)接收匹配的地址后,AM引腳會被無線模塊置高,而接收到數(shù)據(jù)并且進(jìn)行解包后,DR引腳會被無線模塊拉高,所以當(dāng)無線模塊將接收到的數(shù)據(jù)處理完之后,會把AM引腳和DR引腳都拉低。需要注意的是,NRF905模塊只有在發(fā)送或者接收模式下,才能對數(shù)據(jù)進(jìn)行有效的操作。因此,在使用該模塊之前,先將它設(shè)置成相應(yīng)的工作模式。5.4.4數(shù)據(jù)顯示程序設(shè)計在使用LCD1602顯示溫度和濕度之前,需要先對它進(jìn)行初始化操作,主要是設(shè)置光標(biāo),顯示起始位置等功能。初始化函數(shù)如下:voidLcdInit() //LCD初始化子程序{ LcdWriteCom(0x38);//開顯示 LcdWriteCom(0x0c);//開顯示不顯示光標(biāo) LcdWriteCom(0x06);//寫一個指針加1 LcdWriteCom(0x01);//清屏 LcdWriteCom(0x80);//設(shè)置數(shù)據(jù)指針起點}顯示程序也是采用模塊化編程思想,通過調(diào)用液晶顯示的寫命令和寫數(shù)據(jù)子函數(shù),實現(xiàn)將數(shù)據(jù)顯示到液晶屏上的目的。寫命令操作和寫數(shù)據(jù)操作函數(shù)如下所示://寫入命令voidLcdWriteCom(ucharcom) { LCD1602_E=0;//使能 LCD1602_RS=0; //選擇發(fā)送命令 LCD1602_RW=0; //選擇寫入 LCD1602_DATAPINS=com;//放入命令 Delay_1ms(1); //等待數(shù)據(jù)穩(wěn)定 LCD1602_E=1; /

溫馨提示

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

評論

0/150

提交評論