版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
/23基于51单片机和NRF24L01的无线温度监控一、实现功能:以51单片机为核心实现智能化远程无线温度监控。利用18B20温度传感器获取温度信号,将需要测量的温度信号自动转化为数字信号,通过无线模块NRF24L01一对一传送将数据传送到接收机,最终单片机将信号转换成LCD可以识别的信息显示输出。矚慫润厲钐瘗睞枥庑二、所需原件:51单片机*2DS18B20*1(温度测量范围为-55〜+125W)12M晶振*222uf电容*25V降压至3.3V降压模块*2NRF24101无线模块*21602液晶显示屏*1按键*3蜂鸣器*1发光二极管*1排阻10K*9脚*2四、NRF12401JI介绍:1、GFSK调制,硬件集成OSI链路层;2、具有自动应答和自动再发射功能;3、片内自动生成报头和CRC校验码;4、数据传输率为lMb/s或2Mb/s;5、SPI速率为0Mb/s〜10Mb/s;6、125个频道与其他nRF24系列射频器件相兼容;QFN20引脚4mmx4mm封装;供电电压为1.9V〜3.6V;封装引脚介绍:CE:使能发射或接收;CSN,SCK,MOSI,MISO:SPI引脚端,微处理器可通过此引脚配置nRF24L01:IRQ:中断标志位;VDD:电源输入端;VSS:电源地;XC2,XC1:晶体振荡器引脚;VDD_PA:为功率放大器供电,输出为1.8V;ANT1,ANT2:天线接口;IREF:参考电流输入;工作模式:工作原理:发射数据时,首先将nRF24L01配置为发射模式:接着把接收节点地址TX_ADDR和有效数据TX_PLD按照时序由SPI口写入nRF24L01缓存区,TX_PLD必须在CSN为低时连续写入,而TX_ADDR在发射时写入一次即可,然后CE置为高电平并保持至少10阴,延迟130阴后发射数据;若自动应答开启,那么nRF24L01在发射数据后立即进入接收模式,接收应答信号(自动应答接收地址应该与接收节点地址TX_ADDR一致)。如果收到应答,则认为此次通信成功,TX_DS置高,同时TX_PLD从TXFIFO中清除;若未收到应答,则自动重新发射该数据(自动重发已开启),若重发次数(ARC)达到上限,MAX_RT置高,TXFIFO中数据保留以便在次重发;MAX_RT或TX_DS置高时,使IRQ变低,产生中断,通知MCU。最后发射成功时,若CE为低则nRF24L01进入空闲模式1;若发送堆栈中有数据且CE为高,则进入下一次发射;若发送堆栈中无数据且CE为高,则进入空闲模式2。聞創沟燴鐺險爱氇谴净接收数据时,首先将nRF24L01配置为接收模式,接着延迟130妙进入接收状态等待数据的到来。当接收方检测到有效的地址和CRC时,就将数据包存储在残骛楼諍锩瀨濟溆塹籟婭骤。残骛楼RXFIFO中,同时中断标志位RX_DR置高,IRQ变低,产生中断,通知MCU去取数据。若此时自动应答开启,接收方则同时进入发射状态回传应答信号。最后接收成功时,若CE变低,则nRF24L01进入空闲模式1。在写寄存器之前一定要进入待机模式或掉电模式。酽SPI配置:SPI指令设置用于SPI接口的常用命令见下表。当CSN为低时,SPI接口开始等待一条指令,任何一条新指令均由CSN的由高至I」低的转换开始彈贸摄尔霁毙攬砖卤庑诒尔。彈贸摄尔霁毙攬砖卤庑诒。寄存器:
SPI接口指令指令名称指令格式操作RREGISTER000AAAAA读配置寄存器.AAAAA指出读操作的寄存器地址W_REGISTER001AAAAA写配置寄存器.AAAAA指出写操作的寄存器地址只能在掉电模式或待机模式下操作。R_RX_PAYLOAD01100001读RX有效数据:字节。读操作全部从字节0开始。当读RX有效数据完成后,FIFO寄存器中有效数据彼清除.应用于接收模式下.W_RX_PAYLOAD10100000写TX有效数据:122字节.写操作从字节0开始.应用于发射模式下FLUSHTX11100001清除TXYIFO寄存器,应用于发射模式下。FLUSH_RX11100010淸除RXFIFO寄存器,应用于接收模式在传输应答信号过程中不应执行此指令。也就是说,若传输应答信号过程中执行此指令的话将使得应答信号不能被完整的传输口REUSE_TX_PL11100011应用于发射端重新使用上…包发射的有效数据。当CE=1时,数据彼不断重新发射.在发射数据包过程中必须禁止数据包重利用功能.NOPmimi空操作口口J用来读状态寄存器。CSN\厂和_TLrLrLrLTLrLrLrLrLrwLrLjTrLrLJ-LrLJTrLrLrwLM1SO读操作CSN\厂sck—rLn_ru_Ln_rLrLrL_rLrLrLrLrLrLrLrL_rLrLnLTLrLrLrLrLMSO[DM]Did何可CdI护利MSO[DM]Did何可CdI护利M写操作五、温度监测:温度检测模块软件设计DS18B20的测温原理遵循严格的单总线协议,以确保通信数据的准确性,单片机通过时序来写入和读出DS18B20中的数据,包括初始化、读1、读0,写1、写0等操作。传感器复位后,接收应答信号,跳过读ROM中序列号后,启动温度转换,等待温度转换完毕后,保存数据。如此反复,完成所有操作。謀荞抟箧飆鐸怼类蒋薔點鉍。謀荞抟六、无线流程:发射:首先进行初始化操作,初始化包括设置单片机I/O和SPI相关寄存器两部分其可以和
nRF24L01通信。通过SPI总线配置射频芯片使其进入正确的工作模式。发射数据时,首先将nRF24L01配置为发射模式。接着把发送端待发射数据的目标地址TX—ADDR和数据TX当接收方检测到有效地址和CRC时,就将数据包储存在接收堆栈中,同时状态寄存器中的中断标志位RX—DR置高,产生中断使IRQ引脚变为低电平,以便通知MCU去取数据,其流程图如图4.3所示。茕桢广鳓鯡诜块网羈泪镀齐。茕桢广鳓鯡诜块网羈泪镀。
DS18B20,从DS18B20,从DS18B20读出温度(DS18B20采用默认的12位精度),将得到的温度值的反码转化成十制,取温度数组的高两位(即整数部分)写入发送数据数组,然后初始化nRF24L01,将温度发送,其流程图如图4.5所示
W4.5发肘部分息缺程圈接收部分:接收部分的总体思路是这样的,首先还是初始化nRF24L01,然后进入大循环判断状态寄存器是否有接收中断。如果有就从FIFO_buffer读入二进制数据,然后将数据转换成十进制在数码管上显示出来,其流程图如图4.6所示。籟从妈羥为贍偾蛏练淨槠挞。籟从妈羥为贍偾蛏练淨槠。*初怖化判断按收中断U.RX_FIFCIbuffei
'iiWI4.6接收部分总体流程圈八:电路图:发射机:M.OT2PIPI2F14M5W1PI?KWOPGhADiPD2MD2POl^mPD4U£MPOSMK曲暮心罚网TP2WP2TMSP2WBF23M11F2W3^254*13P264A14P3FM15P30RKDmm®P12«T0m«fFPJftfTOP35fllP36^parm阴玄:接收机九、程序清单:接收机:#includevreg51.h>#includevintrins.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#defineNOP#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//'RXaddresspipe。'registeraddress#defineRX_ADDR_P10x0B//'RXaddresspipel'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,0xl9,0x91,0x09};ucharbdatasta;sbitCE=P2A7;sbitCSN=P2A2;sbitMOSI=P2A3;sbitMISO=P2A5;sbitSCK=P2A6;sbitIRQ=P2A4;sbitds=P3A7;sbitled0=P1A0;sbitRX_DR=staA6;sbitTX_DS=staA5;sbitMAX_RT=staA4;voidinit_io(void){CE=0;CSN=1;SCK=0;IRQ=1;}ucharSPI_RW(ucharbyte){uchari;for(i=0;iv8;i++){MOSI=(byte&0x80);byte=(byte<<1);SCK=1;bytel=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;ivbytes;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;ivbytes;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_PO,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+CONFIGOXOe);CE=1;//CE置高,使能发送}ucharCheck_ACK(){〃while(IRQ//CE=0;sta=SPI_read(STATUS);if(TX_DSIIMAX_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(OxOO);//else//return(Oxff);}严ucharCheckACK(){sta=NRFReadReg(READ_REG+STATUS);if(TX_DSIIMAX_RT){NRFWriteReg(WRITE_REG+STATUS,0xff);CSN=0;NRFSPI(FLUSH_TX);CSN=1;return(O);}elsereturn(l);}*/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=(jvv7)l(dat»l);}return(dat);}voidtempwritebyte(uchardat){uinti;ucharj;bittestb;for(j=0;jv8;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(Oxcc)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 校园应急预案解读
- 食品安全伴我行
- 认识销售课件教学课件
- 假如课件教学课件
- 高三化学一轮复习 第一章 离子反应 离子方程式 课件
- 稻田餐厅课件教学课件
- 3.1.1铁及铁的氧化物 课件 高一上学期化学人教版(2019)必修第一册
- 2.2化学平衡 课件高二上学期化学人教版(2019)选择性必修1
- 成人夏季食品安全教育
- 企业宿舍管理培训
- 消防应急疏散预案培训
- 2024-2025学年八年级上学期期中考试地理试题
- 2019年湖南岳阳中考满分作文《握手》3
- 注册安全工程师考试安全生产法律法规(初级)试题及解答参考
- 危急值的考试题及答案
- 鼻窦炎围手术期护理
- 浙江省北斗星盟2023-2024学年高二下学期5月阶段性联考数学试题2
- MOOC创新创业与管理基础(东南大学)
- 硫磺安全技术说明书MSDS
- 国开电大《工程数学(本)》形成性考核作业5答案
- GB/T 28653-2012工业氟化铵
评论
0/150
提交评论