




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、合肥學(xué)院第七屆電子設(shè)計(jì)競賽報(bào)告作品名稱:無 線 溫 度 遙 測 系 統(tǒng) 學(xué)校全稱: 合肥學(xué)院系別班級: 08級電子信息與電氣工程系 隊(duì)員姓名:08電子<3>班 胡光 0805070240 08電子<3>班 劉揚(yáng) 080507024408電子<3>班 程坤 0805070263 無線溫度遙感系統(tǒng)摘要:本系統(tǒng)是基于80C52單片機(jī)和無線傳輸模塊設(shè)計(jì)的無線溫度遙測系統(tǒng)。溫度測量采用的是DS18B20溫度傳感器;無線數(shù)據(jù)傳輸是基于FSK調(diào)制解調(diào),抗干擾能力強(qiáng)的NRF24L01無線收發(fā)芯片;系統(tǒng)為低功耗設(shè)計(jì)。關(guān)鍵字:無線通信 DS18B20 單片機(jī)一、引言在許多場合需
2、要將傳感器節(jié)點(diǎn)直接放置在目標(biāo)地點(diǎn)進(jìn)行現(xiàn)場的數(shù)據(jù)采集,這就要求傳感器節(jié)點(diǎn)具有無線通信的能力。同時(shí),由于無線傳感器通常使用電池作為能源,所以,它對能耗要求也比較高。無線溫度遙感系統(tǒng)可以實(shí)現(xiàn)主機(jī)端與傳感器節(jié)點(diǎn)之間的通信,并且通過選用低功耗的芯片和對軟件的低功耗設(shè)計(jì),也可以實(shí)現(xiàn)低功耗的目標(biāo)。1.1基本要求(1)測溫范圍1065,誤差<0.5;(2)顯示位數(shù)3位,分辨率0.1;(3)測溫點(diǎn)到接收點(diǎn)距離>2米;(4)可設(shè)置溫度上限報(bào)警;(5)接收點(diǎn)顯示測溫點(diǎn)數(shù)據(jù)及聲光上限報(bào)警信號;1.2.發(fā)揮部分(1)遙測距離>5米;(2)誤差<0.2;具有溫度補(bǔ)償功能;(3)具有特色與創(chuàng)新;(4
3、)測量溫度速率小于1秒;(5)多路測量;二、系統(tǒng)設(shè)計(jì)2.1系統(tǒng)方案選擇方案一:用ATmega8單片機(jī)作處理器和相關(guān)溫度檢測、無線收發(fā)、液晶顯示和上限報(bào)警電路組成無線溫度遙測系統(tǒng)。其中ATmega8單片機(jī)性能穩(wěn)定,處理速度較快。方案二:用STC89C52單片機(jī)作處理器和相關(guān)溫度檢測、無線收發(fā)、液晶顯示和上限報(bào)警電路組成無線溫度遙測系統(tǒng)。STC89C52單片機(jī)8k片內(nèi)程序存儲器(ROM),對于無線溫度遙測系統(tǒng)足夠,而且性能相對也比較穩(wěn)定。ATmega8單片機(jī)較之STC89C52單片機(jī)性能較為優(yōu)越,針對所做無線溫度遙測系統(tǒng)兩者都夠用,不過考慮到經(jīng)濟(jì)方面因素,STC89C52單片機(jī)相比之下比較便宜,經(jīng)
4、濟(jì)適用。所以最終系統(tǒng)方案選擇方案二。2.2系統(tǒng)總體設(shè)計(jì)LCD顯示及上限報(bào)警STC89C52單片機(jī)2STC89C52單片機(jī)1溫度傳感器DS18B20無線收發(fā)芯片2 NRF24L01無線收發(fā)芯片1 NRF24L01系統(tǒng)總設(shè)計(jì)結(jié)構(gòu)圖所設(shè)計(jì)的無線溫度遙測系統(tǒng)主要由以下幾部分組成:溫度測量部分、無線發(fā)射部分、無線接收部分、LCD顯示部分以及操控部分。2.3器件選擇方案2.3.1溫度傳感器方案一:可以采用熱敏電阻之類的器件利用其感溫效應(yīng),再將隨被測溫度變化的電壓或電流采集過來,進(jìn)行A/D轉(zhuǎn)換后,用單片機(jī)進(jìn)行數(shù)據(jù)的處理,在顯示電路上就可以將被測溫度顯示出來,這種設(shè)計(jì)需要用到A/D轉(zhuǎn)換電路,電路比較麻煩。方案
5、二:進(jìn)而考慮到溫度傳感器,在單片機(jī)電路設(shè)計(jì)中,大多都是使用傳感器,所以這比較容易想到,可以采用一只比較常用的溫度傳感器DS81B20,其工作電壓范圍:3.05.5V,測溫范圍:55125,測溫分辨率最高可達(dá)0.062 5,此傳感器可以很容易的直接讀取被測溫度值,進(jìn)行轉(zhuǎn)換,并且其價(jià)格比較便宜,符合設(shè)計(jì)要求。從以上兩種方案,很容易看出,采用方案二,電路比較簡單,軟件設(shè)計(jì)也比較簡單,價(jià)格低廉,要求功能可完全實(shí)現(xiàn),故采用方案二。溫度檢測電路圖2.3.2無線收發(fā)芯片方案一:采用PTR2000,它的優(yōu)點(diǎn)是工作頻率穩(wěn)定可靠、外圍元件少、功耗低。不過它的價(jià)格較為昂貴,相比不適用于實(shí)驗(yàn)的選用。方案二:選用NRF
6、24L01,它采用FSK調(diào)制解調(diào)技術(shù),抗干擾能力強(qiáng),,頻率穩(wěn)定性好,工作電壓在+3V5 V之間。所需外圍元件較少,并可直接接單片機(jī)串口。而且價(jià)格較為便宜,符合要求。相比較之下,NRF24L01可以實(shí)現(xiàn)要求,加之經(jīng)濟(jì),所以選擇NRF24L01更為適合。無線收發(fā)電路圖 NRF24L01收發(fā)模塊2.3.3 LCD顯示屏方案一:采用12864液晶顯示屏,其價(jià)格不高,適用于各類儀器,小型設(shè)備的顯示領(lǐng)域。方案二:采用1602液晶顯示屏,其價(jià)格便宜,是比較常用的工業(yè)字符型液晶。方案三:采用四位一體數(shù)碼管,其價(jià)格便宜,較為常用??紤]到我們需要的用途是溫度的顯示,三者皆可以達(dá)到顯示要求,12864相對而言貴,排
7、除。而數(shù)碼管和1602顯示屏兩者相比基本相當(dāng),價(jià)格相差也不大,考慮到顯示效果和價(jià)格,我們選用了一塊1602顯示屏作為接受端的溫度數(shù)據(jù)顯示;采用了一塊四位共陰數(shù)碼管作為發(fā)送端的溫度顯示。1602液晶顯示電路圖與四位數(shù)碼管(LED1、LED2、LED3、LED4)2.3.4電源設(shè)計(jì)電源需供給STC89C52單片機(jī)、1602液晶顯示器、NRF24L01發(fā)射電路模塊、NRF24L01接收電路模塊所需的不同電壓。電源電路原理圖如下所示,三端穩(wěn)壓芯片L7805CV、ASM111173.3起穩(wěn)壓作用,10uf電解電容和30pf瓷片電容起濾除紋波作用,輸出分別為+5V,+3.3V的電壓供給各所需單元電路。電源
8、設(shè)計(jì)原理圖三、系統(tǒng)軟件設(shè)計(jì)3.1單片機(jī)軟件設(shè)計(jì)單片機(jī)軟件部分主要包括主程序、中斷子程序、測溫子程序、LCD的轉(zhuǎn)換顯示,蜂鳴器報(bào)警子程序,按鍵子程序以及SPI子程序等。為了降低功耗,使用中斷來喚醒單片機(jī)進(jìn)行測溫等工作,因此主程序部分比較簡單,主要負(fù)責(zé)系統(tǒng)各部分初始化和中斷的調(diào)用,在系統(tǒng)初始化完成后就直接進(jìn)入睡眠模式,當(dāng)中斷到來時(shí)單片機(jī)退出睡眠模式,調(diào)用中斷子程序?qū)崿F(xiàn)測溫、轉(zhuǎn)換顯示、溫度數(shù)據(jù)的傳輸?shù)裙δ?。單片機(jī)控制程序流程圖如下圖所示開始溫度采集系統(tǒng)初始化NRF24L01發(fā)射采集的數(shù)據(jù)顯示數(shù)據(jù)并繼續(xù)采集是否發(fā)送成功?YNNRF24L01接收數(shù)據(jù)是否超過上限溫度?顯示數(shù)據(jù)并繼續(xù)采集NY報(bào)警四、系統(tǒng)測
9、試第1次檢測:選擇檢測晚上的室內(nèi)溫度。第2次檢測:選擇檢測中午的室內(nèi)溫度。第3次檢測:用鐵制茶杯盛一杯開水,放在實(shí)驗(yàn)桌上,將溫度計(jì)和系統(tǒng)采集溫度芯片置于距離茶杯一厘米的同一位置,檢測溫度。 實(shí)驗(yàn)數(shù)據(jù)如下表:溫度計(jì)測量溫度()系統(tǒng)測量溫度()上限報(bào)警溫度()是否報(bào)警測量誤差()第1次測量23.223.522是+0.3第2次測量24.024.225否+0.2第3次測量30.430.630是-0.2第4次測量38.037.838否-0.2第5次測量由于條件限制,采用量程范圍為0250的水銀溫度計(jì)作為測量比較儀器,本身測量誤差較大,結(jié)果并不精確。在誤差允許范圍內(nèi),本系統(tǒng)符合設(shè)計(jì)要求。其中,遙測距離可達(dá)
10、五米,達(dá)到發(fā)揮部分遙測距離>5米的要求。五、總結(jié)心得經(jīng)過我們的團(tuán)結(jié)協(xié)作、不懈努力,終于我們的無線溫度遙測系統(tǒng)完成了,這次電子設(shè)計(jì)競賽讓我們在付出的道路上收獲了很多。從選題開始一直到現(xiàn)在,我們感受著比賽帶來的興奮與快樂的同時(shí),也體味到了付出的不易。經(jīng)過這些天的努力,我們也終于將這份艱苦卻又充滿樂趣的事情完成了。本無線溫度遙測系統(tǒng)中,溫度傳感器采用的是DS18B20,開始我們考慮的是PT100這種溫度傳感器件,但是由于DS18B20能夠達(dá)到要求,相對又經(jīng)濟(jì)方便,最終選用了DS18B20。不過對于無線收發(fā)芯片的選用,相比之下就沒有這樣順利了,我們起初的考慮忽視了經(jīng)濟(jì)這一個(gè)重要方面,經(jīng)過查閱資料
11、,開始考慮的是PRT2000,它的性能很不錯(cuò),不過后來才想到?jīng)]有考慮它的價(jià)格,當(dāng)了解到一塊PRT2000無線收發(fā)模塊價(jià)格在一百元左右的時(shí)候,我們意識到這是不可行的,應(yīng)該選用其它的性能接近并且經(jīng)濟(jì)的芯片,經(jīng)過了一番周折,最終確定了NRF401無線收發(fā)模塊。當(dāng)最終完成的時(shí)候,大家很開心的松了一口氣,甚至在實(shí)物測試看到溫度發(fā)送接收成功時(shí),我們興奮地歡呼相擁。作為大三的學(xué)生,第一次參加學(xué)校的電子設(shè)計(jì)競賽,在為比賽努力付出的過程中,我們也有很多收獲。為了把作品做成功,我們查閱資料,檢索文獻(xiàn),其間豐富了我們的知識,增加了些許經(jīng)驗(yàn)。我們常常是三個(gè)人在一起,通過分工協(xié)作和互相幫助,也讓我們又一次體味了團(tuán)隊(duì)合作
12、的重要。在將實(shí)物做出來的過程中,我們感受到原來所有的一切都是那么的不易,都需要我們認(rèn)真的思考,研究。對于電路板的焊接,需要事先進(jìn)行排版布線,然后將相應(yīng)的元件連接起來,焊接中,我們仿佛回到了曾經(jīng),回到了那個(gè)為了心中的象牙塔拼搏奮斗的日子,靜靜地專注于你的目標(biāo),雙手在萬能板上忙忙碌碌,電烙鐵在焊錫絲和元件之間反反復(fù)復(fù)。偶爾會因某一個(gè)元件焊接的不夠理想而眉頭緊蹙,然后錫槍除去焊錫,再重新焊接,只是為了讓電路焊接的更理想;時(shí)而也會因感覺到焊接的電路很不錯(cuò)而不由自主地嘖嘖贊嘆。就這樣我們的實(shí)物電路焊接完成了,接著是程序的編寫,查閱了大量的資料,參考了一些相關(guān)書籍,最終編寫完成后,燒錄到STC89C52單
13、片機(jī)中,連接電路測試。起初的測試,沒有達(dá)到要求,接下來便是對程序的再編寫,再調(diào)試,就這樣反反復(fù)復(fù),最終實(shí)現(xiàn)了。盡管其間是枯燥的難熬的,不過,在測試成功,數(shù)據(jù)顯示出來的那一瞬,心中的快樂難以言表,那種感覺多么的讓人享受。當(dāng)我們聚在一起專心為之而戰(zhàn)斗的時(shí)候,專心的投入進(jìn)去后,終于在你迫切地需要緩一下勁而暫停了一下的時(shí)候,你會恍然驚嘆:大家居然忙了這么久!是的,這是專心,這是態(tài)度,人們說態(tài)度決定高度!興奮著便又埋首于當(dāng)前的工作之中了。最終,我們終于可以開心地笑著說我們可以稍事休息一會兒了,此次的任務(wù)完成了。我們默契的在心中共銘:不能放棄!這不僅僅是因?yàn)閳?zhí)著,也許還因?yàn)槲覀円羊T虎難下,畢竟付出了很多,
14、付出了好久。為著它到了幾近癡狂的程度,不只是對它所擁有著的濃厚興趣,更是為了求得一個(gè)交待。我們心中有著一個(gè)堅(jiān)定的信念:我們要彼此并肩齊首,走更遠(yuǎn)的路。參考文獻(xiàn):郭天祥 新概念51單片機(jī)C語言教程譚浩強(qiáng) C程序設(shè)計(jì)(第三版)李歲勞 楊鵬翔 朱新穎 基于C8051單片機(jī)的多路溫度無線遙測系統(tǒng)儀器儀表:儀器儀表名稱型號生產(chǎn)公司名稱三位半數(shù)字萬用表MY61蘇山儀器儀表公司溫度計(jì)MC不詳(從電子系實(shí)驗(yàn)室借用)附錄總電路設(shè)計(jì)原理圖 基于單片機(jī)的溫度采集與無線發(fā)送電路基于單片機(jī)的無線接收及1602液晶顯示電路程序代碼清單:發(fā)射Allhead.h/*/#ifndef _ALLHEAD_H_#define _A
15、LLHEAD_H_/*/#include"pubile.h"#include"Delay.h"#include"NRF24L01.h"#include"DS18N02.h"/*/#endifDelay.h/*/#ifndef _DELAY_H_#define _DELAY_H_/*/void Delay(unint t);void DDelay(unint t);/*/#endifDS18B20.h/*/#ifndef _DS18B20_H_#define _DS18B20_H_/*/extern void Res
16、et();extern void WriteChar(unchar dat);extern unint ReadChar();extern unint ReadTemperature();/*/#endifNRF24L01.h/*/#ifndef _NRF24L01_H_#define _NRF24L01_H_/*/#define TX_ADDR_WITDH 5/發(fā)送地址寬度設(shè)置為5個(gè)字節(jié)#define RX_ADDR_WITDH 5/接收地址寬度設(shè)置為5個(gè)字節(jié)#define TX_DATA_WITDH 10/發(fā)送數(shù)據(jù)寬度1個(gè)字節(jié)#define RX_DATA_WITDH 10/接收數(shù)據(jù)寬度1
17、個(gè)字節(jié)/*命令寄存器*/#define R_REGISTER 0x00/讀取配置寄存器#define W_REGISTER 0x20/寫配置寄存器#define R_RX_PAYLOAD 0x61/讀取RX有效數(shù)據(jù)#define W_TX_PAYLOAD 0xa0/寫TX有效數(shù)據(jù)#define FLUSH_TX 0xe1/清除TXFIFO寄存器#define FLUSH_RX 0xe2/清除RXFIFO寄存器#define REUSE_TX_PL 0xe3/重新使用上一包有效數(shù)據(jù)#define NOP 0xff/空操作/*寄存器地址*/#define CONFIG 0x00/配置寄存器#def
18、ine EN_AA 0x01/使能自動應(yīng)答#define EN_RXADDR 0x02/接收通道使能0-5個(gè)通道#define SETUP_AW 0x03/設(shè)置數(shù)據(jù)通道地址寬度3-5#define SETUP_RETR 0x04/建立自動重發(fā)#define RF_CH 0x05/射頻通道設(shè)置#define RF_SETUP 0x06/射頻寄存器#define STATUS 0x07/狀態(tài)寄存器#define OBSERVE_TX 0x08/發(fā)送檢測寄存器#define CD 0x09/載波#define RX_ADDR_P0 0x0a/數(shù)據(jù)通道0接收地址#define RX_ADDR_P1 0
19、x0b/數(shù)據(jù)通道1接收地址#define RX_ADDR_P2 0x0c/數(shù)據(jù)通道2接收地址#define RX_ADDR_P3 0x0d/數(shù)據(jù)通道3接收地址#define RX_ADDR_P4 0x0e/數(shù)據(jù)通道4接收地址#define RX_ADDR_P5 0x0f/數(shù)據(jù)通道5接收地址#define TX_ADDR 0x10/發(fā)送地址#define RX_PW_P0 0x11/P0通道數(shù)據(jù)寬度設(shè)置#define RX_PW_P1 0x12/P1通道數(shù)據(jù)寬度設(shè)置#define RX_PW_P2 0x13/P2通道數(shù)據(jù)寬度設(shè)置#define RX_PW_P3 0x14/P3通道數(shù)據(jù)寬度設(shè)置#d
20、efine RX_PW_P4 0x15/P4通道數(shù)據(jù)寬度設(shè)置#define RX_PW_P5 0x16/P5通道數(shù)據(jù)寬度設(shè)置#define FIFO_STATUS 0x17/FIFO狀態(tài)寄存器/*相關(guān)函數(shù)聲明*/unchar NRFACK();unchar NRFSPI(unchar date);unchar NRFReadReg(unchar RegAddr);unchar NRFWriteReg(unchar RegAddr,unchar date);unchar NRFReadRxDate(unchar RegAddr,unchar *RxDate,unchar DateLen);unc
21、har NRFWriteTxDate(unchar RegAddr,unchar *TxDate,unchar DateLen);unchar NRFRevDate(unchar *RevDate);void NRFSetTxMode(unchar *TxDate);void NRF24L01Int();void NRFSetRXMode();unchar CheckACK();extern unchar bdata sta;/*/#endifPubile.h/*/#ifndef _PUBILE_H_#define _PUBILE_H_/*/#define unchar unsigned ch
22、ar#define unint unsigned int/*/#endifDelay.c/*/#include"reg52.h"#include"Allhead.h"/*延時(shí)函數(shù)*/void Delay(unint t) unint x,y; for(x=t;x>0;x-) for(y=110;y>0;y-);/* DS18B20專用延時(shí)子函數(shù)*/void DDelay(unint t) unint n;n=0; while(n<t) n+; DS18B20.c/*/#include"reg52.h"#include
23、"allhead.h"sbit DQ=P22;/數(shù)據(jù)端unint tempL,tempH;/* DS18B20復(fù)位函數(shù)*/void Reset() DQ=1;DDelay(8); DQ=0; DDelay(85); DQ=1;DDelay(14); /* DS18B20寫一個(gè)字節(jié)函數(shù)*/void WriteChar(unchar dat) unint i; for(i=8;i>0;i-) DQ=0; DQ=dat&0x01;DDelay(5);DQ=1;dat>>=1; DDelay(4); /* DS18B20讀一個(gè)字節(jié)函數(shù)*/unint Rea
24、dChar() unchar i,dat=0;for (i=8;i>0;i-) DQ=1; DDelay(1);DQ=0; dat>>=1;DQ=1; if(DQ) dat=dat|0x80; DDelay(4); return(dat); /* /*SPI時(shí)序函數(shù)*/unchar NRFSPI(unchar date) unchar i; for(i=0;i<8;i+) / 循環(huán)8次 if(date&0x80) MOSI=1; else MOSI=0; / byte最高位輸出到MOSI date<<=1; / 低一位移位到最高位 SCLK=1; i
25、f(MISO) / 拉高SCK,nRF24L01從MOSI讀入1位數(shù)據(jù),同時(shí)從MISO輸出1位數(shù)據(jù) date|=0x01; / 讀MISO到byte最低位 SCLK=0; / SCK置低 return(date); / 返回讀出的一字節(jié)/*NRF24L01初始化函數(shù)*/void NRF24L01Int()Delay(2);/讓系統(tǒng)什么都不干CE=0; /待機(jī)模式1 CSN=1; SCLK=0;IRQ=1; /*SPI讀寄存器一字節(jié)函數(shù)*/unchar NRFReadReg(unchar RegAddr) unchar BackDate; CSN=0;/啟動時(shí)序 NRFSPI(RegAddr);
26、/寫寄存器地址 BackDate=NRFSPI(0x00);/寫入讀寄存器指令 CSN=1; return(BackDate); /返回狀態(tài)/*SPI寫寄存器一字節(jié)函數(shù)*/unchar NRFWriteReg(unchar RegAddr,unchar date) unchar BackDate; CSN=0;/啟動時(shí)序 BackDate=NRFSPI(RegAddr);/寫入地址 NRFSPI(date);/寫入值 CSN=1; return(BackDate);/*SPI讀取RXFIFO寄存器的值*/unchar NRFReadRxDate(unchar RegAddr,unchar *R
27、xDate,unchar DateLen) /寄存器地址/讀取數(shù)據(jù)存放變量/讀取數(shù)據(jù)長度/用于接收 unchar BackDate,i;CSN=0;/啟動時(shí)序BackDate=NRFSPI(RegAddr);/寫入要讀取的寄存器地址for(i=0;i<DateLen;i+) /讀取數(shù)據(jù) RxDatei=NRFSPI(0); CSN=1; return(BackDate); /*SPI寫入TXFIFO寄存器的值*/unchar NRFWriteTxDate(unchar RegAddr,unchar *TxDate,unchar DateLen) /寄存器地址/寫入數(shù)據(jù)存放變量/讀取數(shù)據(jù)長
28、度/用于發(fā)送 unchar BackDate,i; CSN=0; BackDate=NRFSPI(RegAddr);/寫入要寫入寄存器的地址 for(i=0;i<DateLen;i+)/寫入數(shù)據(jù) NRFSPI(*TxDate+); CSN=1; return(BackDate);/*NRF設(shè)置為發(fā)送模式并發(fā)送數(shù)據(jù)*/void NRFSetTxMode(unchar *TxDate)/發(fā)送模式 CE=0; NRFWriteTxDate(W_REGISTER+TX_ADDR,TxAddr,TX_ADDR_WITDH);/寫寄存器指令+接收地址使能指令+接收地址+地址寬度NRFWriteTxD
29、ate(W_REGISTER+RX_ADDR_P0,TxAddr,TX_ADDR_WITDH);/為了應(yīng)答接收設(shè)備,接收通道0地址和發(fā)送地址相同NRFWriteTxDate(W_TX_PAYLOAD,TxDate,TX_DATA_WITDH);/寫入數(shù)據(jù) /*下面有關(guān)寄存器配置*/ NRFWriteReg(W_REGISTER+EN_AA,0x01); / 使能接收通道0自動應(yīng)答 NRFWriteReg(W_REGISTER+EN_RXADDR,0x01); / 使能接收通道0 NRFWriteReg(W_REGISTER+SETUP_RETR,0x0a); / 自動重發(fā)延時(shí)等待250us+8
30、6us,自動重發(fā)10次 NRFWriteReg(W_REGISTER+RF_CH,0x40); / 選擇射頻通道0x40 NRFWriteReg(W_REGISTER+RF_SETUP,0x07); / 數(shù)據(jù)傳輸率1Mbps,發(fā)射功率0dBm,低噪聲放大器增益NRFWriteReg(W_REGISTER+CONFIG,0x0e); / CRC使能,16位CRC校驗(yàn),上電CE=1;Delay(5);/保持10us秒以上/*NRF設(shè)置為接收模式并接收數(shù)據(jù)*/主要接收模式void NRFSetRXMode()CE=0; NRFWriteTxDate(W_REGISTER+RX_ADDR_P0,TxA
31、ddr,TX_ADDR_WITDH); / 接收設(shè)備接收通道0使用和發(fā)送設(shè)備相同的發(fā)送地址 NRFWriteReg(W_REGISTER+EN_AA,0x01); / 使能接收通道0自動應(yīng)答 NRFWriteReg(W_REGISTER+EN_RXADDR,0x01); / 使能接收通道0 NRFWriteReg(W_REGISTER+RF_CH,0x40); / 選擇射頻通道0x40 NRFWriteReg(W_REGISTER+RX_PW_P0,TX_DATA_WITDH); / 接收通道0選擇和發(fā)送通道相同有效數(shù)據(jù)寬度 NRFWriteReg(W_REGISTER+RF_SETUP,0x
32、07); / 數(shù)據(jù)傳輸率1Mbps,發(fā)射功率0dBm,低噪聲放大器增益*/ NRFWriteReg(W_REGISTER+CONFIG,0x0f); / CRC使能,16位CRC校驗(yàn),上電,接收模式 CE = 1;Delay(5);/保持10us秒以上 /*檢測應(yīng)答信號*/unchar CheckACK() /用于發(fā)射sta=NRFReadReg(R_REGISTER+STATUS); / 返回狀態(tài)寄存器if(TX_DS|MAX_RT) /發(fā)送完畢中斷 NRFWriteReg(W_REGISTER+STATUS,0xff); / 清除TX_DS或MAX_RT中斷標(biāo)志 CSN=0; NRFSPI
33、(FLUSH_TX);/用于清空FIFO !關(guān)鍵!不然會出現(xiàn)意想不到的后果!大家記?。?CSN=1; return(0);else return(1);/*判斷是否接收收到數(shù)據(jù),接到就從RX取出*/用于接收模式unchar NRFRevDate(unchar *RevDate) unchar RevFlags=0; sta=NRFReadReg(R_REGISTER+STATUS);/發(fā)送數(shù)據(jù)后讀取狀態(tài)寄存器 if(RX_DR)/ 判斷是否接收到數(shù)據(jù) CE=0; /SPI使能NRFReadRxDate(R_RX_PAYLOAD,RevDate,RX_DATA_WITDH);/ 從RXFIFO讀
34、取數(shù)據(jù)RevFlags=1; /讀取數(shù)據(jù)完成標(biāo)志 NRFWriteReg(W_REGISTER+STATUS,0xff); /接收到數(shù)據(jù)后RX_DR,TX_DS,MAX_PT都置高為1,通過寫1來清楚中斷標(biāo) return(RevFlags);void main()unint i; unint ReadTempDate;/讀取溫度 char TxDate6; NRF24L01Int(); while(1) ReadTempDate=ReadTemperature(); TxDate0=ReadTempDate/100+'0' TxDate1=ReadTempDate%100/10
35、+'0' TxDate2='.' TxDate3=ReadTempDate%100%10+'0' TxDate4=ReadTempDate/100; TxDate5=ReadTempDate%100/10; NRFSetTxMode(TxDate);/發(fā)送溫度 while(CheckACK();/檢測是否發(fā)送完畢 for(i=70;i>0;i-) dis_temp(ReadTemperature();接收Allhead.h/*/#ifndef _ALLHEAD_H_#define _ALLHEAD_H_/*/#include"pu
36、bile.h"#include"DELAY.h"#include"LCD1602.h"#include"NRF24L01.h" /*/#endifLCD1602.h/*/#ifndef _LCD1602_H_#define _LCD1602_H_/*/extern void LCDWriteCmd(unchar cmd);void LCDWriteDate(unchar date);void LcdShow(unchar x,unchar y,unchar *str);void SetXY(unchar x,unchar y
37、);extern void LCD1602Int();void xianshi(unchar add,unint date);/*/#endifNRF24L01.h/*/#ifndef _NRF24L01_H_#define _NRF24L01_H_/*/#define TX_ADDR_WITDH 5/發(fā)送地址寬度設(shè)置為5個(gè)字節(jié)#define RX_ADDR_WITDH 5/接收地址寬度設(shè)置為5個(gè)字節(jié)#define TX_DATA_WITDH 10/發(fā)送數(shù)據(jù)寬度1個(gè)字節(jié)#define RX_DATA_WITDH 10/接收數(shù)據(jù)寬度1個(gè)字節(jié)/*命令寄存器*/#define R_REGISTER
38、0x00/讀取配置寄存器#define W_REGISTER 0x20/寫配置寄存器#define R_RX_PAYLOAD 0x61/讀取RX有效數(shù)據(jù)#define W_TX_PAYLOAD 0xa0/寫TX有效數(shù)據(jù)#define FLUSH_TX 0xe1/清除TXFIFO寄存器#define FLUSH_RX 0xe2/清除RXFIFO寄存器#define REUSE_TX_PL 0xe3/重新使用上一包有效數(shù)據(jù)#define NOP 0xff/空操作/*寄存器地址*/#define CONFIG 0x00/配置寄存器#define EN_AA 0x01/使能自動應(yīng)答#define EN
39、_RXADDR 0x02/接收通道使能0-5個(gè)通道#define SETUP_AW 0x03/設(shè)置數(shù)據(jù)通道地址寬度3-5#define SETUP_RETR 0x04/建立自動重發(fā)#define RF_CH 0x05/射頻通道設(shè)置#define RF_SETUP 0x06/射頻寄存器#define STATUS 0x07/狀態(tài)寄存器#define OBSERVE_TX 0x08/發(fā)送檢測寄存器#define CD 0x09/載波#define RX_ADDR_P0 0x0a/數(shù)據(jù)通道0接收地址#define RX_ADDR_P1 0x0b/數(shù)據(jù)通道1接收地址#define RX_ADDR_P2
40、 0x0c/數(shù)據(jù)通道2接收地址#define RX_ADDR_P3 0x0d/數(shù)據(jù)通道3接收地址#define RX_ADDR_P4 0x0e/數(shù)據(jù)通道4接收地址#define RX_ADDR_P5 0x0f/數(shù)據(jù)通道5接收地址#define TX_ADDR 0x10/發(fā)送地址#define RX_PW_P0 0x11/P0通道數(shù)據(jù)寬度設(shè)置#define RX_PW_P1 0x12/P1通道數(shù)據(jù)寬度設(shè)置#define RX_PW_P2 0x13/P2通道數(shù)據(jù)寬度設(shè)置#define RX_PW_P3 0x14/P3通道數(shù)據(jù)寬度設(shè)置#define RX_PW_P4 0x15/P4通道數(shù)據(jù)寬度設(shè)置#
41、define RX_PW_P5 0x16/P5通道數(shù)據(jù)寬度設(shè)置#define FIFO_STATUS 0x17/FIFO狀態(tài)寄存器/*相關(guān)函數(shù)聲明*/unchar NRFACK();unchar NRFSPI(unchar date);unchar NRFReadReg(unchar RegAddr);unchar NRFWriteReg(unchar RegAddr,unchar date);unchar NRFReadRxDate(unchar RegAddr,unchar *RxDate,unchar DateLen);unchar NRFWriteTxDate(unchar RegAd
42、dr,unchar *TxDate,unchar DateLen);void NRFSetTxMode(unchar *TxDate);void NRF24L01Int();void NRFSetRXMode();void CheckACK();void keyscan();extern void GetDate();extern unchar RevTempDate7;/*/#endifPubile.h/*/#ifndef _PUBILE_H_#define _PUBILE_H_/*/#define unchar unsigned char#define unint unsigned int/*/#endifDelay.c/*/#include"reg52.h"#include"Allhead.h"/*延時(shí)函數(shù)*/void LCDDelay(unchar t) unchar x,y; for(x=t;x>0;x-) for(y=110;y>0;y-);/*延時(shí)函數(shù)*/void NRFDelay(unin
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 45782-2025生物技術(shù)生命科學(xué)中數(shù)據(jù)格式和描述的要求
- GB/T 21964-2025農(nóng)業(yè)機(jī)械修理安全規(guī)范
- 社會服務(wù)項(xiàng)目管理制度
- 維修場地衛(wèi)生管理制度
- 網(wǎng)絡(luò)布線質(zhì)量管理制度
- 社區(qū)車輛動態(tài)管理制度
- 社保大廳日常管理制度
- 管道運(yùn)輸中心管理制度
- ktv發(fā)票管理制度
- 小場所消防管理制度
- 降低制粉單耗(集控五值)-2
- 電力分包項(xiàng)目合同范本
- 2024年急危重癥患者鼻空腸營養(yǎng)管管理專家共識
- 2024年法律職業(yè)資格考試(試卷一)客觀題試卷與參考答案
- 國家開放大學(xué)《Web開發(fā)基礎(chǔ)》形考任務(wù)實(shí)驗(yàn)1-5參考答案
- 山東師范大學(xué)學(xué)校管理學(xué)期末復(fù)習(xí)題
- 《進(jìn)一步規(guī)范管理燃煤自備電廠工作方案》發(fā)改體改〔2021〕1624號
- LS-DYNA:LS-DYNA材料模型詳解.Tex.header
- 大學(xué)生體質(zhì)健康標(biāo)準(zhǔn)與鍛煉方法(吉林聯(lián)盟)智慧樹知到期末考試答案章節(jié)答案2024年東北師范大學(xué)
- 新疆警察學(xué)院面試問題及答案
- 小學(xué)三到六年級全冊單詞默寫(素材)-2023-2024學(xué)年譯林版(三起)小學(xué)英語
評論
0/150
提交評論