標(biāo)題: 基于51單片機(jī)的nrf24l01無線的接受和發(fā)射程序 [打印本頁]

作者: 尋跡隨緣    時(shí)間: 2017-8-8 14:51
標(biāo)題: 基于51單片機(jī)的nrf24l01無線的接受和發(fā)射程序
通過燈的閃爍來判斷數(shù)據(jù)的接受和發(fā)射
有接收端和發(fā)射段的程序

    如果24L01用reg51那么兩個(gè)設(shè)備都要用reg51,如果用reg52就都得用reg52!
    PC通過串口發(fā)送給單片機(jī)命令[相當(dāng)于協(xié)調(diào)器],單片機(jī)把命令通過24L01無線發(fā)送給另一個(gè)單片機(jī),另一個(gè)單片機(jī)控制燈LED1,LED2,LED3,LED4閃爍。


無線發(fā)射程序:
  1. #include"2401.h"

  2. #define uint unsigned int
  3. #define uchar unsigned char

  4. //1//sbit KEY1=P0^0;                         //發(fā)送按鍵
  5. //1//sbit KEY2=P0^1;
  6. //1//sbit KEY3=P0^2;
  7. //1//sbit KEY4=P0^3;
  8. sbit beep=P2^3;                                        //喇叭
  9. sbit LED6=P1^6;                                         //發(fā)送數(shù)據(jù)時(shí)顯示燈+接收到數(shù)據(jù)后的功能實(shí)現(xiàn)燈

  10. uchar Tx_Buf1[]={1};                        //發(fā)送的信息1
  11. uchar Rx_Buf[32];                                  //接收到的數(shù)據(jù)暫存器,最多32字節(jié)數(shù)據(jù)  
  12. uchar uart_flag,a;                        //串口接收標(biāo)志【收到數(shù)據(jù)就置1】,a為接收到的數(shù)據(jù)
  13. /*------------------------------------------------
  14. 延時(shí)函數(shù)
  15. ------------------------------------------------*/
  16. void delay_ms(uint z)                        //延時(shí)函數(shù)
  17. {
  18.         uint y;
  19.         while(z--)
  20.                 for(y=110;y>0;y--);
  21. }
  22. /*------------------------------------------------
  23. 定義UART_Init函數(shù)
  24. ------------------------------------------------*/
  25. void UART_Init(void)
  26. {
  27.         SCON = 0x50;                 // 設(shè)定串行口工作方式,8位數(shù)據(jù)位,允許接收
  28.     T2CON = 0x34;                 //設(shè)置定時(shí)器2,作為波特率發(fā)生器
  29.         RCAP2L = 0XDC;          //9600波特率的低8位
  30.         RCAP2H = 0XFF;                //9600波特率的高8位       
  31.         ES = 1;                                 //允許串口中斷
  32.         EA = 1;                                 //允許總中斷
  33. }
  34. /*------------------------------------------------
  35. 定義UART_Send_Byte函數(shù)
  36. ------------------------------------------------*/
  37. void UART_Send_Byte(uchar byte)
  38. {
  39.         SBUF=byte;                          //緩沖區(qū)裝載要發(fā)送的字節(jié)數(shù)據(jù)
  40.         while(TI==0);                //等待發(fā)送完畢,TI標(biāo)志位會(huì)置1
  41.         TI=0;                                //清零發(fā)送完成標(biāo)志位
  42. }
  43. /*------------------------------------------------
  44. 串口接收中斷服務(wù)程序
  45. ------------------------------------------------*/
  46. void UART(void) interrupt 4
  47. {
  48.         if(RI)                                   //檢測(cè)接收完成標(biāo)志位置1
  49.         {
  50.                 RI=0;                        //清零接收完成標(biāo)志位
  51.                 a=SBUF;                        //讀取接收到的數(shù)據(jù)
  52.                 uart_flag = 1;        //中斷標(biāo)志位置1
  53.         }
  54. }
  55. /*------------------------------------------------
  56. main函數(shù)
  57. ------------------------------------------------*/
  58. void main()
  59. {
  60.          LED6=1;                                //初始燈6熄滅   
  61.          uart_flag=0;                        //串口標(biāo)志初始為0
  62.          init_NRF24L01();                //初始化24L01
  63.          UART_Init();                    //初始化串口

  64.          while(NRF24L01_Check())                                        //檢查不到24l01則報(bào)警
  65.          {
  66.                 beep=0;
  67.                 delay_ms(200);
  68.                 beep=1;
  69.                 delay_ms(200);
  70.          }
  71.          while(1)
  72.          {       
  73.                 RX_Mode();                                                        //接收模式  
  74.                 while(!nRF24L01_RxPacket(Rx_Buf))         //等待接收數(shù)據(jù),返回1則接收到數(shù)據(jù),在等待接收數(shù)據(jù)期間,可以隨時(shí)變成發(fā)送模式  
  75.             {
  76.                         if(uart_flag==1)                                //當(dāng)串口接受標(biāo)志為1表示有數(shù)據(jù)過來
  77.                         {
  78.                                 ES=0;                                                           //關(guān)串口中斷
  79.                        
  80.                                 TX_Mode();                                                 //發(fā)送模式
  81.                                 Tx_Buf1[0]=a-'0';                                        //將串口數(shù)據(jù)給發(fā)送緩沖區(qū)
  82.                             nRF24L01_TxPacket(Tx_Buf1);                //發(fā)送命令數(shù)據(jù)24L01
  83.                                 UART_Send_Byte('O');                        //向串口發(fā)送已經(jīng)傳送
  84.                                 UART_Send_Byte('K');
  85.                                 UART_Send_Byte(':');
  86.                                 UART_Send_Byte(a);
  87.                                 UART_Send_Byte('\n');
  88.                                 LED6=0;
  89.                             delay_ms(300);
  90.                                 LED6=1;
  91.                             delay_ms(300);                                        //發(fā)送后LED1閃一下

  92.                                 ES=1;                                                        //允許串口中斷
  93.                                 uart_flag=0;                                          //中斷標(biāo)志位置0
  94.                                 break;                                                        //退出最近的循環(huán),從而變回接收模式,這句關(guān)鍵
  95.                         }
  96.                  }
  97.                  if(Rx_Buf[0]==1)                                                           //若接收到對(duì)應(yīng)的數(shù)據(jù)則實(shí)現(xiàn)對(duì)應(yīng)功能
  98.                  {
  99.                      Rx_Buf[0]=0;                                //清空數(shù)據(jù)
  100.                      LED6=0;
  101.                           delay_ms(300);
  102.                           LED6=1;
  103.                           delay_ms(300);                                //接收到數(shù)據(jù) 后閃爍          
  104.                  }
  105.          }
  106. }
復(fù)制代碼

無線接收程序:
  1. #include"2401.h"

  2. #define uint unsigned int
  3. #define uchar unsigned char

  4. sbit KEY8=P3^7;                                         //發(fā)送按鍵
  5. sbit beep=P2^3;                                        //喇叭
  6. sbit LED6=P1^6;                                         //發(fā)送數(shù)據(jù)時(shí)顯示燈
  7. sbit LED1=P0^0;                                        //接收到數(shù)據(jù)后的功能實(shí)現(xiàn)燈
  8. sbit LED2=P0^1;
  9. sbit LED3=P0^2;
  10. sbit LED4=P0^3;  

  11. void delay_ms(uint z)                        //延時(shí)函數(shù)
  12. {
  13.         uint y;
  14.         while(z--)
  15.                 for(y=110;y>0;y--);
  16. }
  17. void main()
  18. {
  19.          uchar Tx_Buf1[]={1};        //發(fā)送的信息1
  20.          uchar Rx_Buf[32];          //接收到的數(shù)據(jù)暫存器,最多32字節(jié)數(shù)據(jù)  
  21.          init_NRF24L01();
  22.          LED6=1;                                //初始燈6熄滅   

  23.         while(NRF24L01_Check())                                        //檢查不到24l01則報(bào)警
  24.         {
  25.                 beep=0;
  26.                 delay_ms(200);
  27.                 beep=1;
  28.                 delay_ms(200);
  29.         }
  30.         while(1)
  31.         {       
  32.                 RX_Mode();                                                        //接收模式  
  33.                 while(!nRF24L01_RxPacket(Rx_Buf))         //等待接收數(shù)據(jù),返回1則接收到數(shù)據(jù),在等待接收數(shù)據(jù)期間,可以隨時(shí)變成發(fā)送模式  
  34.             {
  35.                         if(KEY8==0)                                                 //按了按鍵8,則變成發(fā)送模式,發(fā)送對(duì)應(yīng)數(shù)據(jù),發(fā)送完后變成接收模式
  36.                         {       
  37.                                 delay_ms(5);//消抖動(dòng)
  38.                                 if(KEY8==0)
  39.                                 {
  40.                                          while(!KEY8);
  41.                                         TX_Mode();         //發(fā)送模式
  42.                                     nRF24L01_TxPacket(Tx_Buf1);                //發(fā)送命令數(shù)據(jù)
  43.                                         LED6=0;
  44.                                     delay_ms(300);
  45.                                         LED6=1;
  46.                                     delay_ms(300);                                        //發(fā)送后LED6閃一下
  47.                                         break;                                                        //退出最近的循環(huán),從而變回接收模式,這句關(guān)鍵
  48.                                  }       
  49.                          }
  50.                  }
  51.                  //1//if(Rx_Buf[0]==1)                                                           //若接收到對(duì)應(yīng)的數(shù)據(jù)則實(shí)現(xiàn)對(duì)應(yīng)功能
  52.                  //1//{
  53.                  //1//   Rx_Buf[0]=0;                                //清空數(shù)據(jù)
  54.                  //1//   LED6=0;
  55.                  //1//         delay_ms(300);
  56.                  //1//         LED6=1;
  57.                  //1//         delay_ms(300);                                //接收到數(shù)據(jù) 后閃爍          
  58.                  //1//}
  59.                 switch(Rx_Buf[0]){//對(duì)數(shù)據(jù)進(jìn)行分析來控制燈亮
  60.                 case 0:
  61.                         break;
  62.                 case 1:
  63.                         Rx_Buf[0]=0;                                //清空數(shù)據(jù)
  64.                     LED1=0;
  65.                         delay_ms(300);
  66.                         LED1=1;
  67.                         delay_ms(300);       
  68.                         break;
  69.                 case 2:
  70.                         Rx_Buf[0]=0;                                //清空數(shù)據(jù)
  71.                     LED2=0;
  72.                         delay_ms(300);
  73.                         LED2=1;
  74.                         delay_ms(300);       
  75.                         break;
  76.                 case 3:
  77.                         Rx_Buf[0]=0;                                //清空數(shù)據(jù)
  78.                     LED3=0;
  79.                         delay_ms(300);
  80.                         LED3=1;
  81.                         delay_ms(300);       
  82.                         break;
  83.                 default:
  84.                         Rx_Buf[0]=0;                                //清空數(shù)據(jù)
  85.                     LED4=0;
  86.                         delay_ms(300);
  87.                         LED4=1;
  88.                         delay_ms(300);       
  89.                         break;
  90.                 }                
  91.         }
  92. }
