基于NRF905無線收發(fā)芯片溫度監(jiān)測無線通信系統(tǒng)的設(shè)計(jì)_第1頁
基于NRF905無線收發(fā)芯片溫度監(jiān)測無線通信系統(tǒng)的設(shè)計(jì)_第2頁
基于NRF905無線收發(fā)芯片溫度監(jiān)測無線通信系統(tǒng)的設(shè)計(jì)_第3頁
基于NRF905無線收發(fā)芯片溫度監(jiān)測無線通信系統(tǒng)的設(shè)計(jì)_第4頁
基于NRF905無線收發(fā)芯片溫度監(jiān)測無線通信系統(tǒng)的設(shè)計(jì)_第5頁
已閱讀5頁,還剩29頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、基于nrf905無線收發(fā)芯片溫度監(jiān)測無線通信系統(tǒng)的設(shè)計(jì)設(shè)計(jì)與總結(jié)報(bào)告目錄摘要31方案論證與比較31.1溫度采集方案設(shè)計(jì)41.2顯示部分方案設(shè)計(jì)41.3無線接收發(fā)射方案設(shè)計(jì)51.4上位計(jì)算機(jī)通信方案設(shè)計(jì)52硬件電路設(shè)計(jì)52.1溫度采集模塊工作原理與計(jì)算52.1.1工作原理52.1.2溫度計(jì)算62.2顯示模塊電路62.3無線發(fā)射接收模塊72.3.1 spi接口設(shè)計(jì)82.3.2 工作模式92.3.3 工作電源92.3.4 nrf905無線收發(fā)工作參數(shù)102.4上位計(jì)算機(jī)通信模塊112.4.1串口通信的工作參數(shù)113軟件設(shè)計(jì)113.1主程序設(shè)計(jì)113.1.1被監(jiān)測端(發(fā)射端)113.1.2監(jiān)測端(接收

2、端)133.6計(jì)算機(jī)監(jiān)控軟件設(shè)計(jì)144系統(tǒng)測試154.1測試所使用的儀器154.2軟硬件測試154.2.1顯示(lcd1602)測試及數(shù)據(jù)154.2.2溫度采集測試及數(shù)據(jù)164.2.3無線接收發(fā)送測試及數(shù)據(jù)164.2.4上位計(jì)算機(jī)通信測試及數(shù)據(jù)175總結(jié)17附錄18計(jì)算機(jī)監(jiān)控軟件使用說明:18被檢測端(發(fā)射端)主程序:18檢測端(接收端)主程序:21計(jì)算機(jī)監(jiān)控軟件主程序:24基于nrf905無線收發(fā)芯片溫度監(jiān)測無線通信系統(tǒng)的設(shè)計(jì)摘要本系統(tǒng)采用nrf905無線收發(fā)模塊實(shí)現(xiàn)了被監(jiān)測端(發(fā)射端)至監(jiān)測端(接收端)的單工數(shù)據(jù)傳輸。被監(jiān)測端以單片機(jī)at89s51為核心,使用ds18b20溫度傳感器進(jìn)行數(shù)

3、據(jù)的采集;at89s51對采集到的溫度進(jìn)行處理,然后通過nrf905把溫度數(shù)據(jù)發(fā)送給監(jiān)測端。監(jiān)測端采用nrf905內(nèi)置的crc檢測,從而保證數(shù)據(jù)的準(zhǔn)確。通過lcd1602液晶顯示器來實(shí)現(xiàn)數(shù)據(jù)的顯示;通過max232芯片實(shí)現(xiàn)與上位計(jì)算機(jī)通信的功能;可以同時(shí)放置若干個(gè)監(jiān)測端(接收端)從而實(shí)現(xiàn)多點(diǎn)監(jiān)測。1方案論證與比較針對題目要求,經(jīng)過分析,系統(tǒng)主要包括溫度傳感器、無線收發(fā)模塊、單片機(jī)控制模塊、顯示模塊及上位計(jì)算機(jī)通信模塊。系統(tǒng)采用軟件工程的uml建模語言進(jìn)行建模,系統(tǒng)的設(shè)計(jì)框圖如圖1.1:圖1.1“操作人員”給“控制器”上電,“控制器1”以串口方式讀取“溫度采集”模塊的數(shù)據(jù),經(jīng)“控制器1”處理,處

4、理后的溫度數(shù)據(jù)傳輸給“本地顯示”模塊以進(jìn)行顯示,最后在通過“無線發(fā)射”模塊把溫度數(shù)據(jù)發(fā)送出去?!盁o線接收”模塊接收到溫度數(shù)據(jù)后傳輸“控制器2”,“控制器2”進(jìn)行數(shù)據(jù)處理,處理后的溫度數(shù)據(jù)傳輸給“本地顯示”模塊以進(jìn)行顯示,然后再通過串口通信,把溫度數(shù)據(jù)傳輸給上位計(jì)算機(jī)的“pc溫度監(jiān)控”模塊,計(jì)算機(jī)內(nèi)部處理后顯示在計(jì)算機(jī)屏幕上,以便“監(jiān)控人員”進(jìn)行監(jiān)控。1.1溫度采集方案設(shè)計(jì)溫度采集模塊是系統(tǒng)設(shè)計(jì)的重點(diǎn)之一,直接影響整個(gè)系統(tǒng)對環(huán)境溫度變化的反應(yīng)速度、采集準(zhǔn)確度以及精度等指標(biāo)?!痉桨敢弧坎捎脭?shù)字溫度傳感器ds18b20,具有連接簡單、采集速度快、精度高等特點(diǎn)。它采用單線總線與單片機(jī)相連(和地線),這

