哈哈,穷吊死一个,自己做的一个超简单的板还没有电源提供,只得借助我的大开发板啦。其实这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. c++学习笔记——构造函数

    构造函数定义:每个类都分别定义了它的对象被初始化的方式,类通过一个或几个特殊的成员函数来控制其对象的初始化过程,这些函数叫做构造函数. 需要注意的几点: 1:构造函数不能被声明为const的,当我们创 ...

  2. static 变量

    被static 修饰的变量全部称为静态变量.所有的静态变量全部存储在静态存储区.按静态变量定义的位置不同,又分为全局静态变量和局部静态变量. 1)全局静态变量 在全局变量的说明前加上static,就是 ...

  3. const实现

    [const实现]

  4. 使用C# WinForm窗体制作经理评分项目 ——S2 2.2

    在窗口加载时初始化三个员工对象 用数组存放 这是员工类的大致字段和属性. 在FrmMain中给对象数组附初值 以上 FrmMain中用一个ListView控件展示员工信息,通过以上代码将对象数组中的内 ...

  5. html-5 --html5教程article、footer、header、nav、section使用

    header header元素是一种具有引导和导航作用的辅助元素.通常,header元素可以包含一个区块的标题(如h1至h6,或者hgroup元素标签),但也可以包含其他内容,例如数据表格.搜索表单或 ...

  6. 基于阿里云服务器的git服务器搭建

    使用阿里云Ubuntu 12.0.4 64位操作系统做git服务器. 首先git服务器有两种访问方式可以选择:http方式和ssh的方式,http方式更容易使用. 1.http方式的git服务器搭建以 ...

  7. Java学习笔记15--引用传递

    范例一 class Demo{ public int temp = 30; } public class T { public static void main(String[] args) { // ...

  8. 自定义ImageView回调实现手动改变圆环大小

    //-----------------自定义MyView继承Imageview------------------------------- package com.bw.yuanhuan; impo ...

  9. SAS文档:简单的随机点名器

    本次实验,我们设计了一个简单的随机点名系统,下面我来介绍一下它的SRS文档. 1.功能需求: 1.1 模块1 在此模块中,我们设置了RandomName类,创建一个随机点名器,里面加入了所在课程的名单 ...

  10. [Shell]Bash变量:环境变量的配置文件和登录信息

    ----------------------------------------------------------------------------------------- 只有把环境变量放入配 ...