復(fù)制代碼


全部資料下載地址:
【小成果】2、PC-單片機(jī)-單片機(jī)無線串口控制.zip (90.8 KB, 下載次數(shù): 1341)








作者: Dug    時(shí)間: 2018-3-16 12:45
謝謝樓主~~~~~~~~
作者: a455914479    時(shí)間: 2018-4-2 12:22
謝謝分享
作者: a455914479    時(shí)間: 2018-4-3 09:31
謝謝分享  下載了
作者: 曹1114    時(shí)間: 2018-5-3 11:42
很棒,蟹蟹٩('ω')و
作者: 2452873337    時(shí)間: 2018-5-6 17:45
大佬 求發(fā)一份資料 么么噠
作者: 甲魚嗎    時(shí)間: 2018-5-7 01:07
很好的一篇分享,編程的一些思路值得學(xué)習(xí),謝謝!
作者: lpwqgr    時(shí)間: 2018-5-23 21:23
謝謝分享
作者: sjlzzc    時(shí)間: 2018-6-10 12:25
很好的一篇分享,編程的一些思路值得學(xué)習(xí)
作者: 梁人杰    時(shí)間: 2018-6-10 14:54
謝謝很好
作者: chui    時(shí)間: 2018-8-2 10:26
謝謝樓主,解決了我的一個(gè)大問題
作者: forever一笙    時(shí)間: 2018-8-2 14:50
a455914479 發(fā)表于 2018-4-2 12:22
謝謝分享