5、允許在許多不同地方放置溫度傳感器。它可在1秒內(nèi)把溫度變換為數(shù)字,采集速度較快能及時(shí)反應(yīng)溫度的變化。最高12位溫度讀數(shù),精度可達(dá)到0.0625攝氏度,溫度采集范圍-55125攝氏度,在很多場合下都能使用,并且價(jià)格低,很容易買到?!痉桨付坎捎媚M傳感器。雖然它能及時(shí)的反應(yīng)出溫度變化,但是它的精度較低,并且還要使用a/d轉(zhuǎn)換器,這樣增加了成本和控制的難度,所以采用方案一。1.2顯示部分方案設(shè)計(jì)顯示部分能在本地及時(shí)的顯示出當(dāng)前的溫度,方便操作人員了解本地的溫度。【方案一】采用lcd液晶顯示屏,它是以若干個(gè)5 x 10點(diǎn)陣塊組成,能顯示英文字符和數(shù)字。具有低功耗、長壽命、高可靠性、清晰、體積小等特點(diǎn)。

6、【方案二】采用led八段顯示器。雖然led具有原理簡單、顯示快速等特點(diǎn)。但是它不能顯示英文字符,如果使用鎖存方式顯示,增加了電路難度。不使用鎖存方式則增加了控制的難度。所以采用方案一。1.3無線接收發(fā)射方案設(shè)計(jì)無線接收發(fā)射是系統(tǒng)設(shè)計(jì)的重點(diǎn)之一,它是連接監(jiān)測端和被監(jiān)測端的橋梁。無線模塊對環(huán)境比較敏感,同時(shí),無線模塊的功耗、傳輸距離也是影響系統(tǒng)可用度的一個(gè)因素。所以必須選用能自己檢測傳輸錯(cuò)誤,并且功耗較小、傳輸距離長的無線模塊?!痉桨敢弧坎捎胣rf905無線收發(fā)芯片。具有體積小、功耗低、發(fā)射電流小、抗干擾能力強(qiáng)、發(fā)射速率高等特點(diǎn),同時(shí)自帶crc檢測,傳輸距離可達(dá)300m。【方案二】采用ptr200

7、0進(jìn)行溫度的發(fā)送和接收,該方案具有模塊體積超小型,超低功耗,高速率,抗干擾能力強(qiáng),開闊地時(shí)的使用距離最遠(yuǎn)可達(dá)1000米,但接收到發(fā)射的轉(zhuǎn)換時(shí)間較長,不能及時(shí)傳輸時(shí)空變化的溫度,所以采用方案一。 1.4上位計(jì)算機(jī)通信方案設(shè)計(jì)【方案一】采用max232串口通信芯片。具有電路簡單、編程容易等特點(diǎn),并且價(jià)格便宜,容易買到?!痉桨付坎捎胾sb通信。采用此方案技術(shù)難度較大,編程困難。所以采用方案一。綜上所述,總體方案是:控制部分采用通用的at89s51芯片,溫度采集使用數(shù)字溫度傳感器ds18b20,本地顯示采用點(diǎn)陣液晶屏,無線收發(fā)采用nrf905芯片,采用max232串口方式與上位計(jì)算機(jī)通信。2硬件電路

8、設(shè)計(jì)2.1溫度采集模塊工作原理與計(jì)算2.1.1工作原理系統(tǒng)在被監(jiān)測端(發(fā)射端)采用數(shù)字溫度傳感器ds18b20實(shí)現(xiàn)溫度的采集,ds18b20才用單總線接口,只占用單片機(jī)的一個(gè)端口。ds18b20可以采用數(shù)據(jù)線供電的方式,但是為了采集速度更快,我們使用外部供電方式。其測量范圍從55攝氏度到125攝氏度,能滿足一般民用需求。其連接電路如圖2.1:圖2.1工作原理:首先單片機(jī)初始化ds18b20,然后發(fā)送啟動溫度轉(zhuǎn)換命令,然后再發(fā)送準(zhǔn)備讀取溫度命令,最后讀取2字節(jié)的溫度數(shù)據(jù)。具體步驟如下:單片機(jī)給ds18b20一個(gè)初始化命令,然后發(fā)送0xcc命令跳過讀序列號,發(fā)送0x44命令以啟動溫度轉(zhuǎn)換。再發(fā)送一

