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

下載本文檔

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

文檔簡(jiǎn)介

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

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論