<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 51單片機 nRF24L01 無線模塊 測試 按鍵燈遠程控制

          51單片機 nRF24L01 無線模塊 測試 按鍵燈遠程控制

          作者: 時間:2016-11-19 來源:網(wǎng)絡 收藏
          入正題,這個實驗的功能就是一個發(fā)送模塊(大的那個板)連接4個按鍵,通過按動這4個不同的按鍵來發(fā)送4種不同的命令,來控制接收端(小的板)點亮4個不同的燈。

          本文引用地址:http://www.ex-cimer.com/article/201611/318439.htm

          >_

          1 void main()2 {3      uchar Tx_Buf1[]={1};    //發(fā)送的信息1 4      uchar Rx_Buf[32];      //接收到的數(shù)據(jù)暫存器,最多32字節(jié)數(shù)據(jù)  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))     //等待接收數(shù)據(jù),返回1則接收到數(shù)據(jù),在等待接收數(shù)據(jù)期間,可以隨時變成發(fā)送模式  19         {20             if(KEY1==0)                         //按了按鍵1,則變成發(fā)送模式,發(fā)送對應數(shù)據(jù),發(fā)送完后變成接收模式 21             {    22                 delay_ms(5);//消抖動 23                 if(KEY1==0)24                 {25                      while(!KEY1);26                     TX_Mode();                         //發(fā)送模式 27                     Tx_Buf1[0]=1;                    //將1發(fā)送過去28                     nRF24L01_TxPacket(Tx_Buf1);        //發(fā)送命令數(shù)據(jù)29                     LED6=0;30                     delay_ms(300);31                     LED6=1;32                     delay_ms(300);                    //發(fā)送后LED1閃一下 33                     break;                            //退出最近的循環(huán),從而變回接收模式,這句關鍵34                  }    35              }36              else if(KEY2==0)                     37              {    38                 delay_ms(5);//消抖動 39                 if(KEY2==0)40                 {41                      while(!KEY2);42                     TX_Mode();                         //發(fā)送模式 43                     Tx_Buf1[0]=2;                    //將2發(fā)送過去44                     nRF24L01_TxPacket(Tx_Buf1);        //發(fā)送命令數(shù)據(jù)45                     LED6=0;46                     delay_ms(300);47                     LED6=1;48                     delay_ms(300);                    49                     break;                            //退出最近的循環(huán),從而變回接收模式,這句關鍵50                  }    51               }52               else if(KEY3==0)                         53               {    54                 delay_ms(5);//消抖動 55                 if(KEY3==0)56                 {57                      while(!KEY3);58                     TX_Mode();                         //發(fā)送模式 59                     Tx_Buf1[0]=3;                    //將3發(fā)送過去60                     nRF24L01_TxPacket(Tx_Buf1);        //發(fā)送命令數(shù)據(jù)61                     LED6=0;62                     delay_ms(300);63                     LED6=1;64                     delay_ms(300);                    65                     break;                            //退出最近的循環(huán),從而變回接收模式,這句關鍵66                  }    67               }68               else if(KEY4==0)                         //按了按鍵8,則變成發(fā)送模式,發(fā)送對應數(shù)據(jù),發(fā)送完后變成接收模式 69               {    70                 delay_ms(5);//消抖動 71                 if(KEY4==0)72                 {73                      while(!KEY4);74                     TX_Mode();                         //發(fā)送模式 75                     Tx_Buf1[0]=4;                    //將4發(fā)送過去76                     nRF24L01_TxPacket(Tx_Buf1);        //發(fā)送命令數(shù)據(jù)77                     LED6=0;78                     delay_ms(300);79                     LED6=1;80                     delay_ms(300);                    81                     break;                            //退出最近的循環(huán),從而變回接收模式,這句關鍵82                  }    83               }84          }85          if(Rx_Buf[0]==1)                               //若接收到對應的數(shù)據(jù)則實現(xiàn)對應功能 86          {87              Rx_Buf[0]=0;                //清空數(shù)據(jù) 88              LED6=0;89               delay_ms(300);90               LED6=1;91               delay_ms(300);                //接收到數(shù)據(jù) 后閃爍      92          }93     }94 }

          第8~14行檢測nRF24L01是否存在,如果不存在就報警,這里把beep映射到一個蜂鳴器的引腳;接下來進入主循環(huán),首先設置為接收模式,循環(huán)檢測是否收到數(shù)據(jù),如果收到數(shù)據(jù)就直接跳到85行執(zhí)行LED6的閃爍功能,在循環(huán)檢測是否收到數(shù)據(jù)期間,還可以檢測是否有按鍵按下,并轉換為發(fā)送模式將對應命令發(fā)送出去;總的來說比較簡單,這里就不做詳解,此外要有一個nRF24L01的51驅動文件,網(wǎng)上很多,自己寫起來有點煩~調試可能會出現(xiàn)很多錯誤!

          >_

          1 void main()2 {3      uchar Tx_Buf1[]={1};    //發(fā)送的信息1 4      uchar Rx_Buf[32];      //接收到的數(shù)據(jù)暫存器,最多32字節(jié)數(shù)據(jù)  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))     //等待接收數(shù)據(jù),返回1則接收到數(shù)據(jù),在等待接收數(shù)據(jù)期間,可以隨時變成發(fā)送模式  19         {20             if(KEY8==0)                         //按了按鍵8,則變成發(fā)送模式,發(fā)送對應數(shù)據(jù),發(fā)送完后變成接收模式 21             {    22                 delay_ms(5);//消抖動 23                 if(KEY8==0)24                 {25                      while(!KEY8);26                     TX_Mode();     //發(fā)送模式 27                     nRF24L01_TxPacket(Tx_Buf1);        //發(fā)送命令數(shù)據(jù)28                     LED6=0;29                     delay_ms(300);30                     LED6=1;31                     delay_ms(300);                    //發(fā)送后LED6閃一下 32                     break;                            //退出最近的循環(huán),從而變回接收模式,這句關鍵33                  }    34              }35          }36          //1//if(Rx_Buf[0]==1)                               //若接收到對應的數(shù)據(jù)則實現(xiàn)對應功能 37          //1//{38          //1//   Rx_Buf[0]=0;                //清空數(shù)據(jù) 39          //1//   LED6=0;40          //1//     delay_ms(300);41          //1//     LED6=1;42          //1//     delay_ms(300);                //接收到數(shù)據(jù) 后閃爍      43          //1//}44         switch(Rx_Buf[0]){//對數(shù)據(jù)進行分析來控制燈亮45         case 0:46             break;47         case 1:48             Rx_Buf[0]=0;                //清空數(shù)據(jù) 49             LED1=0;50             delay_ms(300);51             LED1=1;52             delay_ms(300);    53             break;54         case 2:55             Rx_Buf[0]=0;                //清空數(shù)據(jù) 56             LED2=0;57             delay_ms(300);58             LED2=1;59             delay_ms(300);    60             break;61         case 3:62             Rx_Buf[0]=0;                //清空數(shù)據(jù) 63             LED3=0;64             delay_ms(300);65             LED3=1;66             delay_ms(300);    67             break;68         default:69             Rx_Buf[0]=0;                //清空數(shù)據(jù) 70             LED4=0;71             delay_ms(300);72             LED4=1;73             delay_ms(300);    74             break;75         }         76     }77 }

          這個就不解釋啦,和發(fā)送的差不多,就是等待接收,接收的時候還能檢測按鍵然后將命令發(fā)送過去,當收到數(shù)據(jù)時,就轉到下面的switch對命令進行解析,來實現(xiàn)不同LED燈的亮滅。



          評論


          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();