9、個(gè)初始化命令,同樣發(fā)送0xcc命令跳過讀序列號,發(fā)送0xbe命令準(zhǔn)備讀取溫度,單片機(jī)連續(xù)讀取2字節(jié)的溫度數(shù)據(jù)。2.1.2溫度計(jì)算ds18b20采用2字節(jié)來存儲溫度,其中1511位表示溫度符號,104位表示溫度的整數(shù)位,30位表示溫度的小數(shù)位,如圖2.2所示:圖2.2正溫度計(jì)算:由于1511位全為0,ds18b20采用正碼形式存儲溫度,所以只需把100位右移4位就能算出溫度,也就是除以16。比如采集到的溫度0550h,除以16,的十進(jìn)制的85,那么溫度就為85攝氏度。采集到的溫度為0191h則溫度為25.0625攝氏度。負(fù)溫度計(jì)算:對于負(fù)溫度,ds18b20采用補(bǔ)碼形式存儲溫度,1511位全為1

10、,100位為補(bǔ)碼,所以要轉(zhuǎn)換為正碼,然后再用正溫度的計(jì)算方式。比如采集到的溫度為fc90h,二進(jìn)制為1100 1001 0000,轉(zhuǎn)換為正碼為0011 0111 0000,十六進(jìn)制為370h,除以16為十進(jìn)制55攝氏度,再加上符號位則計(jì)算出來的溫度為-55攝氏度。2.2顯示模塊電路顯示模塊使用比較通用的lcd1602液晶屏,它是以若干個(gè)5 x 10點(diǎn)陣塊組成,具有清晰、快速、可靠等特點(diǎn)。其電路如圖2.3:圖2.3本系統(tǒng)采用單片機(jī)p0口作為lcd1602的數(shù)據(jù)端口,e使能端使用單片機(jī)的p2.3口,rw使用單片機(jī)的p2.2口,rs使用單片機(jī)的p2.1口,vo背光接地,電源采用+5v。排阻rr1為單

11、片機(jī)p0口的上拉電阻。2.3無線發(fā)射接收模塊無線發(fā)射接收模塊使用nrf905芯片,它與控制器采用spi協(xié)議進(jìn)行通信,其內(nèi)部原理如下圖:nrf905單片無線收發(fā)模塊工作在433/868/915mhz的ism頻段,本系統(tǒng)采用433mhz頻段。由一個(gè)完全集成的頻率調(diào)節(jié)器,一個(gè)帶解調(diào)器的接收器,一個(gè)功率放大器,一個(gè)晶體振蕩器和一個(gè)調(diào)節(jié)器組成。shockburst工作模式的特點(diǎn)是自動產(chǎn)生前導(dǎo)碼和crc??梢院苋菀淄ㄟ^spi接口進(jìn)行編程配置。電流消耗很低,在發(fā)射功率為-10dbm時(shí),發(fā)射電流為11ma,接收電流為12.5ma,進(jìn)入powerdown模式可以很容易實(shí)現(xiàn)節(jié)電。由于at89s51沒有spi端口,

12、所以我們用at89s51模擬spi,從而與nrf905通信。與單片機(jī)的連接如圖2.4:圖2.4nrf905管腳的具體含義請參考下圖:2.3.1 spi接口設(shè)計(jì)spi接口由狀態(tài)寄存器、射頻配置寄存器、發(fā)送地址寄存器、發(fā)送數(shù)據(jù)寄存器和接收寄存器5個(gè)寄存器組成。1. 狀態(tài)寄存器:包含數(shù)據(jù)就緒dr和地址匹配am狀態(tài)2. 射頻配置寄存器:包含收發(fā)器的頻率,輸出功率等配置信息3. 發(fā)送地址寄存器:包含目標(biāo)器件地址字節(jié)長度由配置寄存器設(shè)置4. 發(fā)送數(shù)據(jù)寄存器:包含發(fā)送的有效數(shù)據(jù)包數(shù)據(jù)字節(jié)長度由配置寄存器設(shè)置5. 接收寄存器:包含接收到的有效數(shù)據(jù)包數(shù)據(jù)字節(jié)長度由配置寄存器設(shè)置在寄存器中的有效數(shù)據(jù)由數(shù)據(jù)準(zhǔn)備就緒

13、dr指示2.3.2 工作模式nrf905有4種工作模式,本系統(tǒng)采用其中的3種模式:spi編程模式、發(fā)送模式、接收模式。其工作模式由trxce、txen、pwrup的設(shè)置來設(shè)定的。如表2.1表2.1standby模式(spi編程模式):standby模式在保持電流消耗最小的同時(shí)保證最短的到shockburst rx,shouckburst tx的啟動時(shí)間。當(dāng)進(jìn)入這種模式時(shí),一部分晶體振蕩器是活動的。電流消耗取決于晶體振蕩器的頻率。在此模式中,配置字的內(nèi)容保持不變。shockburst rx模式(接收模式):當(dāng)有相應(yīng)的溫度數(shù)據(jù)要傳送時(shí),則通過spi接口,按時(shí)序把接收機(jī)的地址和要發(fā)送的數(shù)據(jù)送傳給nr