可以,作為參考很有效
作者: 中恒電子asus    時(shí)間: 2018-8-4 13:43
謝謝分享  下載了

作者: congcong1234    時(shí)間: 2018-8-30 20:44
很不錯(cuò)
作者: lumingfei    時(shí)間: 2018-9-19 22:07
謝謝樓主
作者: 445512    時(shí)間: 2018-10-1 16:58
太好了。
作者: 張家大公子    時(shí)間: 2018-10-28 21:06
不錯(cuò)的分享,試了這么多天,終于解決了!感謝樓主!
作者: wantin    時(shí)間: 2018-11-14 10:57
very good
作者: wantin    時(shí)間: 2018-11-14 10:58
感謝樓主,爭(zhēng)取學(xué)習(xí)調(diào)試成功
作者: nwpchennan    時(shí)間: 2018-11-15 17:10
這個(gè)真不錯(cuò),點(diǎn)個(gè)贊
作者: tonggin    時(shí)間: 2018-11-21 15:39
最近想玩這個(gè)東西,不錯(cuò)的參考,贊你
作者: 凱……    時(shí)間: 2018-11-29 13:41
不知道博主現(xiàn)在還在不在,如果在,QQ  1483137642  有問題想問,希望博主幫助一下,因?yàn)楦厴I(yè)有關(guān),謝謝
作者: 凱……    時(shí)間: 2018-11-29 20:28
下載的為啥是空的
作者: ALGiki    時(shí)間: 2018-12-5 18:57
感謝分享,努力學(xué)習(xí)!

作者: 霹靂虎狗蛋    時(shí)間: 2018-12-31 17:36
謝謝分享
作者: cjzysw    時(shí)間: 2019-2-15 21:08
好東西!我要測(cè)試下,謝謝樓主!
作者: 666655    時(shí)間: 2019-2-28 18:09
感謝分享
作者: xqtop    時(shí)間: 2019-3-1 06:06
非常不錯(cuò),感謝分享。
作者: efefewfe    時(shí)間: 2019-3-1 12:36
求大佬分享給我一份,,,郵箱:492325650@qq.com   謝謝
作者: DK.Knight    時(shí)間: 2019-3-1 22:38
謝謝樓主 學(xué)習(xí)一下
作者: 拼命四郎    時(shí)間: 2019-3-7 10:32
謝謝大佬分享。
作者: ben0147    時(shí)間: 2019-3-9 20:56
謝謝分享!!!
作者: wwdec    時(shí)間: 2019-3-10 13:24
學(xué)習(xí)學(xué)習(xí)!。
作者: 菜用雞    時(shí)間: 2019-3-25 21:58
下載了,不過好像不可以加矩陣按鍵,就是按鍵控制小車方向
作者: 1355780619    時(shí)間: 2019-4-4 16:23
da佬分享給我一份,,,郵箱:1355780619@qq.com   謝謝
作者: 763900682    時(shí)間: 2019-5-8 18:33
謝謝分享
作者: 763900682    時(shí)間: 2019-5-8 18:33
謝謝分享
作者: 763900682    時(shí)間: 2019-5-8 20:29
謝謝分享  下載了
作者: 960138364    時(shí)間: 2019-5-10 17:28
謝謝分享
作者: 763900682    時(shí)間: 2019-5-11 16:22
謝謝分享,愛你哦
作者: xcj123    時(shí)間: 2019-5-11 23:36

