课题Nrf24L01程序Word文档格式.docx

上传人:b****2 文档编号:5892232 上传时间:2023-05-05 格式:DOCX 页数:23 大小:2.94MB
下载 相关 举报
课题Nrf24L01程序Word文档格式.docx_第1页
第1页 / 共23页
课题Nrf24L01程序Word文档格式.docx_第2页
第2页 / 共23页
课题Nrf24L01程序Word文档格式.docx_第3页
第3页 / 共23页
课题Nrf24L01程序Word文档格式.docx_第4页
第4页 / 共23页
课题Nrf24L01程序Word文档格式.docx_第5页
第5页 / 共23页
课题Nrf24L01程序Word文档格式.docx_第6页
第6页 / 共23页
课题Nrf24L01程序Word文档格式.docx_第7页
第7页 / 共23页
课题Nrf24L01程序Word文档格式.docx_第8页
第8页 / 共23页
课题Nrf24L01程序Word文档格式.docx_第9页
第9页 / 共23页
课题Nrf24L01程序Word文档格式.docx_第10页
第10页 / 共23页
课题Nrf24L01程序Word文档格式.docx_第11页
第11页 / 共23页
课题Nrf24L01程序Word文档格式.docx_第12页
第12页 / 共23页
课题Nrf24L01程序Word文档格式.docx_第13页
第13页 / 共23页
课题Nrf24L01程序Word文档格式.docx_第14页
第14页 / 共23页
课题Nrf24L01程序Word文档格式.docx_第15页
第15页 / 共23页
课题Nrf24L01程序Word文档格式.docx_第16页
第16页 / 共23页
课题Nrf24L01程序Word文档格式.docx_第17页
第17页 / 共23页
课题Nrf24L01程序Word文档格式.docx_第18页
第18页 / 共23页
课题Nrf24L01程序Word文档格式.docx_第19页
第19页 / 共23页
课题Nrf24L01程序Word文档格式.docx_第20页
第20页 / 共23页
亲,该文档总共23页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

课题Nrf24L01程序Word文档格式.docx

《课题Nrf24L01程序Word文档格式.docx》由会员分享,可在线阅读,更多相关《课题Nrf24L01程序Word文档格式.docx(23页珍藏版)》请在冰点文库上搜索。

课题Nrf24L01程序Word文档格式.docx

sbitKEY5=P0^4;

voidmain()

{

//charTxDate[4];

//LCD_Init();

//初始化液晶屏

//LCD_Clear();

//清屏

//NRF24L01Int();

//初始化LCD1602

//LCD_Write_String(4,0,"

welcome"

);

while

(1)

KeyScan();

}

unsignedcharKeyScan(void)

/********************************************************/

charTxDate[4];

{

if(!

KEY1)//如果检测到低电平,说明按键按下

DelayMs(10);

//延时去抖,一般10-20ms

KEY1)//再次确认按键是否按下,没有按下则退出

while(!

KEY1);

//如果确认按下按键等待按键释放,没有则退出

TxDate[0]=1;

//向左转

TxDate[1]=0;

TxDate[2]=1;

TxDate[3]=1;

NRFSetTxMode(TxDate);

//发送数据·

while(CheckACK());

//检测是否发送完毕

/********************************************************/

elseif(!

KEY2)//如果检测到低电平,说明按键按下

KEY2)//再次确认按键是否按下,没有按下则退出

KEY2);

//向右转

TxDate[1]=1;

TxDate[3]=0;

//发送数据

KEY3)//如果检测到低电平,说明按键按下

KEY3)//再次确认按键是否按下,没有按下则退出

KEY3);

//前进

KEY4)//如果检测到低电平,说明按键按下

KEY4)//再次确认按键是否按下,没有按下则退出

KEY4);

TxDate[0]=0;

//后退

TxDate[2]=0;

KEY5)

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

uintWeight;

sbita=P2^0;

sbitb=P2^1;

sbitc=P2^2;

sbitd=P2^3;

LCD_Init();

LCD_Clear();

*(RevTempDate+4)=*\0*;

NRF24L01Int();

NRFSetRXMode();

//设置为接收模式

GetDate();

//开始接受数;

//Weight=RevTempDate[0]*1000+RevTempDate[1]*100+RevTempDate[2]*10+RevTempDate[3];

LCD_Write_Char(7,0,RevTempDate[0]+0x30);

LCD_Write_Char(8,0,RevTempDate[1]+0x30);

LCD_Write_Char(9,0,RevTempDate[2]+0x30);

LCD_Write_Char(10,0,RevTempDate[3]+0x30);

a=RevTempDate[0];

//根据接受数据来设置高低电平(目测仅限传输1.0两种数值)

b=RevTempDate[1];

c=RevTempDate[2];

d=RevTempDate[3];

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

sbitIRQ=P1^2;

//输入

sbitMISO=P1^3;

//输入

sbitMOSI=P1^1;

//输出

sbitSCLK=P1^4;

sbitCE=P1^5;

sbitCSN=P1^0;

ucharcodeTxAddr[]={0x34,0x43,0x10,0x10,0x01};

//发送地址

/*****************状态标志*****************************************/

ucharbdatasta;

//状态标志

sbitRX_DR=sta^6;

sbitTX_DS=sta^5;

sbitMAX_RT=sta^4;

/*****************SPI时序函数******************************************/

ucharNRFSPI(uchardate)

uchari;

for(i=0;

i<

8;

i++)//循环8次

if(date&

0x80)

MOSI=1;

else

MOSI=0;

//byte最高位输出到MOSI

date<

<

=1;

//低一位移位到最高位

SCLK=1;

if(MISO)//拉高SCK,nRF24L01从MOSI读入1位数据,同时从MISO输出1位数据

date|=0x01;

