云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > nrf24l01无线温度传输—51单片机

nrf24l01无线温度传输—51单片机

  • 62 次阅读
  • 3 次下载
  • 2025/6/4 22:04:01

无线温度传输系统

学校:安徽工业大学 学院:电气信息学院

由于最近要毕业设计了,老师让我做无线通信,然后我上网找了很多资料,决定用24L01做,经过一段时间的摸索,终于实现了24L01的无线温度传输。以下是我的程序,可供大家参考(当中在贴吧中学到了很多关于24l01的知识)。

发射端程序:

#include #include //#include \

#define uchar unsigned char

#define TX_ADR_WIDTH 5 // 发射地址的字节个数 #define TX_PLOAD_WIDTH 2 //发射字节

uchar const TX_ADDRESS[TX_ADR_WIDTH]={0x34,0x55,0x10,0x10,0x01}; uchar rx_buf[TX_PLOAD_WIDTH]; uchar tx_buf[TX_PLOAD_WIDTH]; uchar distance_data[2]; uchar flag;//标志

sbit CE=P1^1; //发射高电平大于10MS 接收高电平 sbit CSN=P1^2; //低电平ISP使能 sbit SCK=P1^3; //下降沿 sbit MOSI=P1^4; //MCU出 sbit MISO=P1^5; //MCU入 sbit IRQ=P1^6; //中断 uchar bdata sta;

sbit RX_DR =sta^6; //接收数据准备就绪 sbit TX_DS =sta^5; //已发送数据 sbit MAX_RT =sta^4; sbit DQ=P3^3;

unsigned char time; //设置全局变量,专门用于严格延时

//*********************************************NRF24L01*************************************

//***************************************NRF24L01寄存器指令******************************************************* #define READ_REG 0x00 // 读寄存器指令 #define WRITE_REG 0x20 // 写寄存器指令 #define RD_RX_PLOAD 0x61 // 读取接收数据指令 #define WR_TX_PLOAD 0xA0 // 写待发数据指令

#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 // 收发地址宽度设置 #define 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 // 频道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_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;i

j=108; while(j--); } }

uchar SPI_RW(uchar byte)//发送指令,接受状态 ,返回值为状态值 { uchar bit_ctr;

for(bit_ctr=0;bit_ctr<8;bit_ctr++) { MOSI = (byte&0x80); byte = (byte<<1); 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;

CSN = 0;

SPI_RW(reg); //写指令 reg_val = SPI_RW(0); //读reg的内容 CSN = 1; return(reg_val); }

uchar SPI_Read_Buf(uchar reg, uchar *pBuf, uchar bytes) { uchar status,byte_ctr;

CSN = 0; status = SPI_RW(reg);

for(byte_ctr=0;byte_ctr

}

uchar SPI_Write_Buf(uchar reg, uchar *pBuf, uchar bytes) { uchar status,byte_ctr;

CSN = 0; status = SPI_RW(reg);

for(byte_ctr=0; byte_ctr

CSN = 1; return(status); }

void TX_Mode(void) { CE=0;

SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS/*接收模块的地址*/, TX_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_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_PLOAD_WIDTH/*20*/); // flag=1; // } if(MAX_RT) { SPI_RW_Reg(FLUSH_TX/*冲洗发送FIFO指令*/,0); } SPI_RW_Reg(WRITE_REG+STATUS,sta);//清除中断 }

//以下是DS18B20的操作程序

搜索更多关于: nrf24l01无线温度传输—51单片机 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

无线温度传输系统 学校:安徽工业大学 学院:电气信息学院 由于最近要毕业设计了,老师让我做无线通信,然后我上网找了很多资料,决定用24L01做,经过一段时间的摸索,终于实现了24L01的无线温度传输。以下是我的程序,可供大家参考(当中在贴吧中学到了很多关于24l01的知识)。 发射端程序: #include #include //#include \#define uchar unsigned char #define TX_ADR_WIDTH 5 // 发射地址的字节个数 #define TX_PLOAD_WIDTH 2 //发射字节 uchar const TX_ADDRESS[TX_ADR_WIDTH]={0

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com