单片机论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 13805|回复: 69
打印 上一主题 下一主题
收起左侧

基于51单片机的nrf24l01无线的接受和发射程序

  [复制链接]
跳转到指定楼层
楼主
通过灯的闪烁来判断数据的接受和发射
有接收端和发射段的程序

    如果24L01用reg51那么两个设备都要用reg51,如果用reg52就都得用reg52!
    PC通过串口发送给单片机命令[相当于协调器],单片机把命令通过24L01无线发送给另一个单片机,另一个单片机控制灯LED1,LED2,LED3,LED4闪烁。


无线发射程序:
  1. #include"2401.h"

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

  4. //1//sbit KEY1=P0^0;                         //发送按键
  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;                                         //发送数据时显示灯+接收到数据后的功能实现灯

  10. uchar Tx_Buf1[]={1};                        //发送的信息1
  11. uchar Rx_Buf[32];                                  //接收到的数据暂存器,最多32字节数据  
  12. uchar uart_flag,a;                        //串口接收标志【收到数据就置1】,a为接收到的数据
  13. /*------------------------------------------------
  14. 延时函数
  15. ------------------------------------------------*/
  16. void delay_ms(uint z)                        //延时函数
  17. {
  18.         uint y;
  19.         while(z--)
  20.                 for(y=110;y>0;y--);
  21. }
  22. /*------------------------------------------------
  23. 定义UART_Init函数
  24. ------------------------------------------------*/
  25. void UART_Init(void)
  26. {
  27.         SCON = 0x50;                 // 设定串行口工作方式,8位数据位,允许接收
  28.     T2CON = 0x34;                 //设置定时器2,作为波特率发生器
  29.         RCAP2L = 0XDC;          //9600波特率的低8位
  30.         RCAP2H = 0XFF;                //9600波特率的高8位       
  31.         ES = 1;                                 //允许串口中断
  32.         EA = 1;                                 //允许总中断
  33. }
  34. /*------------------------------------------------
  35. 定义UART_Send_Byte函数
  36. ------------------------------------------------*/
  37. void UART_Send_Byte(uchar byte)
  38. {
  39.         SBUF=byte;                          //缓冲区装载要发送的字节数据
  40.         while(TI==0);                //等待发送完毕,TI标志位会置1
  41.         TI=0;                                //清零发送完成标志位
  42. }
  43. /*------------------------------------------------
  44. 串口接收中断服务程序
  45. ------------------------------------------------*/
  46. void UART(void) interrupt 4
  47. {
  48.         if(RI)                                   //检测接收完成标志位置1
  49.         {
  50.                 RI=0;                        //清零接收完成标志位
  51.                 a=SBUF;                        //读取接收到的数据
  52.                 uart_flag = 1;        //中断标志位置1
  53.         }
  54. }
  55. /*------------------------------------------------
  56. main函数
  57. ------------------------------------------------*/
  58. void main()
  59. {
  60.          LED6=1;                                //初始灯6熄灭   
  61.          uart_flag=0;                        //串口标志初始为0
  62.          init_NRF24L01();                //初始化24L01
  63.          UART_Init();                    //初始化串口

  64.          while(NRF24L01_Check())                                        //检查不到24l01则报警
  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))         //等待接收数据,返回1则接收到数据,在等待接收数据期间,可以随时变成发送模式  
  75.             {
  76.                         if(uart_flag==1)                                //当串口接受标志为1表示有数据过来
  77.                         {
  78.                                 ES=0;                                                           //关串口中断
  79.                        
  80.                                 TX_Mode();                                                 //发送模式
  81.                                 Tx_Buf1[0]=a-'0';                                        //将串口数据给发送缓冲区
  82.                             nRF24L01_TxPacket(Tx_Buf1);                //发送命令数据24L01
  83.                                 UART_Send_Byte('O');                        //向串口发送已经传送
  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);                                        //发送后LED1闪一下

  92.                                 ES=1;                                                        //允许串口中断
  93.                                 uart_flag=0;                                          //中断标志位置0
  94.                                 break;                                                        //退出最近的循环,从而变回接收模式,这句关键
  95.                         }
  96.                  }
  97.                  if(Rx_Buf[0]==1)                                                           //若接收到对应的数据则实现对应功能
  98.                  {
  99.                      Rx_Buf[0]=0;                                //清空数据
  100.                      LED6=0;
  101.                           delay_ms(300);
  102.                           LED6=1;
  103.                           delay_ms(300);                                //接收到数据 后闪烁          
  104.                  }
  105.          }
  106. }
复制代码

