/****************************************Copyright (c)****************************************************
**
**
**********************************************************************************************************/
#include <STC15F2K60S2.h>
#include <stdint.h>
#include "nRF24L01.h"
#include "delay.h"
const uint8_t TX_ADDRESS[TX_ADDR_WIDTH]={0xE1,0xE2,0xE3,0xE4,0xE5}; //发送地址
const uint8_t RX_ADDRESS[RX_ADDR_WIDTH]={0xE1,0xE2,0xE3,0xE4,0xE5}; //接收地址
uint8_t RxPayload[32]; //无线接收缓存
uint8_t TxPayload[32]; //无线发送缓存
/***************************************************************************
* 描 述 : 初始化SPI
* 入 参 : 无
* 返回值 : 无
**************************************************************************/
void InitSPI(void)
{
SPDAT = 0; //初始化SPI数据
SPSTAT = SPIF | WCOL; //清除SPI状态位
SPCTL = SPEN | MSTR | SSIG; //主机模式
}
/***************************************************************************
* 描 述 : 模拟SPI读写数据函数,读写一个字节
* 入 参 : 写入的数据
* 返回值 : 读取的数据
**************************************************************************/
uint8_t SPI_RW(uint8_t byte)
{
SPDAT = byte; //触发SPI发送数据
while (!(SPSTAT & SPIF)); //等待发送完成
SPSTAT = SPIF | WCOL; //清除SPI状态位
return SPDAT; //返回SPI数据
}
/***************************************************************************
* 描 述 : NRF24L01寄存器写函数
* 入 参 : regaddr:要写的寄存器地址;data:写入到寄存器的数据
* 返回值 : 读取的状态值
**************************************************************************/
uint8_t NRF24L01_MA_Write_Reg(uint8_t regaddr,uint8_t dat)
{
uint8_t status;
CS_MA_LOW;
status =SPI_RW(regaddr);
SPI_RW(dat); //写入寄存器的值
CS_MA_HIGH; //禁止SPI传输
return(status); //返回状态值
}
/***************************************************************************
* 描 述 : NRF24L01寄存器读函数
* 入 参 : regaddr:要读取的寄存器地址
* 返回值 : 读取的寄存器的值
**************************************************************************/
uint8_t NRF24L01_MA_Read_Reg(uint8_t regaddr)
{
uint8_t reg_val;
CS_MA_LOW; //使能SPI传输
SPI_RW(regaddr);
reg_val=SPI_RW(0XFF);
CS_MA_HIGH; //禁止SPI传输
return(reg_val); //返回读取的值
}
/***************************************************************************
* 描 述 : 从指定地址读出指定长度的数据
* 入 参 : pBuf:读出数据的存放地址;datlen:读出的数据字节数
* 返回值 : 读取的寄存器的值
**************************************************************************/
uint8_t NRF24L01_MA_Read_Buf(uint8_t regaddr,uint8_t *pBuf,uint8_t datlen)
{
uint8_t status,u8_ctr;
CS_MA_LOW; //使能SPI传输
status=SPI_RW(regaddr);
for(u8_ctr=0;u8_ctr<datlen;u8_ctr++)
{
pBuf[u8_ctr]=SPI_RW(0XFF);//读出数据
}
CS_MA_HIGH; //关闭SPI传输
CS_MA_HIGH; //关闭SPI传输
return status; //返回读到的状态值
}
/***************************************************************************
* 描 述 : 向指定地址写入指定长度的数据
* 入 参 : pBuf:读出数据的存放地址;datlen:读出的数据字节数
* 返回值 : 读取的状态寄存器值
**************************************************************************/
uint8_t NRF24L01_MA_Write_Buf(uint8_t regaddr, uint8_t *pBuf, uint8_t datalen)
{
uint8_t status,u8_ctr;
CS_MA_LOW; //使能SPI传输
status = SPI_RW(regaddr);
for(u8_ctr=0; u8_ctr<datalen; u8_ctr++)
{
SPI_RW(*pBuf++); //写入数据
}
CS_MA_HIGH; //关闭SPI传输
return status; //返回读到的状态值
}
/***************************************************************************
* 描 述 : 启动NRF24L01读取一次数据
* 入 参 : buf:待发送数据首地址
* 返回值 : RX_OK:接收到数据;0:未接收到数据
**************************************************************************/
uint8_t NRF24L01_RxPacket_MA(uint8_t *buf)
{
uint8_t state;
state=NRF24L01_MA_Read_Reg(STATUS); //读取状态寄存器的值
NRF24L01_MA_Write_Reg(SPI_WRITE_REG+STATUS,state); //清除TX_DS或MAX_RT中断标志
if(state&RX_OK) //接收到数据
{
NRF24L01_MA_Read_Buf(RD_RX_PLOAD,buf,RX_PLOAD_WIDTH);//读取数据
NRF24L01_MA_Write_Reg(FLUSH_RX,0xff); //清除RX FIFO寄存器
return RX_OK;
}
return 0; //没收到任何数据
}
/***************************************************************************
* 描 述 : 初始化NRF24L01到RX模式,配置相关参数,CE变高后,即进入RX模式
* 入 参 : 无
* 返回值 : 无
**************************************************************************/
void Set_RxMode_MA(void)
{
CE_MA_LOW;
// Delay_1ms(20);
//写RX节点地址
NRF24L01_MA_Write_Buf(SPI_WRITE_REG+RX_ADDR_P0,(uint8_t*)RX_ADDRESS,RX_ADDR_WIDTH);
//使能通道0的自动应答
NRF24L01_MA_Write_Reg(SPI_WRITE_REG+EN_AA,0x01);
//使能通道0的接收地址
NRF24L01_MA_Write_Reg(SPI_WRITE_REG+EN_RXADDR,0x01);
//设置RF通信频率
NRF24L01_MA_Write_Reg(SPI_WRITE_REG+RF_CH,55);
//选择通道0的有效数据宽度
NRF24L01_MA_Write_Reg(SPI_WRITE_REG+RX_PW_P0,RX_PLOAD_WIDTH);
//设置TX发射参数,0db增益,2Mbps,低噪声增益开启
NRF24L01_MA_Write_Reg(SPI_WRITE_REG+RF_SETUP,0x26);
//配置基本工作模式的参数;PWR_UP,EN_CRC,16BIT_CRC,PRIM_RX接收模式
NRF24L01_MA_Write_Reg(SPI_WRITE_REG+CONFIG, 0x0f);
//CE为高,进入接收模式
CE_MA_HIGH;
}
/***************************************************************************
* 描 述 : NRF24L01初始化函数,初始化连接NRF24L01模块的管脚,调用SPI初始化函数
* 完成和NRF24L01模块通讯的SPI总线的初始化
* 入 参 : 无
* 返回值 : 无
**************************************************************************/
void Init_NRF24L01_MA(void)
{
delay_ms(2);
CE_MA_LOW; //使能NRF24L01
CS_MA_HIGH; //SPI片选取消
InitSPI();
}
/*********************************END FILE********************************************/
没有合适的资源?快使用搜索试试~ 我知道了~
nRF24L01模块+LCD1602显示+STC51单片机控制实现无线按键遥控显示实验KEIL例程源码.zip
共36个文件
obj:6个
h:6个
lst:6个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 10 下载量 103 浏览量
2022-04-14
07:38:51
上传
评论 7
收藏 86KB ZIP 举报
温馨提示
nRF24L01模块++LCD1602显示+STC51单片机控制实现无线按键遥控显示实验KEIL例程源码,无线按键遥控程序(nRF24L01):实时扫描检测按键状态,当检测到按键按下时,无线发送按键信息,按键信息发送格式:55 按键编号 + AA,长度(字节) :1 1 1 int main() { uint8_t i=0,j=0; uint16_t TempKey,Temp; uint8_t strKey[2]; lcdsel = 1; lcd_init(); //液晶初始化 Init_NRF24L01_MA(); //初始化 Set_RxMode_MA(); //配置nRF24L01为接收模式 lcd_wcom(0x80); //显示地址设为80H(即00H,)上排第一位 for(i=0;i<13;i++) //将table1[]中的数据依次写入1602显示 {
资源推荐
资源详情
资源评论
收起资源包目录
nRF24L01模块++LCD1602显示+STC51单片机控制实现无线按键遥控显示实验KEIL例程源码.zip (36个子文件)
KEYSCAN_RX_LCD
Lib
delay.c 387B
lcd.c 2KB
lcd.h 491B
led.h 474B
led.c 2KB
nRF24L01.c 6KB
nRF24L01.h 4KB
delay.h 103B
inc
stdint.h 1KB
STC15F2K60S2.h 13KB
Project
KeyScanRx.uvgui_Administrator.bak 72KB
KeyScanRx.uvgui.Administrator 72KB
main.c 3KB
KeyScanRx.uvopt 6KB
KeyScanRx.uvgui.junzh 71KB
KeyScanRx_uvproj.bak 14KB
KeyScanRx_uvopt.bak 7KB
lst
uart.lst 8KB
led.lst 4KB
keyscan_rx.m51 22KB
lcd.lst 5KB
main.lst 6KB
nRF24L01.lst 11KB
delay.lst 1KB
KeyScanRx.uvproj 14KB
Object
keyscan_rx.build_log.htm 1KB
keyscan_rx.plg 263B
keyscan_rx 41KB
led.obj 7KB
lcd.obj 6KB
main.obj 14KB
uart.obj 10KB
nRF24L01.obj 15KB
delay.obj 1KB
keyscan_rx.lnp 210B
keyscan_rx.hex 3KB
共 36 条
- 1
探索者我有我路向
- 粉丝: 283
- 资源: 1816
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页