14、f905,spi接口的速率在通信協(xié)議和器件配置時(shí)確定;trxce和txen置高電平,使nrf905的發(fā)送模式啟動;nrf905進(jìn)行數(shù)據(jù)的發(fā)送。nrf905不斷重發(fā),直到trxce被置低電平時(shí),nrf905發(fā)送過程完成,自動進(jìn)入空閑模式。shockburst tx模式(發(fā)射模式): 當(dāng)trxce為高電平,txen為低電平時(shí),nrf905進(jìn)入接收模式;650s后,nrf905不斷監(jiān)測,等待接收數(shù)據(jù);當(dāng)nrf905檢測到同一頻段的載波時(shí),載波檢測引腳被置高電平;當(dāng)接收到一個(gè)相匹配的地址,am引腳被置高電平;當(dāng)數(shù)據(jù)包正確接收完畢,nrf905自動移去字頭、地址和crc校驗(yàn)位,然后把dr引腳置為高電平;

15、trxce置為低電平,nrf905進(jìn)入空閑模式;在一次通過spi口,以一定的速率把數(shù)據(jù)移到微控制器內(nèi),當(dāng)所有數(shù)據(jù)接收完畢,nrf905把dr引腳和am引腳置為低電平。這時(shí)nrf905可以進(jìn)入接收模式、發(fā)送模式或關(guān)機(jī)模式。2.3.3 工作電源nrf905使用的是3.3v電源,所以必須給它單獨(dú)配置一個(gè)電源,3.3v電源電路如圖2.5:圖2.5vdd輸入為9v直流電壓,穩(wěn)壓塊采用的是德州儀器公司的tlv2217-33電源模塊,具有精度高等特點(diǎn)。tlv2217-33輸入512v,輸出3.3v。無論nrf905工作在什么模式,它的電流都不大,所以,使用德州儀器公司的tlv2217-33電源模塊給nrf9

16、05供電是比較合適的。我們在監(jiān)測端(接收端)使用了2個(gè)nrf905信號指示燈,信號指示燈電路如圖2.6:圖2.6其中cd為nrf905的載波檢測腳,am為nrf905的地址匹配腳,sn74ahc1g86dbc為德州儀器公司的單通道異或門,對cd和am進(jìn)行異或。操作人員通過觀察發(fā)光二極管ds2從而判斷nrf905是否在接收數(shù)據(jù),通過觀察發(fā)光二極管ds1從而判斷nrf905是否接收到了正確的數(shù)據(jù)。2.3.4 nrf905無線收發(fā)工作參數(shù)寫入配置寄存器的參數(shù)為:0x01, 0x0c, 0x44, 0x02,0x02,0xcc, 0xcc, 0xcc,0xcc, 0x58其含義為:不自動重發(fā)數(shù)據(jù),正常

17、模式,輸出功率為10dbm,器件工作在433mhz,發(fā)射接收地址寬度為4字節(jié),發(fā)射接收2字節(jié)數(shù)據(jù),接收地址為0xcc,內(nèi)部16mhz晶振,不使用外部晶振,8位crc自檢。還能配置為:自動重發(fā),節(jié)能模式,輸出功率有-10dbm、-2 dbm、+6 dbm,可選的工作頻率有433mhz、868mhz,收發(fā)字節(jié)最多32字節(jié)數(shù)據(jù)。可以使用外部晶振,可以不使用crc檢測。2.4上位計(jì)算機(jī)通信模塊上位計(jì)算機(jī)通信模塊使用通用的max232串口通信方式,電路如圖2.7:圖2.7max232的主要作用是進(jìn)行電平轉(zhuǎn)換,從而使單片機(jī)at89s51能和計(jì)算機(jī)進(jìn)行通信。我們只使用了11、12來連接單片機(jī)at89s51的

18、p3.0口和p3.1口。max232的13和14腳與串口相連,將數(shù)據(jù)傳送到計(jì)算機(jī)。2.4.1串口通信的工作參數(shù)波特率:9600;數(shù)據(jù)位是8位;停止位是1位;沒有校驗(yàn)位。3軟件設(shè)計(jì)3.1主程序設(shè)計(jì) 主程序主要的功能是組織并協(xié)調(diào)各模塊的工作,處理“溫度采集”模塊傳來的溫度。3.1.1被監(jiān)測端(發(fā)射端)被監(jiān)測端(發(fā)射端)主程序時(shí)序圖如圖3.1:圖3.11. “操作人員”給“控制器1(at89s51)”上電;2. “控制器1(at89s51)”對“本地顯示(lcd1602)”進(jìn)行初始化;3. “控制器1(at89s51)”對“無線收發(fā)(nrf905)”進(jìn)行初始化;4. “控制器1(at89s51)”給

