找回密码
 立即注册

QQ登录

只需一步,快速开始

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

BWT901CL的单片机和Arduino程序(蓝牙9轴)

[复制链接]
跳转到指定楼层
楼主
ID:300449 发表于 2019-11-10 16:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. //51单片机读取串口MPU6050模块的实例程序
  2. //测试平台:
  3. //51单片机开发板YL-39,芯片STC89C52
  4. //注意:
  5. //    1.51单片机的下载串口只有一个,同时又需要接MPU6050,因此在下载的时候需要拔下MPU6050的TX线,等程序下载成功以后再插上。
  6. //接线方法:
  7. //     51单片机                  JY901模块
  8. //                +5V                ----        VCC
  9. //                TX                (不接)        RX
  10. //                RX                ----        TX
  11. //                GND                ----        GND
  12. ///////////////////////////////////////////////////////
  13. /*预处理命令*/
  14. #include <reg52.h>                   //包含单片机寄存器的头文件
  15. #include <stdio.h>
  16. #include "JY901.h"

  17. void delay_ms(unsigned short i)
  18. {
  19. unsigned short k;
  20.         while(i--)
  21.         for (k=0;k<100;k++);
  22. }

  23. void main(void)
  24. {
  25.         unsigned char i=0;
  26.         TMOD=0x20;                   //用定时器设置串口波特率           9600
  27.         TH1=0xfd;
  28.         TL1=0xfd;
  29.         TR1=1;
  30.         TI=1;
  31.         REN=1;          //串口初始化
  32.         SM0=0;
  33.         SM1=1;
  34.         EA=1;           //开启总中断
  35.         ES=1;
  36.         printf("STC89S52 Read JY901 module demo\r\n");
  37.         printf("-------------BY:JYZK-------------\r\n");
  38.         printf("---http://RobotControl.taobao.com---\r\n");
  39.         while(1)
  40.         {
  41.                 delay_ms(10);
  42.                 printf("Time:20%d-%d-%d %d:%d:%.3f\r\n",(short)stcTime.ucYear,(short)stcTime.ucMonth,
  43.                                 (short)stcTime.ucDay,(short)stcTime.ucHour,(short)stcTime.ucMinute,(float)stcTime.ucSecond+(float)stcTime.usMiliSecond/1000);

  44.                 printf("Acc:%.3f %.3f %.3f\r\n",(float)stcAcc.a[0]/32768*16,(float)stcAcc.a[1]/32768*16,(float)stcAcc.a[2]/32768*16);

  45.                 printf("Gyro:%.3f %.3f %.3f\r\n",(float)stcGyro.w[0]/32768*2000,(float)stcGyro.w[1]/32768*2000,(float)stcGyro.w[2]/32768*2000);

  46.                 printf("Angle:%.3f %.3f %.3f\r\n",(float)stcAngle.Angle[0]/32768*180,(float)stcAngle.Angle[1]/32768*180,(float)stcAngle.Angle[2]/32768*180);

  47.                 printf("Mag:%d %d %d\r\n",stcMag.h[0],stcMag.h[1],stcMag.h[2]);

  48.                 printf("Pressure:%lx Height%.2f\r\n",stcPress.lPressure,(float)stcPress.lAltitude/100);

  49.                 printf("DStatus:%d %d %d %d\r\n",stcDStatus.sDStatus[0],stcDStatus.sDStatus[1],stcDStatus.sDStatus[2],stcDStatus.sDStatus[3]);

  50.                 printf("Longitude:%ldDeg%.5fm Lattitude:%ldDeg%.5fm\r\n",stcLonLat.lLon/10000000,(double)(stcLonLat.lLon % 10000000)/1e5,stcLonLat.lLat/10000000,(double)(stcLonLat.lLat % 10000000)/1e5);

  51.                 printf("GPSHeight:%.1fm GPSYaw:%.1fDeg GPSV:%.3fkm/h\r\n\r\n",(float)stcGPSV.sGPSHeight/10,(float)stcGPSV.sGPSYaw/10,(float)stcGPSV.lGPSVelocity/1000);
  52.                         
  53.         }        
  54. }
  55.          
  56. void ser() interrupt 4
  57. {
  58.         if (RI)
  59.         {         
  60.                 RI=0;
  61.                  CopeSerialData(SBUF);            
  62.           }
  63.          
  64.    
  65. }
