標(biāo)題: 基于NRF2401無線通信模塊下的無線鼠標(biāo)設(shè)計(jì) 含STM32源碼與原理圖 [打印本頁]

作者: caiyilong    時(shí)間: 2018-8-16 12:43
標(biāo)題: 基于NRF2401無線通信模塊下的無線鼠標(biāo)設(shè)計(jì) 含STM32源碼與原理圖
基于STM32F103C8T6下的無線鼠標(biāo),請參考使用

發(fā)射電路:


接受電路:


單片機(jī)源程序如下:
  1. #include "led.h"
  2. #include "delay.h"
  3. #include "key.h"
  4. #include "sys.h"
  5. #include "usart.h"         
  6. #include "string.h"
  7. #include "usb_lib.h"
  8. #include "hw_config.h"
  9. #include "usb_pwr.h"
  10. #include "I2C.h"
  11. #include "mpu6050.h"
  12. #include "24l01.h"
  13.                         


  14. //計(jì)算x1,x2的絕對值
  15. u32 usb_abs(u32 x1,u32 x2)
  16. {
  17.         if(x1>x2)return x1-x2;
  18.         else return x2-x1;
  19. }
  20. //設(shè)置USB 連接/斷線
  21. //enable:0,斷開
  22. //       1,允許連接          
  23. void usb_port_set(u8 enable)
  24. {         
  25.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);       
  26.         if(enable)_SetCNTR(_GetCNTR()&(~(1<<1)));//退出斷電模式
  27.         else
  28.         {          
  29.                 _SetCNTR(_GetCNTR()|(1<<1));  // 斷電模式
  30.                 GPIOA->CRH&=0XFFF00FFF;
  31.                 GPIOA->CRH|=0X00033000;
  32.                 PAout(12)=0;                      
  33.         }
  34. }         

  35. int main(void)
  36. {       
  37.         //        short temp1[3];//加速度計(jì)
  38.         //        short temp2[3];
  39.         //        short temp3;  //溫度
  40.          u8 tmp_buf[5];         //發(fā)射寄存器
  41.                 u8 key;
  42.                 short X,Y,X1,Y1;                 //發(fā)送到電腦端的坐標(biāo)值
  43.                
  44.                 u8 keysta;                //[0]:0,左鍵松開;1,左鍵按下;
  45.                                                 //[1]:0,右鍵松開;1,右鍵按下
  46.                                                 //[2]:0,中鍵松開;1,中鍵按下                     
  47.                 delay_init();                     //延時(shí)函數(shù)初始化          
  48.                 NVIC_Configuration();          //設(shè)置NVIC中斷分組2:2位搶占優(yōu)先級,2位響應(yīng)優(yōu)先級
  49.                 uart_init(9600);                 //串口初始化為9600
  50.                 printf("串口初始化完畢\r\n");
  51. //                 LED_Init();                             //LED端口初始化
  52. //                 KEY_Init();                                  //按鍵初始化
  53. //                 printf("按鍵初始化完畢\r\n");
  54.                 I2C_Init();
  55.                 printf("IIC初始化完畢\r\n");
  56.                 delay_ms(100);
  57.                 MPU6050_Init();
  58.                 printf("MPU6050初始化完畢\r\n");
  59.                 delay_ms(100);
  60.                 NRF24L01_Init();
  61.                 printf("24l01初始化完畢\r\n");
  62.                 while(NRF24L01_Check())        //檢查NRF24L01是否在位.       
  63.                 {
  64.                                 printf("未檢測到24l01\r\n");
  65.                                 delay_ms(200);
  66.                 }               
  67.                 printf("檢測到24l01---OK\r\n");
  68.                 NRF24L01_RX_Mode();
  69.                 printf("設(shè)置24l01為接收模式成功!\r\n");
  70.                
  71.                 usb_port_set(0);         //USB先斷開
  72.                 delay_ms(300);
  73.                         usb_port_set(1);        //USB再次連接
  74.                 //USB配置
  75.                 USB_Interrupts_Config();   
  76.                 Set_USBClock();   
  77.                 USB_Init();         
  78.                 printf("USB都初始化完畢了,騷年,開始接收吧。!\r\n");               
  79.         while(1)
  80.         {                
  81.                                 if(NRF24L01_RxPacket(tmp_buf)==0)
  82.                 {
  83.                         X=(s16)((tmp_buf[1]<<8)|tmp_buf[2]);
  84.                         Y=(s16)((tmp_buf[3]<<8)|tmp_buf[4]);       
  85.                         printf(" %8d%8d\r\n",X,Y);       
  86.                         Joystick_Send(tmp_buf[0],X,Y,0);                       
  87.                 }


  88. //                X1=(s16)((tmp_buf[1]<<8)|tmp_buf[2]);
  89. //                Y1=(s16)((tmp_buf[3]<<8)|tmp_buf[4]);
  90. //printf("%8d%8d%4X\r\n",tmp_buf[1],tmp_buf[2],NRF24L01_TxPacket(tmp_buf));  //NRF24l01發(fā)射函數(shù)
  91. //        Joystick_Send(keysta,X/15,Y/15,0);//鼠標(biāo)函數(shù),按鍵,X軸坐標(biāo),Y軸坐標(biāo)



  92.         }
  93. }
  94.        
復(fù)制代碼

所有資料51hei提供下載:

空中鼠標(biāo)源程序.rar (378.79 KB, 下載次數(shù): 127)
空中鼠標(biāo)原理圖.rar (230.52 KB, 下載次數(shù): 91)



作者: chonggege    時(shí)間: 2018-10-5 15:25
新手,想下載學(xué)習(xí),可惜沒有黑幣。
作者: tekoken    時(shí)間: 2019-2-28 23:44
大佬,請問有發(fā)射端的代碼嗎
作者: 541611503    時(shí)間: 2019-5-19 16:21
請問有發(fā)射端的代碼嗎
作者: liwei120312    時(shí)間: 2020-5-19 22:42
多謝了 講解的非常到位
作者: blueskyl    時(shí)間: 2020-12-7 08:27
非常謝謝,學(xué)習(xí)一下




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1