19、“溫度采集(ds18b20)”一個(gè)溫度采集命令;5. “溫度采集(ds18b20)”把采集到的溫度數(shù)據(jù)傳輸給“控制器1(at89s51)”;6. “控制器1(at89s51)”對采集到的溫度數(shù)據(jù)進(jìn)行處理。判斷溫度的正負(fù),把負(fù)溫度轉(zhuǎn)換為正碼,再把溫度數(shù)據(jù)計(jì)算為實(shí)際溫度,最后把溫度數(shù)據(jù)傳換成“本地顯示(lcd1602)”能顯示的格式。7. “控制器1(at89s51)”把處理后的溫度數(shù)據(jù)傳輸給“本地顯示(lcd1602)”以進(jìn)行顯示;8. “控制器1(at89s51)”設(shè)置“無線收發(fā)(nrf905)”為發(fā)射模式,以便發(fā)射原始溫度數(shù)據(jù);9. “控制器1(at89s51)”把未處理過的溫度數(shù)據(jù)傳輸給“

20、無線收發(fā)(nrf905)”,從而把溫度數(shù)據(jù)發(fā)射出去;10. 回到第4步繼續(xù)采集溫度數(shù)據(jù),一直這樣循環(huán);以下是各模塊對應(yīng)的程序文件名稱:模塊名稱程序文件名稱控制器1(at89s51)main.c本地顯示(lcd1602)lcd1602.c及l(fā)cd1602.h無線收發(fā)(nrf905)nrf905.c及nrf905.h溫度采集(ds18b20)ds1820.c及ds1820.h3.1.2監(jiān)測端(接收端)監(jiān)測端(接收端)主程序時(shí)序圖如圖3.2:圖3.21. “操作人員”給“控制器1(at89s51)”上電;2. “控制器2(at89s51)”對“本地顯示(lcd1602)”進(jìn)行初始化;3. “控制器2

21、(at89s51)”對“無線收發(fā)(nrf905)”進(jìn)行初始化;4. “控制器2(at89s51)”初始化串口通信,設(shè)置串口通信的參數(shù);5. “控制器2(at89s51)”設(shè)置“無線收發(fā)(nrf905)”為接收模式,以便接收被監(jiān)測端(發(fā)射端)發(fā)射出來的原始溫度數(shù)據(jù);6. “無線收發(fā)(nrf905)”接收到原始溫度數(shù)據(jù),進(jìn)行crc校驗(yàn),如果數(shù)據(jù)正確則把數(shù)據(jù)傳輸給“控制器2(at89s51)”;7. “控制器2(at89s51)”對接收到的數(shù)據(jù)進(jìn)行處理,處理方法同被監(jiān)測端(發(fā)射端)一樣,這里就不重述。8. “控制器2(at89s51)”把處理后的溫度數(shù)據(jù)傳輸給“本地顯示(lcd1602)”以進(jìn)行顯示

22、;9. “控制器2(at89s51)”向上位計(jì)算機(jī)傳輸溫度數(shù)據(jù),以便上位計(jì)算機(jī)對溫度數(shù)據(jù)進(jìn)行監(jiān)控;10. 回到第15步繼續(xù)接收溫度數(shù)據(jù),一直這樣循環(huán);以下是各模塊對應(yīng)的程序文件名稱:模塊名稱程序文件名稱控制器1(at89s51)main.c本地顯示(lcd1602)lcd1602.c及l(fā)cd1602.h無線收發(fā)(nrf905)nrf905.c及nrf905.h串口通信comm.c及comm.h3.6計(jì)算機(jī)監(jiān)控軟件設(shè)計(jì)計(jì)算機(jī)端監(jiān)控軟件的主要功能是接收單片機(jī)通過串口傳輸過來的溫度數(shù)據(jù),然后顯示在屏幕上;采用對平臺兼容性很好的java語言編寫。此軟件的附加功能:1. 設(shè)置報(bào)警溫度,當(dāng)溫度超過報(bào)警溫度

23、時(shí),屏幕上會報(bào)警;2. 可以任意選擇監(jiān)控端口;3. 退出軟件后,再次啟動本軟件會恢復(fù)上次設(shè)置的報(bào)警溫度;其軟件界面如圖3.3圖3.3由于計(jì)算機(jī)端監(jiān)控軟件功能很少,所以沒有使用現(xiàn)在最流行的mvc模式進(jìn)行開發(fā)。監(jiān)控軟件主要包括2部分:1. 屏幕顯示及控制類,類名:mainframe;2. 串口收發(fā)類,類名:serialcomm;使用的串口通信參數(shù)和單片機(jī)上的串口通信參數(shù)一致。控制類(mainframe)主要控制串口收發(fā)類(serialcomm)發(fā)送過來的數(shù)據(jù),然后設(shè)置“現(xiàn)在溫度”滑條,當(dāng)“現(xiàn)在溫度”超過“報(bào)警溫度”時(shí)則顯示報(bào)警,如圖3.4所示圖3.4由于我們把java語言的運(yùn)行平臺jdk進(jìn)行了集成

24、,所以計(jì)算機(jī)監(jiān)控軟件無需安裝即可使用。其使用方法如下:1. 解壓文件夾下的“pc串口通信程序”。2. 進(jìn)入解壓后的文件夾,打開“溫度監(jiān)控”文件夾下的“溫度監(jiān)控.exe”即可。4系統(tǒng)測試4.1測試所使用的儀器測試所使用的儀器有:數(shù)字萬用表,溫度計(jì),串口調(diào)試器軟件。4.2軟硬件測試4.2.1顯示(lcd1602)測試及數(shù)據(jù)顯示(lcd1602)測試方式:單片機(jī)at89s51直接驅(qū)動lcd1602顯示字符。測試數(shù)據(jù)如下:被監(jiān)測端(發(fā)射端):標(biāo)準(zhǔn)顯示實(shí)際顯示temperature is:1234567890+-,./?監(jiān)測端(接收端):標(biāo)準(zhǔn)顯示實(shí)際顯示temperature is:1234567890

25、+-,./?4.2.2溫度采集測試及數(shù)據(jù)溫度采集測試方式:單片機(jī)at89s51接收到ds18b20傳來的數(shù)據(jù)后,在lcd1602上顯示原始溫度數(shù)據(jù)及處理過后的溫度數(shù)據(jù)。測試數(shù)據(jù)如下表:實(shí)際溫度原始數(shù)據(jù)測試溫度誤差-6-34.2.3無線接收發(fā)送測試及數(shù)據(jù)無線接收發(fā)測試方法:被監(jiān)測端(發(fā)射端)在lcd1602上顯示要發(fā)射的數(shù)據(jù),通過nrf905發(fā)射出去;監(jiān)測端(接收端)接收到數(shù)據(jù)后,在lcd1602上顯示接收到的數(shù)據(jù);收發(fā)2字節(jié)數(shù)據(jù)。測試數(shù)據(jù)如下表: 相距(m)發(fā)射數(shù)據(jù)接收數(shù)據(jù)13m55m2004.2.4上位計(jì)算機(jī)通信測試及數(shù)據(jù)上位計(jì)算機(jī)端采用“串口調(diào)試器”;我們用一下方式測試串口通信:單片機(jī)端接

