




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
基于51單片機和NRF24L01的無線溫度監(jiān)控一丶實現(xiàn)功能:以51單片機為核心實現(xiàn)智能化遠(yuǎn)程無線溫度監(jiān)控。利用18B20溫度傳感器獲取溫度信號,將需要測量的溫度信號自動轉(zhuǎn)化為數(shù)字信號,通過無線模塊NRF24L01一對一傳送將數(shù)據(jù)傳送到接收機,最終單片機將信號轉(zhuǎn)換成LCD可以識別的信息顯示輸出。二丶所需原件:51單片機*2DS18B20*1(溫度測量范圍為-55~+125^C)12M晶振*222uf電容*25V降壓至3.3V降壓模塊*2NRF24101無線模塊*21602液晶顯示屏*1按鍵*3蜂鳴器*1發(fā)光二極管*1排阻10K*9腳*2四丶NRF12401JI介紹:1、調(diào)制,硬件集成OSI鏈路層;2、具有自動應(yīng)答和自動再發(fā)射功能;3、片內(nèi)自動生成報頭和CRC校驗碼;4、數(shù)據(jù)傳輸率為l
Mb/s或2Mb/s;5、SPI速率為0
Mb/s~10
Mb/s;6、125個頻道與其他系列射頻器件相兼容;引腳4
mm×4
mm封裝;供電電壓為~;封裝引腳介紹:CE:使能發(fā)射或接收;CSN,SCK,MOSI,:SPI引腳端,微處理器可通過此引腳配置::中斷標(biāo)志位;:電源輸入端;VSS:電源地;XC2,XC1:晶體振蕩器引腳;:為功率放大器供電,輸出為;:天線接口;:參考電流輸入;工作模式:工作原理:發(fā)射數(shù)據(jù)時,首先將配置為發(fā)射模式:接著把接收節(jié)點地址和有效數(shù)據(jù)按照時序由SPI口寫入緩存區(qū),必須在CSN為低時連續(xù)寫入,而在發(fā)射時寫入一次即可,然后CE置為高電平并保持至少10μs130μs后發(fā)射數(shù)據(jù);那么地址應(yīng)該與接收節(jié)點地址一致)功,置高,同時從TX
FIFO中清除;若未收到應(yīng)答,則自動重新發(fā)射該數(shù)據(jù)(自動重發(fā)已開啟),若重發(fā)次數(shù)(ARC)達到上限,置高,中數(shù)據(jù)保留以便在次重發(fā)或置高時,使IRQ變低,產(chǎn)生中斷,通知MCU。最后發(fā)射成功時,若CE為低則進入空閑模式1;若發(fā)送堆棧中有數(shù)據(jù)且CE為高,則進入下一次發(fā)射;若發(fā)送堆棧中無數(shù)據(jù)且CE為高,則進入空閑模式2。接收數(shù)據(jù)時,首先將配置為接收模式,接著延遲130μs進入接收狀態(tài)等待數(shù)據(jù)的到來。當(dāng)接收方檢測到有效的地址和CRC中,同時中斷標(biāo)志位RX_DR置高,變低,產(chǎn)生中斷,通知MCU去取數(shù)據(jù)。若此時自動應(yīng)答開啟,接收方則同時進入發(fā)射狀態(tài)回傳應(yīng)答信號。最后接收成功時,若CE變低,則進入空閑模式1。在寫寄存器之前一定要進入待機模式或掉電模式。SPI配置:SPI指令設(shè)置用于SPI接口的常用命令見下表。當(dāng)CSN為低時,SPI接口開始等待一條指令,任何一條新指令均由CSN的由高到低的轉(zhuǎn)換開始寄存器:讀操作寫操作五丶溫度監(jiān)測:溫度檢測模塊軟件設(shè)計DS18B20的測溫原理遵循嚴(yán)格的單總線協(xié)議,以確保通信數(shù)據(jù)的準(zhǔn)確性,單片機通過時序來寫入和讀出DS18B20中的數(shù)據(jù),包括初始化、讀l、讀0,寫1、寫0等操作。傳感器復(fù)位后,接收應(yīng)答信號,跳過讀ROM中序列號后,啟動溫度轉(zhuǎn)換,等待溫度轉(zhuǎn)換完畢后,保存數(shù)據(jù)。如此反復(fù),完成所有操作。六丶無線流程:發(fā)射:首先進行初始化操作,初始化包括設(shè)置單片機I/O和SPI相關(guān)寄存器兩部分其可以和nRF24L01通信。通過SPI總線配置射頻芯片使其進入正確的工作模式。發(fā)射數(shù)據(jù)時,首先將nRF24L01配置為發(fā)射模式。接著把發(fā)送端待發(fā)射數(shù)據(jù)的目標(biāo)地址TX—ADDR和數(shù)據(jù)TX—PLD寫入nRF24L01緩沖區(qū),延時后發(fā)射數(shù)據(jù),其流程圖如圖4.2所示接收:待數(shù)據(jù)的到來。當(dāng)接收方檢測到有效地址和CRC時,就將數(shù)據(jù)包儲存在接收堆棧中,同時狀態(tài)寄存器中的中斷標(biāo)志位RX—置高,產(chǎn)生中斷使引腳變?yōu)榈碗娖?,以便通知MCU去取數(shù)據(jù),其流程圖如圖4.3所示。七丶軟件總體部分:發(fā)送部分:發(fā)送部分的一個循環(huán)的總體思路是這樣的先初始化DS18B20,從DS18B20讀出溫度(DS18B20采用默認(rèn)的12位精度),將得到的溫度值的反碼轉(zhuǎn)化成十制,取溫度數(shù)組的高兩位(即整數(shù)部分)寫入發(fā)送數(shù)據(jù)數(shù)組,然后初始化nRF24L01,將溫度發(fā)送,其流程圖如圖4.5所示接收部分:接收部分的總體思路是這樣的,首先還是初始化,然后進入大循環(huán)判斷狀態(tài)寄存器是否有接收中斷。如果有就從讀入二進制數(shù)據(jù),然后將數(shù)據(jù)轉(zhuǎn)換成十進制在數(shù)碼管上顯示出來,其流程圖如圖4.6所示。八:電路圖:發(fā)射機:接收機:九丶程序清單:接收機:#include<reg51.h>#include<intrins.h>#defineucharunsignedchar#defineuintunsignedint#defineREAD_REG0x00//Definereadcommandtoregister#defineWRITE_REG0x20//Definewritecommandtoregister#defineRD_RX_PLOAD0x61//DefineRXpayloadregisteraddress#defineWR_TX_PLOAD0xA0//DefineTXpayloadregisteraddress#defineFLUSH_TX0xE1//DefineflushTXregistercommand#defineFLUSH_RX0xE2//DefineflushRXregistercommand#defineREUSE_TX_PL0xE3//DefinereuseTXpayloadregistercommand#defineNOP0xFF//DefineNoOperation,mightbeusedtoreadstatusregister#defineCONFIG0x00//'Config'registeraddress#defineEN_AA0x01//'EnableAutoAcknowledgment'registeraddress#defineEN_RXADDR0x02//'EnabledRXaddresses'registeraddress#defineSETUP_AW0x03//'Setupaddresswidth'registeraddress#defineSETUP_RETR0x04//'SetupAuto.Retrans'registeraddress#defineRF_CH0x05//'RFchannel'registeraddress#defineRF_SETUP0x06//'RFsetup'registeraddress#defineSTATUS0x07//'Status'registeraddress#defineOBSERVE_TX0x08//'ObserveTX'registeraddress#defineCD0x09//'CarrierDetect'registeraddress#defineRX_ADDR_P00x0A//'RXaddresspipe0'registeraddress#defineRX_ADDR_P10x0B//'RXaddresspipe1'registeraddress#defineRX_ADDR_P20x0C//'RXaddresspipe2'registeraddress#defineRX_ADDR_P30x0D//'RXaddresspipe3'registeraddress#defineRX_ADDR_P40x0E//'RXaddresspipe4'registeraddress#defineRX_ADDR_P50x0F//'RXaddresspipe5'registeraddress#defineTX_ADDR0x10//'TXaddress'registeraddress#defineRX_PW_P00x11//'RXpayloadwidth,pipe0'registeraddress#defineRX_PW_P10x12//'RXpayloadwidth,pipe1'registeraddress#defineRX_PW_P20x13//'RXpayloadwidth,pipe2'registeraddress#defineRX_PW_P30x14//'RXpayloadwidth,pipe3'registeraddress#defineRX_PW_P40x15//'RXpayloadwidth,pipe4'registeraddress#defineRX_PW_P50x16//'RXpayloadwidth,pipe5'registeraddress#defineFIFO_STATUS0x17//'FIFOStatusRegister'registeraddress#defineTX_ADR_WIDTH5#defineRX_ADR_WIDTH5#defineTX_PLOAD_WIDTH4#defineTX_PLOAD_WIDTH4floatf_temp;uinttemp;ucharTX_ADDRESS[5]={0x34,0x43,0x19,0x91,0x09};ucharbdatasta;sbitCE=P2^7;sbitCSN=P2^2;sbitMOSI=P2^3;sbitMISO=P2^5;sbitSCK=P2^6;sbitIRQ=P2^4;sbitds=P3^7;sbitled0=P1^0;sbitRX_DR=sta^6;sbitTX_DS=sta^5;sbitMAX_RT=sta^4;voidinit_io(void){CE=0;CSN=1;SCK=0;IRQ=1;}ucharSPI_RW(ucharbyte){uchari;for(i=0;i<8;i++){ MOSI=(byte&0x80); byte=(byte<<1); SCK=1; byte|=MISO; SCK=0;}return(byte);}ucharSPI_RW_reg(ucharreg,ucharvalue){ucharstatus;CSN=0;status=SPI_RW(reg);SPI_RW(value);CSN=1;return(status);}ucharSPI_read(ucharreg){ucharreg_val;CSN=0;SPI_RW(reg);reg_val=SPI_RW(0);CSN=1;return(reg_val);}ucharSPI_read_pload(ucharreg,uchar*pBuf,ucharbytes){ucharstatus,i;CSN=0;status=SPI_RW(reg);for(i=0;i<bytes;i++) pBuf[i]=SPI_RW(0);CSN=1;return(status);}ucharSPI_write_pload(ucharreg,uchar*pBuf,ucharbytes){ucharstatus,i;CSN=0;status=SPI_RW(reg);for(i=0;i<bytes;i++) SPI_RW(pBuf[i]);CSN=1;return(status);}voidTX_mode(uchar*tx_buf){ CE=0;SPI_write_pload(WRITE_REG+TX_ADDR,TX_ADDRESS,TX_ADR_WIDTH);SPI_write_pload(WRITE_REG+RX_ADDR_P0,TX_ADDRESS,TX_ADR_WIDTH);SPI_write_pload(WR_TX_PLOAD,tx_buf,TX_PLOAD_WIDTH);SPI_RW_reg(WRITE_REG+EN_AA,0X01);SPI_RW_reg(WRITE_REG+EN_RXADDR,0X01);SPI_RW_reg(WRITE_REG+SETUP_RETR,0X1F);SPI_RW_reg(WRITE_REG+RF_CH,40);SPI_RW_reg(WRITE_REG+RF_SETUP,0X0F);SPI_RW_reg(WRITE_REG+CONFIG,0X0e);CE=1; //CE置高,使能發(fā)送}ucharCheck_ACK(){//while(IRQ//CE=0;sta=SPI_read(STATUS);if(TX_DS||MAX_RT){SPI_RW_reg(WRITE_REG+STATUS,0xff);CSN=0;SPI_RW(FLUSH_TX);CSN=1;return(1);}elsereturn(0);//CE=1;IRQ=1;//if(TX_DS)//return(0x00);//else//return(0xff);}/*ucharCheckACK(){sta=NRFReadReg(READ_REG+STATUS);if(TX_DS||MAX_RT){NRFWriteReg(WRITE_REG+STATUS,0xff);CSN=0;NRFSPI(FLUSH_TX);CSN=1;return(0);}elsereturn(1);}*/voiddelayus(uintz,uintx){uinti,j;for(i=z;i>0;i--) for(j=x;j>0;j--);}voiddreset(void){uinti;//ds=1;//_nop_();ds=0; delayus(7,15);ds=1;i=4;while(i>0)i--;delayus(1,100);}bittempreadbit(void){uinti;bitdat;//ds=1;i++;ds=0;_nop_();ds=1;i++;i++;dat=ds;i=8;while(i>0) i--;return(dat);}uchartempread(void){uchari,j,dat;dat=0;for(i=0;i<8;i++){ j=tempreadbit(); dat=(j<<7)|(dat>>1);}return(dat);}voidtempwritebyte(uchardat){uinti;ucharj;bittestb;for(j=0;j<8;j++){ testb=dat&0x01; dat=dat>>1;if(testb){ ds=0; i++;i++; ds=1; i=8; while(i>0) i--;}else{ ds=0;//i=8;//while(i>0)i--;delayus(1,5); ds=1; i++;i++;}}}voidtempchange(void){dreset();delayus(1,113);tempwritebyte(0xcc);tempwritebyte(0x44);}uintget_temp(){uchara,b;dreset();delayus(1,113);tempwritebyte(0xcc);tempwritebyte(0xbe);a=tempread();b=tempread();temp=b;temp<<=8;temp=temp|a;f_temp=temp*0.0625;temp=f_temp*10+0.5;//f_temp=f_temp+0.05;returntemp;}voidmain(){uchartx_buf[4]={0};init_io();while(1){ tempchange(); delayus(1,113); get_temp(); tx_buf[0]=(uchar)(temp/100); tx_buf[1]=(uchar)(((temp-500)%100)/10); tx_buf[2]='.'; tx_buf[3]=(uchar)((temp%100)%10); TX_mode(tx_buf);}}接收機:#include<reg52.h>//#include<intrins.h>#defineucharunsignedchar#defineuintunsignedint#defineREAD_REG0x00//Definereadcommandtoregister#defineWRITE_REG0x20//Definewritecommandtoregister#defineRD_RX_PLOAD0x61//DefineRXpayloadregisteraddress#defineWR_TX_PLOAD0xA0//DefineTXpayloadregisteraddress#defineFLUSH_TX0xE1//DefineflushTXregistercommand#defineFLUSH_RX0xE2//DefineflushRXregistercommand#defineREUSE_TX_PL0xE3//DefinereuseTXpayloadregistercommand#defineNOP0xFF//DefineNoOperation,mightbeusedtoreadstatusregister//SPI(nRF24L01)registers(addresses)#defineCONFIG0x00//'Config'registeraddress#defineEN_AA0x01//'EnableAutoAcknowledgment'registeraddress#defineEN_RXADDR0x02//'EnabledRXaddresses'registeraddress#defineSETUP_AW0x03//'Setupaddresswidth'registeraddress#defineSETUP_RETR0x04//'SetupAuto.Retrans'registeraddress#defineRF_CH0x05//'RFchannel'registeraddress#defineRF_SETUP0x06//'RFsetup'registeraddress#defineSTATUS0x07//'Status'registeraddress#defineOBSERVE_TX0x08//'ObserveTX'registeraddress#defineCD0x09//'CarrierDetect'registeraddress#defineRX_ADDR_P00x0A//'RXaddresspipe0'registeraddress#defineRX_ADDR_P10x0B//'RXaddresspipe1'registeraddress#defineRX_ADDR_P20x0C//'RXaddresspipe2'registeraddress#defineRX_ADDR_P30x0D//'RXaddresspipe3'registeraddress#defineRX_ADDR_P40x0E//'RXaddresspipe4'registeraddress#defineRX_ADDR_P50x0F//'RXaddresspipe5'registeraddress#defineTX_ADDR0x10//'TXaddress'registeraddress#defineRX_PW_P00x11//'RXpayloadwidth,pipe0'registeraddress#defineRX_PW_P10x12//'RXpayloadwidth,pipe1'registeraddress#defineRX_PW_P20x13//'RXpayloadwidth,pipe2'registeraddress#defineRX_PW_P30x14//'RXpayloadwidth,pipe3'registeraddress#defineRX_PW_P40x15//'RXpayloadwidth,pipe4'registeraddress#defineRX_PW_P50x16//'RXpayloadwidth,pipe5'registeraddress#defineFIFO_STATUS0x17//'FIFOStatusRegister'registeraddress#defineTX_ADR_WIDTH5#defineRX_ADR_WIDTH5#defineTX_PLOAD_WIDTH4#defineRX_PLOAD_WIDTH4ucharidatarxbuf1[2]={0};//ucharidataaa[20]={0};ucharRX_ADDRES[5]={0x34,0x43,0x19,0x91,0x09};ucharcodetable[]="0123456789";ucharbdatasta;sbitRX_DR=sta^6;sbitTX_DS=sta^5;sbitMAX_RT=sta^4;sbitlcd_rs=P1^0;sbitlcd_rw=P1^1;sbitlcd_en=P1^2;sbitCE=P2^7;sbitCSN=P2^2;sbitMOSI=P2^3;sbitMISO=P2^5;sbitSCK=P2^6;sbitIRQ=P2^4;sbitK1=P3^4;sbitK2=P3^6;sbitK3=P3^5;sbitBJ=P1^3;sbitBEEF=P1^4;ucharMAX=30;ucharMIN=20;uchara;bitflag=0;ucharslnum=0;voiddelayms(uintx){uinti,j;for(i=x;i>0;i--) for(j=113;j>0;j--);}voidinit_io(void){CE=0;CSN=1;SCK=0;IRQ=1;}ucharSPI_RW(ucharbyte){uchari;for(i=0;i<8;i++){ MOSI=(byte&0x80); byte=(byte<<1); SCK=1; byte|=MISO; SCK=0;}return(byte);}ucharSPI_RW_reg(ucharreg,ucharvalue){ucharstatus;CSN=0;status=SPI_RW(reg);SPI_RW(value);CSN=1;return(status);}ucharSPI_read(ucharreg){ucharreg_val;CSN=0;SPI_RW(reg);reg_val=SPI_RW(0);CSN=1;return(reg_val);}ucharSPI_read_pload(ucharreg,uchar*pBuf,ucharbytes){ucharstatus,i;CSN=0;status=SPI_RW(reg);for(i=0;i<bytes;i++)pBuf[i]=SPI_RW(0);CSN=1;return(status);}ucharSPI_write_pload(ucharreg,uchar*pBuf,ucharbytes){ucharstatus,i;CSN=0;status=SPI_RW(reg);for(i=0;i<bytes;i++) SPI_RW(pBuf[i]);CSN=1;return(status);}voidRX_mode(){CE=0;SPI_write_pload(WRITE_REG+RX_ADDR_P0,RX_ADDRES,TX_ADR_WIDTH);SPI_RW_reg(WRITE_REG+RX_PW_P0,TX_PLOAD_WIDTH);SPI_RW_reg(WRITE_REG+EN_AA,0X01);SPI_RW_reg(WRITE_REG+EN_RXADDR,0X01);SPI_RW_reg(WRITE_REG+SETUP_RETR,0X1F);SPI_RW_reg(WRITE_REG+RF_CH,40);SPI_RW_reg(WRITE_REG+RF_SETUP,0X0F);SPI_RW_reg(WRITE_REG+CONFIG,0X0F);CE=1;}ucharRxPacket(uchar*rx_buf){ucharflag=0;sta=SPI_read(STATUS);if(RX_DR){CE=0;SPI_read_pload(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH);flag=1;SPI_RW_reg(WRITE_REG+STATUS,0xff);CSN=0;SPI_RW(FLUSH_RX);CSN=1;CE=1;}return(flag);}voidwrite_com(ucharcom){lcd_rs=0;lcd_rw=0;P0=com;lcd_en=1;delayms(1);lcd_en=0;}voidwrite_data(uchardate){lcd_rs=1;lcd_rw=0;P0=date;lcd_en=1;delayms(1);lcd_en=0;}voidlcd_init(){lcd_en=0;write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);}voidwrite_str(ucharx,uchary,uchar*s){switch(y){ case0: write_com(0x08+x);break; case1: write_com(0x08+0x40+x);break;}while(*s){write_data(*s);s++;}}voidwrite_maxmin(ucharadd,uchardate){ucharshi,ge;shi=date/10;ge=date%10;write_com(0x80+add);write_data(0x30+shi);write_data(0x30+ge);}voidkeyscan(){ucharslnum;if(
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 生物技術(shù)藥物研發(fā)合同
- 私人訂制戶外探險活動服務(wù)協(xié)議
- 智能家居系統(tǒng)與節(jié)能照明合作協(xié)議
- 數(shù)據(jù)挖掘技術(shù)在企業(yè)決策支持系統(tǒng)中的應(yīng)用合作協(xié)議
- 精密電子元器件采購合同
- 離婚標(biāo)準(zhǔn)協(xié)議書車輛分配
- 裝修公司合同保密協(xié)議
- 信用社借款展期合同協(xié)議書
- 教育培訓(xùn)合作項目實施協(xié)議
- 建筑施工臨時承包合同
- 地下礦山安全教育課件
- 國際市場營銷教案
- 全球變暖對工業(yè)企業(yè)的影響
- 《中醫(yī)藥健康知識講座》課件
- 2024年中國陪診服務(wù)行業(yè)市場發(fā)展趨勢預(yù)測報告-智研咨詢重磅發(fā)布
- 藝術(shù)欣賞與實踐(高職)全套教學(xué)課件
- 轉(zhuǎn)基因調(diào)查分析報告
- 英語-時文閱讀-7年級(8篇)
- 只有偏執(zhí)狂才能生存讀書心得
- 數(shù)據(jù)挖掘(第2版)全套教學(xué)課件
- 產(chǎn)學(xué)研融合創(chuàng)新合作機制
評論
0/150
提交評論