51单片机应用之无线通讯模块NRF24L01+
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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;