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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

本文(NRF24L01使用之四个按键控制四个led灯汇总.docx)为本站会员(b****3)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

NRF24L01使用之四个按键控制四个led灯汇总.docx

1、NRF24L01使用之四个按键控制四个led灯汇总发射:#include #include #define uint unsigned int#define uchar unsigned char#define TX_ADDR_WITDH 5/发送地址宽度设置为5个字节#define RX_ADDR_WITDH 5#define TX_DATA_WITDH 8#define RX_DATA_WITDH 8/*/ nRF24L01指令格式:*/#define R_REGISTER 0x00 / 读寄存器#define W_REGISTER 0x20 / 写寄存器#define R_RX_PLOA

2、D 0x61 / 读RX FIFO有效数据,1-32字节,当读数据完成后,数据被清除,应用于接收模式#define W_TX_PLOAD 0xA0 / 写TX FIFO有效数据,1-32字节,写操作从字节0开始,应用于发射模式#define FLUSH_TX 0xE1 / 清除TX FIFO寄存器,应用于发射模式#define FLUSH_RX 0xE2 / 清除RX FIFO寄存器,应用于接收模式#define REUSE_TX_PL 0xE3 / 重新使用上一包有效数据,当CE为高过程中,数据包被不断的重新发射#define NOP 0xFF / 空操作,可以用来读状态寄存器/*/ nRF

3、24L01寄存器地址*/#define CONFIG 0x00 / 配置寄存器#define EN_AA 0x01 / “自动应答”功能寄存#define EN_RX_ADDR 0x02 / 接收通道使能寄存器#define SETUP_AW 0x03 / 地址宽度设置寄存器#define SETUP_RETR 0x04 / 自动重发设置寄存器#define RF_CH 0x05 / 射频通道频率设置寄存器#define RF_SETUP 0x06 / 射频设置寄存器#define STATUS 0x07 / 状态寄存器#define OBSERVE_TX 0x08 / 发送检测寄存器#def

4、ine 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

5、 / 数据通道0有效数据宽度设置寄存器#define RX_PW_P1 0x12 / 数据通道1有效数据宽度设置寄存器#define RX_PW_P2 0x13 / 数据通道2有效数据宽度设置寄存器#define RX_PW_P3 0x14 / 数据通道3有效数据宽度设置寄存器#define RX_PW_P4 0x15 / 数据通道4有效数据宽度设置寄存器#define RX_PW_P5 0x16 / 数据通道5有效数据宽度设置寄存器#define FIFO_STATUS 0x17 / FIFO状态寄存器/*uchar sta; / 状态变量#define RX_DR (sta & 0x40)

6、 / 接收成功中断标志#define TX_DS (sta & 0x20) / 发射成功中断标志#define MAX_RT (sta & 0x10) / 重发溢出中断标志sbit CE=P20;sbit IRQ=P25;sbit CSN=P21;sbit MOSI=P23;sbit MISO=P24;sbit SCK=P22;sbit key1=P32;sbit key2=P33;sbit key3=P34;sbit key4=P35;sbit LED=P00;uchar code TX_Addr=0x34,0x43,0x10,0x10,0x01;void _delay_us(uint x)

7、 uint i,j; for (j=0;jx;j+) for (i=0;i12;i+);void _delay_ms(uint x) uint i,j; for (j=0;jx;j+) for (i=0;i120;i+);/*nRF24L01初始化*/void nRF24L01_Init(void) CE=0;/待机模式 CSN=1; SCK=0; IRQ=1;/*SPI时序函数*/uchar SPI_RW(uchar byte) uchar i; for(i=0;i8;i+)/一字节8位循环8次写入 if(byte&0x80)/如果数据最高位是1/当访问多字节寄存器时首先要读/写的是最低字节

8、的高位? MOSI=1;/向NRF24L01写1 else /否则写0 MOSI=0; byte=1;/低一位移到最高位 SCK=1;/SCK拉高,写入一位数据,同时读取一位数据 if(MISO) byte|=0x01; SCK=0;/SCK拉低 return byte;/返回读取一字节 /*SPI写寄存器一字节函数*/*reg:寄存器地址*/*value:一字节(值)*/uchar SPI_W_Reg(uchar reg,uchar value) uchar status;/返回状态 CSN=0;/SPI片选 status=SPI_RW(reg);/写入寄存器地址,同时读取状态 SPI_RW

