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

 

 

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

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

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

 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 

你可能感兴趣的:(单片机)