无线接收程序:
  1. #include"2401.h"

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

  4. sbit KEY8=P3^7;                                         //发送按键
  5. sbit beep=P2^3;                                        //喇叭
  6. sbit LED6=P1^6;                                         //发送数据时显示灯
  7. sbit LED1=P0^0;                                        //接收到数据后的功能实现灯
  8. sbit LED2=P0^1;
  9. sbit LED3=P0^2;
  10. sbit LED4=P0^3;  

  11. void delay_ms(uint z)                        //延时函数
  12. {
  13.         uint y;
  14.         while(z--)
  15.                 for(y=110;y>0;y--);
  16. }
  17. void main()
  18. {
  19.          uchar Tx_Buf1[]={1};        //发送的信息1
  20.          uchar Rx_Buf[32];          //接收到的数据暂存器,最多32字节数据  
  21.          init_NRF24L01();
  22.          LED6=1;                                //初始灯6熄灭   

  23.         while(NRF24L01_Check())                                        //检查不到24l01则报警
  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))         //等待接收数据,返回1则接收到数据,在等待接收数据期间,可以随时变成发送模式  
  34.             {
  35.                         if(KEY8==0)                                                 //按了按键8,则变成发送模式,发送对应数据,发送完后变成接收模式
  36.                         {       
  37.                                 delay_ms(5);//消抖动
  38.                                 if(KEY8==0)
  39.                                 {
  40.                                          while(!KEY8);
  41.                                         TX_Mode();         //发送模式
  42.                                     nRF24L01_TxPacket(Tx_Buf1);                //发送命令数据
  43.                                         LED6=0;
  44.                                     delay_ms(300);
  45.                                         LED6=1;
  46.                                     delay_ms(300);                                        //发送后LED6闪一下
  47.                                         break;                                                        //退出最近的循环,从而变回接收模式,这句关键
  48.                                  }       
  49.                          }
  50.                  }
  51.                  //1//if(Rx_Buf[0]==1)                                                           //若接收到对应的数据则实现对应功能
  52.                  //1//{
  53.                  //1//   Rx_Buf[0]=0;                                //清空数据
  54.                  //1//   LED6=0;
  55.                  //1//         delay_ms(300);
  56.                  //1//         LED6=1;
  57.                  //1//         delay_ms(300);                                //接收到数据 后闪烁          
  58.                  //1//}
  59.                 switch(Rx_Buf[0]){//对数据进行分析来控制灯亮
  60.                 case 0:
  61.                         break;
  62.                 case 1:
  63.                         Rx_Buf[0]=0;                                //清空数据
  64.                     LED1=0;
  65.                         delay_ms(300);
  66.                         LED1=1;
  67.                         delay_ms(300);       
  68.                         break;
  69.                 case 2:
  70.                         Rx_Buf[0]=0;                                //清空数据
  71.                     LED2=0;
  72.                         delay_ms(300);
  73.                         LED2=1;
  74.                         delay_ms(300);       
  75.                         break;
  76.                 case 3:
  77.                         Rx_Buf[0]=0;                                //清空数据
  78.                     LED3=0;
  79.                         delay_ms(300);
  80.                         LED3=1;
  81.                         delay_ms(300);       
  82.                         break;
  83.                 default:
  84.                         Rx_Buf[0]=0;                                //清空数据
  85.                     LED4=0;
  86.                         delay_ms(300);
  87.                         LED4=1;
  88.                         delay_ms(300);       
  89.                         break;
  90.                 }                
  91.         }
  92. }
复制代码


全部资料下载地址:
【小成果】2、PC-单片机-单片机无线串口控制.zip (90.8 KB, 下载次数: 846)







评分

参与人数 5黑币 +80 收起 理由
llx19974122008 + 15 绝世好帖!
code_404 + 5 很给力!
2452873337 + 5 很给力!
a455914479 + 5
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏21 转播转播 分享分享 分享淘帖 顶6 踩
回复

使用道具 举报

沙发
Dug 发表于 2018-3-16 12:45 | 只看该作者
谢谢楼主~~~~~~~~
回复

使用道具 举报

板凳
a455914479 发表于 2018-4-2 12:22 | 只看该作者
谢谢分享
回复

使用道具 举报

地板
a455914479 发表于 2018-4-3 09:31 | 只看该作者
谢谢分享  下载了
回复

使用道具 举报

5#
曹尼玛1114 发表于 2018-5-3 11:42 | 只看该作者
很棒,蟹蟹٩('ω')و
回复

使用道具 举报

6#
2452873337 发表于 2018-5-6 17:45 | 只看该作者
大佬 求发一份资料 么么哒
回复

使用道具 举报

7#
甲鱼吗 发表于 2018-5-7 01:07 | 只看该作者
很好的一篇分享,编程的一些思路值得学习,谢谢!
回复

使用道具 举报