9、(value);/写入一字节 CSN=1;/ return status;/返回状态/*SPI*/uchar SPI_R_byte(uchar reg) uchar reg_value; CSN=0;/SPI片选 SPI_RW(reg);/写入地址 reg_value=SPI_RW(0);/读取寄存器的值 CSN=1; return reg_value;/返回读取的值/*SPI读取RXFIFO寄存器数据*/*reg:寄存器地址*/*Dat_Buffer:用来存读取的数据*/*DLen:数据长度*/uchar SPI_R_DBuffer(uchar reg,uchar *Dat_Buffer,u

10、char Dlen) uchar status,i; CSN=0;/SPI片选 status=SPI_RW(reg);/写入寄存器地址,同时状态 for(i=0;iDlen;i+) Dat_Bufferi=SPI_RW(0);/存储数据 CSN=1; return status;/*SPI向TXFIFO寄存器写入数据*/*reg:写入寄存器地址*/*TX_Dat_Buffer:存放需要发送的数据*/*Dlen:数据长度*/ uchar SPI_W_DBuffer(uchar reg,uchar *TX_Dat_Buffer,uchar Dlen) uchar status,i; CSN=0;/

11、SPI片选,启动时序 status=SPI_RW(reg); for(i=0;iDlen;i+) SPI_RW(TX_Dat_Bufferi);/发送数据 CSN=1; return status; /*设置发送模式*/void nRF24L01_Set_TX_Mode(uchar *TX_Data) CE=0;/待机(写寄存器之前一定要进入待机模式或掉电模式) SPI_W_DBuffer(W_REGISTER+TX_ADDR,TX_Addr,TX_ADDR_WITDH);/*写寄存器指令+接收节点地址+地址宽度*/ SPI_W_DBuffer(W_REGISTER+RX_ADDR_P0,TX

12、_Addr,TX_ADDR_WITDH);/*为了接收设备应答信号,接收通道0地址与发送地址相同*/ SPI_W_DBuffer(W_TX_PLOAD,TX_Data,TX_DATA_WITDH);/*写有效数据地址+有效数据+有效数据宽度*/ SPI_W_Reg(W_REGISTER+EN_AA,0x01);/*接收通道0自动应答*/ SPI_W_Reg(W_REGISTER+EN_RX_ADDR,0x01);/*使能接收通道0*/ SPI_W_Reg(W_REGISTER+SETUP_RETR,0x0a);/*自动重发延时250US+86US,重发10次*/ SPI_W_Reg(W_REG

13、ISTER+RF_CH,0);/*(2400+40)MHZ选择射频通道0X40*/ SPI_W_Reg(W_REGISTER+RF_SETUP,0x07);/*1Mbps速率,发射功率:0DBM,低噪声放大器增益*/ SPI_W_Reg(W_REGISTER+CONFIG,0x0e);/*发送模式,上电,16位CRC校验,CRC使能*/ CE=1;/启动发射 _delay_ms(5);/*CE高电平持续时间最少10US以上*/*检测应答信号*/uchar Check_Ack(void) sta=SPI_R_byte(R_REGISTER+STATUS);/*读取寄存状态*/ if(TX_DS|

14、MAX_RT)/*如果TX_DS或MAX_RT为1,则清除中断和清除TX_FIFO寄存器的值*/ SPI_W_Reg(W_REGISTER+STATUS,0xff); CSN=0; SPI_RW(FLUSH_TX); CSN=1; return 0; else return 1;void main(void) uchar tf=0; uchar TX_Buffer8=0; P0=0xff; nRF24L01_Init(); _delay_us(1000); while(1) if(key1=0) _delay_ms(10); if(key1=0) tf=1; TX_Buffer1=1; whi

