找回密码
 立即注册

QQ登录

只需一步,快速开始

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

用NRF2401做遥控小车,硬件没有问题,不明白为什么不能收到信息

[复制链接]
跳转到指定楼层
楼主
ID:432788 发表于 2019-3-23 16:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
附上代码
发送:
  1. #include<stc15.h>
  2. #include<intrins.h>
  3. #include <STC15F2K60S2.H>
  4. #define unchar unsigned char
  5. #define unint unsigned int
  6. #define MAX_TX 0X10  //???????????ж?
  7. #define TX_OK 0X20    //TX????????ж?
  8. #define RX_OK  0X40   //??????????ж?
  9. //NRF24l01????????
  10. /*******************************************************/
  11. #define TX_ADDR_WITDH 5 //??????????????5?????
  12. #define RX_ADDR_WITDH 5 //??????????????5?????
  13. #define TX_DATA_WITDH 3//??????????2?????
  14. #define RX_DATA_WITDH 3//??????????2?????
  15. /*******************????????***************************/
  16. #define  R_REGISTER      0x00//??????ü????
  17. #define  W_REGISTER      0x20//д???ü????
  18. #define  R_RX_PAYLOAD   0x61//???RX??Ч????
  19. #define  W_TX_PAYLOAD  0xa0//дTX??Ч????
  20. #define  FLUSH_TX   0xe1//???TXFIFO?????
  21. #define  FLUSH_RX   0xe2//???RXFIFO?????
  22. #define  REUSE_TX_PL     0xe3//??????????????Ч????
  23. #define  NOP             0xff//?????
  24. /******************????????****************************/
  25. #define  CONFIG          0x00//???ü????
  26. #define  EN_AA    0x01//?????????
  27. #define  EN_RXADDR       0x02//??????????0-5?????
  28. #define  SETUP_AW        0x03//?????????????????3-5
  29. #define  SETUP_RETR      0x04//??????????
  30. #define  RF_CH           0x05//??????????
  31. #define  RF_SETUP        0x06//????????
  32. #define  STATUS          0x07//???????
  33. #define  OBSERVE_TX      0x08//??????????
  34. #define  CD              0x09//???
  35. #define  RX_ADDR_P0      0x0a//???????0??????
  36. #define  RX_ADDR_P1      0x0b//???????1??????
  37. #define  RX_ADDR_P2      0x0c//???????2??????
  38. #define  RX_ADDR_P3      0x0d//???????3??????
  39. #define  RX_ADDR_P4      0x0e//???????4??????
  40. #define  RX_ADDR_P5      0x0f//???????5??????
  41. #define  TX_ADDR         0x10//??????
  42. #define  RX_PW_P0        0x11//P0?????????????
  43. #define  RX_PW_P1        0x12//P1?????????????
  44. #define  RX_PW_P2        0x13//P2?????????????
  45. #define  RX_PW_P3        0x14//P3?????????????
  46. #define  RX_PW_P4        0x15//P4?????????????
  47. #define  RX_PW_P5        0x16//P5?????????????
  48. #define  FIFO_STATUS     0x17//FIFO???????
  49. #define ADC_POWER   0x80            
  50. #define ADC_FLAG    0x10            
  51. #define ADC_START   0x08           
  52. #define ADC_SPEEDLL 0x00         
  53. #define ADC_SPEEDL  0x20           
  54. #define ADC_SPEEDH  0x40         
  55. #define ADC_SPEEDHH 0x60
  56. #define uchar unsigned char
  57. #define uint unsigned int
  58. sbit IRQ  =P2^4;
  59. sbit  MISO =P2^5;    //????
  60. sbit  MOSI =P2^6;     //???
  61. sbit SCLK =P2^7;     //???
  62. sbit CSN  =P0^0;  //???
  63. sbit CE     =P0^1;      //???
  64. unchar code TxAddr[]={0x11,0x98,0x10,0x10,0x01};//??????
  65. unchar code RxAddr[]={0x11,0x98,0x10,0x10,0x01};//??????
  66. uchar aa,bb,cc;
  67. unchar bdata sta;   //?????         
  68. sbit  RX_DR=sta^6;
  69. sbit  TX_DS=sta^5;
  70. sbit  MAX_RT=sta^4;
  71. void IO_init()
  72. {
  73. P0M0 =0X0F;
  74. P0M1 =0X10;
  75. P1M0 =0X00;  //P18?????????
  76. P1M1 =0X0F;
  77. //P0M1=0XFF;
  78. //P0M0=0X00;
  79. //P3M1=0X00;
  80. //P3M0=0X00;
  81. //P4M1=0X00;
  82. //P4M0=0X01;
  83. //
  84. //P6M1=0X80;
  85. //P6M0=0X70;
  86. }
  87. //?????????????
  88. /**********************???????**************************/
  89. void NRFDelay(unint t)
  90. {
  91.    unint x,y;
  92.    for(x=t;x>0;x--)
  93.     for(y=110;y>0;y--);
  94. }
  95. /**********************NRF24L01?????????*******************************/
  96. void NRF24L01Int()
  97. {
  98. NRFDelay(2);//????????????
  99. CE=0;
  100. CSN=1;   //????????Ч??
  101. SCLK=0;  //?????
  102. IRQ=1;   //?ж????????????
  103. }
  104. /***SPI???????????8λ????***********************************/
  105. unchar NRFSPI(unchar date) //?????д???????????
  106. {
  107.     unchar i;
  108.     for(i=0;i<8;i++)          // ???8??
  109.     {
  110.    if(date&0x80)
  111.      MOSI=1;
  112.    else
  113.      MOSI=0;             // byte???λ?????MOSI
  114.         date<<=1;             // ?θ?λ??λ?????λ
  115.         SCLK=1;
  116.    if(MISO)               // ????SCK??nRF24L01??MOSI????1λ?????????MISO???1λ????
  117.         
  118.   date|=0x01;        // ??MISO??byte???λ
  119.       SCLK=0;             // SCK???
  120.     }
  121.     return(date);            // ?????????????
  122. }
  123. /*****************SPI***??***????????????*********************************/
  124. unchar NRFReadReg(unchar RegAddr)
  125. {
  126.    unchar BackDate;
  127.    CSN=0;//??????
  128.    NRFSPI(RegAddr);//д????????
  129.    BackDate=NRFSPI(0x00);//д???????????  
  130.    CSN=1;
  131.    return(BackDate); //??????
  132. }
  133. /*****************SPI***д***????????????*********************************/
  134. unchar NRFWriteReg(unchar RegAddr,unchar date)
  135. {
  136.    unchar BackDate;
  137.    CSN=0;//??????
  138.    BackDate=NRFSPI(RegAddr);//д????
  139.    NRFSPI(date);//д???
  140.    CSN=1;  
  141.    return(BackDate);
  142. }
  143. /*****************SPI***???***RXFIFO????????********************************/
  144. unchar NRFReadRxDate(unchar RegAddr,unchar *RxDate,unchar DateLen)
  145. {  //????????//????????????//??????????//???????
  146.     unchar BackDate,i;
  147. CSN=0;                     //??????????Ч
  148. BackDate=NRFSPI(RegAddr);  //д???????????????
  149. for(i=0;i<DateLen;i++)     //???????
  150.    {
  151.       RxDate[i]=NRFSPI(0x00);
  152.    }
  153.     CSN=1;
  154.    return(BackDate);
  155. }
  156. /*****************SPI***д??***TXFIFO????????**********************************/
  157. unchar NRFWriteTxDate(unchar RegAddr,unchar *TxDate,unchar DateLen)  //RegAddr   =0x30 , DateLen  ???????5
  158. {
  159.    //????????//д???????????//??????????//???????
  160.    unchar BackDate,i;
  161.    CSN=0;
  162.          
  163.   BackDate=NRFSPI(RegAddr);//д???д??????????
  164.    for(i=0;i<DateLen;i++)   //д??????
  165.      {
  166.      NRFSPI(*TxDate++);
  167.   }   
  168.    CSN=1;
  169.    return(BackDate);
  170. }
  171. //????????????????
  172. //???????0 ?????1 ???
  173. unchar Check()
  174. {
  175. int i;
  176. unchar buf[5]={0XA5,0XA5,0XA5,0XA5,0XA5};
  177. NRFWriteTxDate ( W_REGISTER + TX_ADDR , buf , TX_ADDR_WITDH );  //д??????
  178. NRFReadRxDate ( R_REGISTER + TX_ADDR , buf , RX_ADDR_WITDH);   //????????
  179. for(i=0;i<5;i++)   //?ж?
  180.     if(buf[i]!=0XA5)
  181.      break;
  182.   if(i==5)
  183.    return 0;
  184.    return 1;
  185. }
  186. /****????????????????????*************/
  187. void NRF24L01_TX_Mode()
  188. {
  189. NRFWriteTxDate ( W_REGISTER + TX_ADDR , TxAddr , TX_ADDR_WITDH );    //дTX?????
  190. NRFWriteTxDate ( W_REGISTER + RX_ADDR_P0 , RxAddr , RX_ADDR_WITDH ); //????RX????????????????ACK
  191. NRFWriteReg( W_REGISTER + EN_AA , 0X01);   //??????0??????
  192. NRFWriteReg( W_REGISTER + EN_RXADDR , 0X01);   //??????0???????
  193. NRFWriteReg( W_REGISTER + SETUP_RETR , 0X1A);  //??????????????500us + 86us?????????????????10??
  194. NRFWriteReg( W_REGISTER + RF_CH , 40);  //????RF????40
  195. NRFWriteReg( W_REGISTER + RF_SETUP , 0X0F);  //????TX?????????2M,0db???棬?????????濪??
  196. NRFWriteReg( W_REGISTER + CONFIG , 0X0E);  //????????????????????PWR_UP,EN_CRC,16BIT_CRC,?????????????????ж?
  197. }
  198. void Delay100us()  //@11.0592MHz
  199. {
  200. unsigned char i, j;
  201. _nop_();
  202. _nop_();
  203. i = 2;
  204. j = 15;
  205. do
  206. {
  207.   while (--j);
  208. } while (--i);
  209. }
  210. /*****???????????********
  211. txbuf????????????????
  212. //????????????????
  213. ***************************/
  214. unchar NRF24L01_TxPacket(unchar *txbuf)
  215. {

  216. CE = 0;
  217. NRFWriteTxDate ( W_TX_PAYLOAD , txbuf , TX_DATA_WITDH );   //д?????TX BUF?У?2?????
  218. CE = 1;  //???????
  219. Delay100us();   //??????????

  220. sta =  NRFReadReg(STATUS);  //?????????????
  221. if(TX_DS||MAX_RT) //????????ж?
  222. {
  223.     NRFWriteReg(W_REGISTER+STATUS,0xff);  // ???TX_DS??MAX_RT?ж???
  224.     CSN=0;
  225.     NRFSPI( FLUSH_TX );//???????FIFO ????????????????????????????????????????????  
  226.        CSN=1;
  227.     return 0x01;     
  228. }
  229. return 0XFF;
  230. }
  231. void Delay1000ms()  //@11.0592MHz
  232. {
  233. unsigned char i, j, k;
  234. _nop_();
  235. _nop_();
  236. i = 43;
  237. j = 6;
  238. k = 203;
  239. do
  240. {
  241.   do
  242.   {
  243.    while (--k);
  244.   } while (--j);
  245. } while (--i);
  246. }
  247. // int k,m;
  248. void Delay(unsigned int s)
  249. {
  250. unsigned int i;
  251. for(i=0; i<s; i++);
  252. for(i=0; i<s; i++);
  253. }
  254. //*********************************?????A/D???*************************************************
  255. void adc_init()
  256. {
  257. P1ASF=0xff;
  258. ADC_RES=0;  
  259. ADC_CONTR = ADC_POWER | ADC_SPEEDLL;
  260. Delay(10);             //??????
  261. }
  262. //**********************************???A/D?????????********************************************
  263. uint getADCResult(char ch)
  264. {
  265. // uint result;
  266. ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ch | ADC_START;
  267. _nop_();                        //???4??NOP
  268.     _nop_();
  269.     _nop_();
  270.     _nop_();
  271. while (!(ADC_CONTR & ADC_FLAG));//?????????
  272. ADC_CONTR &= ~ADC_FLAG; //??
  273. return ADC_RES;
  274. }
  275. void main()
  276. {  
  277.     unchar j=0;
  278. unchar T_X[3]={0x00,0x00,0x00};
  279. _nop_();
  280. IO_init();  //I/O????????
  281. NRF24L01Int();
  282. j=Check();
  283. if(j==0)
  284. {
  285. //???
  286. P22= 1;
  287. }
  288. if(j==1)
  289. {
  290.     while(1)
  291.     {
  292.     P22=!P22;
  293.     Delay1000ms();
  294.     }
  295. }
  296. NRF24L01_TX_Mode();   //????????????ó??????
  297.     adc_init();
  298.    
  299. while(1)
  300.   {  
  301.       P21=1;P36=1; P37=1;P23=1;
  302.     T_X[0]=getADCResult(0x03);
  303.   T_X[1]=getADCResult(0x00);
  304.                      
  305.   NRF24L01_TxPacket(T_X);
  306.     aa=getADCResult(0x03);
  307.      if(aa>140)
  308.    {
  309.     P36=0;
  310.    }
  311.      else if(aa<115)
  312.    {
  313.       P37=0;
  314.    }                                                                                                                                                                 
  315.    bb=getADCResult(0x00);
  316.     if(bb>140)
  317.    {
  318.      P23=0;

  319.    }
  320.      else if(bb<115)
  321.    {                                
  322.       P21=0;
  323.    }      
  324.    

  325.    }
  326. [/i][/i][i][i]}[/i][/i]
  327. 接收:

  328. #include <STC15F2K60S2.H>
  329. #include <intrins.h>
  330. #define unchar unsigned char
  331. #define unint unsigned int
  332. //?ж?
  333. #define MAX_TX 0X10  //???????????ж?
  334. #define TX_OK 0X20    //TX????????ж?
  335. #define RX_OK  0X40   //??????????ж?
  336. //NRF24l01????????
  337. /*******************************************************/
  338. #define TX_ADDR_WITDH 5 //??????????????5?????
  339. #define RX_ADDR_WITDH 5 //??????????????5?????
  340. #define TX_DATA_WITDH 3//??????????2?????
  341. #define RX_DATA_WITDH 3//??????????2?????
  342. /*******************????????***************************/
  343. #define  R_REGISTER      0x00//??????ü????
  344. #define  W_REGISTER      0x20//д???ü????
  345. #define  R_RX_PAYLOAD   0x61//???RX??Ч????
  346. #define  W_TX_PAYLOAD  0xa0//дTX??Ч????
  347. #define  FLUSH_TX   0xe1//???TXFIFO?????
  348. #define  FLUSH_RX   0xe2//???RXFIFO?????
  349. #define  REUSE_TX_PL     0xe3//??????????????Ч????
  350. #define  NOP             0xff//?????
  351. /******************????????****************************/
  352. #define  CONFIG          0x00//???ü????
  353. #define  EN_AA    0x01//?????????
  354. #define  EN_RXADDR       0x02//??????????0-5?????
  355. #define  SETUP_AW        0x03//?????????????????3-5
  356. #define  SETUP_RETR      0x04//??????????
  357. #define  RF_CH           0x05//??????????
  358. #define  RF_SETUP        0x06//????????
  359. #define  STATUS          0x07//???????
  360. #define  OBSERVE_TX      0x08//??????????
  361. #define  CD              0x09//???
  362. #define  RX_ADDR_P0      0x0a//???????0??????
  363. #define  RX_ADDR_P1      0x0b//???????1??????
  364. #define  RX_ADDR_P2      0x0c//???????2??????
  365. #define  RX_ADDR_P3      0x0d//???????3??????
  366. #define  RX_ADDR_P4      0x0e//???????4??????
  367. #define  RX_ADDR_P5      0x0f//???????5??????
  368. #define  TX_ADDR         0x10//??????
  369. #define  RX_PW_P0        0x11//P0?????????????
  370. #define  RX_PW_P1        0x12//P1?????????????
  371. #define  RX_PW_P2        0x13//P2?????????????
  372. #define  RX_PW_P3        0x14//P3?????????????
  373. #define  RX_PW_P4        0x15//P4?????????????
  374. #define  RX_PW_P5        0x16//P5?????????????
  375. #define  FIFO_STATUS     0x17//FIFO???????
  376. #define uchar unsigned char
  377. #define uint unsigned int
  378. #define CYCLE   5000  
  379. sbit INL1=P2^0;
  380. sbit INL2=P4^4;
  381. sbit INR1=P4^2;                  
  382. sbit INR2=P4^1;
  383. sbit INZ1=P7^1;                 
  384. sbit INZ2=P7^0;
  385. sbit IRQ  =P4^0;
  386. sbit  MISO =P6^5;    //????
  387. sbit  MOSI =P6^7;     //???
  388. sbit SCLK =P6^4;     //???
  389. sbit CSN  =P6^6;  //???
  390. sbit CE     =P3^2;      //???
  391. sbit ENL=P2^1;
  392. sbit ENR=P4^3;
  393. unchar code TxAddr[]={0x11,0x98,0x10,0x10,0x01};//??????
  394. unchar code RxAddr[]={0x11,0x98,0x10,0x10,0x01};//??????
  395. uchar  AD[3];
  396. uchar  aa,ab,bb,ba,j;
  397. void dire(uchar x);   
  398. void  Cspeed(uchar x);   
  399. void IO_Init()
  400. {
  401. P1M0 =0X1B;
  402.     P1M1 =0X20;

  403. P0M0 =0X00;  
  404. P0M1 =0X00;
  405.   
  406. P2M1=0x00;
  407. P2M0=0x00;
  408.    
  409. P3M1=0x00;
  410. P3M0=0x00;
  411.   
  412. P4M1=0X00;
  413. P4M0=0X00;

  414. P5M1=0x00;
  415. P5M0=0x00;

  416. P6M1=0X00;
  417. P6M0=0X00;

  418. P7M1=0x00;
  419. P7M0=0x00;  
  420. }
  421. void PWM_Init()
  422. {         
  423. P_SW2|=0x80;                //??BIT7λ??1????XSFR   
  424. PWMCFG|=0x0C;             //????PWM4PEM5?????????????1
  425. PWMCKS&=0xE0;          //PWMCKS,PWM??????PwmC1K_1T
  426. PWMC=CYCLE;                    //PWM????????????   2.2KHz
  427. PWM4T1=0;                 //????η??????
  428. PWM4T2=4500;   
  429. PWM5T1=0;                 //????η??????
  430. PWM5T2=4500;
  431. PWM4CR&=0XF0;              //PWM4??????P2.2?????ж?
  432. PWMCR&=~0x40;             //???PWM???????????ж?
  433. PWMCR|=0x0C;                   //PWM4,PWM5???
  434.     PWMCR|=0x80;        //???PWM???η???????PWM?????????????
  435.    P_SW2&=~0x80;             //???????XRAM
  436.   ENL=0;
  437.   ENR=0;
  438. }
  439. void NRFDelay(unint t)
  440. {
  441.    unint x,y;
  442.    for(x=t;x>0;x--)
  443.     for(y=110;y>0;y--);
  444. }
  445. /**********************NRF24L01?????????*******************************/
  446. void NRF24L01Int()
  447. {
  448. NRFDelay(2);//????????????
  449. CE=0;
  450. CSN=1;   //????????Ч??
  451. SCLK=0;  //?????
  452. IRQ=1;   //?ж????????????
  453. }
  454. /***SPI???????????8λ????***********************************/
  455. unchar NRFSPI(unchar date)
  456. {
  457.     unchar i;
  458.     for(i=0;i<8;i++)          // ???8??
  459.     {
  460.    if(date&0x80)
  461.      MOSI=1;
  462.    else
  463.      MOSI=0;             // byte???λ?????MOSI
  464.         date<<=1;             // ?θ?λ??λ?????λ
  465.         SCLK=1;
  466.    if(MISO)               // ????SCK??nRF24L01??MOSI????1λ?????????MISO???1λ????
  467.         
  468.   date|=0x01;        // ??MISO??byte???λ
  469.       SCLK=0;             // SCK???
  470.     }
  471.     return(date);            // ?????????????
  472. }
  473. /*****************SPI***??***????????????*********************************/
  474. unchar NRFReadReg(unchar RegAddr)
  475. {
  476.    unchar BackDate;
  477.    CSN=0;//??????
  478.    NRFSPI(RegAddr);//д????????
  479.    BackDate=NRFSPI(0x00);//д???????????  
  480.    CSN=1;
  481.    return(BackDate); //??????
  482. }
  483. /*****************SPI***д***????????????*********************************/
  484. unchar NRFWriteReg(unchar RegAddr,unchar date)
  485. {
  486.    unchar BackDate;
  487.    CSN=0;//??????                                                                             
  488.    BackDate=NRFSPI(RegAddr);//д????
  489.    NRFSPI(date);//д???
  490.    CSN=1;  
  491.    return(BackDate);
  492. }
  493. /*****************SPI***???***RXFIFO????????********************************/
  494. unchar NRFReadRxDate(unchar RegAddr,unchar *RxDate,unchar DateLen)
  495. {  //????????//????????????//??????????//???????
  496.     unchar BackDate,i;
  497. CSN=0;                     //??????????Ч
  498. BackDate=NRFSPI(RegAddr);  //д???????????????
  499. for(i=0;i<DateLen;i++)     //???????
  500.    {
  501.       RxDate[i]=NRFSPI(0x00);
  502.    }
  503.     CSN=1;
  504.    return(BackDate);
  505. }
  506. /*****************SPI***д??***TXFIFO????????**********************************/
  507. unchar NRFWriteTxDate(unchar RegAddr,unchar *TxDate,unchar DateLen)
  508. {
  509.    //????????//д???????????//??????????//???????
  510.    unchar BackDate,i;
  511.    CSN=0;
  512.    BackDate=NRFSPI(RegAddr);//д???д??????????
  513.    for(i=0;i<DateLen;i++)   //д??????
  514.      {
  515.      NRFSPI(*TxDate++);
  516.   }   
  517.    CSN=1;
  518.    return(BackDate);
  519. }
  520. //????????????????
  521. //???????0 ?????1 ???
  522. unchar Check()
  523. {
  524. int i;
  525. unchar buf[5]={0XA5,0XA5,0XA5,0XA5,0XA5};
  526. //д??????
  527. NRFWriteTxDate ( W_REGISTER + TX_ADDR , buf , TX_ADDR_WITDH );
  528. //????????
  529. NRFReadRxDate ( R_REGISTER + TX_ADDR , buf , RX_ADDR_WITDH);
  530. //?ж?
  531. for(i=0;i<5;i++)
  532.     if(buf[i]!=0XA5)
  533.      break;
  534.   if(i==5)
  535.    return 0;
  536.    return 1;
  537. }
  538. //void Delay(unsigned int s)
  539. //{
  540. // unsigned int i;
  541. // for(i=0; i<s; i++);
  542. // for(i=0; i<s; i++);
  543. //}
  544. /*****????????????????????******/
  545. void NRF24L01_RX_Mode(void)
  546. {
  547. NRFWriteTxDate ( W_REGISTER + RX_ADDR_P0 , RxAddr , RX_ADDR_WITDH );
  548. NRFWriteReg( W_REGISTER + EN_AA , 0X01);   //??????0??????
  549. NRFWriteReg( W_REGISTER + EN_RXADDR , 0X01);   //??????0???????
  550. NRFWriteReg( W_REGISTER + RF_CH , 40);  //????RF????40
  551. NRFWriteReg( W_REGISTER + RX_PW_P0 , RX_DATA_WITDH); //2?????
  552. NRFWriteReg( W_REGISTER + RF_SETUP , 0X0F);  //????TX?????????0db???棬?????????濪??
  553. NRFWriteReg( W_REGISTER + CONFIG , 0X0F);
  554. CE = 1;  //?????????
  555. }
  556. /********???????************/
  557. unchar NRF24L01_RxPacket(unchar *rxbuf)
  558. {
  559. unchar sta;
  560. sta = NRFReadReg(STATUS);  //?????????????
  561. NRFWriteReg( W_REGISTER + STATUS , sta);  
  562. if(sta & RX_OK)
  563. {
  564. NRFReadRxDate( R_RX_PAYLOAD , rxbuf , RX_DATA_WITDH );    //??????????
  565. NRFSPI( FLUSH_RX );    //???RX
  566. return 0;
  567. }
  568. return 1;  //??н????????
  569. }
  570. void Delay1000ms()  //@11.0592MHz
  571. {
  572. unsigned char i, j, k;
  573. _nop_();
  574. _nop_();
  575. i = 43;
  576. j = 6;
  577. k = 203;
  578. do
  579. {
  580.   do
  581.   {
  582.      while (--k);
  583.   } while (--j);
  584. } while (--i);
  585. }

  586. void dire(uchar x)     //???????
  587. {
  588. switch(x)  
  589. {
  590. case 0:INL1=1; INL2=0; //??
  591.     INR1=0; INR2=1;      
  592.     break;
  593. case 1:INL1=1; INL2=0; //??
  594.     INR1=1; INR2=0;
  595.     break;
  596. case 2:INL1=0; INL2=1; //?
  597.     INR1=0; INR2=1;
  598.     break;
  599. case 3:INL1=0; INL2=1; //??
  600.     INR1=1; INR2=0;
  601.     break;
  602. case 4:INL1=0; INL2=0; //??
  603.     INR1=0; INR2=0;
  604.     break;
  605. default : break;
  606. }                                                   
  607. }
  608. void  transAD()
  609. {
  610.      
  611.     if(AD[0]>140)
  612.     {      
  613.        Cspeed(0);
  614.     }
  615.      if(AD[0]<110)
  616.     {
  617.        Cspeed(1);
  618.     }
  619.     if(AD[1]>140)
  620.     {
  621.        Cspeed(2);
  622.     }
  623.     if(AD[1]<110)  
  624.     {
  625.        Cspeed(3);
  626.     }
  627.     if(((AD[0]<139)&&(AD[0]>109))&&((AD[1]<139)&&(AD[1]>109)))
  628.        {
  629.        dire(4);
  630.     }
  631. }

  632. void  Cspeed(uchar x)
  633. {
  634.    switch(x)  
  635. {
  636. case 0: aa=AD[0]-128;
  637.    P_SW2|=0x80;
  638.       PWM4T2=39*aa;                //????η???????????
  639.       PWM5T2=39*aa;                //????η???????????
  640.       P_SW2&=~0x80;
  641.     dire(0);         //??      
  642.        break;                                                                                                                                      
  643. case 1: ab=128-AD[0];
  644.    P_SW2|=0x80;
  645.       PWM4T2=39*ab;                //????η???????????
  646.       PWM5T2=39*ab;                //????η???????????
  647.       P_SW2&=~0x80;
  648.    dire(3);          //??
  649.    break;
  650. case 2: bb=(AD[1]-128);
  651.       P_SW2|=0x80;
  652.       PWM4T2=39*bb;                //????η???????????
  653.       PWM5T2=39*bb;                //????η???????????
  654.    dire(2);
  655.       break;
  656. case 3: ba=(128-AD[1]);
  657.     P_SW2|=0x80;
  658.       PWM4T2=39*ba;                //????η???????????
  659.       PWM5T2=39*ba;  
  660.    dire(1);
  661.    break;
  662.    default: dire(4);
  663.          break;
  664. }

  665. }
  666. void main()
  667. {
  668. IO_Init();  //I/O????????
  669. NRF24L01Int();
  670. NRF24L01_RX_Mode();
  671.       
  672. PWM_Init();
  673. j=Check();
  674.     if(j==0)
  675. {
  676. //???
  677. P77=0;
  678. }
  679. if(j==1)
  680. {
  681.     while(1)
  682.     {
  683.     P77=!P77;
  684.     Delay1000ms();
  685.     }
  686. }  
  687.   dire(4);  
  688.     while(1)
  689.   {  
  690.     if(NRF24L01_RxPacket(AD))
  691.     {
  692.     P77=0;
  693.     Delay1000ms();
  694.      P77=1;
  695.     Delay1000ms();
  696.     }
  697.    transAD();
  698. }
  699. }
复制代码


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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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