基于ZigBee的溫度測量網(wǎng)絡(luò)軟件設(shè)計_第1頁
基于ZigBee的溫度測量網(wǎng)絡(luò)軟件設(shè)計_第2頁
基于ZigBee的溫度測量網(wǎng)絡(luò)軟件設(shè)計_第3頁
基于ZigBee的溫度測量網(wǎng)絡(luò)軟件設(shè)計_第4頁
基于ZigBee的溫度測量網(wǎng)絡(luò)軟件設(shè)計_第5頁
已閱讀5頁,還剩35頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

本科生畢業(yè)設(shè)計(論文)基于ZigBee的溫度測量網(wǎng)絡(luò)軟件設(shè)計SoftwareDesignofTemperatureMeasurementNetworkBasedonZigBee總計:30頁表格:3個插圖:30幅本科畢業(yè)設(shè)計(論文)學(xué)院(系):電子與電氣工程系專業(yè):電子信息工程基于Zigbee的溫度測量網(wǎng)絡(luò)軟件設(shè)計[摘要]本設(shè)計是基于ZigBee技術(shù)的溫度測量網(wǎng)絡(luò)的軟件設(shè)計,實現(xiàn)把采集到的溫度數(shù)據(jù)以無線的方式發(fā)射給接收裝置。設(shè)計采用Mega16單片機(jī)作為控制器,利用數(shù)字式DS1820作為溫度傳感器,同時采用TM12864對采集到的數(shù)據(jù)進(jìn)行顯示,xbee模塊作為無線的接收與發(fā)射模塊。數(shù)字式溫度傳感器DS1820和單片機(jī)以單總線方式連接,使用方便。Mega16按照DS1820的通信協(xié)議,便可得到DS1820轉(zhuǎn)換后的溫度數(shù)據(jù)。TM12864為128*64的液晶顯示模塊,Mega16按其操作指令對其進(jìn)行讀寫便可顯示所需數(shù)據(jù)。單片機(jī)與xbee模塊以UART方式傳輸數(shù)據(jù),使用方便。用C語言實現(xiàn)對Mega16的編程,從而實現(xiàn)對溫度的采集、顯示與傳輸。[關(guān)鍵詞]ZigBee;xbee;溫度傳感器;無線傳輸SoftwareDesignofTemperatureMeasurementNetworkBasedonZigbeeAbstract:ThetopicissoftwaredesignoftemperaturemeasurementnetworkbasedonZigBee.ItusesthexbeemoduleofMaxStream.Thisdesignwantsthesystemtotransmitthedataoftemperaturetothereceiver.ThedesignusesMega16asthecontrollertocontroltheDS1820tocapturethedataoftemperature,drivetheTM12864todisplay.DigitaltemperaturesensorDS1820communicatewithMega16viasinglebus.Weusethemoduleofxbeeaswirelessreceiverandtransmitter.Mega16cangetthedataoftemperaturefromDS1820accordingtothecommunicationprotocolofDS1820.TM12864is128*64latticsdisplaydevice.Mega16controlTM12864todisplaythedatabyusingtheinstructions.Mega16cancommunicatewiththexbeemoduleviaUART.Itisconveniencetouse.Programmingformega16intheenvironmentofClanguageachievethedataacquisition,displayandreception.KeyWords:ZigBee;xbee;temperaturesensor;wirelesstransmission目錄1引言 11.1選題背景及意義 11.2本設(shè)計的主要內(nèi)容 12系統(tǒng)方案設(shè)計 12.1系統(tǒng)原理 12.2發(fā)送模塊框圖 22.3接收模塊框圖 23發(fā)送模塊的軟件設(shè)計 23.1溫度采集軟件設(shè)計 23.1.1初始化流程 33.1.2ROM操作命令 43.1.3存儲器操作命令 43.1.4寫命令流程 53.1.5讀數(shù)據(jù)流程 63.1.6溫度數(shù)據(jù)的處理 73.2顯示控制軟件設(shè)計 83.2.1TM12864指令 93.2.2指令的數(shù)據(jù)格式與功能 93.2.3寫時序及相關(guān)操作流程 103.2.4讀時序及相關(guān)流程 113.2.5顯示一個字形的控制流程 133.3數(shù)據(jù)發(fā)送軟件設(shè)計 143.3.1xbee???143.3.2單片機(jī)與xbee模塊的通信 144接收模塊的軟件設(shè)計 154.1數(shù)據(jù)的接收 164.2數(shù)據(jù)的顯示 175系統(tǒng)仿真及調(diào)試 175.1xbee模塊的參數(shù)設(shè)置 175.2仿真與調(diào)試 20結(jié)束語 22參考文獻(xiàn) 23附錄 24致謝 301引言1.1選題背景及意義近年來,各種無線技術(shù)快速發(fā)展,它們在配置、安裝、修改和擴(kuò)展等方面有很多優(yōu)勢,同時無線網(wǎng)絡(luò)的成本要低于有線網(wǎng)絡(luò),給人們的生產(chǎn)生活帶來了很多方便。其中ZigBee技術(shù)就是新興的無線技術(shù)之一,它是IEEE802.15工作組的標(biāo)準(zhǔn)之一[1],采用直接序列擴(kuò)頻(DSS)技術(shù)。工作頻率為868MHz、915MHz或者2.4G,頻率的無線技術(shù),用于個人局域網(wǎng)和對等網(wǎng)絡(luò)是一種適用于固定、便攜或移動設(shè)備使用的低復(fù)雜度、低成本、低功耗、低速率的短距離雙向無線通信協(xié)議[2]。ZigBee技術(shù)在農(nóng)業(yè),汽車,家居得等方面都有很大的發(fā)展優(yōu)勢與空間,其耗電量低,可擴(kuò)節(jié)點多很適合用于溫度濕度等的檢測。本課題的設(shè)計正是基于ZigBee技術(shù)的無線溫濕度測量網(wǎng)絡(luò),可將采集傳感器獲得的溫度數(shù)據(jù)顯示并且以傳送出去。同時由接收模塊接收發(fā)出的數(shù)據(jù)。1.2本設(shè)計的主要內(nèi)容本課題所設(shè)計的系統(tǒng)以AVR單片機(jī)作為控制器,以ICCV7forAVR為系統(tǒng)程序開發(fā)平臺,用C語言[3]進(jìn)行程序設(shè)計,以Proteus作為仿真軟件。系統(tǒng)主要有發(fā)射部分和接收部分兩部分組成。發(fā)射部分主要有溫度采集、顯示、傳輸三小部分組成,接收部分主要有接收數(shù)據(jù)與顯示兩部分。這樣系統(tǒng)經(jīng)過xbee無線傳輸模塊把采集到的數(shù)據(jù)通過自動組網(wǎng)方式傳輸?shù)浇邮漳K,接收模塊經(jīng)過AVR數(shù)據(jù)處理,把接收到的數(shù)據(jù)顯示到液晶模塊。2系統(tǒng)方案設(shè)計2.1系統(tǒng)原理溫度的測控采用以AVR單片機(jī)與溫度傳感器的單總線連接方式,溫度傳感器DS1820是智能溫度傳感器,它的輸入/輸出采用數(shù)字量,以單總線方式,接收控制器發(fā)送的命令,根據(jù)DS1820內(nèi)部的協(xié)議進(jìn)行相應(yīng)的處理,將轉(zhuǎn)換的溫度數(shù)值以串口形式發(fā)送給控制器。因此讓控制器機(jī)按照DS1820的通信協(xié)議用一個I/O口模擬DS1820的時序[4],發(fā)送命令(初始化命令、ROM命令、功能命令)給DS1820,并讀取溫度值,單片機(jī)進(jìn)行相應(yīng)的數(shù)值處理[5],控制字符型液晶模塊顯示室內(nèi)的溫度。由于要求系統(tǒng)能夠發(fā)送數(shù)據(jù)還能夠接收發(fā)送來的數(shù)據(jù),系統(tǒng)總體由發(fā)送模塊與接收模塊兩部分組成。這樣系統(tǒng)就完成了采用ZigBee技術(shù)無線傳輸模塊xbee把采集到的數(shù)據(jù)通過自動組網(wǎng)方式傳輸?shù)浇邮漳K,接收模塊經(jīng)過單片機(jī)數(shù)據(jù)處理,把接收到的數(shù)據(jù)顯示到液晶模塊。2.2發(fā)送模塊框圖發(fā)送模塊有AVR單片機(jī)控制溫度傳感器,把得到的數(shù)據(jù)經(jīng)過處理后,一方面控制顯示器顯示出來,另外控制采用ZigBee技術(shù)的無線模塊發(fā)送出去,從而實現(xiàn)溫度數(shù)據(jù)的發(fā)送。發(fā)送模塊的框圖設(shè)計如圖1所示。液晶顯示單片機(jī)液晶顯示單片機(jī)無線模塊溫度傳感器圖1發(fā)送模塊框圖設(shè)計2.3接收模塊框圖AVR單片機(jī)把通過xbee模塊接收到的數(shù)據(jù),通過數(shù)據(jù)處理后控制液晶顯示模塊將數(shù)據(jù)顯示出來設(shè)計框圖如圖2所示。液晶模塊單片機(jī)液晶模塊單片機(jī)無線模塊圖2接收模塊框圖3發(fā)送模塊的軟件設(shè)計本部分要完成溫度的采集,把得到的數(shù)據(jù)顯示出來同時將數(shù)據(jù)發(fā)射出去,其整體流程如圖3所示,當(dāng)開始后首先控制溫度的采集,然后將溫度數(shù)據(jù)顯示出來,并發(fā)送出去,按此操作順序循環(huán)下去。3.1溫度采集軟件設(shè)計溫度傳感器采用了DS1820,信息通過單線接口進(jìn)入DS1820,因此從中央處理器[7]到DS1820僅需一條線(和地)讀寫和溫度轉(zhuǎn)換所需的電源可從數(shù)據(jù)線本身獲得,而不需要外接電源,使用比較方便。由于DS1820與單片機(jī)的連接只有一條線,沒有專門的數(shù)據(jù)端口與控制端口,單片機(jī)需要按照訪問單總線接口DS1820的協(xié)議,才能獲得溫度數(shù)據(jù)。訪問時序如下:(1)初始化(2)對ROM操作命令(3)存儲器操作命令(4)處理數(shù)據(jù)本設(shè)計中溫度傳感器DS1820僅一個且采用外電源供電。單片機(jī)對DS1820的控制操作如下表1示,把表1轉(zhuǎn)換為溫度采集的整體流程如圖4所示。采集溫度數(shù)據(jù)顯示和發(fā)送采集溫度數(shù)據(jù)顯示和發(fā)送開始圖3發(fā)射模塊的整體流程3.1.1初始化流程單總線上的所有處理均從初始化序列開始,初始化序列包括主機(jī)發(fā)出一系列復(fù)位脈沖,接著從屬器件發(fā)出存在脈沖。(其脈沖如圖5)一旦主機(jī)發(fā)現(xiàn)從器件存在它便發(fā)出ROM命令。表1溫度采集指令主機(jī)方式數(shù)據(jù)(LSB在先)注釋TXCCHSkipROM(跳過命令)TX44HConvertT(溫度變換)命令RX(1個數(shù)據(jù)字節(jié))讀“忙”標(biāo)志3次。主機(jī)一個接一個連續(xù)讀一個字節(jié)(或位)直至數(shù)據(jù)為FFH(全部為1)為止。TXReset(復(fù)位)復(fù)位脈沖RXPresence(存在)存在脈沖TXCCHSkipROM(跳過ROM)命令TXBEHReadScratchpad(讀暫存存儲器)命令RX(9個數(shù)據(jù)字節(jié))讀整個暫存存儲器TXReset(復(fù)位)復(fù)位脈沖XRresence(存在)存在脈沖,操作完成開始初始化18b20跳過讀序列號的操作(skip命令)開始初始化18b20跳過讀序列號的操作(skip命令)啟動溫度轉(zhuǎn)換(約定代碼44h)轉(zhuǎn)換等待(至少2s)初始化跳過讀序列發(fā)出讀溫度寄存器命令接收數(shù)據(jù)數(shù)據(jù)處理結(jié)束圖4溫度采集流程圖等待15~60us等待15~60us主機(jī)初始化低電平480us~960us主機(jī)初始化低電平480us~960us18b20回應(yīng)60~240us圖5DS1820復(fù)位與存在脈沖主機(jī)先發(fā)出一個在480us到960us的低電平,然后等待15us到60us若主機(jī)接收到60us到240us的低電平,說明從器件應(yīng)答存在,如圖5所示。單片機(jī)的PB7端口與DS1820的DQ端口相連接,要實現(xiàn)始化需PB7口輸出如圖5的脈沖。初始化的流程如圖6所示,當(dāng)給出初始化脈沖后,等待60至260us后,如果收到高電平說明初始化成功,否則失敗[8],程序見附錄。3.1.2ROM操作命令所有ROM操作命令均為八位長。這些命令有:ReadRom(讀ROM),MatchRom,SkipRom等五種共有ROM操作命令,由于此模塊僅連接一個DS1820,可以不使用這些命令,不再詳述。3.1.3存儲器操作命令存儲器的操作命令如表2所示。由于溫度傳感器僅有一個且采用外部電源,本設(shè)計可采用的命令有以下這些[10]:(1)Skip(“跳過”ROM)[CCH]此命令允許不提供64位ROM編碼而訪問存儲器來節(jié)省時間。但如果存在多個從器件,當(dāng)skip命令發(fā)出之后,那么由于多個從器件同時發(fā)出數(shù)據(jù),會在總線上發(fā)生沖突(產(chǎn)生線與)。(2)ConvertT[44H]溫度變換命令、啟動溫度變換,溫度轉(zhuǎn)換大概需要2秒。(3)ReadScratchpad[BEH]讀暫存存儲器。讀開始于字節(jié)零,并繼續(xù)經(jīng)過暫存寄存器,直至第九個字節(jié)被讀出為止。如果有的存儲器不讀,那么主機(jī)可隨時發(fā)出復(fù)位命令以中止讀操作。(4)寫暫存存儲器[4EH],寫字節(jié)至?xí)捍娲鎯ζ鞯刂?和3處(TL和TH溫度觸發(fā)器)。(5)復(fù)制暫存存儲器[43H],把暫存存儲器復(fù)制入非易失性存儲器(僅地址2和地址3)。PB7作輸入口開始PB7作輸入口開始延遲60~240us端口PB7作輸出口延遲60~240us端口PB7作輸出口YPB7高電平輸出YPB7高電平輸出DINB7=1?DINB7=1?失敗PB7低電平輸出480u失敗PB7低電平輸出480us~960usNN初始化成功PB7輸出高電平15us~60us初始化成功PB7輸出高電平15us~60us圖6DS1820初始化流程圖3.1.4寫命令流程要控制溫度傳感器DS1820獲取的溫度數(shù)據(jù),就需要向DS1820寫入一系列的命令,寫時序如圖7所示,當(dāng)主機(jī)把數(shù)據(jù)線從高電平拉至低電平時,產(chǎn)生寫時間片。寫時間片有兩種類型:寫1時間片和寫0時間片。所有的時間片必須有60ms持續(xù)期,在個寫周期之間須有1us的回復(fù)時間。在I/O線由高電平拉至低電平之后,DS1820在15us至60us的時間窗口對I/O線采樣,如果線為高電平,寫1就發(fā)生,為低電平寫0就發(fā)生,寫時序的流程如圖8,在寫流程中可用一個for循環(huán)來判斷是否共有八次,從而完成一個命令代碼字節(jié)的發(fā)送,在每發(fā)送一位后都要讓PB7拉高單總線,為寫下一位做好準(zhǔn)備,程序見附錄。表2存儲器操作命令指令說明約定代碼發(fā)出約定代碼后單總線的操作溫度變換命令溫度變換啟動溫度變換44H讀溫度“忙”狀態(tài)存儲器命令讀暫存存儲器從暫存存儲器讀字節(jié)BEH(讀9字節(jié)數(shù)據(jù))寫暫存存儲器寫字節(jié)至?xí)捍娲鎯ζ鞯刂?和3處(TH和TL溫度觸發(fā)器)4EH(寫數(shù)據(jù)至地址2和地址3的2個字節(jié))復(fù)制暫存存儲器把暫存存儲器復(fù)制入非易失性存儲器(僅地址2和地址3)43H(讀復(fù)制狀態(tài))重新調(diào)出E2把儲存在非易失性存儲器內(nèi)的數(shù)值重新調(diào)入暫存存儲器(溫度觸發(fā)器)E3H(讀溫度“忙”狀態(tài))讀電源發(fā)DS1820電源方式的信號至主機(jī)B4H(讀電源狀態(tài))15us15us15us15us30usDs1820samples15us15usDs1820samples30usMasterwrite0slotMasterwtrite1slot>1u圖7單片機(jī)向DS1820寫命令時序3.1.5讀數(shù)據(jù)流程當(dāng)溫度轉(zhuǎn)換好后要把數(shù)據(jù)從DS1820的存儲器中讀出來,讀時序如9所示。從DS1820讀數(shù)據(jù)時主機(jī)產(chǎn)生讀時間片,當(dāng)主機(jī)把數(shù)據(jù)線從邏輯高電平拉至低電平時,產(chǎn)生讀時間片。數(shù)據(jù)線必須把低邏輯電平保持至少1us,來自DS1820的數(shù)據(jù)在讀時間片下降沿之后15us有效。因此,從讀時間片開始主機(jī)一共必須保持至少15us的低電平。讀時間片結(jié)束后,I/O線有外部的上拉電阻拉至高電平。所有讀時間片最短維持周期為60us,每個讀時間片之間至少需1us的回復(fù)時間,讀時序的流程如圖10所示,讀流程中PB7端口將總線拉低開始數(shù)據(jù)的讀取,等待15us后,讀總線上的電平,在判斷為高電平后將由dat|=0x01將dat的最低位置1而不改變其它位,在每讀取一位后,將dat中的數(shù)據(jù)左移一位,同時在每讀取一位后應(yīng)留有至少1us的恢復(fù)時間。程序見附錄。PB7端口輸出0要寫的命令位為1?PB7端口輸出0要寫的命令位為1?PB7端口輸出高電平PB7端口輸出低電平延時15-60ms命令左移一位發(fā)送了8位寫結(jié)束YNYNPB7輸出1圖8單片機(jī)向DS1820寫命令流程圖圖9單片機(jī)讀DS1820時序3.1.6溫度數(shù)據(jù)的處理由于溫度數(shù)據(jù)以16位、二進(jìn)制補(bǔ)碼的讀數(shù)形式提供,在讀取溫度數(shù)據(jù)后,要對其進(jìn)行處理才能進(jìn)一步使用,這里要讀出兩個字節(jié)a與b,第一個字節(jié)a的低四位是溫度的小數(shù)位信息,高四位是溫度整數(shù)信息的低四位。第二個讀出的字節(jié)b高五位,位全1的話表示是負(fù)溫度,全為0標(biāo)是正溫度。b的低三位是溫度數(shù)位。這樣b的低三位與a的高四位組成了溫度的整數(shù)位[9]。溫度數(shù)據(jù)處理程序流程如圖11所示,流程圖中的fsbz為負(fù)數(shù)標(biāo)志位,其為1時表示溫度值為負(fù),為0時表示溫度值為正。至此完成了溫度采集的整體過程,程序見附錄。NNNNYYdat|=0x01延時至少1usPB7端口輸出低電平延時至少15us將dat中數(shù)據(jù)左移一位判斷單總線是否為高電平開始是否讀入8位讀結(jié)束圖10單片機(jī)讀DS1820時序流程b[7:3]都為1b左移四位,a右移四位后b|=a,fsbz=0a取反,b取反,fsbz=1b[7:3]都為1b左移四位,a右移四位后b|=a,fsbz=0a取反,b取反,fsbz=1b左移四位,a右移四位后b|=a,b-=1返回bNY讀出a與b圖11溫度數(shù)據(jù)處理流程圖3.2顯示控制軟件設(shè)計當(dāng)采集到溫度數(shù)據(jù)后要把溫度顯示出來,顯示器件采用TM12864,TM12864是128*64液晶陣列,對TM12864的控制是通過指令加數(shù)據(jù)的方式進(jìn)行的,這些控制信號包括讀/寫(R/W)信號,數(shù)據(jù)/指令(RS)信號,數(shù)據(jù)總線(DB0-DB7)組成[11]。3.2.1TM12864指令TM12864的指令可分為三類:(1)設(shè)置內(nèi)部RAM地址的指令(2)向內(nèi)部RAM寫入或讀出的指令(3)其它指令在普通的使用中,第二類指令使用的較為頻繁。由于在讀取或?qū)懭霐?shù)據(jù)后,RAM的Y地址會自動的加一,編程代碼將會縮短。但是指令在執(zhí)行指令期間,它不能接收另外的指令,因此在每次發(fā)送指令前應(yīng)確定其閑忙狀態(tài),以確保指令可被執(zhí)行。3.2.2指令的數(shù)據(jù)格式與功能指令的數(shù)據(jù)格式如下表3所示:表3指令數(shù)據(jù)格式編碼格式顯示ON/OFF000011111D顯示起始行0011顯示起始行(0…63)設(shè)置X地址0010111X:0…7設(shè)置Y地址0001Y地址(0...63)讀狀態(tài)10Busy0On/OffRest0000寫顯示數(shù)據(jù)01顯示數(shù)據(jù)讀顯示數(shù)據(jù)11顯示數(shù)據(jù)下面對其指令詳細(xì)介紹如下:(1)顯示開/關(guān)當(dāng)D為1是LCD將顯示數(shù)據(jù),D為0時LCD不顯示數(shù)據(jù),LCD不顯示數(shù)據(jù)并不是說RAM中的數(shù)據(jù)消失。因此可有D來控制顯示的開和關(guān)。(2)顯示起始行設(shè)置在顯示開始行寄存器中的Z地址所對應(yīng)RAM地址中的數(shù)據(jù)會被顯示在屏幕的頂端,此命令可用于動態(tài)顯示。(3)設(shè)置葉(X地址)當(dāng)要顯示的RAM數(shù)據(jù)的地址設(shè)置在X地址寄存器后,寫或讀數(shù)據(jù)都在該設(shè)定葉中進(jìn)行。(4)設(shè)置Y地址當(dāng)把要操作的RAM的Y地址寫入Y地址計數(shù)器后,對RAM的讀寫操作Y地址計數(shù)器會自動加1。(5)讀狀態(tài)指令當(dāng)在讀狀態(tài)中如果發(fā)現(xiàn)Busy(DB7)為1,說明LCD系統(tǒng)處于忙狀態(tài),此時不能接收其它指令,因此在每一次發(fā)送指令前應(yīng)判斷是否處于空閑狀態(tài)。如果ON/OFF位(DB5)為1,說明處于顯示開狀態(tài),為0時關(guān)狀態(tài)。Reset位(DB4)為1表面系統(tǒng)正被初始化,此時除了讀狀態(tài)指令外其它指令不可被執(zhí)行,為0表示初始化已完成。(6)寫顯示數(shù)據(jù)指令將要顯示的字符數(shù)據(jù)寫入指定的RAM地址中。3.2.3寫時序及相關(guān)操作流程知道了命令格式及其用途后,就可以根據(jù)寫時序向TM12864發(fā)出相關(guān)命令。單片機(jī)的寫時序如圖12所示,可見在E的下降沿DB0_7被讀入。TdsuR/WWWTdsuR/WWWEDB0-7TwhTwlCS1B,CS2BCS3RStc圖12單片機(jī)向TM12864寫時序前四個指令的R/W和D/I相同都位0,對這四個指令可編寫一個寫指令函數(shù)以下為實現(xiàn)以上命令的調(diào)用,其流程如圖13所示:在寫命令流程中的,檢測TM12864是為了了解是否忙,是的話要一直等待直到空閑為止,最后一步是為了產(chǎn)生E的下降沿,程序見附錄。設(shè)寫命令函數(shù)為write_inst(),那么可用一下方式調(diào)用:(1)如果要輸出顯示開/關(guān)指令,則調(diào)用write_inst(0x3e+i),其中i==1時為開i==0時為關(guān)。(2)設(shè)置起始行可調(diào)用wrist_inst(0xc0+x),x為起始顯示的RAM地址。(3)設(shè)置RAM的X地址write_inst(0xb8+x)。X地址即葉地址,八行RAM為一葉。(4)RAM的Y地址write_inst(0x40+Y),當(dāng)葉地址設(shè)定后每當(dāng)一次讀寫后Y地址自動加一。檢測TM12864是否忙,忙則等待R/W=0,RS=0,寫命令檢測TM12864是否忙,忙則等待R/W=0,RS=0,寫命令PA輸出相應(yīng)命令E=1延時E=0開始圖13單片機(jī)向TM1864寫命令時序圖RAM地址中的X與Y的結(jié)構(gòu)如圖14所示:圖14顯示RAM地址結(jié)構(gòu)對于寫顯示數(shù)據(jù)的流程只要將寫指令流程中的RS=0改為RS=1既可。3.2.4讀時序及相關(guān)流程對TM12864的操作有時要讀出其內(nèi)部數(shù)據(jù),了解它的工作狀態(tài),其讀時序如圖15所示:tDUSR/WWWEtDUSR/WWWEDB0-7TwhTwlCS1B,CS2BCS3RStc圖15單片機(jī)向TM12864讀數(shù)據(jù)時序由讀時序可得出讀顯示數(shù)據(jù)的流程如圖16所示:圖16單片機(jī)向TM12864讀數(shù)據(jù)時序流程對于讀顯示數(shù)據(jù)在指定了地址后要有一個假的讀操作,以使數(shù)據(jù)鎖存在輸出緩沖器中。在每一次對TM12864操作都要判斷其是否處于忙狀態(tài),可用讀狀態(tài)解決,讀出的第七位為1表示忙,為0表示空閑,程序見附錄。這一判斷過程可用流程圖17表示:圖17單片機(jī)讀TM12864狀態(tài)的流程圖有了寫指令、讀顯示數(shù)據(jù)、讀狀態(tài),就能夠指定顯示的內(nèi)容和在屏幕何處顯示,同時還可知道TM12864的工作狀態(tài),組成LCD的顯示控制函數(shù),程序見附錄。3.2.5顯示一個字形的控制流程要顯示字符首先要有一個字模,字符以8*16的形式顯示,以下為實現(xiàn)顯示字符的流程如圖18所示:X地址<64?選中左屏X地址<64?選中左屏選中右屏設(shè)置行地址設(shè)置寫地址寫入要顯示字符的字模開始寫完兩頁結(jié)束NYNY圖18單片機(jī)控制TM12864顯示一個字符的流程圖由于是以8*16形式顯示,因此要有兩頁來表示,每個字模有16個字節(jié)組成,程序見附錄。3.3數(shù)據(jù)發(fā)送軟件設(shè)計數(shù)據(jù)的無線收發(fā)采用xbee模塊,xbee是美國Maxstream公司基于ZigBee技術(shù)的一個無線傳輸模塊,該模塊使用起來非常簡單,只需要簡單的把數(shù)據(jù)輸入到一個xbee模塊,數(shù)據(jù)就能自動地被發(fā)送到無線連接的另一端,同時也支持AT命令進(jìn)行高級配置,此模塊通過異步串行端口與其它設(shè)備連接,通過其串行端口,模塊可與任何兼容的UART邏輯和電壓的設(shè)備通信[11]。3.3.1xbee模塊xbee內(nèi)部工作原理圖如19所示圖19Xbee模塊內(nèi)部數(shù)據(jù)無線鏈路上總是半雙工式通信,用一條天線作發(fā)射或接收,但兩者并非在同一時間工作。不過,xbee模塊可以通過分時的方式達(dá)到UART端的同時發(fā)射和接收(全雙工模式)。數(shù)據(jù)由DIN端口進(jìn)入串行接收緩沖,接著進(jìn)入RFTX緩沖有transmitter經(jīng)天線發(fā)射出去。3.3.2單片機(jī)與向Xbee模塊的通信要讓xbee模塊把數(shù)據(jù)發(fā)送出去首先要做的就是把數(shù)據(jù)送入xbee模塊,數(shù)據(jù)通過DIN端口以異步的串行信號進(jìn)入模塊UART。節(jié)下來xbee模塊就自動把數(shù)據(jù)發(fā)送出去,沒有數(shù)據(jù)傳輸時DIN信號保持高電平。下圖20描繪了流經(jīng)模塊的數(shù)據(jù)位操作模式,通過UART發(fā)送一個UART數(shù)據(jù)包0x1F1111100011111000SignalVoltageStartbitStopbittimevoltage圖20數(shù)據(jù)位操作模式xbee模塊留置少量緩沖以收集收到的串行和RF數(shù)據(jù),串行接收緩沖收集流入的串行字符,并保留直到它們被處理為止。串行數(shù)據(jù)通過RF進(jìn)入模塊時,數(shù)據(jù)將被保存在串行接收緩沖器中直到它被處理,在一定條件下可能不能立即處理大量數(shù)據(jù),這時需要用CTS流控避免串行接收緩沖溢出。如果使用CTS流控制,當(dāng)串行緩沖是17字節(jié)時,模塊取消CTS(拉高),讓主機(jī)停止發(fā)送數(shù)據(jù)。串行緩沖有34個字節(jié)數(shù)據(jù)空間時,將重設(shè)CTS。由于單片機(jī)與xbee模塊的通過UART方式進(jìn)行,單片機(jī)與xbee模塊應(yīng)有相同的baud率并且數(shù)據(jù)格式也應(yīng)一樣,這也是數(shù)據(jù)發(fā)送的關(guān)鍵處。流程如圖22所示。4接收模塊的軟件設(shè)計接收模塊有xbee,單片機(jī),液晶顯示三部分組成。其大部分與發(fā)送模塊相同,惟一不同的是xbee模塊從發(fā)送變?yōu)榻邮?,接收?shù)據(jù)后控制TM12864顯示出來其整體流程如圖21所示。接收數(shù)據(jù)顯示數(shù)據(jù)接收數(shù)據(jù)顯示數(shù)據(jù)開始圖21接收模塊流程開始后控制xbee接收數(shù)據(jù),然后顯示出來,按此順序循環(huán)。設(shè)定baud率為9600/CTS是否為1設(shè)定baud率為9600/CTS是否為1YN等待,停止發(fā)送數(shù)據(jù)發(fā)送數(shù)據(jù)發(fā)送完畢?結(jié)束/RTS=1/RTS=0YN開始建立鏈接YN圖22單片機(jī)向xbee發(fā)送數(shù)據(jù)流程圖4.1數(shù)據(jù)的接收接收數(shù)據(jù)時xbee模塊的內(nèi)部數(shù)據(jù)流為數(shù)據(jù)先進(jìn)入Receiver再進(jìn)入RFRXbuffer,最后有單片機(jī)發(fā)出RTS流控,將數(shù)據(jù)讀入單片機(jī)。如果使用RTS流控制,只要RTS處于取消設(shè)置狀態(tài)(拉高),串行傳輸緩沖器中的數(shù)據(jù)不會被送出DOUT端口。若RTS取消長時間傳位傳輸緩沖器會溢出,造成其它數(shù)據(jù)丟失,數(shù)據(jù)的接收流程如23所示程序見附錄。設(shè)定baud率為9600接收數(shù)據(jù)設(shè)定baud率為9600接收數(shù)據(jù)接收完畢?結(jié)束/RTS=1YN建立鏈接YN/RTS=0開始圖23單片機(jī)從xbee接收數(shù)據(jù)的流程/RTS流控信號有單片機(jī)發(fā)出,當(dāng)/RTS為0是告知xbee模塊單片機(jī)要讀取數(shù)據(jù),而/CTS流控信號有xbee模塊發(fā)出,當(dāng)/CTS為1時告知單片機(jī)停止向xbee模塊發(fā)送數(shù)據(jù)。4.2數(shù)據(jù)的顯示仍然采用TM12864完成所接收數(shù)據(jù)的顯示,其原理與控制過程與發(fā)送模塊部分的相同,不再贅述。5系統(tǒng)仿真及調(diào)試5.1Xbee模塊的參數(shù)設(shè)置xbee模塊在正常工作之前必須進(jìn)行相應(yīng)的設(shè)置。對xbee模塊的設(shè)置既可以按照xbee手冊介紹的AT指令,通過串行終端完成,也可以借助X-CTU這一工具來完成,這里用X-CTU比較方便[12]。在用USB電纜將Ardino與PC機(jī)連接好之后,運(yùn)行X-CTU軟件。在“PCSettings”中里選擇對應(yīng)的通信端口,并設(shè)置好波特率等參數(shù)。xbee模塊出廠默認(rèn)的設(shè)置為9600,8,N,1,如圖24所示。圖24默認(rèn)設(shè)置單擊“Test/Query”按鈕,來測試是否能夠正確地連接上xbee模塊。如果通信正確,點擊“Query”如圖25所示圖25鏈接正常確認(rèn)對話框測試正常之后轉(zhuǎn)到“ModemConfiguration”。首先單擊“ModemParametersandFirmware”中的“Read”按鈕讀出xbee模塊中的當(dāng)前參數(shù),接著讀出的“Networking&Security”中將“Channel”設(shè)置為“C”,將“PANID”設(shè)置為“1234”。如圖26所示。圖26PANID設(shè)置點擊“SerialInterfacing”中將“BD–BaudRate”設(shè)置為頻率為9600,如圖27所示。圖27baud率設(shè)置5.2仿真與調(diào)試程序的編譯環(huán)境為ICCV7forAVR,系統(tǒng)的軟件調(diào)試采用程序分塊調(diào)試的原則,首先把系統(tǒng)分為系統(tǒng)的主程序模塊,ZigBee無線收發(fā)的調(diào)試,溫度數(shù)據(jù)顯示程序。對程序進(jìn)行從局部到全面的調(diào)試。以下為系統(tǒng)調(diào)試的主要方法:(1)系統(tǒng)軟件按照功能劃分模塊,對各個模塊或者子函數(shù)逐個單一調(diào)試運(yùn)行,并且檢查運(yùn)行的準(zhǔn)確性。(2)額外編寫?yīng)毩⒌臏y試子程序單獨測試個別子功能模塊準(zhǔn)確性和合理性。(3)將程序中設(shè)置標(biāo)記,以便為調(diào)試各個模塊程序和測試運(yùn)行狀態(tài)提供方便,以便檢驗程序運(yùn)行結(jié)果。軟件的仿真采用Proteus[13]仿真結(jié)果如28圖示,有mega16,DS1820和TM12864組成,仿真結(jié)果表明,可以將溫度數(shù)據(jù)讀出,并且TM12864顯示了出來,達(dá)到了設(shè)計效果。圖28仿真結(jié)果接下來調(diào)試xbee模塊,1號PC機(jī)通過串口調(diào)試助手經(jīng)Xbee模塊將數(shù)據(jù)發(fā)送出去,2號PC機(jī)上的xbee模塊接收發(fā)出的數(shù)據(jù)由串口調(diào)試助手顯示出來。調(diào)試助手接收數(shù)據(jù)串口選擇COM3端口,波特率9600,數(shù)據(jù)位8,停止位1,校驗位和流量控制NONE,選擇十六進(jìn)制顯示。發(fā)送數(shù)據(jù)如圖29所示。圖29調(diào)試助手發(fā)送數(shù)據(jù)xbee通過自動組建網(wǎng)絡(luò)的功能,將1號PC機(jī)發(fā)送的數(shù)據(jù)傳輸?shù)?號PC機(jī),接收到得數(shù)據(jù)如圖30所示。圖30調(diào)試助手接收數(shù)據(jù)至此完成了溫度數(shù)據(jù)的采集、顯示、發(fā)送與接收的仿真,參數(shù)的設(shè)置,證明了設(shè)計的正確。結(jié)束語至此基于ZigBee的無線溫度采集單元的軟件設(shè)計已完成。本系統(tǒng)的特點就是采用了ZigBee技術(shù),因此它耗電少,通信的安全性與可靠性好,使用起來比較方便,不受供電與場地的限制,可方便的采集溫度。設(shè)計采用Mega16單片機(jī)作為控制器,利用數(shù)字式DS1820作為溫度傳感器,同時采用TM12864對采集到的數(shù)據(jù)進(jìn)行顯示,xbee模塊作為無線的接收與發(fā)射模塊。數(shù)字式溫度傳感器DS1820和單片機(jī)以單總線方式連接,使用方便。Mega16按照DS1820的通信協(xié)議,便可得到DS1820轉(zhuǎn)換后的溫度數(shù)據(jù)。TM12864為128*64的液晶顯示模塊,Mega16按其操作指令對其進(jìn)行讀寫便可顯示所需數(shù)據(jù)。單片機(jī)與xbee模塊以UART方式傳輸數(shù)據(jù),使用方便。用C語言實現(xiàn)對Mega16編程,從而實現(xiàn)對溫度的采集、顯示與傳輸,它還具有很大的擴(kuò)展性,可以完成多個地點的溫度采集與匯總。參考文獻(xiàn)[1]李文忠、段朝玉.Zibgbee無線網(wǎng)絡(luò)技術(shù)入門與實戰(zhàn).北京:北京航天航空大學(xué)出版社,2008年4月[2]李文忠、段朝玉.CC1110/CC2510無線單片機(jī)和無線自組織網(wǎng)絡(luò)入門與實戰(zhàn).北京:北京航天航空大學(xué)出版社,2008年4月[3]李朝青.單片機(jī)原理與接口技術(shù).北京航天航空大學(xué)出版社,1995年7月[4]謝俊.單片機(jī)C語言編程與實踐.北京:電子工業(yè)出版社,2009年8月[5]周向紅.51系列單片機(jī)應(yīng)用與實踐教程.北京:北京航空航天大學(xué)出版社,2008年5月[6]楊將新.單片機(jī)程序設(shè)計及應(yīng)用.北京:電子工業(yè)出版社,2006年3月[7]張越,張炎,趙延軍.基于DS18B20溫度傳感器的數(shù)字溫度計[J].微電子學(xué),2007[8]譚浩強(qiáng).C程序設(shè)計.北京:清華大學(xué)出版社,2005年[9]周慈航.單片機(jī)應(yīng)用程序設(shè)計技術(shù).北京:北京航空航天大學(xué)出版社,1991年[10]DS1820單總線數(shù)字溫度計.http://www.qfm[11]SpecificationForLcdModule,ModelNo.TM12864_Z.[12]ZigBeeSpecification2006..[13]Proteus中文使用書冊附錄(1)DS180初始化程序voidInit_DS18B20(void){unsignedcharx=0;DDRB|=0x01;//PORTB.0作為輸出口PORTB|=(1<<0);//portb.0輸出低電平,復(fù)位delay(8);//稍做延時PORTB&=~(1<<0);//單片機(jī)將1820的DQ拉低delay(80);//精確延時大于480usPORTB|=(1<<0);//拉高DQdelay(10);DDRB&=0x00;//portb作輸入x=PORTB;//稍做延時后如果x=0則初始化成功x=1則初始化失敗delay(5);}(2)寫字節(jié)函數(shù)voidWriteOneChar(unsignedchardat){unsignedchari=0;for(i=8;i>0;i--)//8次給出一個字節(jié){DDRB|=0X01;//port.0為輸出口PORTB&=~(1<<0);//把數(shù)據(jù)線拉底產(chǎn)生寫時間片if(dat&0x01)//判斷要發(fā)送的數(shù)據(jù)是1還是0PORTB|=(1<<0);elsePORTB&=~(1<<0);delay(5);PORTB|=(1<<0);//拉高,供電dat>>=1;//右移一位}delay(5);}(3)讀字節(jié)函數(shù)unsignedcharReadOneChar(void){unsignedchari=0;unsignedchardat=0;for(i=8;i>0;i--){DDRB|=0X01;//protb.0設(shè)為輸出口PORTB&=~(1<<0);//給脈沖信號,dat<<=1;//向左移一位PORTB|=(1<<0);//給脈沖信號DDRB&=~(1<<0);//protb.0設(shè)為輸入口if(DINB&0X01)//判斷讀入的是1還是0dat|=0x01;delay(5);}return(dat);}(4)寫命令函數(shù)voidwrite_inst(uchardata){ceck_busy();//是否忙狀態(tài)DDRB|=0X07;//PB.0/1/2腳設(shè)置為輸出PORTB|=(1<<1);//R/W=1寫狀態(tài)PORTB&=~(1<<0);//RS=0指令DDRA=0xff;//porta作輸出口PORTA=data;PORTB|=(1<<2);//E=1,產(chǎn)生E的一個下降沿,讓data所存在輸入寄存器中PORTB&=~(1<<2);//E=0}(5)讀數(shù)據(jù)函數(shù)ucharrada_dat(void){uchardata;ceck_busy();DDRA=0x00;//設(shè)置PA為輸入口DDRB=0x07;PORTB|=(1<<1);//R/W=1寫狀態(tài)PORTB|=(1<<0);//RS=1PORTB|=(1<<2);//E=1,產(chǎn)生E的一個下降沿,讓data;所存在輸入寄存器中data=DINAPORTB&=~(1<<2);//E=0}(6)寫數(shù)據(jù)函數(shù)voidwrite_dat(uchardata){uchardata;ceck_busy();DDRA=0xff;//設(shè)置PA為輸出口DDRB=0x07;PORTB&=~(1<<1);//R/W=1寫狀態(tài)PORTB|=(1<<0);//RS=1PORTB|=(1<<2);//E=1,產(chǎn)生E的一個下降沿,讓data;所存在輸入寄存器中PA=data;PORTB&=~(1<<2);//E=0}(7)讀狀態(tài)函數(shù)voidceck_busy(){DDRA=0x00;//PA設(shè)為輸入delay(100); DDRB=0x07;PORTB|=(1<<1);//R/W=1寫狀態(tài)PORTB&=~(1<<0);//RS=0指令PORTB|=(1<<2);while(0x80&DINA){;}//忙時循環(huán)等待PORTB&=~(1<<2);}(8)顯示一個字節(jié)的函數(shù)voiddisp_char(unsignedcharx,unsignedchary,unsignedcharascii){unsignedchari=0x00;constunsignedchar*q; /*取字庫指針*/ascii-=0x20;q=&ENGLISH_FONT[ascii*16]; /*定位指針地址*/i=0x00;/*顯示高8位*/ if(x<64)/*地址在左半屏范圍內(nèi)*/{cs1_1;cs2_0

; write_inst(y|0xB8);write_inst(x|0x40);while(i<8){write_data(*q);q++;x++;i++;if(x>63)/*判斷地址是否越界*/{break;}}}if(i<8)/*地址進(jìn)入右半屏范圍*/{cs1_0;cs2_1LCD1_write_com(y|0xB8);LCD1_write_com(x|0x40);while(i<8){LCD1_write_data(*q);q++;x++;i++;}}/*顯示低8位*/i=0x00;x-=8;if(x<64)

溫馨提示

  • 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

提交評論