找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5284|回复: 1
收起左侧

2.4G无线双向收发系统单片机源程序与PCB文件

[复制链接]
ID:127035 发表于 2017-9-20 20:52 | 显示全部楼层 |阅读模式
2.4G无线收发程序
pcb文件如下:
0.png 0.png

单片机源程序如下:
  1. /*                              
  2.                                                         2.4G无线双向收发模块源程序
  3. (C)西安电子科技大学 编写:郭世忠  谢金波 版本:V5.3  日期:2015/02/02
  4. 相对V5.1 将看门狗清狗语句由主循环结尾处移至开始处。解决单片机先按键,后上电,造成首次看门狗随机复位,系统频繁重启问题。
  5. 相对V5.2 把重复15次发送中的SetRX_Mode()取消,放到最后,只留一句。
  6. */


  7. //---------------------------------用户配置区--------------------------------------------

  8. #define   LOCAL_LED_ON                  //1.本地LED是否点亮,注释掉本句即可禁止本地LED显示

  9. //---------------------------------------------------------------------------------------

  10. #define ADD1  50         //0-255
  11. #define ADD2  34         //0-255
  12. #define ADD3  65         //0-255
  13. #define ADD4  83         //0-255  //2.用户使用的4*8bit=32bit地址

  14. //---------------------------------------------------------------------------------------
  15. //----------------------------------以下代码请勿修改!-----------------------------------


  16. #include "c8051f330.h"
  17. #include "nRF24L01.h"
  18. #include "config.h"
  19. #include "key.h"

  20. #define TIMER0_RELOAD_HIGH  (65535-5150)/256  //定时器0的装入值
  21. #define TIMER0_RELOAD_LOW        (65535-5150)%256  //系统时钟3.0625MKHz,12分频,20.00ms:理论装载值5104,实际装载值5150
  22.                                                                                       //系统时钟3.0625MKHz,12分频,10.00ms:理论装载值2552,实际装载值2585
  23.                                                                                       //系统时钟3.0625MKHz,12分频, 5.00ms:理论装载值1276,实际装载值1280
  24.                                                                                           //系统时钟3.0625MKHz,12分频,25.00ms:理论装载值6380,实际装载值6475
  25.                                                                                           //系统时钟3.0625MKHz,12分频,30.00ms:理论装载值7656,实际装载值7736



  26. /*定义LED和震动电机相应的驱动端口*/
  27. sbit MOTOR=P0^0; //振动电机
  28. sbit LED1=P1^3;
  29. sbit LED2=P1^4;         //四个LED端口
  30. sbit LED3=P1^5;
  31. sbit LED4=P1^6;
  32. unsigned char TxBuf[3]={1,2,3};
  33. unsigned char RxBuf[3]={1,2,3};
  34. unsigned char motor_flag=0,motor_shake_times=0,delay_count=0;
  35. unsigned char tf=0,getdata=0;
  36. unsigned char get_key_time=0;
  37. unsigned char Enable_Get_Ack=0;
  38. unsigned char LED_Time_Out=0;
  39. unsigned char Enable_Clear_LED=0;
  40. unsigned char receive_counter=0;
  41. /****************************************************************************
  42. * 名    称:delay_20ms()
  43. * 入口参数:无
  44. * 出口参数:无
  45. * 说    明: 使用定时器准确延时20ms
  46. ****************************************************************************/
  47. void delay_20ms( unsigned char time )
  48. {
  49.         delay_count=0;
  50.         while(delay_count<time);        //装值1,理论 20ms,实测  20ms
  51.                                                                    //装值2,理论 40ms,实测40.4ms
  52.                                                                    //装值3,理论 60ms,实测  60ms
  53.                                                                 //装值4,理论 80ms,实测  80ms
  54.                                                                    //装值5,理论100ms,实测 100ms
  55. }
  56. /****************************************************************************
  57. * 名    称:delay_1ms()
  58. * 入口参数:无
  59. * 出口参数:无
  60. * 说    明: 简单延时1ms
  61. ****************************************************************************/
  62. void delay_1ms( unsigned int time )
  63. {
  64.         unsigned int i,j;
  65.         for(j=0;j<time;j++)
  66.         for(i=0;i<325;i++);                        //装值 1,实测  1ms
  67.                                                                    //装值 2,实测2.08ms
  68.                                                                    //装值 3,实测3.12ms
  69.                                                                 //装值 4,实测4.08ms
  70.                                                                    //装值 5,实测5.12ms
  71.                                                                 //装值10,实测10.2ms
  72. }
  73. /****************************************************************************
  74. * 名    称:MOTOR_SHAKE()
  75. * 入口参数:无
  76. * 出口参数:无
  77. * 说    明: 振动电机振动驱动函数,利用移位进行驱动
  78. ****************************************************************************/
  79. void MOTOR_SHAKE( void )
  80. {
  81.         unsigned char temp;
  82.         if(motor_shake_times!=0)
  83.         {
  84.                 temp=motor_shake_times&0x01;
  85.                 MOTOR=temp;
  86.                 motor_shake_times=motor_shake_times>>1;
  87.         }
  88.         else
  89.         {
  90.                 MOTOR=0;
  91.         }
  92. }
  93. /****************************************************************************
  94. * 名    称:MOTOR_SCAN()
  95. * 入口参数:无
  96. * 出口参数:无
  97. * 说    明: 利用定时器0进行的振动电机振动扫描函数
  98. ****************************************************************************/
  99. void MOTOR_SCAN( void )
  100. {
  101.         if(motor_flag==20)
  102.         {
  103.                 motor_flag=0;
  104.                 MOTOR_SHAKE();
  105.         }
  106. }
  107. /****************************************************************************
  108. * 名    称:MOTOR_ON()
  109. * 入口参数:电机震动次数
  110. * 出口参数:无
  111. * 说    明: 开启电机振动,相当于赋值
  112. ****************************************************************************/
  113. void MOTOR_ON( unsigned char cishu )
  114. {
  115.         motor_shake_times=cishu;
  116. }
  117. /****************************************************************************
  118. * 名    称:Timer0_ISR()
  119. * 入口参数:无
  120. * 出口参数:无
  121. * 说    明: 定时器0中断处理函数
  122. ****************************************************************************/
  123. void Timer0_ISR( void ) interrupt 1
  124. {
  125.         TH0=TIMER0_RELOAD_HIGH;
  126.         TL0=TIMER0_RELOAD_LOW;
  127.         get_key_time++;
  128.         delay_count++;
  129.         motor_flag++;
  130.         LED_Time_Out++;
  131.         Key_ScanIO();
  132.         MOTOR_SCAN();//电机20ms扫描一次
  133. }
  134. /****************************************************************************
  135. * 名    称:IRQ_ISR()
  136. * 入口参数:无
  137. * 出口参数:无
  138. * 说    明: 外部中断处理函数,用于处理无线模块的收发及状态转换
  139. ****************************************************************************/
  140. void IRQ_ISR( void ) interrupt 0
  141. {
  142.         switch(ReadInterrupt_Status())
  143.         {
  144.                 case 1:{EA=0;                                                          
  145.                                 nRF24L01_RxPacket(RxBuf);
  146.                                 ClearInterrptFlag();
  147.                                 EA=1;
  148.                                 if(RxBuf[2]!=90)
  149.                                 {
  150.                                         if(receive_counter<250)
  151.                                         receive_counter++;
  152.                                         else
  153.                                         receive_counter=2;
  154.                                 }
  155.                                 getdata=1;
  156.                                 }
  157.                                 break;                                                                                                                         //接收到数据中断
  158.           //case 2:{EA=0;ClearInterrptFlag();SetRX_Mode();delay_1ms(1);EA=1;}break;        //发送成功中断
  159.                 case 2:{EA=0;ClearInterrptFlag();EA=1;}break;        //发送成功中断
  160.                 case 3:{EA=0;ClearInterrptFlag();SetRX_Mode();delay_1ms(1);EA=1;}break;        //最大发射次数到,即发送失败中断
  161.                 default:{EA=0;ClearInterrptFlag();SetRX_Mode();delay_1ms(1);EA=1;}break;//其他无关量
  162.         }
  163. }
  164. /****************************************************************************
  165. * 名    称:Send_Data()
  166. * 入口参数:无
  167. * 出口参数:无
  168. * 说    明: 发送端数据发送函数,连续发送15次,函数值由数组直接传递
  169. ****************************************************************************/
  170. void Send_Data( void )
  171. {
  172.         nRF24L01_TxPacket(TxBuf);                //连发15次
  173.        
  174. ……………………

  175. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
2.4G无线双向收发系统.rar (207.09 KB, 下载次数: 59)

评分

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

查看全部评分

回复

使用道具 举报

ID:485002 发表于 2019-6-14 22:09 | 显示全部楼层
文件不全啊,谨慎下载
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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