找回密码
 立即注册

QQ登录

只需一步,快速开始

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

STC单片机+nRF24L01萝莉控遥控器发射机加接收机,单片机源码加原理图

  [复制链接]
跳转到指定楼层
楼主
本人亲测成功可用,感兴趣的可以试试,nRF24L01无线芯片和stc的51单片机构成

制作出来的实物图如下:



单片机源程序如下:
  1. #include<reg51.h>
  2. #define u8 unsigned char
  3. #define u16 unsigned int

  4. sfr IAP_DATA=0xe2;
  5. sfr IAP_ADDRH=0xe3;
  6. sfr IAP_ADDRL=0xe4;
  7. sfr IAP_CMD=0xe5;
  8. sfr IAP_TRIG=0xe6;
  9. sfr IAP_CONTR=0xe7;
  10. sfr AUXR=0x8e;
  11. sfr BRT=0x9c;
  12. sbit LED=P2^2;
  13. //sbit LED=P2^3;

  14. sbit CH1=P2^1;
  15. sbit CH2=P2^0;
  16. sbit CH3=P1^7;
  17. sbit CH4=P1^6;
  18. sbit CH5=P1^5;
  19. sbit CH6=P1^4;
  20. sbit CH7=P1^3;
  21. sbit CH8=P1^1;

  22. sbit CHB=P1^0;
  23. sbit CHC=P3^7;
  24. sbit CHD=P2^7;
  25. sbit CHE=P2^6;

  26. sbit MDO=P3^5;
  27. sbit SCK=P2^4;
  28. sbit CE=P2^5;
  29. sbit IRQ=P3^4;
  30. sbit MDI=P3^3;
  31. sbit CSN=P3^2;

  32. sfr P1M1=0x92;
  33. sfr P3M1=0xb2;
  34. sfr P2M1=0x96;


  35. u8 code random[100]={4,1,3,2,2,1,0,0,2,2,2,3,4,1,2,1,4,3,3,4,//随机跳频序列
  36.                                                                                  2,0,2,2,3,1,2,3,2,2,2,4,2,4,0,3,4,2,3,1,
  37.                                                                                  0,3,1,3,3,0,2,0,4,3,3,3,3,3,4,1,1,4,3,0,
  38.                            1,0,3,2,3,2,3,3,4,4,1,3,0,0,3,1,3,3,3,0,
  39.                            3,3,4,1,2,4,1,3,0,1,3,4,4,3,2,3,1,2,3,3};


  40. u16 timer1,timer2,timer3;
  41. u8 rx_num,receive;
  42.                                                                                        


  43. u8 rx[11];                //接收的11字节数据
  44. u8 tx[11];
  45. u8 m;
  46. u8 hopping_turn,hopping_num,hopping_count;


  47. //u8 missing_data[4];
  48. u8 address[5]={0xe7,0xe7,0xe7,0xe7,0xe7};
  49. u8 code address_0[5]={'L','O','V','E','!'};//使用LOVE作为对频暗语

  50. u8 hopping[5]={10,35,60,85,110};
  51. bit first,restar;
  52. bit connecting,lose;
  53. bit jump_1,jump_2,jump_mode;

  54. u8 NRF_error;
  55. u16 CH_data[8]={0,1024,0,1024,0,1024};
  56. u16 data buff[8];
  57. u16 temp1,temp2;
  58. u8 t_output;

  59. u8 TX_power=3;

  60. bit LED_flash;
  61. bit out_control_change;
  62. u16 idata out_control_data[8];


  63. void Delay1ms()                //@12.000MHz
  64. {
  65.         unsigned char i, j;
  66.         i = 12;
  67.         j = 168;
  68.         do
  69.         {
  70.                 while (--j);
  71.         } while (--i);
  72. }

  73. void delay_ms(u8 i)
  74. {
  75.         while(i--)
  76.         Delay1ms();
  77. }

  78. u8 EEPROM_read(u8 address)
  79. {
  80.         IAP_CMD=0x01;
  81.         IAP_ADDRH=0;
  82.         IAP_ADDRL=address;
  83.         IAP_TRIG=0x46;                        
  84.         IAP_TRIG=0xb9;
  85.         return IAP_DATA;
  86. }

  87. void EEPROM_write(u8 address,u8 byte)
  88. {
  89.         IAP_CMD=0x02;
  90.         IAP_DATA=byte;
  91.         IAP_ADDRH=0;
  92.         IAP_ADDRL=address;
  93.         IAP_TRIG=0x46;
  94.         IAP_TRIG=0xb9;
  95.         
  96. }

  97. void EEPROM_clean(u8 address)
  98. {
  99.         IAP_CMD=0x03;
  100.         IAP_ADDRH=0;
  101.         IAP_ADDRL=address;
  102.         IAP_TRIG=0x46;
  103.         IAP_TRIG=0xb9;
  104. }

  105. void DATA_read()
  106. {
  107.         IAP_CONTR=0x82;
  108.         if((EEPROM_read(0)!=0xe4)||(EEPROM_read(1)!=0xa5))         
  109.         {
  110.            first=1;

  111.         }
  112.         else
  113.         {
  114.           hopping[0]=EEPROM_read(2);
  115.                 hopping[1]=EEPROM_read(3);
  116.                 hopping[2]=EEPROM_read(4);
  117.                 hopping[3]=EEPROM_read(5);
  118.                 hopping[4]=EEPROM_read(6);
  119.                 address[0]=EEPROM_read(7);
  120.                 address[1]=EEPROM_read(8);
  121.                 address[2]=EEPROM_read(9);
  122.                 address[3]=EEPROM_read(10);
  123.                 address[4]=EEPROM_read(11);
  124.         }
  125.         
  126.         if((EEPROM_read(12)!=0xe4)||(EEPROM_read(13)!=0xa5))         
  127.         {
  128.           out_control_data[0]=512;
  129.                 out_control_data[1]=512;
  130.                 out_control_data[2]=80;
  131.                 out_control_data[3]=512;
  132.                 out_control_data[4]=512;
  133.                 out_control_data[5]=512;
  134.                 out_control_data[6]=512;
  135.                 out_control_data[7]=512;

  136.         }
  137.         else
  138.         {
  139.                
  140.                 out_control_data[0]=EEPROM_read(14);
  141.                 out_control_data[0]<<=8;
  142.                 out_control_data[0]+=EEPROM_read(15);
  143.                 out_control_data[1]=EEPROM_read(16);
  144.                 out_control_data[1]<<=8;
  145.                 out_control_data[1]+=EEPROM_read(17);
  146.                 out_control_data[2]=EEPROM_read(18);
  147.                 out_control_data[2]<<=8;
  148.                 out_control_data[2]+=EEPROM_read(19);
  149.                 out_control_data[3]=EEPROM_read(20);
  150.                 out_control_data[3]<<=8;
  151.                 out_control_data[3]+=EEPROM_read(21);
  152.                 out_control_data[4]=EEPROM_read(22);
  153.                 out_control_data[4]<<=8;
  154.                 out_control_data[4]+=EEPROM_read(23);
  155.                 out_control_data[5]=EEPROM_read(24);
  156.                 out_control_data[5]<<=8;
  157.                 out_control_data[5]+=EEPROM_read(25);
  158.                 out_control_data[6]=EEPROM_read(26);
  159.                 out_control_data[6]<<=8;
  160.                 out_control_data[6]+=EEPROM_read(27);
  161.                 out_control_data[7]=EEPROM_read(28);
  162.                 out_control_data[7]<<=8;
  163.                 out_control_data[7]+=EEPROM_read(29);

  164.         }
  165.         

  166.         IAP_CONTR=0;
  167. }
  168. void DATA_save()
  169. {
  170.         IAP_CONTR=0x82;
  171.                 EEPROM_clean(0);
  172.                 EEPROM_write(0,0xe4);
  173.                 EEPROM_write(1,0xa5);
  174.                 EEPROM_write(2,hopping[0]);
  175.                 EEPROM_write(3,hopping[1]);
  176.                 EEPROM_write(4,hopping[2]);
  177.                 EEPROM_write(5,hopping[3]);
  178.                 EEPROM_write(6,hopping[4]);
  179.                 EEPROM_write(7,address[0]);
  180.                 EEPROM_write(8,address[1]);
  181.                 EEPROM_write(9,address[2]);
  182.                 EEPROM_write(10,address[3]);
  183.                 EEPROM_write(11,address[4]);
  184.         
  185.                 if(out_control_change)
  186.                 {
  187.                         EEPROM_write(12,0xe4);
  188.                         EEPROM_write(13,0xa5);
  189.                
  190.                         EEPROM_write(14,out_control_data[0]>>8);
  191.                         EEPROM_write(15,out_control_data[0]);
  192.                         EEPROM_write(16,out_control_data[1]>>8);
  193.                         EEPROM_write(17,out_control_data[1]);
  194.                         EEPROM_write(18,out_control_data[2]>>8);
  195.                         EEPROM_write(19,out_control_data[2]);
  196.                         EEPROM_write(20,out_control_data[3]>>8);
  197.                         EEPROM_write(21,out_control_data[3]);
  198.                         EEPROM_write(22,out_control_data[4]>>8);
  199.                         EEPROM_write(23,out_control_data[4]);
  200.                         EEPROM_write(24,out_control_data[5]>>8);
  201.                         EEPROM_write(25,out_control_data[5]);
  202.                         EEPROM_write(26,out_control_data[6]>>8);
  203.                         EEPROM_write(27,out_control_data[6]);
  204.                         EEPROM_write(28,out_control_data[7]>>8);
  205.                         EEPROM_write(29,out_control_data[7]);
  206.                 }
  207.         
  208.                
  209.                
  210.         
  211.         
  212.         
  213.                 IAP_CONTR=0;
  214. }

  215. /**************************************************************************/
  216. //NRF24L01
  217. u8 SPI(u8 byte)
  218. {
  219.         u8 i;
  220.         for(i=0;i<8;i++)
  221.         {
  222.                 MDI=(byte&0x80);
  223.                 SCK=1;
  224.                 byte<<=1;
  225.                 byte|=MDO;
  226.                 SCK=0;
  227.         }
  228.         return byte;
  229. }

  230. void REG_write(u8 address,u8 command)
  231. {
  232.         CSN=0;
  233.         SPI(0x20+address);
  234.         SPI(command);
  235.         CSN=1;
  236. }

  237. void FIFO_write(u8 DATA_OUT[],u8 lengh)
  238. {
  239.         u8 i;
  240.         CSN=0;
  241.         SPI(0xa0);
  242.         for(i=0;i<lengh;i++)
  243.         SPI(DATA_OUT[i]);
  244.         CSN=1;
  245. }
  246. void FIFO_read(u8 DATA_IN[],u8 lengh)                //读取接收数据缓冲区
  247. {
  248.         u8 i;
  249.         CSN=0;
  250.         SPI(0x61);        //读取命令
  251.         for(i=0;i<lengh;i++)
  252.         DATA_IN[i]=SPI(0);           
  253.         CSN=1;
  254. }

  255. void TX_address(u8 DATA_IN[])
  256. {
  257.         CSN=0;                 
  258.         SPI(0x20+0x10);
  259.         SPI(DATA_IN[0]);
  260.         SPI(DATA_IN[1]);
  261.         SPI(DATA_IN[2]);
  262.         SPI(DATA_IN[3]);
  263.         SPI(DATA_IN[4]);
  264.         CSN=1;  
  265. }  
  266. void RX_address(u8 DATA_IN[])
  267. {
  268.         CSN=0;                 
  269.         SPI(0x20+0x0a);
  270.         SPI(DATA_IN[0]);
  271.         SPI(DATA_IN[1]);
  272.         SPI(DATA_IN[2]);
  273.         SPI(DATA_IN[3]);
  274.         SPI(DATA_IN[4]);
  275.         CSN=1;  
  276. }
  277. void RX_mode()                                 
  278. {
  279.         CE=0;
  280.         REG_write(0x00,0x3b); //CRC,8 bit,Power on,RX
  281.         CE=1;
  282. }                                    
  283.         
  284. void TX_mode()                                 
  285. {
  286.         CE=0;
  287.         REG_write(0x00,0x0a);
  288.   CE=1;
  289. }

  290. void  NRF_power(u8 P)                                //发射功率设置 250k
  291. {                                                                                                               
  292.         CE=0;
  293.         if(P==3)REG_write(0x06,0x27);                  //0db 修正之前注释错误
  294.         else if(P==2)REG_write(0x06,0x25);          //-6db
  295.         else if(P==1)REG_write(0x06,0x23);          //-12db
  296.         else if(P==0)REG_write(0x06,0x21);    //-18db
  297.         CE=1;
  298. }

  299. void NRF_size(u8 l)
  300. {
  301.         CE=0;
  302.         REG_write(0x11,l);  
  303.         CE=1;
  304. }

  305. void NRF_channel(u8 c)
  306. {
  307.         CE=0;
  308.         REG_write(0x05,c);  
  309.         CE=1;
  310. }


  311. void NRF_init()
  312. {        
  313.         CE=0;
  314.         SCK=0;
  315.         REG_write(0x01,0x00); //禁止 自动应答
  316.         REG_write(0x02,0x01); //允许 P0信道
  317.         REG_write(0x04,0x00); //禁止 自动重发
  318.         RX_mode();                          
  319.         NRF_channel(66);
  320.         NRF_power(TX_power);
  321.         NRF_size(11);
  322.         RX_address(address);
  323.         TX_address(address);
  324. }

  325. void NRF_test()        //无线模块终极测试
  326. {        
  327.         u8 reset_err=0;
  328.         CE=0;
  329.         SCK=0;
  330.         CSN=0;
  331.         
  332.         if(SPI(0x20)!=0x0e){reset_err=1;}
  333.         SPI(0x0a);

  334.         CSN=1;

  335.         CSN=0;
  336.         SPI(0x00);

  337.         if(SPI(0x00)!=0x0a){NRF_error|=0x02;}//MOSI bad
  338.         CSN=1;

  339.         REG_write(0x01,0x00);
  340.         REG_write(0x04,0x00);
  341.         REG_write(0x11,1);
  342.         
  343.         FIFO_write(tx,1);
  344.         CE=1;

  345.         delay_ms(2);
  346.         
  347.         CSN=0;

  348.         if(SPI(0x00)!=0x2e){NRF_error|=0x04;}//CE bad
  349.         CSN=1;
  350.                
  351.         if(IRQ)NRF_error|=0x18;        //IRQ bad
  352.         else
  353.         {
  354.                 if(NRF_error&0x04==0)NRF_error|=0x10;                //MISO bad
  355.         }
  356.         CE=1;
  357.         
  358.         if(reset_err&&NRF_error>1)NRF_error|=0x01;//CSN,CLK bad
  359.         
  360.         REG_write(0x07,0x20);        //清除TX中断信号
  361. }

  362. void data_check(int x,int max,int min)
  363. {
  364.         
  365.         if(x>max)x=max;
  366.         if(x<min)x=min;

  367. }

  368. void initial()
  369. {        
  370.         u8 t;
  371.         
  372.         CH5=0;                        //如果CH5与CH6被短接,重新对码
  373.         Delay1ms();
  374.         if(CH6==0)                  //新增修正通道6插上舵机不能用的BUG
  375.         {
  376.                 P1M1=0x08;          //插上舵机也会使CH6为0,所以将CH5设为推挽
  377.                 CH5=1;
  378.                 Delay1ms();
  379.                 if(CH6)restar=1;   //如果CH6被拉高,说明5/6通道短接,启动重新对码
  380.         }
  381.                  
  382.         LED=0;                //点亮指示灯再关闭,表示单片机正常工作
  383.         delay_ms(100);
  384.         P1M1=0xfb;
  385.         P2M1=0xc7;
  386.         P3M1=0x80;        //将6通道输出IO口配置为大电流推挽模式,保证正常驱动电调与舵机
  387.         TMOD=0x11;        //允许两个定时器中断        
  388.         IE=0x8a;
  389.         IP=0x08;


  390.         if(restar)first=1;
  391.         DATA_read();

  392.         
  393.         data_check(out_control_data[0],1023,0);
  394.         data_check(out_control_data[1],1023,0);
  395.         data_check(out_control_data[2],1023,0);
  396.         data_check(out_control_data[3],1023,0);
  397.         data_check(out_control_data[4],1023,0);
  398.         data_check(out_control_data[5],1023,0);
  399.         data_check(out_control_data[6],1023,0);
  400.         data_check(out_control_data[7],1023,0);
  401.         

  402.         NRF_test();
  403.         if(NRF_error)
  404.         {
  405.                 t=10;
  406.                 while(t)
  407.                 {
  408.                         LED=0;                //模块错误闪灯
  409.                         delay_ms(50);
  410.                         LED=1;                //模块错误闪灯
  411.                         delay_ms(50);
  412.                         t--;
  413.                 }
  414.         }
  415.         
  416.         NRF_init();

  417.         

  418.         
  419.         if(first)
  420.         {
  421.                 NRF_power(0);
  422.                 NRF_channel(33);
  423.                 TX_address(address_0);
  424.                 RX_address(address_0);
  425.                 while(IRQ);
  426.                 FIFO_read(rx,11);                //读取接收数据
  427.                 CE=0;
  428.                 REG_write(0x07,0x40);        //清除无线模块中断信号
  429.                 CE=1;
  430.                 if(rx[0]==0xa0)
  431.                 {
  432.                         hopping[0]=rx[1];
  433.                         hopping[1]=rx[2];
  434.                         hopping[2]=rx[3];
  435.                         hopping[3]=rx[4];
  436.                         hopping[4]=rx[5];
  437.                         address[0]=rx[6];
  438.                         address[1]=rx[7];
  439.                         address[2]=rx[8];
  440.                         address[3]=rx[9];
  441.                         address[4]=rx[10];
  442.                 }
  443.                
  444.                 tx[0]='O',tx[1]='K';
  445.                 connecting=1;
  446.                 while(connecting)
  447.                 {
  448.                         TX_mode();               
  449.                         NRF_channel(33);
  450.                         TX_address(address_0);
  451.                         RX_address(address_0);
  452.                         FIFO_write(tx,11);
  453.                         Delay1ms();
  454.                         
  455.                         RX_mode();
  456.                         NRF_channel(hopping[0]);
  457.                         TX_address(address);
  458.                         RX_address(address);
  459.                         while(1)
  460.                         {
  461.                                 Delay1ms();
  462.                                 if(IRQ==0)
  463.                                 {
  464.                                         FIFO_read(rx,11);                //读取接收数据
  465.                                         CE=0;
  466.                                         REG_write(0x07,0x40);        //清除无线模块中断信号
  467.                                         CE=1;         
  468.                                         connecting=0;break;
  469.                                 }
  470.                                 t++;if(t>100){t=0;break;}
  471.                         }                          
  472.                 }
  473.                         DATA_save();
  474.         RX_address(address);
  475.         TX_address(address);
  476.         NRF_power(3);
  477.         }
  478.         
  479. }

  480.                                                                                                                                              

  481. main()
  482. {        
  483.         delay_ms(200);delay_ms(200);//开机延时以避过电源波动
  484.         
  485.         initial();
  486. PCON |= 0x80;                //使能波特率倍速位SMOD
  487.         SCON = 0x50;                //8位数据,可变波特率
  488.         AUXR |= 0x04;                //独立波特率发生器时钟为Fosc,即1T
  489.         BRT = 0xF3;                //设定独立波特率发生器重装值
  490.         AUXR |= 0x01;                //串口1选择独立波特率发生器为波特率发生器
  491.         AUXR |= 0x10;
  492.                   
  493.         
  494.         TR0=1;                        //打开定时器

  495.         
  496.         NRF_channel(hopping[0]);
  497.         
  498.         
  499.         while(IRQ);
  500.         TR1=1;
  501.         lose=1;
  502.         LED=1;
  503.         while(1)
  504.         {        
  505.                 while(IRQ&lose);
  506.                 if(lose)
  507.                 {        
  508.                         jump_1=0;jump_2=0;hopping_count=0;//收到有效信号后刷新跳频器
  509.                         receive++;timer1=0;timer3=0;m=0;               
  510.                         
  511.                         FIFO_read(rx,11);                //读取接收数据
  512.                         CE=0;
  513.                         REG_write(0x07,0x40);        //清除无线模块中断信号
  514.                         CE=1;
  515.                         
  516.                         TX_mode();
  517.                         tx[0]=rx_num;
  518.                         tx[1]=0;
  519.                         tx[2]=0;
  520.                         tx[3]=0;
  521.                         tx[4]=0;
  522.                         FIFO_write(tx,11);
  523.                         Delay1ms();

  524.                         RX_mode();
  525.                                                 
  526.                         if(jump_mode)
  527.                         {
  528.                                 jump_mode=0;
  529.                                 hopping_turn=random[hopping_num];
  530.                         }
  531.                         hopping_turn++;
  532.                         if(hopping_turn>4)hopping_turn=0;
  533.                         NRF_channel(hopping[hopping_turn]);
  534.                         



  535.                         if(rx[0]==0xa0)
  536.                         {
  537.                                 LED_flash=1,LED=0;
  538.                                 buff[0]=rx[1];
  539.                                 buff[0]<<=2;
  540.                                 buff[0]+=rx[2]>>6;
  541.                                 buff[1]=rx[2]&0x3f;
  542.                                 buff[1]<<=4;
  543.                                 buff[1]+=rx[3]>>4;                        
  544.                                 buff[2]=rx[3]&0x0f;
  545.                                 buff[2]<<=6;
  546.                                 buff[2]+=rx[4]>>2;
  547.                                 buff[3]=rx[4]&0x03;
  548.                                 buff[3]<<=8;
  549.                                 buff[3]+=rx[5];

  550.                                 buff[4]=rx[6];
  551.                                 buff[4]<<=2;
  552.                                 buff[4]+=rx[7]>>6;
  553.                                 buff[5]=rx[7]&0x3f;
  554.                                 buff[5]<<=4;
  555.                                 buff[5]+=rx[8]>>4;                        
  556.                                 buff[6]=rx[8]&0x0f;
  557.                                 buff[6]<<=6;
  558.                                 buff[6]+=rx[9]>>2;
  559.                                 buff[7]=rx[9]&0x03;
  560.                                 buff[7]<<=8;
  561.                                 buff[7]+=rx[10];
  562.                                 
  563.                                 
  564.                                 data_check(buff[0],1023,0);
  565.                                 data_check(buff[1],1023,0);
  566.                                 data_check(buff[2],1023,0);
  567.                                 data_check(buff[3],1023,0);
  568.                                 data_check(buff[4],1023,0);
  569.                                 data_check(buff[5],1023,0);
  570.                                 data_check(buff[6],1023,0);
  571.                                 data_check(buff[7],1023,0);
  572.                                 
  573.                                 out_control_data[0]=buff[0];
  574.                                 out_control_data[1]=buff[1];
  575.                                 out_control_data[2]=buff[2];
  576.                                 out_control_data[3]=buff[3];
  577.                                 out_control_data[4]=buff[4];
  578.                                 out_control_data[5]=buff[5];
  579.                                 out_control_data[6]=buff[6];
  580.                                 out_control_data[7]=buff[7];
  581.                                 
  582.                                 out_control_change=1;
  583.                                 DATA_save();
  584.                                 out_control_change=0;
  585.                                 
  586.                         }
  587.                         else if(rx[0]==0xa1)
  588.                         {
  589.                                 buff[0]=rx[1];
  590.                                 buff[0]<<=2;
  591.                                 buff[0]+=rx[2]>>6;
  592.                                 buff[1]=rx[2]&0x3f;
  593.                                 buff[1]<<=4;
  594.                                 buff[1]+=rx[3]>>4;                        
  595.                                 buff[2]=rx[3]&0x0f;
  596.                                 buff[2]<<=6;
  597.                                 buff[2]+=rx[4]>>2;
  598.                                 buff[3]=rx[4]&0x03;
  599.                                 buff[3]<<=8;
  600.                                 buff[3]+=rx[5];

  601.                                 buff[4]=rx[6];
  602.                                 buff[4]<<=2;
  603.                                 buff[4]+=rx[7]>>6;
  604.                                 buff[5]=rx[7]&0x3f;
  605.                                 buff[5]<<=4;
  606.                                 buff[5]+=rx[8]>>4;                        
  607.                                 buff[6]=rx[8]&0x0f;
  608.                                 buff[6]<<=6;
  609.                                 buff[6]+=rx[9]>>2;
  610.                                 buff[7]=rx[9]&0x03;
  611.                                 buff[7]<<=8;
  612.                                 buff[7]+=rx[10];
  613.                                 
  614.                                 
  615.                                 data_check(buff[0],1023,0);
  616.                                 data_check(buff[1],1023,0);
  617.                                 data_check(buff[2],1023,0);
  618.                                 data_check(buff[3],1023,0);
  619.                                 data_check(buff[4],1023,0);
  620.                                 data_check(buff[5],1023,0);
  621.                                 data_check(buff[6],1023,0);
  622.                                 data_check(buff[7],1023,0);
  623.                                 
  624.                                 CH_data[0]=buff[0];
  625.                                 CH_data[1]=buff[1];
  626.                                 CH_data[2]=buff[2];
  627.                                 CH_data[3]=buff[3];
  628.                                 CH_data[4]=buff[4];
  629.                                 CH_data[5]=buff[5];
  630.                                 CH_data[6]=buff[6];
  631.                                 CH_data[7]=buff[7];                                
  632.                         }
  633.                         
  634.                         


  635.                 }
  636.                 else
  637.                 {
  638.                          hopping_count++;
  639.                         if(hopping_count>5)jump_mode=1;
  640.                         
  641.                         if(jump_mode)
  642.                         {
  643.                                 hopping_num++;
  644.                                 if(hopping_num>99)hopping_num=0;
  645.                                 NRF_channel(hopping[random[hopping_num]]);
  646.                                 lose=1;
  647.                         }
  648.                         else
  649.                         {
  650.                                 hopping_turn++;
  651.                                 if(hopping_turn>4)hopping_turn=0;
  652.                                 NRF_channel(hopping[hopping_turn]);
  653.                                 lose=1;
  654.                         }
  655.                         
  656.                 }
  657.                
  658.         }
  659.         
  660. }


  661. void et0()interrupt 1                        //跳频定时器 3ms
  662. {
  663.         TL0=0x47;TH0=0xf4;

  664.         timer1++;
  665.         if(timer1>333)                        //每秒统计有效信号,小于20个点亮LED示警,表示信号微弱
  666.         {
  667.                 timer1=333;
  668.                 rx_num=0;LED=0;
  669.         }
  670.         else LED=1;
  671.         
  672.         timer2++;
  673.         if(timer2>333)
  674.         {
  675.                 timer2=0;
  676.                 rx_num=receive;
  677.                 receive=0;
  678.         }
  679.         
  680.         timer3++;
  681.         if(timer3>666)
  682. ……………………

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

所有资料51hei提供下载:
萝莉遥控.rar (236.02 KB, 下载次数: 713)


评分

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

查看全部评分

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

使用道具 举报

沙发
ID:432192 发表于 2019-2-17 12:28 来自手机 | 只看该作者
感谢楼主分享,同时感谢萝莉大神开源
回复

使用道具 举报

板凳
ID:486784 发表于 2019-3-8 12:40 | 只看该作者

感谢楼主分享,同时感谢萝莉大神开源
回复

使用道具 举报

地板
ID:275111 发表于 2019-3-8 14:00 | 只看该作者
NB。这个可以做遥控的车或者飞机吗?
回复

使用道具 举报

5#
ID:43383 发表于 2019-3-8 15:26 | 只看该作者
谢谢分享
回复

使用道具 举报

6#
ID:84997 发表于 2019-3-17 14:30 | 只看该作者
感谢楼主分享
回复

使用道具 举报

7#
ID:497166 发表于 2019-3-24 12:40 来自手机 | 只看该作者
楼主有基于51单片机的船模程序吗?
回复

使用道具 举报

8#
ID:35873 发表于 2019-3-25 01:29 | 只看该作者
好资料   谢谢分享
回复

使用道具 举报

9#
ID:385637 发表于 2019-3-25 10:10 | 只看该作者
注释少了,对于我这种新手看的很吃力
回复

使用道具 举报

10#
ID:79913 发表于 2019-5-25 12:24 | 只看该作者
感谢你的分享,同时感谢萝莉大神开源
回复

使用道具 举报

11#
ID:282981 发表于 2019-6-8 15:24 | 只看该作者
楼主有没有2代源码 看你的电路图凑齐了原价结果买的是5110屏幕求2代源码   lele4090039@163.com
回复

使用道具 举报

12#
ID:557411 发表于 2019-6-8 21:34 | 只看该作者
非常给力的设计,谢谢分享!
回复

使用道具 举报

13#
ID:574543 发表于 2019-6-29 13:59 | 只看该作者
感谢楼主分享
回复

使用道具 举报

14#
ID:282095 发表于 2019-6-29 14:13 | 只看该作者
感谢分享
回复

使用道具 举报

15#
ID:404831 发表于 2019-7-5 13:30 | 只看该作者
正要找的呢!感谢楼主分享!
回复

使用道具 举报

16#
ID:580382 发表于 2019-7-9 01:17 来自手机 | 只看该作者
很棒的分享,很感激
回复

使用道具 举报

17#
ID:408841 发表于 2019-7-10 13:02 来自手机 | 只看该作者
没有解压码啊
回复

使用道具 举报

18#
ID:243394 发表于 2019-7-13 09:19 | 只看该作者
感谢楼主分享,同时感谢萝莉大神开源
回复

使用道具 举报

19#
ID:598167 发表于 2019-8-9 09:23 | 只看该作者
楼主,有六通道接收代码吗      3131829009@qq.com
回复

使用道具 举报

20#
ID:51142 发表于 2019-8-19 23:06 | 只看该作者
支持一下
回复

使用道具 举报

21#
ID:48413 发表于 2019-8-20 19:19 | 只看该作者
谢谢楼主学习了
回复

使用道具 举报

22#
ID:464231 发表于 2019-9-4 21:36 | 只看该作者
向楼主学习,
回复

使用道具 举报

23#
ID:140420 发表于 2019-9-9 14:11 | 只看该作者
发射机原理图和程序定义引脚对不上
回复

使用道具 举报

24#
ID:477152 发表于 2019-9-13 16:09 | 只看该作者
不错哦  萝莉控
回复

使用道具 举报

25#
ID:459181 发表于 2019-10-7 16:56 | 只看该作者
谢谢大神的慷慨
回复

使用道具 举报

26#
ID:613618 发表于 2019-10-16 21:12 来自手机 | 只看该作者
很好的程序,要是注释多点就好了
回复

使用道具 举报

27#
ID:88256 发表于 2019-10-17 00:02 | 只看该作者
谢谢分享!
回复

使用道具 举报

28#
ID:499701 发表于 2019-10-17 13:29 | 只看该作者
感谢大神分享,感谢开源
回复

使用道具 举报

29#
ID:625659 发表于 2019-10-17 15:32 | 只看该作者
感谢分享
回复

使用道具 举报

30#
ID:252511 发表于 2019-10-19 10:30 | 只看该作者
很给力的资料,谢谢楼主分享
回复

使用道具 举报

31#
ID:285380 发表于 2019-10-19 14:25 | 只看该作者
我正说弄个航模,这遥控延迟有多高呢。
回复

使用道具 举报

32#
ID:641862 发表于 2019-11-14 13:42 | 只看该作者
感谢大神分享,萝莉三硬件都有了,就程序未找到,大神雪中送炭啊
回复

使用道具 举报

33#
ID:622823 发表于 2019-11-16 22:03 | 只看该作者
确实是个开源的好遥控 很多人都制作过
回复

使用道具 举报

34#
ID:517344 发表于 2019-11-28 18:38 | 只看该作者
感谢楼主分享,同时感谢萝莉大神开源
回复

使用道具 举报

35#
ID:517344 发表于 2019-12-2 21:55 | 只看该作者
问下楼主这个怎么对频呢?
回复

使用道具 举报

36#
ID:517344 发表于 2019-12-3 11:35 | 只看该作者
mealie666 发表于 2019-9-9 14:11
发射机原理图和程序定义引脚对不上

确实是对不上  兄弟等你做成了吗?
回复

使用道具 举报

37#
ID:254584 发表于 2019-12-5 21:57 | 只看该作者
谢谢楼主分享
回复

使用道具 举报

38#
ID:657586 发表于 2019-12-6 15:15 来自手机 | 只看该作者
感谢楼主分享,同时感谢萝莉大神开源
回复

使用道具 举报

39#
ID:517344 发表于 2019-12-6 18:35 | 只看该作者

兄弟做成了吗?  我做的没放应
回复

使用道具 举报

40#
ID:360391 发表于 2019-12-13 09:10 | 只看该作者
这个用其他模块会不会出现干扰
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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