15、le(Check_Ack() LED=0; if(key2=0) _delay_ms(10); if(key2=0) tf=1; TX_Buffer2=1; while(Check_Ack() LED=0; if(key3=0) _delay_ms(10); if(key3=0) tf=1; TX_Buffer3=1; while(Check_Ack() LED=0; if(key4=0) _delay_ms(10); if(key4=0) tf=1; TX_Buffer4=1; while(Check_Ack() LED=0; if(tf=1) nRF24L01_Set_TX_Mode(TX

16、_Buffer); TX_Buffer1=0; TX_Buffer2=0; TX_Buffer3=0; TX_Buffer4=0; tf=0; _delay_ms(100); 接收:#include #include #define uint unsigned int#define uchar unsigned char#define TX_ADDR_WITDH 5/发送地址宽度设置为5个字节#define RX_ADDR_WITDH 5#define TX_DATA_WITDH 8#define RX_DATA_WITDH 8/*/ nRF24L01指令格式:*/#define R_REGI

17、STER 0x00 / 读寄存器#define W_REGISTER 0x20 / 写寄存器#define R_RX_PLOAD 0x61 / 读RX FIFO有效数据,1-32字节,当读数据完成后,数据被清除,应用于接收模式#define W_TX_PLOAD 0xA0 / 写TX FIFO有效数据,1-32字节,写操作从字节0开始,应用于发射模式#define FLUSH_TX 0xE1 / 清除TX FIFO寄存器,应用于发射模式#define FLUSH_RX 0xE2 / 清除RX FIFO寄存器,应用于接收模式#define REUSE_TX_PL 0xE3 / 重新使用上一包有效

18、数据,当CE为高过程中,数据包被不断的重新发射#define NOP 0xFF / 空操作,可以用来读状态寄存器/*/ nRF24L01寄存器地址*/#define CONFIG 0x00 / 配置寄存器#define EN_AA 0x01 / “自动应答”功能寄存器#define EN_RX_ADDR 0x02 / 接收通道使能寄存器#define SETUP_AW 0x03 / 地址宽度设置寄存器#define SETUP_RETR 0x04 / 自动重发设置寄存器#define RF_CH 0x05 / 射频通道频率设置寄存器#define RF_SETUP 0x06 / 射频设置寄存器

19、#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 /

20、 数据通道5接收地址寄存器#define TX_ADDR 0x10 / 发送地址寄存器#define RX_PW_P0 0x11 / 数据通道0有效数据宽度设置寄存器#define RX_PW_P1 0x12 / 数据通道1有效数据宽度设置寄存器#define RX_PW_P2 0x13 / 数据通道2有效数据宽度设置寄存器#define RX_PW_P3 0x14 / 数据通道3有效数据宽度设置寄存器#define RX_PW_P4 0x15 / 数据通道4有效数据宽度设置寄存器#define RX_PW_P5 0x16 / 数据通道5有效数据宽度设置寄存器#define FIFO_STAT

21、US 0x17 / FIFO状态寄存器/*uchar sta; / 状态变量#define RX_DR (sta & 0x40) / 接收成功中断标志#define TX_DS (sta & 0x20) / 发射成功中断标志#define MAX_RT (sta & 0x10) / 重发溢出中断标志 sbit CE=P20;sbit IRQ=P25;sbit CSN=P21;sbit MOSI=P23;sbit MISO=P24;sbit SCK=P22;sbit led1=P00;sbit led2=P01;sbit led3=P02;sbit led4=P03;uchar code TX_

22、Addr=0x34,0x43,0x10,0x10,0x01;uchar code TX_Buffer=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f;void _delay_us(uint x) uint i,j; for (j=0;jx;j+) for (i=0;i12;i+);void _delay_ms(uint x) uint i,j; for (j=0;jx;j+) for (i=0;i120;i+);void nRF24L01_Init(void) _delay_us(2000); CE=0; CSN=1; SCK=0; IRQ=1;uchar SP

23、I_RW(uchar byte) uchar i; for(i=0;i8;i+) if(byte&0x80) MOSI=1; else MOSI=0; byte=1; SCK=1; if(MISO) byte|=0x01; SCK=0; return byte;uchar SPI_W_Reg(uchar reg,uchar value) uchar status; CSN=0; status=SPI_RW(reg); SPI_RW(value); CSN=1; return status;uchar SPI_R_byte(uchar reg) uchar status; CSN=0; SPI_

24、RW(reg); status=SPI_RW(0); CSN=1; return status;uchar SPI_R_DBuffer(uchar reg,uchar *Dat_Buffer,uchar Dlen) uchar reg_value,i; CSN=0; reg_value=SPI_RW(reg); for(i=0;iDlen;i+) Dat_Bufferi=SPI_RW(0); CSN=1; return reg_value;uchar SPI_W_DBuffer(uchar reg,uchar *TX_Dat_Buffer,uchar Dlen) uchar reg_value

25、,i; CSN=0; reg_value=SPI_RW(reg); for(i=0;iDlen;i+) SPI_RW(TX_Dat_Bufferi); CSN=1; return reg_value; void nRF24L01_Set_RX_Mode(void) CE=0;/待机 SPI_W_DBuffer(W_REGISTER+TX_ADDR,TX_Addr,TX_ADDR_WITDH); SPI_W_DBuffer(W_REGISTER+RX_ADDR_P0,TX_Addr,TX_ADDR_WITDH); SPI_W_Reg(W_REGISTER+EN_AA,0x01);/auot ac

26、k SPI_W_Reg(W_REGISTER+EN_RX_ADDR,0x01); SPI_W_Reg(W_REGISTER+SETUP_RETR,0x0a); SPI_W_Reg(W_REGISTER+RX_PW_P0,RX_DATA_WITDH); SPI_W_Reg(W_REGISTER+RF_CH,0); SPI_W_Reg(W_REGISTER+RF_SETUP,0x07);/0db,lna SPI_W_Reg(W_REGISTER+CONFIG,0x0f); CE=1;/ LNA_RX=1;/ LNA_TX=0; _delay_ms(5);uchar nRF24L01_RX_Data(unsigned char* RX_Buffer) uchar i=0; sta=SPI_R_byte(R_REGISTER+STATUS); if(RX_DR)

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2