8#
lpwqgr 发表于 2018-5-23 21:23 | 只看该作者
谢谢分享
回复

使用道具 举报

9#
sjlzzc 发表于 2018-6-10 12:25 | 只看该作者
很好的一篇分享,编程的一些思路值得学习
回复

使用道具 举报

10#
梁人杰 发表于 2018-6-10 14:54 | 只看该作者
谢谢很好
回复

使用道具 举报

11#
perfect123 发表于 2018-7-2 08:59 | 只看该作者
我都不知道自己还有多少黑币了,非常感谢楼主提供这种资料
回复

使用道具 举报

12#
chui 发表于 2018-8-2 10:26 | 只看该作者
谢谢楼主,解决了我的一个大问题
回复

使用道具 举报

13#
forever一笙 发表于 2018-8-2 14:50 | 只看该作者

可以,作为参考很有效
回复

使用道具 举报

14#
中恒电子asus 发表于 2018-8-4 13:43 | 只看该作者
谢谢分享  下载了
回复

使用道具 举报

15#
congcong1234 发表于 2018-8-30 20:44 | 只看该作者
很不错
回复

使用道具 举报

16#
lumingfei 发表于 2018-9-19 22:07 | 只看该作者
谢谢楼主
回复

使用道具 举报

17#
445512 发表于 2018-10-1 16:58 | 只看该作者
太好了。
回复

使用道具 举报

18#
张家大公子 发表于 2018-10-28 21:06 | 只看该作者
不错的分享,试了这么多天,终于解决了!感谢楼主!
回复

使用道具 举报

19#
wantin 发表于 2018-11-14 10:57 | 只看该作者
very good
回复

使用道具 举报

20#
wantin 发表于 2018-11-14 10:58 | 只看该作者
感谢楼主,争取学习调试成功
回复

使用道具 举报

21#
nwpchennan 发表于 2018-11-15 17:10 | 只看该作者
这个真不错,点个赞
回复

使用道具 举报

22#
tonggin 发表于 2018-11-21 15:39 | 只看该作者
最近想玩这个东西,不错的参考,赞你
回复

使用道具 举报

23#
凯…… 发表于 2018-11-29 13:41 | 只看该作者
不知道博主现在还在不在,如果在,QQ  1483137642  有问题想问,希望博主帮助一下,因为跟毕业有关,谢谢
回复

使用道具 举报

24#
凯…… 发表于 2018-11-29 20:28 | 只看该作者
下载的为啥是空的
回复

使用道具 举报

25#
ALGiki 发表于 2018-12-5 18:57 | 只看该作者
感谢分享,努力学习!
回复

使用道具 举报

26#
霹雳虎狗蛋 发表于 2018-12-31 17:36 | 只看该作者
谢谢分享
回复

使用道具 举报

27#
cjzysw 发表于 2019-2-15 21:08 | 只看该作者
好东西!我要测试下,谢谢楼主!
回复

使用道具 举报

28#
666655 发表于 2019-2-28 18:09 | 只看该作者
感谢分享
回复

使用道具 举报

29#
xqtop 发表于 2019-3-1 06:06 来自手机 | 只看该作者
非常不错,感谢分享。
回复

使用道具 举报

30#
efefewfe 发表于 2019-3-1 12:36 | 只看该作者
求大佬分享给我一份,,,邮箱:492325650@qq.com   谢谢
回复

使用道具 举报

31#
DK.Knight 发表于 2019-3-1 22:38 | 只看该作者
谢谢楼主 学习一下
回复

使用道具 举报

32#
拼命四郎 发表于 2019-3-7 10:32 | 只看该作者
谢谢大佬分享。
回复

使用道具 举报

33#
ben0147 发表于 2019-3-9 20:56 | 只看该作者
谢谢分享!!!
回复

使用道具 举报

34#
wwdec 发表于 2019-3-10 13:24 | 只看该作者
学习学习!!!
回复

使用道具 举报

35#
菜用鸡 发表于 2019-3-25 21:58 | 只看该作者
下载了,不过好像不可以加矩阵按键,就是按键控制小车方向
回复

使用道具 举报

36#
1355780619 发表于 2019-4-4 16:23 | 只看该作者
da佬分享给我一份,,,邮箱:1355780619@qq.com   谢谢
回复

使用道具 举报

37#
763900682 发表于 2019-5-8 18:33 | 只看该作者
谢谢分享
回复

使用道具 举报

38#
763900682 发表于 2019-5-8 18:33 | 只看该作者
谢谢分享
回复

使用道具 举报

39#
763900682 发表于 2019-5-8 20:29 | 只看该作者
谢谢分享  下载了
回复

使用道具 举报

40#
960138364 发表于 2019-5-10 17:28 | 只看该作者
谢谢分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表