找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3542|回复: 2
收起左侧

NRF2401单片机收发程序下载

[复制链接]
ID:109367 发表于 2016-3-17 17:43 | 显示全部楼层 |阅读模式
基本成功。
收到数据时,能点亮一个led。
单片机 STC12C5260S2   1T
        延时用的是51单片机小精灵 stc1T 模式编写
1.8上午,发送程序已做部分优化,优化了延时,使延时更加短。
1.8下午,接收程序已做部分优化,优化了延时,使延时更加短。


发送主要程序(完整版请下载附件: nrf2401—基本驱动程序.rar (89 KB, 下载次数: 71) ):
  1. #include "delay.h"
  2. #include "nrf2401.h"

  3. uchar TxRxBuff[32]={0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x10,0x11,
  4.                                         0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x20,0x21,
  5.                                         0x22,0x23,0x24,0x25,0x26};
  6. uint i;
  7. void init_uart()          //串口初始化           2400
  8. {
  9.         TMOD=0X20;
  10.         SCON=0X50;
  11.         TH1=0XF3;
  12.         TL1=0XF3;
  13.         PCON=0X00;
  14.         EA=1;
  15.         ES=1;
  16.         TR1=1;
  17. }

  18. void serve_zd() interrupt 4
  19. {
  20.         if(RI)
  21.         {
  22.                 RI=0;
  23.        
  24.         }
  25.                 else
  26.         {
  27.                 TI=0;
  28.         }       
  29. }       



  30. void main()
  31. {
  32.         bit flag=1;
  33.         uint i,j;
  34.         init_uart();
  35.         Config2401();
  36.         delay_600us();
  37.         SetTxMode();        //设置为发送模式
  38.                                         // 初始化后,为发送模式
  39.         while(1)
  40.         {       
  41.                   for(i=0;i<30;i++)                  //延时一会儿
  42.                           for(j=0;j<30;j++);
  43.                  ///////////////
  44.                  /// 模式设置        ///               
  45.                  //key1按下一次,设置为发送模式,按下key2,发送数据,        //亮一个led
  46.                  //key1按下两次,设置为接收模式,按下key3,将数据传至mcu。//亮两个led
  47.                
  48.                 if(key1==0)                 //去抖检测
  49.                 delay10ms();
  50.                  if(key1==0)
  51.                 {
  52.                            while(key1==0);
  53.                         if(key1==1)          //松手检测
  54.                         delay10ms();
  55.                         if(key1==1)
  56.                         {
  57.                                 if(!flag)
  58.                                 {
  59.                                         flag=1;                //置标志位,为下次按键准备
  60.                                         led1=0;         //        灯测试
  61.                                         delay1ms(1000);           //指示灯亮一秒
  62.                                         SetTxMode();        //设置为发送模式
  63.                                         led1=1;                                      //灯灭,说明已设置好
  64.                                 }
  65.                                 if(flag)                //第二次按键判断 ,设置为接收模式
  66.                                 {
  67.                                         led1=0;                                   //指示灯亮
  68.                                         led2=0;
  69.                                         delay1ms(1000);
  70.                                         SetRxMode();        //设置为接收模式
  71.                                         led1=1;
  72.                                         led2=1;                                        //指示灯灭,说明已设置好
  73.                                         flag=0;                                        //复位标志符
  74.                                 }
  75.                         }
  76.                 }
  77.         ////////////////////////////////////////////////////
  78.         //////////////////////////////////////////////////
  79.                 if(key2==0)                 //去抖检测
  80.                 delay10ms();
  81.                  if(key2==0)
  82.                 {
  83.                            while(key2==0);
  84.                         if(key2==1)          //松手检测
  85.                         delay10ms();
  86.                         if(key2==1)
  87.                         {
  88.                                 if(!flag)
  89.                                 {
  90.                                         led3=0;
  91.                                         nRF2401_TxPacket(TxRxBuff);        //发送数组TxBuf[]内的数据
  92.                                         delay1ms(1000);
  93.                                         led3=1;
  94.                                 }

  95.                                 if(flag)
  96.                                 {
  97.                                         
  98.                                         if(nRF2401_RxPacket(TxRxBuff)==1);//检查是否有数据要收,若有,则存在数组RxBuf中
  99.                                                                                                         //并返回  1;没有则返回  0;
  100.                                    {       
  101.                                             led3=0;
  102.                                                 led4=0;
  103.                                                 delay1ms(2000);
  104.                                                led3=1;
  105.                                                 led4=1;
  106.                                    }
  107.                                
  108.                                 }
  109.                         }
  110.                 }
  111.          ///////////////////////////////////////////////////
  112.          ////////////////////////////////////////////////////
  113.                 if(key3==0)                 //去抖检测
  114.                 delay10ms();
  115.                  if(key3==0)
  116.                 {
  117.                            while(key3==0);
  118.                         if(key3==1)          //松手检测
  119.                         delay10ms();
  120.                         if(key3==1)
  121.                         {
  122.                                 led3=0;
  123.                                 delay1ms(1000);
  124.                                 i=0;
  125.                                 while(TxRxBuff[i]!='\0')
  126.                                 {
  127.                                         SBUF=TxRxBuff[i];
  128.                                         i++;
  129.                                         delay_600us();
  130.                                 }
  131.                         }

  132.                 }
  133.          //////////////////////////////////////
  134.         ///////////////////////////////////////////////
  135.         /*
  136.           此处添加显示程序



  137.                                 */
  138.         }
  139.                        
  140.                                                                

  141.                
  142.                
  143. }
  144.        
