哈哈,穷吊死一个,自己做的一个超简单的板还没有电源提供,只得借助我的大开发板啦。其实这2个模块是完全可以分开的,无线嘛,你懂得!进入正题,这个实验的功能就是一个发送模块(大的那个板)连接4个按键,通过按动这4个不同的按键来发送4种不同的命令,来控制接收端(小的板)点亮4个不同的灯。

>_<!首先是发送模块:

 void main()
{
uchar Tx_Buf1[]={}; //发送的信息1
uchar Rx_Buf[]; //接收到的数据暂存器,最多32字节数据
init_NRF24L01();
LED6=; //初始灯6熄灭 while(NRF24L01_Check()) //检查不到24l01则报警
{
beep=;
delay_ms();
beep=;
delay_ms();
}
while()
{
RX_Mode(); //接收模式
while(!nRF24L01_RxPacket(Rx_Buf)) //等待接收数据,返回1则接收到数据,在等待接收数据期间,可以随时变成发送模式
{
if(KEY1==) //按了按键1,则变成发送模式,发送对应数据,发送完后变成接收模式
{
delay_ms();//消抖动
if(KEY1==)
{
while(!KEY1);
TX_Mode(); //发送模式
Tx_Buf1[]=; //将1发送过去
nRF24L01_TxPacket(Tx_Buf1); //发送命令数据
LED6=;
delay_ms();
LED6=;
delay_ms(); //发送后LED1闪一下
break; //退出最近的循环,从而变回接收模式,这句关键
}
}
else if(KEY2==)
{
delay_ms();//消抖动
if(KEY2==)
{
while(!KEY2);
TX_Mode(); //发送模式
Tx_Buf1[]=; //将2发送过去
nRF24L01_TxPacket(Tx_Buf1); //发送命令数据
LED6=;
delay_ms();
LED6=;
delay_ms();
break; //退出最近的循环,从而变回接收模式,这句关键
}
}
else if(KEY3==)
{
delay_ms();//消抖动
if(KEY3==)
{
while(!KEY3);
TX_Mode(); //发送模式
Tx_Buf1[]=; //将3发送过去
nRF24L01_TxPacket(Tx_Buf1); //发送命令数据
LED6=;
delay_ms();
LED6=;
delay_ms();
break; //退出最近的循环,从而变回接收模式,这句关键
}
}
else if(KEY4==) //按了按键8,则变成发送模式,发送对应数据,发送完后变成接收模式
{
delay_ms();//消抖动
if(KEY4==)
{
while(!KEY4);
TX_Mode(); //发送模式
Tx_Buf1[]=; //将4发送过去
nRF24L01_TxPacket(Tx_Buf1); //发送命令数据
LED6=;
delay_ms();
LED6=;
delay_ms();
break; //退出最近的循环,从而变回接收模式,这句关键
}
}
}
if(Rx_Buf[]==) //若接收到对应的数据则实现对应功能
{
Rx_Buf[]=; //清空数据
LED6=;
delay_ms();
LED6=;
delay_ms(); //接收到数据 后闪烁
}
}
}

第8~14行检测nRF24L01是否存在,如果不存在就报警,这里把beep映射到一个蜂鸣器的引脚;接下来进入主循环,首先设置为接收模式,循环检测是否收到数据,如果收到数据就直接跳到85行执行LED6的闪烁功能,在循环检测是否收到数据期间,还可以检测是否有按键按下,并转换为发送模式将对应命令发送出去;总的来说比较简单,这里就不做详解,此外要有一个nRF24L01的51驱动文件,网上很多,自己写起来有点烦~调试可能会出现很多错误!

>_<!接收端:

 void main()
{
uchar Tx_Buf1[]={}; //发送的信息1
uchar Rx_Buf[]; //接收到的数据暂存器,最多32字节数据
init_NRF24L01();
LED6=; //初始灯6熄灭 while(NRF24L01_Check()) //检查不到24l01则报警
{
beep=;
delay_ms();
beep=;
delay_ms();
}
while()
{
RX_Mode(); //接收模式
while(!nRF24L01_RxPacket(Rx_Buf)) //等待接收数据,返回1则接收到数据,在等待接收数据期间,可以随时变成发送模式
{
if(KEY8==) //按了按键8,则变成发送模式,发送对应数据,发送完后变成接收模式
{
delay_ms();//消抖动
if(KEY8==)
{
while(!KEY8);
TX_Mode(); //发送模式
nRF24L01_TxPacket(Tx_Buf1); //发送命令数据
LED6=;
delay_ms();
LED6=;
delay_ms(); //发送后LED6闪一下
break; //退出最近的循环,从而变回接收模式,这句关键
}
}
}
////if(Rx_Buf[0]==1) //若接收到对应的数据则实现对应功能
////{
//// Rx_Buf[0]=0; //清空数据
//// LED6=0;
//// delay_ms(300);
//// LED6=1;
//// delay_ms(300); //接收到数据 后闪烁
////}
switch(Rx_Buf[]){//对数据进行分析来控制灯亮
case :
break;
case :
Rx_Buf[]=; //清空数据
LED1=;
delay_ms();
LED1=;
delay_ms();
break;
case :
Rx_Buf[]=; //清空数据
LED2=;
delay_ms();
LED2=;
delay_ms();
break;
case :
Rx_Buf[]=; //清空数据
LED3=;
delay_ms();
LED3=;
delay_ms();
break;
default:
Rx_Buf[]=; //清空数据
LED4=;
delay_ms();
LED4=;
delay_ms();
break;
}
}
}

