找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5172|回复: 5
收起左侧

基于NRF2401无线通信模块下的无线鼠标设计 含STM32源码与原理图

  [复制链接]
ID:385874 发表于 2018-8-16 12:43 | 显示全部楼层 |阅读模式
基于STM32F103C8T6下的无线鼠标,请参考使用

发射电路:
0.png

接受电路:
0.png

单片机源程序如下:
  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. //计算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. //设置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];//加速度计
  38.         //        short temp2[3];
  39.         //        short temp3;  //温度
  40.          u8 tmp_buf[5];         //发射寄存器
  41.                 u8 key;
  42.                 short X,Y,X1,Y1;                 //发送到电脑端的坐标值
  43.                
  44.                 u8 keysta;                //[0]:0,左键松开;1,左键按下;
  45.                                                 //[1]:0,右键松开;1,右键按下
  46.                                                 //[2]:0,中键松开;1,中键按下                     
  47.                 delay_init();                     //延时函数初始化          
  48.                 NVIC_Configuration();          //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
  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("设置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发射函数
  91. //        Joystick_Send(keysta,X/15,Y/15,0);//鼠标函数,按键,X轴坐标,Y轴坐标



  92.         }
  93. }
  94.        
复制代码

所有资料51hei提供下载:

空中鼠标源程序.rar (378.79 KB, 下载次数: 124)

评分

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

查看全部评分

回复

使用道具 举报

ID:129788 发表于 2018-10-5 15:25 | 显示全部楼层
新手,想下载学习,可惜没有黑币。
回复

使用道具 举报

ID:260595 发表于 2019-2-28 23:44 | 显示全部楼层
大佬,请问有发射端的代码吗
回复

使用道具 举报

ID:405201 发表于 2019-5-19 16:21 | 显示全部楼层
请问有发射端的代码吗
回复

使用道具 举报

ID:704379 发表于 2020-5-19 22:42 | 显示全部楼层
多谢了 讲解的非常到位
回复

使用道具 举报

ID:295855 发表于 2020-12-7 08:27 | 显示全部楼层
非常谢谢,学习一下
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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