ImageVerifierCode 换一换
格式:DOCX , 页数:25 ,大小:23.56KB ,
资源ID:16431914      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/16431914.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(nrf24l01无线温度传输51单片机Word文件下载.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

nrf24l01无线温度传输51单片机Word文件下载.docx

1、sbit IRQ=P16; /中断uchar bdata sta;sbit RX_DR =sta6; /接收数据准备就绪sbit TX_DS =sta5; /已发送数据sbit MAX_RT =sta4;sbit DQ=P33;unsigned char time; /设置全局变量,专门用于严格延时/*NRF24L01*/*NRF24L01寄存器指令*#define READ_REG 0x00 / 读寄存器指令#define WRITE_REG 0x20 / 写寄存器指令#define RD_RX_PLOAD 0x61 / 读取接收数据指令#define WR_TX_PLOAD 0xA0 /

2、写待发数据指令#define FLUSH_TX 0xE1 / 冲洗发送 FIFO指令#define FLUSH_RX 0xE2 / 冲洗接收 FIFO指令#define REUSE_TX_PL 0xE3 / 定义重复装载数据指令#define NOP 0xFF / 保留/*SPI(nRF24L01)寄存器地址*#define CONFIG 0x00 / 配置收发状态,CRC校验模式以及收发状态响应方式#define EN_AA 0x01 / 自动应答功能设置#define EN_RXADDR 0x02 / 可用信道设置#define SETUP_AW 0x03 / 收发地址宽度设置#defin

3、e SETUP_RETR 0x04 / 自动重发功能设置#define RF_CH 0x05 / 工作频率设置#define RF_SETUP 0x06 / 发射速率、功耗功能设置#define STATUS 0x07 / 状态寄存器#define OBSERVE_TX 0x08 / 发送监测功能#define CD 0x09 / 地址检测 #define RX_ADDR_P0 0x0A / 频道0接收数据地址#define RX_ADDR_P1 0x0B / 频道1接收数据地址#define RX_ADDR_P2 0x0C / 频道2接收数据地址#define RX_ADDR_P3 0x0D

4、 / 频道3接收数据地址#define RX_ADDR_P4 0x0E / 频道4接收数据地址#define RX_ADDR_P5 0x0F / 频道5接收数据地址#define TX_ADDR 0x10 / 发送地址寄存器#define RX_PW_P0 0x11 / 接收频道0接收数据长度#define RX_PW_P1 0x12 / 接收频道0接收数据长度#define RX_PW_P2 0x13 / 接收频道0接收数据长度#define RX_PW_P3 0x14 / 接收频道0接收数据长度#define RX_PW_P4 0x15 / 接收频道0接收数据长度#define RX_PW

5、_P5 0x16 / 接收频道0接收数据长度#define FIFO_STATUS 0x17 / FIFO栈入栈出状态寄存器设置/*void init_io(void) CE=0; CSN=1; SCK=0;void delay_ms(unsigned int x) unsigned int i,j; for(i=0;ix;i+) j=108; while(j-); uchar SPI_RW(uchar byte)/发送指令,接受状态 ,返回值为状态值 uchar bit_ctr; for(bit_ctr=0;bit_ctr8;bit_ctr+) MOSI = (byte&0x80); byt

6、e = (byte1); SCK = 1; byte|=MISO; SCK=0; return(byte);uchar SPI_RW_Reg(uchar reg, uchar value) uchar status; CSN = 0; status = SPI_RW(reg); SPI_RW(value); CSN = 1; return(status);uchar SPI_Read(uchar reg) uchar reg_val; SPI_RW(reg); /写指令 reg_val = SPI_RW(0); /读reg的内容 return(reg_val);uchar SPI_Read_B

7、uf(uchar reg, uchar *pBuf, uchar bytes) uchar status,byte_ctr; for(byte_ctr=0;byte_ctrbytes;byte_ctr+) pBufbyte_ctr = SPI_RW(0);uchar SPI_Write_Buf(uchar reg, uchar *pBuf, uchar bytes) byte_ctr byte_ctr+) SPI_RW(*pBuf+);void TX_Mode(void) SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS/*接收模块的地址*/, TX_

