51单片机应用之无线通讯模块NRF24L01+

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

30、51单片机应用之............无线通讯模块NRF24L01+(一)基础知识篇

今天刚调试好,先看图吧!这张是AT89C2051控制NRF24L01+做发射调试。看看NRF24L01细节吧!

这是LCD屏显示:AT89S52做接收测试:正在接收时的显示:

接收到数据后显示32个数据值:

无线模块NRF24L01+应用上篇结束,敬请期待NRF24L01+下篇的调试部分。。。。

31、51单片机应用之............无线通讯模块NRF24L01+(二)模块调试篇

32、51单片机应用之............无线通讯模块NRF24L01+(三)发送与接收模块的联调

33、51单片机应用之............无线通讯模块NRF24L01+(四)举例应用

34、补充NRF24L01+之————LED调试篇

写了前面四篇关于NRF24L01通讯调试的文章,看来大家还是很喜欢,有帮助的。有很多大学生朋友问我说,我们没有两个LCD来显示调试状态,连一个也没有,能不能用几个LED来显示调试状态呢?因此我就写这篇补充调试的文章,就用P0口的8个LED来显示调试NRF24L01到成功进行数据通讯。

先把51单片机的最小系统准备好,还有8个LED的小电路板,如果你的LED就在系统板上那省了这一步。

8个LED的小板子电路很简单,但你焊接要可靠,不然电路本身都不稳定,后面对判断故障会产生很大影响。

NRF24L01+模块电路还是前面说过的那样:相同的两个模块的板子。

好!假设我们用P0口来作LED显示、用P1口来作模块接口,下面我们先写一段最简单的程序,来确认LED电路,和P0、P1口的完好!

#include

#include

#define uint unsigned int

typedef unsigned char uchar;

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

//延时函数

// 在晶振为12MHz时,延时count毫秒

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

void Delayms(uint count)

{

uint i;

while(count--)

{ for(i=0;i<80;i++){}

}

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

}

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

// 主函数

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

void main()

{

P0=0x00; //P0口LED点亮

P1=0x00; //P1口LED点亮

P2=0x00;

P3=0x00;

Delayms(2000); //延时2秒

while(1)

{

P0=~P0;//将P0口数据取反,原来亮的就熄灭

P1=~P1;//将P1口数据取反,原来亮的就熄灭

P2=~P2;

P3=~P3;

Delayms(500); //延时半秒

}

}

这是段极简单的程序,用来检测单片机电路连接的正确性,和IO口的工作状态是否正常,为后面调试NRF24L01做好准备。

它的工作状态如下:

同样的,把LED的接口再接到P1口,看看它是否一样的在全部闪烁。做好了这步,准备工作就算完成了。

接下来我们把NRF24L01+的模块插上,要注意,接口要对清楚,电源要连接正确:

接下来我们写发送程序:

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

// NRF24L01+模块发射程序

// 用8个LED调试

// Txz001 2012.05.16

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

#include

typedef unsigned char uchar; //将无符号字节类型重定义为uchar

typedef unsigned int uint; //将无符号整数类型重定义为Uint

//*********************NRF24L01函数定义****************************

void delayms(uint t);//毫秒延时

void init_NRF24L01(void); //模块初始化函数

uchar SPI_RW(uchar reg); //基本SPI读写时序

uchar SPI_Read(uchar reg); //从寄存器reg读一个字节

void SetRX_Mode(void); //设置接收模式

uchar SPI_RW_Reg(uchar reg, uchar value); //向寄存器写一个字节

uchar SPI_Read_Buf(uchar reg, uchar *pBuf, uchar uchars); // 从缓冲器读出uchars字节的数据uchar SPI_Write_Buf(uchar reg, uchar *pBuf, uchar uchars); //向缓冲器写进uchars字节的数据void nRF24L01_TxPacket(uchar * tx_buf); //启动一次发送

uchar nRF24L01_RxPacket(uchar * rx_buf);//读取接收的数据,放入rx_buf数组

//***********NRF24L01模块IO端口定义******************

sbit CE=P1^0;

sbit CSN =P1^1;

sbit SCK =P1^2;

相关文档
最新文档