找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1722|回复: 2
打印 上一主题 下一主题
收起左侧

NRF24L01小车程序已经完全调通51单片机

[复制链接]
跳转到指定楼层
楼主
ID:483213 发表于 2019-3-23 15:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/*发送*/
#include <reg52.h>
#include <intrins.h>
typedef unsigned char uchar;
typedef unsigned char uint;
/************************************NRF24L01端口定义***********************************/
sbit MISO=P2^5;            //数字输出(从 SPI 数据输出脚)
sbit MOSI=P2^4;            //数字输入(从 SPI 数据输入脚)
sbit SCK=P2^7;            //数字输入(SPI 时钟)
sbit CE=P2^1;            //数字输入(RX 或 TX 模式选择)
sbit CSN=P2^2;            //数字输入(SPI片选信号)
sbit IRQ=P2^6;            //数字输入(可屏蔽中断)
/************************************按键***********************************************/
sbit KEY1=P3^3;     //按键S1
sbit KEY2=P3^2;     //按键S2
sbit KEY3=P3^4;     //按键S3
sbit KEY4=P3^5;     //按键S4
/*********************************************NRF24L01***********************************/
#define TX_ADR_WIDTH 5             
#define RX_ADR_WIDTH 5      
#define TX_PLOAD_WIDTH 20         
#define RX_PLOAD_WIDTH 20         
uint const TX_ADDRESS[TX_ADR_WIDTH]= {0x34,0x43,0x10,0x10,0x01};        //本地地址
uint const RX_ADDRESS[RX_ADR_WIDTH]= {0x34,0x43,0x10,0x10,0x01};        //接收地址
/***************************************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 Delay(unsigned int s);                                                                        //大延时
void inerDelay_us(unsigned char n);                                                        //小延时
void init_NRF24L01(void);                                                                        //NRF24L01 初始化
uint SPI_RW(uint dat);                                                                                //根据SPI协议,写一字节数据到nRF24L01,同时从nRF24L01读出一字节
uchar SPI_Read(uchar reg);                                                                        //从reg寄存器读一字节
void SetRX_Mode(void);                                                                                //数据接收配置
uint SPI_RW_Reg(uchar reg, uchar value);                                        //写数据value到reg寄存器
uint SPI_Read_Buf(uchar reg, uchar *pBuf, uchar uchars);        //从reg寄存器读出bytes个字节,通常用来读取接收通道数据或接收/发送地址
uint SPI_Write_Buf(uchar reg, uchar *pBuf, uchar uchars);        //把pBuf缓存中的数据写入到nRF24L01,通常用来写入发射通道数据或接收/发送地址
unsigned char nRF24L01_RxPacket(unsigned char* rx_buf);                //数据读取后放入rx_buf接收缓冲区中
void nRF24L01_TxPacket(unsigned char * tx_buf);                                //发送 tx_buf中数据

/*****************************************长延时*****************************************/
void Delay(unsigned int s)
{
        unsigned int i;
        for(i=0; i<s; i++);
}

/******************************************************************************************/
uint        bdata sta;                        //状态标志
sbit        RX_DR        =sta^6;                //RX_DR 为 sta 的第六位
sbit        TX_DS        =sta^5;                //TX_DS 为 sta 的第五位
sbit        MAX_RT        =sta^4;                //MAX_RT 为 sta 的第四位

/******************************************延时函数(短延时)*************************************************/
void inerDelay_us(unsigned char n)        //延时,us 级
{
        for(;n>0;n--)
                _nop_();
}

/****************************************NRF24L01初始化************************************************/
void init_NRF24L01(void)
余下代码请从附件下载。

NRF24L01小车程序已经完全调通51单片机.rar

4.37 KB, 下载次数: 72, 下载积分: 黑币 -5

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1 发表于 2019-3-23 17:14 | 只看该作者
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
回复

使用道具 举报

板凳
ID:79544 发表于 2019-12-13 10:12 | 只看该作者
感谢分享学习啦!送人玫瑰手留余香!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表