26、收“串口調(diào)試器”發(fā)送過來的數(shù)據(jù),然后單片機(jī)在lcd1602上顯示接收到的數(shù)據(jù),最后在把數(shù)據(jù)傳回“串口調(diào)試器”?!按谡{(diào)試器”發(fā)送的數(shù)據(jù)lcd1602顯示的數(shù)據(jù)“串口調(diào)試器”接收的數(shù)據(jù)5總結(jié)我們的設(shè)計(jì)完成了題目中的基本部分和發(fā)揮部分,采用ds18b20溫度傳感器很準(zhǔn)確及時(shí)的采集到當(dāng)前的溫度。通過使用nrf905無線發(fā)送接收模塊將所采集的溫度數(shù)據(jù)能夠在0m300m的范圍內(nèi)準(zhǔn)確無誤的發(fā)送給監(jiān)控端(接收端)。采用lcd1602顯示模塊完成了顯示部分,利用串口通信完成了在計(jì)算機(jī)上顯示所接收到的溫度數(shù)據(jù),同時(shí)也給系統(tǒng)增加了報(bào)警功能。附錄計(jì)算機(jī)監(jiān)控軟件使用說明:由于我們把java語言的運(yùn)行平臺jdk進(jìn)行了集

27、成,所以計(jì)算機(jī)監(jiān)控軟件無需安裝即可使用。其使用方法如下:1. 解壓文件夾下的“pc串口通信程序”。2. 進(jìn)入解壓后的文件夾,打開“溫度監(jiān)控”文件夾下的“溫度監(jiān)控.exe”即可。被檢測端(發(fā)射端)主程序:#include reg51.h#include lcd1602.h#include nrf905.h#include ds1820.h /0 1 2 3 4 5 6 7 8 9 .unsigned code lcdtable=0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x2e;/lcd顯示代碼;uchar d1,d2,d3,po4,po

28、3,po2,po1;/個(gè)位,十位,百位,1/10位,1/100位,1/1000位,1/10000位;uchar low,tdatalow,tdataheight; /溫度低字節(jié),未處理溫度的小數(shù)位uint temp,tempold,tempnew,point;/采集溫度,舊溫度,新溫度,實(shí)際溫度的小數(shù)位void convert(uchar c)d1=0x00;d2=0x00;d3=0x00;po1=0x00;po2=0x00;po3=0x00;po4=0x00; d3=(c%1000)/100; /取百位d2=(c%100)/10;/取十位d1=(c%10)/1;/取個(gè)位po4=(point%

29、10000)/1000; /取1/10位 po3=(point%1000)/100; /取1/100位po2=(point%100)/10; /取1/1000位po1=(point%10)/1; /取1/10000位void display()/lcd顯示函數(shù)/顯示溫度wr_byte_ram(1,0x42,lcdtabled3); /顯示百位wr_byte_ram(1,0x43,lcdtabled2); /顯示十位wr_byte_ram(1,0x44,lcdtabled1); /顯示個(gè)位 wr_byte_ram(1,0x45,lcdtable10); /顯示小數(shù)點(diǎn)wr_byte_ram(1,0

30、x46,lcdtablepo4); /顯示1/10位wr_byte_ram(1,0x47,lcdtablepo3); /顯示1/100位wr_byte_ram(1,0x48,lcdtablepo2); /顯示1/1000位wr_byte_ram(1,0x49,lcdtablepo1); /顯示1/10000位wr_length_ram(1,0x4a,c,1);/顯示溫度單位void dispnegativetemp(uchar l) /lcd顯示負(fù)溫度convert(l);/轉(zhuǎn)換wr_length_ram(1,0x40, ,16);/擦除字符wr_length_ram(1,0x40, -,2)

31、;/顯示負(fù)溫度display();/lcd顯示函數(shù)void disppositivetemp(uchar l)/lcd顯示正溫度convert(l); /轉(zhuǎn)換wr_length_ram(1,0x40, ,16);/擦除字符wr_length_ram(1,0x40, +,2);/顯示正溫度display();/lcd顯示函數(shù)main()ini_lcd1602(); /初始化lcd;config905(); /配置905wr_length_ram(1,0x00, temperature is:,16);/顯示提示字符while(1)temp=0x0000;temp=read_temp();/讀取溫

32、度if(temp!=tempold) /數(shù)據(jù)有變化者,重新顯示tempnew=temp;tdatalow=temp&0xff;tdataheight=temp8;point=temp&0x000f;/取小數(shù)位;point=point*625;/轉(zhuǎn)換為實(shí)際溫度if(temp & 0x8000) /處理負(fù)溫度 temp=temp&0x0fff;/去除高4位的符號;temp=temp0x0fff;/取反;temp+=1;temp=4; /計(jì)算溫度,除以16;low=temp|0x00; /取低字節(jié)dispnegativetemp(low); /lcd顯示負(fù)溫度low=low|0x80;else /處

33、理正溫度temp=4;/計(jì)算溫度,除以16;low=temp|0x00;/取低字節(jié)disppositivetemp(low);/lcd顯示正溫度settxmode();/設(shè)置為發(fā)送模式txpacket(tdataheight,tdatalow);/發(fā)送函數(shù)tempold=tempnew;/存最新數(shù)據(jù)檢測端(接收端)主程序:#include reg51.h#include lcd1602.h#include nrf905.h#include ds1820.h#include comm.h /0 1 2 3 4 5 6 7 8 9 .unsigned code lcdtable=0x30,0x31

34、,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x2e;/lcd顯示代碼;uchar d1,d2,d3,po4,po3,po2,po1;/個(gè)位,十位,百位,1/10位,1/100位,1/1000位,1/10000位;uchar low,tdatalow,tdataheight; /溫度低字節(jié),未處理溫度的小數(shù)位uint temp,tempold,tempnew,point;/采集溫度,舊溫度,新溫度,實(shí)際溫度的小數(shù)位void convert(uchar c)d1=0x00;d2=0x00;d3=0x00;po1=0x00;po2=0x00;po3=0x00;

35、po4=0x00; d3=(c%1000)/100; /取百位d2=(c%100)/10;/取十位d1=(c%10)/1;/取個(gè)位po4=(point%10000)/1000; /取1/10位 po3=(point%1000)/100; /取1/100位po2=(point%100)/10; /取1/1000位po1=(point%10)/1; /取1/10000位void display()/lcd顯示函數(shù)/顯示溫度wr_byte_ram(1,0x42,lcdtabled3); /顯示百位wr_byte_ram(1,0x43,lcdtabled2); /顯示十位wr_byte_ram(1,0

36、x44,lcdtabled1); /顯示個(gè)位 wr_byte_ram(1,0x45,lcdtable10); /顯示小數(shù)點(diǎn)wr_byte_ram(1,0x46,lcdtablepo4); /顯示1/10位wr_byte_ram(1,0x47,lcdtablepo3); /顯示1/100位wr_byte_ram(1,0x48,lcdtablepo2); /顯示1/1000位wr_byte_ram(1,0x49,lcdtablepo1); /顯示1/10000位wr_length_ram(1,0x4a,c,1);/顯示溫度單位void dispnegativetemp(uchar l) /lcd顯

37、示負(fù)溫度convert(l);/轉(zhuǎn)換wr_length_ram(1,0x40, ,16);/擦除字符wr_length_ram(1,0x40, -,2);/顯示負(fù)溫度display();/lcd顯示函數(shù)void disppositivetemp(uchar l)/lcd顯示正溫度convert(l); /轉(zhuǎn)換wr_length_ram(1,0x40, ,16);/擦除字符wr_length_ram(1,0x40, +,2);/顯示正溫度display();/lcd顯示函數(shù)main()ini_lcd1602(); /初始化lcd;config905(); /配置905init_serialcom

38、m(); /初始化串口wr_length_ram(1,0x00, temperature is:,16);/顯示提示字符while(1)temp=0x0000;setrxmode();/設(shè)置為接收模式temp=rxpacket();/接收溫度函數(shù)if(temp!=tempold) /數(shù)據(jù)有變化者,重新顯示tempnew=temp;tdatalow=temp&0xff;tdataheight=temp8;point=temp&0x000f;/取小數(shù)位;point=point*625;/轉(zhuǎn)換為實(shí)際溫度if(temp & 0x8000) /處理負(fù)溫度 temp=temp&0x0fff;/去除高4位的

39、符號;temp=temp0x0fff;/取反;temp+=1;temp=4; /計(jì)算溫度,除以16;low=temp|0x00; /取低字節(jié)dispnegativetemp(low); /lcd顯示負(fù)溫度low=low|0x80;else /處理正溫度temp=4;/計(jì)算溫度,除以16;low=temp|0x00;/取低字節(jié)disppositivetemp(low);/lcd顯示正溫度send_char_com(low);/向串口發(fā)送一個(gè)字符 計(jì)算機(jī)監(jiān)控軟件主程序:package com.frame;import java.awt.borderlayout;import java.awt.co

40、lor;import java.awt.event.actionevent;import java.awt.event.actionlistener;import java.awt.event.mouseadapter;import java.awt.event.mouseevent;import java.awt.event.mousemotionadapter;import java.io.datainputstream;import java.io.dataoutputstream;import java.io.eofexception;import java.io.file;impor

41、t java.io.fileinputstream;import java.io.filenotfoundexception;import java.io.fileoutputstream;import java.io.ioexception;import java.io.inputstream;import java.util.enumeration;import java.util.toomanylistenersexception;import m.commportidentifier;import m.serialport;import m.serialportevent;import

42、 m.serialporteventlistener;import javax.swing.jbutton;import javax.swing.jcombobox;import javax.swing.jframe;import javax.swing.jlabel;import javax.swing.joptionpane;import javax.swing.jpanel;import javax.swing.jslider;import javax.swing.swingconstants;import javax.swing.event.changeevent;import jav

43、ax.swing.event.changelistener;import com.serial.serialcomm;public class mainframeprivate serialcomm serialcomm=null; /串口實(shí)例private serialport serialport=null; /串口實(shí)例private file file=null;/保存報(bào)警值private dataoutputstream fileout=null;/寫報(bào)警值數(shù)據(jù)流;private datainputstream filein=null;/讀報(bào)警值數(shù)據(jù)流;private int read

44、data=0; /串口數(shù)據(jù)存儲private int temp_old=0;private boolean flag_start=false; /監(jiān)控標(biāo)志private boolean flag_alarm=false; /報(bào)警標(biāo)志private jframe frame;private final jpanel panel = new jpanel();private final jlabel label1 = new jlabel();private final jcombobox comboboxportid = new jcombobox();private final jbutton

45、 buttonstart = new jbutton();private final jslider slidertemp = new jslider();private final jlabel labelslidertemp = new jlabel();private final jlabel label = new jlabel();private final jlabel label_1 = new jlabel();private final jslider slideralarm = new jslider();private final jlabel labelslideral

46、arm = new jlabel();private final jbutton buttonexit = new jbutton();/* * launch the application * param args */public static void main(string args)trymainframe window = new mainframe();window.frame.setvisible(true);catch (exception e)e.printstacktrace();/* * create the application */public mainframe

47、()jbinit();/* * initialize the contents of the frame */private void jbinit()frame = new jframe();frame.setresizable(false);frame.setbounds(100, 100, 205, 294);frame.setdefaultcloseoperation(jframe.exit_on_close);frame.getcontentpane().add(panel, borderlayout.center);panel.setlayout(null);panel.add(l

48、abel1);label1.settext(請選擇端口:);label1.setbounds(10, 10, 87, 24);panel.add(comboboxportid);comboboxportid.setbounds(92, 10, 94, 24);panel.add(buttonstart);buttonstart.addactionlistener(new buttonstartactionlistener();buttonstart.settext(啟動監(jiān)控);buttonstart.setbounds(10, 226, 87, 28);panel.add(slidertemp

49、);slidertemp.setenabled(false);slidertemp.addchangelistener(new slidertempchangelistener();slidertemp.setvalue(0);slidertemp.setminimum(-55);slidertemp.setmaximum(125);slidertemp.setorientation(swingconstants.vertical);slidertemp.setbounds(60, 73, 30, 151);panel.add(labelslidertemp);labelslidertemp.

50、settext(0);labelslidertemp.setbounds(92, 143, 30, 18);panel.add(label);label.settext(現(xiàn)在溫度:);label.setbounds(42, 49, 66, 18);panel.add(label_1);label_1.settext(報(bào)警溫度:);label_1.setbounds(114, 49, 66, 18);panel.add(slideralarm);slideralarm.addmousemotionlistener(new slideralarmmousemotionlistener();slideralarm.addmouselistener(new slideralarmmouselistener();slideralarm.addchangelistener(new slideralarmchangelistener();slideralarm.setvalue(0);slideralarm.setminimum(-55);slideralarm.setmaximum(125);slideralarm.setorientation(swingconstants.vertical);slide

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論