复制代码
  1. #include <string.h>
  2. #include "JY901.h"
  3. struct STime                stcTime={0};
  4. struct SAcc                 stcAcc={0};
  5. struct SGyro                 stcGyro={0};
  6. struct SAngle                 stcAngle={0};
  7. struct SMag                 stcMag={0};
  8. struct SDStatus         stcDStatus={0};
  9. struct SPress                 stcPress={0};
  10. struct SLonLat                 stcLonLat={0};
  11. struct SGPSV                 stcGPSV={0};

  12. void CharToLong(char Dest[],char Source[])
  13. {
  14.          *Dest                 = Source[3];
  15.          *(Dest+1)         = Source[2];
  16.          *(Dest+2)         = Source[1];
  17.          *(Dest+3)         = Source[0];
  18. }
  19. void CopeSerialData(unsigned char ucData)
  20. {
  21.         static unsigned char ucRxBuffer[12];
  22.         static unsigned char ucRxCnt = 0;        
  23.         
  24.         ucRxBuffer[ucRxCnt++]=ucData;
  25.         if (ucRxBuffer[0]!=0x55) //数据头不对,则重新开始寻找0x55数据头
  26.         {
  27.                 ucRxCnt=0;
  28.                 return;                                                                                                                                                                                                                                                                          
  29.         }
  30.         if (ucRxCnt<11) {return;}//数据不满11个,则返回
  31.         else
  32.         {
  33.                 switch(ucRxBuffer[1])
  34.                 {
  35.                         case 0x50: stcTime.ucYear                 = ucRxBuffer[2];
  36.                                                 stcTime.ucMonth         = ucRxBuffer[3];
  37.                                                 stcTime.ucDay                 = ucRxBuffer[4];
  38.                                                 stcTime.ucHour                 = ucRxBuffer[5];
  39.                                                 stcTime.ucMinute         = ucRxBuffer[6];
  40.                                                 stcTime.ucSecond         = ucRxBuffer[7];
  41.                                                 stcTime.usMiliSecond=((unsigned short)ucRxBuffer[9]<<8)|ucRxBuffer[8];
  42.                                                 break;
  43.                         case 0x51:        stcAcc.a[0] = ((unsigned short)ucRxBuffer[3]<<8)|ucRxBuffer[2];
  44.                                                 stcAcc.a[1] = ((unsigned short)ucRxBuffer[5]<<8)|ucRxBuffer[4];
  45.                                                 stcAcc.a[2] = ((unsigned short)ucRxBuffer[7]<<8)|ucRxBuffer[6];
  46.                                                 break;
  47.                         case 0x52:        stcGyro.w[0] = ((unsigned short)ucRxBuffer[3]<<8)|ucRxBuffer[2];
  48.                                                 stcGyro.w[1] = ((unsigned short)ucRxBuffer[5]<<8)|ucRxBuffer[4];
  49.                                                 stcGyro.w[2] = ((unsigned short)ucRxBuffer[7]<<8)|ucRxBuffer[6];
  50.                                                 break;
  51.                         case 0x53:        stcAngle.Angle[0] = ((unsigned short)ucRxBuffer[3]<<8)|ucRxBuffer[2];
  52.                                                 stcAngle.Angle[1] = ((unsigned short)ucRxBuffer[5]<<8)|ucRxBuffer[4];
  53.                                                 stcAngle.Angle[2] = ((unsigned short)ucRxBuffer[7]<<8)|ucRxBuffer[6];
  54.                                                 stcAngle.T = ((unsigned short)ucRxBuffer[9]<<8)|ucRxBuffer[8];
  55.                                                 break;
  56.                         case 0x54:        stcMag.h[0] = ((unsigned short)ucRxBuffer[3]<<8)|ucRxBuffer[2];
  57.                                                 stcMag.h[1] = ((unsigned short)ucRxBuffer[5]<<8)|ucRxBuffer[4];
  58.                                                 stcMag.h[2] = ((unsigned short)ucRxBuffer[7]<<8)|ucRxBuffer[6];
  59.                                                 stcAngle.T = ((unsigned short)ucRxBuffer[9]<<8)|ucRxBuffer[8];
  60.                                                 break;
  61.                         case 0x55:        stcDStatus.sDStatus[0] = ((unsigned short)ucRxBuffer[3]<<8)|ucRxBuffer[2];
  62.                                                 stcDStatus.sDStatus[1] = ((unsigned short)ucRxBuffer[5]<<8)|ucRxBuffer[4];
  63.                                                 stcDStatus.sDStatus[2] = ((unsigned short)ucRxBuffer[7]<<8)|ucRxBuffer[6];
  64.                                                 stcDStatus.sDStatus[3] = ((unsigned short)ucRxBuffer[9]<<8)|ucRxBuffer[8];
  65.                                                 break;
  66.                         case 0x56:        ucRxBuffer[2] = 0x12;ucRxBuffer[3] = 0x34;ucRxBuffer[4] = 0x56;ucRxBuffer[5] = 0x78;
  67.                                                 CharToLong((char*)&stcPress.lPressure,(char*)&ucRxBuffer[2]);
  68.                                                 CharToLong((char*)&stcPress.lAltitude,(char*)&ucRxBuffer[6]);
  69.                                                 break;
  70.                         case 0x57:        CharToLong((char*)&stcLonLat.lLon,(char*)&ucRxBuffer[2]);
  71.                                                 CharToLong((char*)&stcLonLat.lLat,(char*)&ucRxBuffer[6]);
  72.                                                 break;
  73.                         case 0x58:        stcGPSV.sGPSHeight = ((unsigned short)ucRxBuffer[3]<<8)|ucRxBuffer[2];
  74.                                                 stcGPSV.sGPSYaw = ((unsigned short)ucRxBuffer[5]<<8)|ucRxBuffer[4];
  75.                                                 CharToLong((char*)&stcGPSV.lGPSVelocity,(char*)&ucRxBuffer[6]);
  76.                                                 break;
  77.                 }
  78.                 ucRxCnt=0;
  79.         }
  80. }
复制代码

51.rar

50.53 KB, 下载次数: 4, 下载积分: 黑币 -5

Arduino.rar

118.72 KB, 下载次数: 7, 下载积分: 黑币 -5

评分

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

查看全部评分

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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