8、ADR_WIDTH/*地址宽度5*/); SPI_Write_Buf(WRITE_REG + RX_ADDR_P0/*通道0 接收数据地址*/, TX_ADDRESS, TX_ADR_WIDTH); SPI_Write_Buf(WR_TX_PLOAD,/*写待发数据指令a0*/ tx_buf, TX_PLOAD_WIDTH/*20*/); SPI_RW_Reg(WRITE_REG + EN_AA, 0x01); /数据通道0应答允许 SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01); /接收数据通道0允许 SPI_RW_Reg(WRITE_REG + SETUP_

9、RETR, 0x1a);/等待 500+86us 自动重发10次 SPI_RW_Reg(WRITE_REG + RF_CH,40); SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07); /数据传输率1Mbps ,发射功率0dBm SPI_RW_Reg(WRITE_REG + CONFIG, 0x0e); /配置寄存器 CE=1;void checkflag() sta=SPI_Read(STATUS);/读状态寄存器 / if(RX_DR) / / SPI_Read_Buf(RD_RX_PLOAD/*读取接收数据指令*/,rx_buf/*数组20*/,TX_PLOA

10、D_WIDTH/*20*/); / flag=1; / if(MAX_RT) SPI_RW_Reg(FLUSH_TX/*冲洗发送FIFO指令*/,0); SPI_RW_Reg(WRITE_REG+STATUS,sta);/清除中断/以下是DS18B20的操作程序 /*/ void delay1ms() unsigned char i,j;4; for(j=0;j33;j+) ;/*函数功能:延时若干毫秒入口参数:n*/ void delaynms(unsigned char n) unsigned char i;n; delay1ms();将DS18B20传感器初始化,读取应答信号出口参数:f

11、lag bit Init_DS18B20(void) bit flag; /储存DS18B20是否存在的标志,flag=0,表示存在;flag=1,表示不存在 DQ = 1; /先将数据线拉高 for(time=0;time=1; if(DQ=1) dat|=0x80; /如果读到的数据是1,则将1存入dat else dat|=0x00;/如果读到的数据是0,则将0存入dat /将单片机检测到的电平信号DQ存入ri ; /延时3us,两个读时序之间必须有大于1us的恢复期 return(dat); /返回读出的十六进制数据向DS18B20写入一个字节数据WriteOneChar(unsign

12、ed char dat) unsigned char i=0; for (i=0; i /将dat中的各二进制位数据右移1位 /稍作延时,给硬件一点反应时间做好读温度的准备void ReadyReadTemp(void) Init_DS18B20(); /将DS18B20初始化 WriteOneChar(0xCC); / 跳过读序号列号的操作 WriteOneChar(0x44); / 启动温度转换 delaynms(150); /转换一次需要延时一段时间 Init_DS18B20(); /跳过读序号列号的操作 WriteOneChar(0xBE); /读取温度寄存器,前两个分别是温度的低位和

13、高位 void dwend(void) uchar TL; /储存暂存器的温度低位 uchar TH; /储存暂存器的温度高位 TL=ReadOneChar(); /先读的是温度值低位 TH=ReadOneChar(); /接着读的是温度值高位 distance_data0=TH ; /测量结果的高8位 distance_data1=TL; /放入16位的高8位void main(void) uchar xx; init_io(); while(1) ReadyReadTemp() ; dwend();checkflag(); for(xx=0;xxxx+) tx_bufxx= distanc

14、e_dataxx;/发数据之前必须把要发送的数据装入它 TX_Mode(); /必须启动发送模块 delay_ms(5);接收端程序:uchar code digit11=0123456789-; /定义字符数组显示数字uchar code Str=RICHMCU DS18B20 /说明显示的是温度/unsigned char code Error= DS18B20 ERROR /说明没有检测到DS18B20/unsigned char code Error1= PLEASE CHECKuchar code Temp=WENDU:uchar code Cent=Cent /温度单位uchar tm2;uchar flg=0; /负温度标志 和临时暂存变量uchar tltemp;#define TX_ADR_WIDTH 5 #define TX_PLOAD_WIDTH 2 int cout;sbit RS=P20; /寄存器选择位,将RS位定义为P2.0引脚sbit RW=P21; /读写选择位,将RW位定义为P2.1引脚sbit E=P22; /使能信号位,将E位定义为P2.2引脚sbit BF=P07; /忙碌标志位,将BF位定义为P0.7引脚#define RX_PW_P1 0x

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1