謝謝分享  下載了
作者: 愛學(xué)習(xí)的路飛    時(shí)間: 2019-5-26 21:39
非常感謝!
作者: yfan    時(shí)間: 2019-5-27 21:18
大佬分享我一份,yfantrue@outlook.com
作者: 52Chip    時(shí)間: 2019-6-10 22:59
多謝樓主分享
作者: student1023    時(shí)間: 2019-6-25 11:21
很好的一篇分享
作者: serk    時(shí)間: 2019-6-25 13:07
謝謝分享。。!
作者: 王昌齡    時(shí)間: 2019-7-1 14:42
很給力!
作者: wangjeck    時(shí)間: 2019-7-4 22:25
使用好用嗎
作者: 我是陳小白    時(shí)間: 2019-7-12 18:29
這里是不是少了   nrf的初始化函數(shù)。?
作者: szzxl10    時(shí)間: 2019-7-13 09:12
這個(gè)真不錯(cuò),點(diǎn)個(gè)贊
作者: xcj123    時(shí)間: 2019-8-22 17:00
很好     
作者: fpooooooo    時(shí)間: 2019-8-26 17:26

我都不知道自己還有多少黑幣了,非常感謝樓主提供這種資料
作者: odiwuano    時(shí)間: 2019-8-27 17:09
學(xué)習(xí)一下哈
作者: qjy822    時(shí)間: 2019-9-1 12:25
非常感謝樓主分享!正在學(xué)習(xí)!
作者: jamas111    時(shí)間: 2019-9-24 11:01
謝謝樓主~~~~~~~~
作者: odiwuano    時(shí)間: 2019-9-27 07:59
我也下載份來學(xué)習(xí)下哈
作者: 江渚鷺鷥    時(shí)間: 2019-10-29 22:03
來學(xué)習(xí)了
作者: red_R    時(shí)間: 2019-12-9 15:17
謝謝,正在學(xué)習(xí)這個(gè)模塊
作者: plez    時(shí)間: 2019-12-10 10:30
那這個(gè)需要幾個(gè)nrf24l01啊,一個(gè)的話 裝在發(fā)射程序那塊板子上嗎?
作者: 2369894360    時(shí)間: 2019-12-17 23:22
有幫助!謝謝了
作者: muzilimuzi    時(shí)間: 2020-4-9 08:25
謝謝樓主
作者: zheng0401    時(shí)間: 2020-4-11 11:59
感謝樓主的分享
作者: EDA12345678    時(shí)間: 2020-4-13 09:36
,剛學(xué)單片機(jī)請(qǐng)問有配套原理圖嗎?
作者: zx3303    時(shí)間: 2020-4-13 15:35
可以可以,這把搞來看看
作者: beishang    時(shí)間: 2020-5-5 10:23

謝謝樓主~~~~~~~~
作者: kbli    時(shí)間: 2020-5-5 20:12
謝謝分享,正在寫這個(gè)程序呢,再次感謝
作者: kbli    時(shí)間: 2020-5-5 21:21
樓主請(qǐng)教以下,為什么需要強(qiáng)調(diào)兩個(gè)單片機(jī)都需要一致呢,我現(xiàn)在手上一個(gè)C51,一個(gè)C52,確實(shí)調(diào)試的時(shí)候能通信,但是串口的數(shù)據(jù)是亂碼,請(qǐng)賜教,謝謝。
作者: 浪徒    時(shí)間: 2020-5-17 20:24
謝謝分享
作者: 欣語寶貝    時(shí)間: 2020-7-31 20:53
下載下來  調(diào)試一下    第一次搞這個(gè)
作者: 安靜的二哈    時(shí)間: 2020-10-15 15:58
按鍵是加在哪里呢


作者: usaboy    時(shí)間: 2021-3-8 08:35
excellent job, i appreciate for your sharing.
作者: Wong_Kaven    時(shí)間: 2021-6-23 17:44
確實(shí)很不錯(cuò),圖片也處理了。我們小白 看到了希望,謝謝分享
作者: 楊天想    時(shí)間: 2022-4-15 10:14
我想請(qǐng)問一下,這個(gè)怎么對(duì)碼呢
作者: 淡忘一世    時(shí)間: 2022-7-17 15:20
已經(jīng)調(diào)通,謝謝大佬
作者: haide1998    時(shí)間: 2022-8-20 05:55
剛剛接觸nrf24l01,也來學(xué)習(xí)學(xué)習(xí),謝謝樓主!
作者: 大表嫂    時(shí)間: 2022-9-11 18:32
下載研究下,感謝分享~~




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1