//读MISO到byte最低位

SCLK=0;

//SCK置低

return(date);

//返回读出的一字节

/**********************NRF24L01初始化函数*******************************/

voidNRF24L01Int()

DDelay

(2);

//让系统什么都不干

CE=0;

//待机模式1

CSN=1;

IRQ=1;

/*****************SPI读寄存器一字节函数*********************************/

ucharNRFReadReg(ucharRegAddr)

ucharBackDate;

CSN=0;

//启动时序

NRFSPI(RegAddr);

//写寄存器地址

BackDate=NRFSPI(0x00);

//写入读寄存器指令

return(BackDate);

//返回状态

/*****************SPI写寄存器一字节函数*********************************/

ucharNRFWriteReg(ucharRegAddr,uchardate)

BackDate=NRFSPI(RegAddr);

//写入地址

NRFSPI(date);

//写入值

/*****************SPI读取RXFIFO寄存器的值********************************/

ucharNRFReadRxDate(ucharRegAddr,uchar*RxDate,ucharDateLen)

{//寄存器地址//读取数据存放变量//读取数据长度//用于接收

ucharBackDate,i;

//写入要读取的寄存器地址

DateLen;

i++)//读取数据

RxDate[i]=NRFSPI(0);

}

/*****************SPI写入TXFIFO寄存器的值**********************************/

ucharNRFWriteTxDate(ucharRegAddr,uchar*TxDate,ucharDateLen)

{//寄存器地址//写入数据存放变量//读取数据长度//用于发送

//写入要写入寄存器的地址

i++)//写入数据

NRFSPI(*TxDate++);

/*****************NRF设置为发送模式并发送数据******************************/

voidNRFSetTxMode(uchar*TxDate)

{//发送模式

NRFWriteTxDate(W_REGISTER+TX_ADDR,TxAddr,TX_ADDR_WITDH);

//写寄存器指令+接收地址使能指令+接收地址+地址宽度

NRFWriteTxDate(W_REGISTER+RX_ADDR_P0,TxAddr,TX_ADDR_WITDH);

//为了应答接收设备,接收通道0地址和发送地址相同

NRFWriteTxDate(W_TX_PAYLOAD,TxDate,TX_DATA_WITDH);

//写入数据

/******下面有关寄存器配置**************/

NRFWriteReg(W_REGISTER+EN_AA,0x01);

//使能接收通道0自动应答

NRFWriteReg(W_REGISTER+EN_RXADDR,0x01);

//使能接收通道0

NRFWriteReg(W_REGISTER+SETUP_RETR,0x0a);

//自动重发延时等待250us+86us,自动重发10次

NRFWriteReg(W_REGISTER+RF_CH,0x40);

//选择射频通道0x40

NRFWriteReg(W_REGISTER+RF_SETUP,0x07);

//数据传输率1Mbps,发射功率0dBm,低噪声放大器增益

NRFWriteReg(W_REGISTER+CONFIG,0x0e);

//CRC使能,16位CRC校验,上电

CE=1;

DDelay(5);

//保持10us秒以上

/*****************NRF设置为接收模式并接收数据******************************/

//主要接收模式

voidNRFSetRXMode()

//接收设备接收通道0使用和发送设备相同的发送地址

NRFWriteReg(W_REGISTER+RX_PW_P0,TX_DATA_WITDH);

//接收通道0选择和发送通道相同有效数据宽度

//数据传输率1Mbps,发射功率0dBm,低噪声放大器增益*/

NRFWriteReg(W_REGISTER+CONFIG,0x0f);

//CRC使能,16位CRC校验,上电,接收模式

CE=1;

//保持10us秒以上

/****************************检测应答信号******************************/

ucharCheckACK()

{//用于发射

sta=NRFReadReg(R_REGISTER+STATUS);

//返回状态寄存器

if(TX_DS||MAX_RT)//发送完毕中断

NRFWriteReg(W_REGISTER+STATUS,0xff);

//清除TX_DS或MAX_RT中断标志

NRFSPI(FLUSH_TX);

//用于清空FIFO!

关键!

不然会出现意想不到的后果!

大家记住!

return(0);

return

(1);

/******************判断是否接收收到数据,接到就从RX取出*********************/

//用于接收模式

ucharNRFRevDate(uchar*RevDate)

ucharRevFlags=0;

//发送数据后读取状态寄存器

if(RX_DR)//判断是否接收到数据

//SPI使能

NRFReadRxDate(R_RX_PAYLOAD,RevDate,RX_DATA_WITDH);

//从RXFIFO读取数据

RevFlags=1;

//读取数据完成标志

//接收到数据后RX_DR,TX_DS,MAX_PT都置高为1,通过写1来清楚中断标

return(RevFlags);

voidDDelay(uintt)

uintx,y;

for(x=t;

x>

0;

x--)

for(y=110;

y>

y--);

////////////////////////////////////////////////////////////////////////////////////////////////////////

/*------------------------------------------------

uS延时函数,含有输入参数unsignedchart,无返回值

unsignedchar是定义无符号字符变量,其值的范围是

0~255这里使用晶振12M,精确延时请使用汇编,大致延时

长度如下T=tx2+5uS

------------------------------------------------*/

voidDelayUs2x(unsignedchart)

while(--t);

mS延时函数,含有输入参数unsignedchart,无返回值

0~255这里使用晶振12M,精确延时请使用汇编

voidDelayMs(unsignedchart)

while(t--)

//大致延时1mS

DelayUs2x(245);

///////////////////////////////////////////////////////////////////////////////////////////

下面是接收的NRF24L01的程序。

#include<

intrins.h>

ucharRevTempDate[5];

//最后一位用来存放结束标志

NRFDelay

(2);

retur

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 幼儿教育 > 唐诗宋词

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

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