/*-----------------------------------------------
独角兽电子产品
官方讨论群号:900 600 59
名称:W1.0板配套NRF24L01发送和接收程序
内容:按下板子方向键上键发送数据,发送成功灯闪,松开按键灯灭
(本程序是和W1.0板子配套,非本开发板可能需要自行修改程序)
------------------------------------------------*/
#include <reg52.h>
#include <intrins.h>
typedef unsigned int uint;
typedef unsigned char uchar;
#define TX_ADDR_WITDH 5//发送地址宽度设置为5个字节
//#define RX_ADDR_WITDH 5//接收地址宽度设置为5个字节
#define TX_DATA_WITDH 2//
#define RX_DATA_WITDH 2
/******************************************************************
// nRF24L01指令格式:
*******************************************************************/
#define R_REGISTER 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 // 重新使用上一包有效数据,当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 // 射频设置寄存器
#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 // 数据通道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) // 接收成功中断标志
#define TX_DS (sta & 0x20) // 发射成功中断标志
#define MAX_RT (sta & 0x10) // 重发溢出中断标志
//*********************************************************************************
uchar sta1; // 状态变量
#define RX_DR1 (sta1 & 0x40) // 接收成功中断标志
#define TX_DS1 (sta1 & 0x20) // 发射成功中断标志
#define MAX_RT1 (sta1 & 0x10) // 重发溢出中断标志
sbit MISO =P2^3;
sbit MOSI =P2^1;
sbit SCK =P2^4;
sbit CE =P2^5;
sbit CSN =P2^0;
sbit IRQ =P2^2;
sbit LED =P0^2;
sbit Key =P3^6;
sbit MISO1 =P1^3;
sbit MOSI1 =P1^1;
sbit SCK1 =P1^4;
sbit CE1 =P1^5;
sbit CSN1 =P1^0;
sbit IRQ1 =P1^2;
sbit LED1 =P0^7;
uchar code TX_Addr[]={0x34,0x43,0x10,0x10,0x01};
//uchar code TX_Buffer[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x00};
uchar TX_Buffer[TX_DATA_WITDH];
uchar RX_Buffer[RX_DATA_WITDH];
void _delay_us(uint x)
{
uint i,j;
for (j=0;j<x;j++)
for (i=0;i<12;i++);
}
void _delay_ms(uint x)
{
uint i,j;
for (j=0;j<x;j++)
for (i=0;i<120;i++);
}
/*nRF24L01初始化*/
void nRF24L01_Init(void)
{
CE=0;//待机模式Ⅰ
CSN=1;
SCK=0;
IRQ=1;
}
void nRF24L01_Init1(void)
{
_delay_us(2000);
CE1=0;
CSN1=1;
SCK1=0;
IRQ1=1;
}
/*SPI时序函数*/
uchar SPI_RW(uchar byte)
{
uchar i;
for(i=0;i<8;i++)//一字节8位循环8次写入
{
if(byte&0x80)//如果数据最高位是1
MOSI=1;//向NRF24L01写1
else //否则写0
MOSI=0;
byte<<=1;//低一位移到最高位
SCK=1;//SCK拉高,写入一位数据,同时读取一位数据
if(MISO)
byte|=0x01;
SCK=0;//SCK拉低
}
return byte;//返回读取一字节
}
uchar SPI_RW1(uchar byte)
{
uchar i;
for(i=0;i<8;i++)
{
if(byte&0x80)
MOSI1=1;
else
MOSI1=0;
byte<<=1;
SCK1=1;
if(MISO1)
byte|=0x01;
SCK1=0;
}
return byte;
}
/*SPI写寄存器一字节函数*/
/*reg:寄存器地址*/
/*value:一字节(值)*/
uchar SPI_W_Reg(uchar reg,uchar value)
{
uchar status;//返回状态
CSN=0;//SPI片选
status=SPI_RW(reg);//写入寄存器地址,同时读取状态
SPI_RW(value);//写入一字节
CSN=1;//
return status;//返回状态
}
uchar SPI_W_Reg1(uchar reg,uchar value)
{
uchar status;
CSN1=0;
status=SPI_RW1(reg);
SPI_RW1(value);
CSN1=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;//返回读取的值
}
uchar SPI_R_byte1(uchar reg)
{
uchar status;
CSN1=0;
SPI_RW1(reg);
status=SPI_RW1(0);
CSN1=1;
return status;
}
/*SPI读取RXFIFO寄存器数据*/
/*reg:寄存器地址*/
/*Dat_Buffer:用来存读取的数据*/
/*DLen:数据长度*/
uchar SPI_R_DBuffer(uchar reg,uchar *Dat_Buffer,uchar Dlen)
{
uchar status,i;
CSN=0;//SPI片选
status=SPI_RW(reg);//写入寄存器地址,同时状态
for(i=0;i<Dlen;i++)
{
Dat_Buffer[i]=SPI_RW(0);//存储数据
}
CSN=1;
return status;
}
uchar SPI_R_DBuffer1(uchar reg,uchar *Dat_Buffer,uchar Dlen)
{
uchar reg_value,i;
CSN1=0;
reg_value=SPI_RW1(reg);
for(i=0;i<Dlen;i++)
{
Dat_Buffer[i]=SPI_RW1(0);
}
CSN1=1;
return reg_value;
}
/*SPI向TXFIFO寄存器写入数据*/
/*reg:写入寄存器地址*/
/*TX_Dat_Buffer:存放需要发送的数据*/
/*Dlen:数据长度*/
uchar SPI_W_DBuffer(uchar reg,uchar *TX_Dat_Buffer,uchar Dlen)
{
uchar status,i;
CSN=0;//SPI片选,启动时序
status=SPI_RW(reg);
for(i=0;i<Dlen;i++)
{
SPI_RW(TX_Dat_Buffer[i]);//发送数据
}
CSN=1;
return status;
}
uchar SPI_W_DBuffer1(uchar reg,uchar *TX_Dat_Buffer,uchar Dlen)
{
uchar reg_value,i;
CSN1=0;
reg_value=SPI_RW1(reg);
for(i=0;i<Dlen;i++)
{
SPI_RW1(TX_Dat_Buffer[i]);
}
CSN1=1;
return reg_value;
}
/*设置发送模式*/
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_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_REGISTER+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以上*/
}
void nRF24L01_Set_RX_Mode1(void)
{
CE1=0;//待机
SPI_W_DBuffe
没有合适的资源?快使用搜索试试~ 我知道了~
STC89C52RC单片机开发板板硬件PDF原理图+外设软件试验例程KEIL源码合集(105个).zip
共1353个文件
bak:362个
obj:109个
lst:106个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 34 浏览量
2024-06-03
16:15:46
上传
评论
收藏 2.72MB ZIP 举报
温馨提示
STC89C52RC单片机开发板板硬件PDF原理图+外设软件试验例程KEIL源码合集(105个): STC89C52RC单片机开发板PDF原理图 101.1602动态显示 102.红外解码1602液晶显示 103.红外解码数码管显示 105 NRF24L01开发板一 11 LED循环右移 12 查表点亮LED 13 两个LED左右闪烁 14 LED花样灯 15 PWM调光 16 数码管显示3 17 数码管显示3之二 18 数码管动态显示 19 数码管扫描显示 2 总线法点亮一个LED 20 数码管显示动态数据 21 单个数码管显示0-9 22 数码管显示0-99 23 数码管显示0-999 24 数码管显示0-9999 25 数码管显示9-0 26 数码管显示99-0 27 数码管显示999-0 28 数码管显示9999-0 29 数码显示小数点 3 位操作点亮多个LED 30 数码管消隐 31 数码管递加递减消隐 32 数码管左移 33 数码管右移 34 数码管循环左移 35 数码管循环右移 4 总线控制点亮多个LED 40 定时器0 41 定时器1 42 定时器2 43 定时器0产
资源推荐
资源详情
资源评论
收起资源包目录
STC89C52RC单片机开发板板硬件PDF原理图+外设软件试验例程KEIL源码合集(105个).zip (1353个子文件)
1602动态显示 3KB
1602液晶动态显示 3KB
1602液晶按键输入显示 3KB
1602液晶静态显示 8KB
1602滚动显示 2KB
1602滚动显示-2 3KB
18b20温度传感器数码管显示 10KB
1个18b20温度传感器1602液晶显示 22KB
4位端口检测4个对地按键 2KB
字库ST7920 12864液晶基础显示.__i 104B
18b20温度传感器数码管显示.__i 55B
DS18b20 温度检测液晶显示.__i 54B
点阵滚动显示汉字.__i 52B
红外解码1602液晶显示.__i 50B
点阵显示一行和一列.__i 48B
1602液晶静态显示.__i 46B
显示一个十字架.__i 44B
滚动显示粗箭头.__i 44B
蓝牙控制灯.__i 40B
delay.__i 35B
1602.__i 34B
STARTUP.A51 6KB
STARTUP.A51 6KB
STARTUP.A51 6KB
STARTUP.A51 6KB
STARTUP.A51 6KB
STARTUP.A51 6KB
STARTUP.A51 6KB
STARTUP.A51 6KB
1个18b20温度传感器1602液晶显示_uvopt.bak 57KB
字库ST7920 12864液晶基础显示_uvopt.bak 57KB
18b20温度传感器数码管显示_uvopt.bak 57KB
不同频率闪烁一个LED_uvopt.bak 55KB
红外解码1602液晶显示_uvopt.bak 55KB
简易计算器_uvopt.bak 55KB
两个LED左右闪烁_uvopt.bak 55KB
按键控制数码管加减显示_uvopt.bak 55KB
4位端口检测4个对地按键_uvopt.bak 55KB
对地按键右到左输入数据_uvopt.bak 55KB
1602液晶按键输入显示_uvopt.bak 55KB
行列逐级扫描键盘显示_uvopt.bak 55KB
外部中断1下降沿触发_uvopt.bak 55KB
按键控制数码管加减_uvopt.bak 55KB
数码管递加递减消隐_uvopt.bak 55KB
数码管显示动态数据_uvopt.bak 55KB
总线控制点亮多个LED_uvopt.bak 55KB
不同频率闪烁多个LED_uvopt.bak 55KB
按键控制LED显示状态_uvopt.bak 55KB
按键扫描长短效果_uvopt.bak 55KB
定时器0产生200mS方波_uvopt.bak 55KB
数码管显示小数点_uvopt.bak 55KB
定时器0产生1mS方波_uvopt.bak 55KB
矩阵键盘反转扫描_uvopt.bak 55KB
定时器扫描数码管_uvopt.bak 55KB
外部中断1电平触发_uvopt.bak 55KB
单个数码管显示0-9_uvopt.bak 55KB
位操作点亮多个LED_uvopt.bak 55KB
总线法点亮一个LED_uvopt.bak 55KB
位操作点亮一个LED_uvopt.bak 55KB
数码管显示0-9999_uvopt.bak 55KB
定时器0多路方波_uvopt.bak 55KB
1602液晶动态显示_uvopt.bak 55KB
数码管循环右移_uvopt.bak 55KB
数码管显示3之二_uvopt.bak 55KB
数码管显示999-0_uvopt.bak 55KB
数码管循环左移_uvopt.bak 55KB
数码管显示9999-0_uvopt.bak 55KB
数码管动态显示_uvopt.bak 55KB
数码管扫描显示_uvopt.bak 55KB
数码管显示0-999_uvopt.bak 55KB
LED显示按键状态_uvopt.bak 55KB
继电器控制原理_uvopt.bak 55KB
数码管显示99-0_uvopt.bak 55KB
T1外部计数输入_uvopt.bak 55KB
数码管显示0-99_uvopt.bak 55KB
数码管显示9-0_uvopt.bak 55KB
1602动态显示_uvopt.bak 55KB
喇叭发声原理_uvopt.bak 55KB
模拟警车发声_uvopt.bak 55KB
LED左移动显示_uvopt.bak 55KB
1602滚动显示-2_uvopt.bak 55KB
1602滚动显示_uvopt.bak 55KB
数码管显示3_uvopt.bak 55KB
数码管消隐_uvopt.bak 55KB
数码管右移_uvopt.bak 55KB
消防车警报_uvopt.bak 55KB
查表点亮LED_uvopt.bak 55KB
模拟报警声_uvopt.bak 55KB
数码管左移_uvopt.bak 55KB
LED循环左移_uvopt.bak 55KB
闪烁一个LED_uvopt.bak 55KB
LED循环右移_uvopt.bak 55KB
LED右移显示_uvopt.bak 55KB
喇叭滴答声_uvopt.bak 55KB
救护车声音_uvopt.bak 55KB
音乐播放_uvopt.bak 55KB
LED花样灯_uvopt.bak 55KB
定时器1_uvopt.bak 55KB
计数器0_uvopt.bak 55KB
定时器0_uvopt.bak 55KB
共 1353 条
- 1
- 2
- 3
- 4
- 5
- 6
- 14
资源评论
GJZGRB
- 粉丝: 2942
- 资源: 7737
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- (源码)基于Java Swing的飞机订票管理系统.zip
- (源码)基于Spring Boot和Redis的秒杀系统.zip
- (源码)基于OVMS v3的无线控制台系统(WifiConsole).zip
- (源码)基于Arduino和ESP32的IoT计算机开关系统.zip
- (源码)基于Qt框架的PX4飞行控制器固件升级系统.zip
- (源码)基于Spring Boot和Vue的需求管理系统.zip
- 基于深度学习YOLOv5的车牌检测与识别项目源码
- (源码)基于Python的CSGO饰品价格分析与比较系统.zip
- ccs3.3安装补丁SR12-CCS-v3.3-SR-3.3.82.13 2
- (源码)基于Spring Boot框架的攀枝花物流系统.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功