这个就不解释啦,和发送的差不多,就是等待接收,接收的时候还能检测按键然后将命令发送过去,当收到数据时,就转到下面的switch对命令进行解析,来实现不同LED灯的亮灭。

资源下载链接:http://pan.baidu.com/s/1kTyZiXT

[51单片机] nRF24L01 无线模块 测试 按键-灯-远程控制的更多相关文章

  1. [51单片机] nRF24L01 无线模块 串口法命令 通过无线控制另一个的灯

    >_<!概述: 这是在上一个的基础上通过按键发送4种不同命令来控制接收端的LED灯亮的改进版(上一个:http://www.cnblogs.com/zjutlitao/p/3840013. ...

  2. 51单片机对无线模块nRF24L01简单的控制收发程序

    它的一些物理特性如工作频段.供电电压.数据传输速率就不详细介绍了,直接上代码. 1.首先是发送端: // Define SPI pins #include <reg51.h> #defin ...

  3. nRF2401A/nRF24L01/nRF24L01+无线模块最常见问题汇集(转)

    俗话说:每个人一生下来什么都会的,都是通过自己努力和探索出来的,NRF系列芯片,刚开始都好奇心加兴趣才来捣鼓它的,刚开始做硬件和软件,没有收发数据弄得整个人头都快炸开了,所以在此和大家分享一下前辈的经 ...

  4. STC8H开发(五): SPI驱动nRF24L01无线模块

    目录 STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解) STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解) ST ...

  5. nRF24L01无线模块笔记

    nRF24L01模块 官网链接: https://www.nordicsemi.com/Products/nRF24-series 常见的无线收发模块, 工作在2.4GHz频段, 适合近距离遥控和数据 ...

  6. 51单片机 HC05蓝牙模块

    一.注意事项 1.烧写程序时,要把蓝牙tx,rx信号线拔掉,对烧写程序有影响. 2.执行HC05集命令时,均以\r\n结尾.串口中断若选择“发送新行”时,不用添加\r\n.原理相同. 二.准备软硬件 ...

  7. 51单片机通过ESP8266模块与手机进行通讯(单片机)

    相关连接和资料下载: 个人博客 资料下载 Step1:配置ESP8266 通过USB转TTL模块把ESP8266模块和电脑连接起来,如图: 把ESP8266模块的VCC,GND,CH_PD,UTXD, ...

  8. 树莓派与Arduino Leonardo使用NRF24L01无线模块通信之基于RF24库 (一) 配置与测试

    引脚连接说明 与树莓派的连线 NRF24L01 => 树莓派 GND          =>   GND VCC          =>    3.3V CE           = ...

  9. NRF24L01无线模块的使用

    NRF2401芯片pin定义 NRF24L01模块pin定义 VCC 脚接电压范围为 1.9V~3.6V 之间, 不能在这个区间之外, 超过 3.6V 将会烧毁模块, 推荐电压 3.3V 左右 除电源 ...

随机推荐

  1. jquery 找不到live方法解决

    http://stackoverflow.com/questions/15573645/typeerror-live-is-not-a-function

  2. 64位Win7下运行ASP+Access网站的方法

    64位Win7下运行ASP+Access网站的方法 近日系统升级为WIN7 64位之后,突然发现原本运行正常的ASP+ACCESS网站无法正常连接数据库. 网上搜索多次,终于解决了问题,总结了几条经验 ...

  3. Servlet 利用Cookie实现一周内不重复登录

    import java.io.IOException;import java.io.PrintWriter; import javax.servlet.ServletException;import ...

  4. Python-实现对表插入百万条数据

    新手小白写的,我自己都不知道对不对,先写下来记着,以后掌握更多Python知识后,再来看下写的对不对. 题目:造一百万条大学生的基本信息(学校.专业.姓名.学号) 分析思路:利用Python的MySQ ...

  5. (十) 一起学 Unix 环境高级编程 (APUE) 之 线程控制

    . . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...

  6. Dynamic CRM2016在一台本地服务器安装部署

    在本地单独一台服务器上安装部署CRM2016时需要提前安装好CRM软件需要的必备软件,具体需要安装的组件如下截图:其中required为必须具备的安装组件.license可以采用微软官网的90天测试版 ...

  7. MySql表名的大小写问题

    MySQL在Linux下数据库名.表名.列名.别名大小写规则是这样的: 1.数据库名与表名是严格区分大小写的: 2.表的别名是严格区分大小写的: 3.列名与列的别名在所有的情况下均是忽略大小写的: 4 ...

  8. Maven 自动部署

    自动部署到Tomcat Maven 3.2.5 JDK 1.7 Tomcat 7 首先在Tomcat里配置deploy的用户(tomcat根目录/conf/tomcat-users.xml): < ...

  9. setAttribute()和getAttibute(),getParameter()

    request.setAttribute("key",value)方法给主键设置一个值, request.getAttribute("key")方法从上述设置的 ...

  10. 使用并行的方法计算斐波那契数列 (Fibonacci)

    更新:我的同事Terry告诉我有一种矩阵运算的方式计算斐波那契数列,更适于并行.他还提供了利用TBB的parallel_reduce模板计算斐波那契数列的代码(在TBB示例代码的基础上修改得来,比原始 ...