久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2099|回復: 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 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 蜜桃av鲁一鲁一鲁一鲁 | 四虎成人免费电影 | 男女视频网站 | 国产精品久久久久无码av | 久久99精品久久久 | 亚洲中字在线 | 亚洲国产精品日本 | 亚洲精品一二三区 | 欧美日韩精品一区二区三区蜜桃 | 久久精品一区二区三区四区 | av片在线观看网站 | 久久精品久久久久久 | 天天插天天搞 | 成人在线免费观看av | 在线观看亚洲精品 | 91婷婷韩国欧美一区二区 | 亚洲一二三在线 | 天天躁日日躁狠狠躁2018小说 | 国产日韩欧美一区 | 成人免费在线播放 | 亚洲国产成人av好男人在线观看 | 国产在线中文字幕 | 色综合视频 | 欧美美女二区 | 日韩精品在线看 | 华人黄网站大全 | 麻豆视频国产在线观看 | 欧美日韩国产一区二区三区 | 日韩欧美精品 | 精品国产色 | 久久久久国产一级毛片高清网站 | 亚洲精品久久久久久久久久久久久 | 亚洲高清av在线 | 日韩欧美专区 | 国产精品一二区 | 免费观看黄网站 | 午夜精品一区二区三区在线观看 | www亚洲精品| 日韩三级在线 | 在线电影日韩 | 在线观看不卡av |