[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 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM