哈哈,穷吊死一个,自己做的一个超简单的板还没有电源提供,只得借助我的大开发板啦。其实这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. UVa 490 - Rotating Sentences

    https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=94&page=s ...

  2. hello

    #include <iostream> int main() { std::cout << "请输入两个数字:" << std::endl; , ...

  3. C#版SQLHelper.cs类

    using System; using System.Data; using System.Xml; using System.Data.SqlClient; using System.Collect ...

  4. rhel7系统破root开机密码

    破密码: 开机菜单栏第一栏按e,在linux16行尾,加入rd.break console=tty0 ctrl +x继续启动 mount -o remount,rw /sysroot #重新挂载sys ...

  5. shell脚本批量处理字符串

    上周五运营那边给了一份手机号码的excle,要求查询出所有对应于用户编号的用户的信息.这个时候遇到了一个问题就是,需要查询的用户数量很多,不可能一个一个去查,而excle中的格式又不符合sqlquer ...

  6. Mysql导入数据库的方法

    mysql导入数据库的方法 | 浏览:41023 | 更新:2012-11-01 19:45 1 2 3 4 5 6 7 分步阅读 MySQL是一个中.小型关系型数据库管理系统,由瑞典MySQL AB ...

  7. nodejs: C++扩展

    Nodejs的C++扩展首先保证nodejs和v8都正确安装 下载NodeJS源码,我的放在D盘. NodeJS的C++扩展要用VS2010开发,新建一个空的Win32控制台项目,右键——属性,在常规 ...

  8. 窗口类(Window Class)概述

    windows窗口编程(通常意义上的win32)有几个比较核心的概念:入口函数WinMain.窗口类Window Class.窗口过程.消息处理机制.通用控件.本文主要介绍窗口类的相关概念,包括: 窗 ...

  9. 4.20-4.24程序设计基础结束,UID课程

    通过其他方式实现string函数的效果,效果有比较数组字符.显示字符串长度.复制字符串等.在比较字符串的时候,首先是比较字符串的长度,当长度一样的时候进行不同位置上一一对应的字符比较大小.关于字符长度 ...

  10. iOS Swipe Tableviewcell(左右滑动出现按钮)

    1.背景 看到QQ的左右滑动Tableviewcell时可以出现多个菜单,觉得很高大上,因为没这种需求, 也只是需要一个删除按钮,这个系统已经帮我们实现了,只需要实现几个代理就可以,做出左划 出现删除 ...