复制代码

接受部分主程序:
  1. #include "delay.h"
  2. #include "nrf2401.h"

  3. uchar TxRxBuff[32]={0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x10,0x11,
  4.                                         0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x20,0x21,
  5.                                         0x22,0x23,0x24,0x25,0x26};
  6. uint i;
  7. void init_uart()          //串口初始化           2400
  8. {
  9.         TMOD=0X20;
  10.         SCON=0X50;
  11.         TH1=0XF3;
  12.         TL1=0XF3;
  13.         PCON=0X00;
  14.         EA=1;
  15.         ES=1;
  16.         TR1=1;
  17. }

  18. void serve_zd() interrupt 4
  19. {
  20.         if(RI)
  21.         {
  22.                 RI=0;
  23.        
  24.         }
  25.                 else
  26.         {
  27.                 TI=0;
  28.         }       
  29. }       



  30. void main()
  31. {
  32.         bit flag=1;
  33.         uint i,j;
  34.         init_uart();
  35.         Config2401();
  36.         delay_600us();
  37.         SetTxMode();        //设置为发送模式
  38.                                         // 初始化后,为发送模式
  39.         while(1)
  40.         {       
  41.                   for(i=0;i<30;i++)                  //延时一会儿
  42.                           for(j=0;j<30;j++);
  43.                  ///////////////
  44.                  /// 模式设置        ///               
  45.                  //key1按下一次,设置为发送模式,按下key2,发送数据,        //亮一个led
  46.                  //key1按下两次,设置为接收模式,按下key3,将数据传至mcu。//亮两个led
  47.                
  48.                 if(key1==0)                 //去抖检测
  49.                 delay10ms();
  50.                  if(key1==0)
  51.                 {
  52.                            while(key1==0);
  53.                         if(key1==1)          //松手检测
  54.                         delay10ms();
  55.                         if(key1==1)
  56.                         {
  57.                                 if(!flag)
  58.                                 {
  59.                                         flag=1;                //置标志位,为下次按键准备
  60.                                         led1=0;         //        灯测试
  61.                                         delay1ms(1000);           //指示灯亮一秒
  62.                                         SetTxMode();        //设置为发送模式
  63.                                         led1=1;                                      //灯灭,说明已设置好
  64.                                 }
  65.                                 if(flag)                //第二次按键判断 ,设置为接收模式
  66.                                 {
  67.                                         led1=0;                                   //指示灯亮
  68.                                         led2=0;
  69.                                         delay1ms(1000);
  70.                                         SetRxMode();        //设置为接收模式
  71.                                         led1=1;
  72.                                         led2=1;                                        //指示灯灭,说明已设置好
  73.                                         flag=0;                                        //复位标志符
  74.                                 }
  75.                         }
  76.                 }
  77.         ////////////////////////////////////////////////////
  78.         //////////////////////////////////////////////////
  79.                 if(key2==0)                 //去抖检测
  80.                 delay10ms();
  81.                  if(key2==0)
  82.                 {
  83.                            while(key2==0);
  84.                         if(key2==1)          //松手检测
  85.                         delay10ms();
  86.                         if(key2==1)
  87.                         {
  88.                                 if(!flag)
  89.                                 {
  90.                                         led3=0;
  91.                                         nRF2401_TxPacket(TxRxBuff);        //发送数组TxBuf[]内的数据
  92.                                         delay1ms(1000);
  93.                                         led3=1;
  94.                                 }

  95.                                 if(flag)
  96.                                 {
  97.                                         
  98.                                         if(nRF2401_RxPacket(TxRxBuff)==1);//检查是否有数据要收,若有,则存在数组RxBuf中
  99.                                                                                                         //并返回  1;没有则返回  0;
  100.                                    {       
  101.                                             led3=0;
  102.                                                 led4=0;
  103.                                                 delay1ms(2000);
  104.                                                led3=1;
  105.                                                 led4=1;
  106.                                    }
  107.                                
  108.                                 }
  109.                         }
  110.                 }
  111.          ///////////////////////////////////////////////////
  112.          ////////////////////////////////////////////////////
  113.                 if(key3==0)                 //去抖检测
  114.                 delay10ms();
  115.                  if(key3==0)
  116.                 {
  117.                            while(key3==0);
  118.                         if(key3==1)          //松手检测
  119.                         delay10ms();
  120.                         if(key3==1)
  121.                         {
  122.                                 led3=0;
  123.                                 delay1ms(1000);
  124.                                 i=0;
  125.                                 while(TxRxBuff[i]!='\0')
  126.                                 {
  127.                                         SBUF=TxRxBuff[i];
  128.                                         i++;
  129.                                         delay_600us();
  130.                                 }
  131.                         }

  132.                 }
  133.          //////////////////////////////////////
  134.         ///////////////////////////////////////////////
  135.         /*
  136.           此处添加显示程序



  137.                                 */
  138.         }
  139.                        
  140.                                                                

  141.                
  142.                
  143. }
  144.        
复制代码




评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:450182 发表于 2019-8-22 17:11 | 显示全部楼层
有用的资料  
回复

使用道具 举报

ID:561971 发表于 2019-8-25 09:43 | 显示全部楼层
弱弱的问下,这个是属于51单片机控制NRF2401对吧,那NRF2401 本身程序谁提供?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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