微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 51单片机 nRF24L01 无线模块 测试 按键灯远程控制

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

时间:11-19 来源:互联网 点击:

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 }

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top