[51单片机] nRF24L01 无线模块 测试 按键-灯-远程控制

简介:


 

 

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

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

复制代码
 1 void main()
 2 {
 3      uchar Tx_Buf1[]={1};    //发送的信息1 
 4      uchar Rx_Buf[32];      //接收到的数据暂存器,最多32字节数据  
 5      init_NRF24L01();
 6      LED6=1;                //初始灯6熄灭   
 7 
 8     while(NRF24L01_Check())                    //检查不到24l01则报警 
 9     {
10         beep=0;
11         delay_ms(200);
12         beep=1;
13         delay_ms(200);
14     }
15     while(1)
16     {    
17         RX_Mode();                            //接收模式  
18         while(!nRF24L01_RxPacket(Rx_Buf))     //等待接收数据,返回1则接收到数据,在等待接收数据期间,可以随时变成发送模式  
19         {
20             if(KEY1==0)                         //按了按键1,则变成发送模式,发送对应数据,发送完后变成接收模式 
21             {    
22                 delay_ms(5);//消抖动 
23                 if(KEY1==0)
24                 {
25                      while(!KEY1);
26                     TX_Mode();                         //发送模式 
27                     Tx_Buf1[0]=1;                    //将1发送过去
28                     nRF24L01_TxPacket(Tx_Buf1);        //发送命令数据
29                     LED6=0;
30                     delay_ms(300);
31                     LED6=1;
32                     delay_ms(300);                    //发送后LED1闪一下 
33                     break;                            //退出最近的循环,从而变回接收模式,这句关键
34                  }    
35              }
36              else if(KEY2==0)                     
37              {    
38                 delay_ms(5);//消抖动 
39                 if(KEY2==0)
40                 {
41                      while(!KEY2);
42                     TX_Mode();                         //发送模式 
43                     Tx_Buf1[0]=2;                    //将2发送过去
44                     nRF24L01_TxPacket(Tx_Buf1);        //发送命令数据
45                     LED6=0;
46                     delay_ms(300);
47                     LED6=1;
48                     delay_ms(300);                    
49                     break;                            //退出最近的循环,从而变回接收模式,这句关键
50                  }    
51               }
52               else if(KEY3==0)                         
53               {    
54                 delay_ms(5);//消抖动 
55                 if(KEY3==0)
56                 {
57                      while(!KEY3);
58                     TX_Mode();                         //发送模式 
59                     Tx_Buf1[0]=3;                    //将3发送过去
60                     nRF24L01_TxPacket(Tx_Buf1);        //发送命令数据
61                     LED6=0;
62                     delay_ms(300);
63                     LED6=1;
64                     delay_ms(300);                    
65                     break;                            //退出最近的循环,从而变回接收模式,这句关键
66                  }    
67               }
68               else if(KEY4==0)                         //按了按键8,则变成发送模式,发送对应数据,发送完后变成接收模式 
69               {    
70                 delay_ms(5);//消抖动 
71                 if(KEY4==0)
72                 {
73                      while(!KEY4);
74                     TX_Mode();                         //发送模式 
75                     Tx_Buf1[0]=4;                    //将4发送过去
76                     nRF24L01_TxPacket(Tx_Buf1);        //发送命令数据
77                     LED6=0;
78                     delay_ms(300);
79                     LED6=1;
80                     delay_ms(300);                    
81                     break;                            //退出最近的循环,从而变回接收模式,这句关键
82                  }    
83               }
84          }
85          if(Rx_Buf[0]==1)                               //若接收到对应的数据则实现对应功能 
86          {
87              Rx_Buf[0]=0;                //清空数据 
88              LED6=0;
89               delay_ms(300);
90               LED6=1;
91               delay_ms(300);                //接收到数据 后闪烁      
92          }
93     }
94 }
复制代码

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

 

>_<!接收端:

复制代码
 1 void main()
 2 {
 3      uchar Tx_Buf1[]={1};    //发送的信息1 
 4      uchar Rx_Buf[32];      //接收到的数据暂存器,最多32字节数据  
 5      init_NRF24L01();
 6      LED6=1;                //初始灯6熄灭   
 7 
 8     while(NRF24L01_Check())                    //检查不到24l01则报警 
 9     {
10         beep=0;
11         delay_ms(200);
12         beep=1;
13         delay_ms(200);
14     }
15     while(1)
16     {    
17         RX_Mode();                            //接收模式  
18         while(!nRF24L01_RxPacket(Rx_Buf))     //等待接收数据,返回1则接收到数据,在等待接收数据期间,可以随时变成发送模式  
19         {
20             if(KEY8==0)                         //按了按键8,则变成发送模式,发送对应数据,发送完后变成接收模式 
21             {    
22                 delay_ms(5);//消抖动 
23                 if(KEY8==0)
24                 {
25                      while(!KEY8);
26                     TX_Mode();     //发送模式 
27                     nRF24L01_TxPacket(Tx_Buf1);        //发送命令数据
28                     LED6=0;
29                     delay_ms(300);
30                     LED6=1;
31                     delay_ms(300);                    //发送后LED6闪一下 
32                     break;                            //退出最近的循环,从而变回接收模式,这句关键
33                  }    
34              }
35          }
36          //1//if(Rx_Buf[0]==1)                               //若接收到对应的数据则实现对应功能 
37          //1//{
38          //1//   Rx_Buf[0]=0;                //清空数据 
39          //1//   LED6=0;
40          //1//     delay_ms(300);
41          //1//     LED6=1;
42          //1//     delay_ms(300);                //接收到数据 后闪烁      
43          //1//}
44         switch(Rx_Buf[0]){//对数据进行分析来控制灯亮
45         case 0:
46             break;
47         case 1:
48             Rx_Buf[0]=0;                //清空数据 
49             LED1=0;
50             delay_ms(300);
51             LED1=1;
52             delay_ms(300);    
53             break;
54         case 2:
55             Rx_Buf[0]=0;                //清空数据 
56             LED2=0;
57             delay_ms(300);
58             LED2=1;
59             delay_ms(300);    
60             break;
61         case 3:
62             Rx_Buf[0]=0;                //清空数据 
63             LED3=0;
64             delay_ms(300);
65             LED3=1;
66             delay_ms(300);    
67             break;
68         default:
69             Rx_Buf[0]=0;                //清空数据 
70             LED4=0;
71             delay_ms(300);
72             LED4=1;
73             delay_ms(300);    
74             break;
75         }         
76     }
77 }
复制代码

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

 

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





本文转自beautifulzzzz博客园博客,原文链接:http://www.cnblogs.com/zjutlitao/p/3840013.html,如需转载请自行联系原作者

相关文章
|
2月前
|
安全
DC电源模块的安全性能评估与测试方法
DC电源模块的安全性能评估与测试方法 DC电源模块的安全性能评估与测试方法应包括以下几个方面: 1. 输入安全性测试:包括输入电压范围、输入电压稳定性、输入电流范围、输入电流保护等方面的测试。测试方法可以是逐步增加输入电压或输入电流,观察模块的工作状态和保护功能。
DC电源模块的安全性能评估与测试方法
|
2月前
|
安全 测试技术
BOSHIDA DC电源模块的安全性能评估与测试方法
BOSHIDA DC电源模块的安全性能评估与测试方法
 BOSHIDA DC电源模块的安全性能评估与测试方法
|
2月前
|
测试技术 Linux
Linux(8)Debain系统测试EC25-EUX模块usbnet0(qmi qcm)问题点
Linux(8)Debain系统测试EC25-EUX模块usbnet0(qmi qcm)问题点
96 0
|
2月前
|
算法
m基于OFDM+QPSK和LDPC编译码以及MMSE信道估计的无线图像传输matlab仿真,输出误码率,并用图片进行测试
MATLAB2022a仿真实现了无线图像传输的算法,包括OFDM、QPSK调制、LDPC编码和MMSE信道估计。OFDM抗频率选择性衰落,QPSK用相位表示二进制,LDPC码用于前向纠错,MMSE估计信道响应。算法流程涉及编码、调制、信道估计、均衡、解码和图像重建。MATLAB代码展示了从串行数据到OFDM信号的生成,经过信道模型、噪声添加,再到接收端的信道估计和解码过程,最终计算误码率。
41 1
|
29天前
|
测试技术 Python
Python教程:利用timeit模块对代码进行性能测试
在Python中,了解代码的性能是优化和改进的关键。timeit模块是Python标准库中的一个工具,用于测量代码片段的执行时间。本文将介绍timeit模块的各种接口、命令行使用方法以及如何对代码中的函数或类进行性能测试。
25 3
|
9天前
|
传感器 缓存 数据可视化
毕设(六)——通过pico用NB模块传输测试
毕设(六)——通过pico用NB模块传输测试
|
9天前
|
网络协议 物联网 定位技术
毕设(二)——NB-IOT通信模块(nb卡通信测试)+gps定位
毕设(二)——NB-IOT通信模块(nb卡通信测试)+gps定位
|
2月前
探讨AC/DC电源模块的可靠性设计和测试方法
探讨AC/DC电源模块的可靠性设计和测试方法
探讨AC/DC电源模块的可靠性设计和测试方法
|
2月前
BOSHIDA AC/DC电源模块的可靠性设计与测试方法
BOSHIDA AC/DC电源模块的可靠性设计与测试方法
BOSHIDA  AC/DC电源模块的可靠性设计与测试方法
|
2月前
|
数据采集 JSON 数据格式
2024年最新【python基础教程】常用内置模块(1),2024年最新头条测试面试
2024年最新【python基础教程】常用内置模块(1),2024年最新头条测试面试

热门文章

最新文章