历史上的今天
今天是:2024年11月11日(星期一)
2019年11月11日 | BWT901CL的单片机和Arduino程序(蓝牙9轴)
2019-11-11 来源:51hei
//51单片机读取串口MPU6050模块的实例程序
//测试平台:
//51单片机开发板YL-39,芯片STC89C52
//注意:
// 1.51单片机的下载串口只有一个,同时又需要接MPU6050,因此在下载的时候需要拔下MPU6050的TX线,等程序下载成功以后再插上。
//接线方法:
// 51单片机 JY901模块
// +5V ---- VCC
// TX (不接) RX
// RX ---- TX
// GND ---- GND
///////////////////////////////////////////////////////
/*预处理命令*/
#include #include #include "JY901.h" void delay_ms(unsigned short i) { unsigned short k; while(i--) for (k=0;k<100;k++); } void main(void) { unsigned char i=0; TMOD=0x20; //用定时器设置串口波特率 9600 TH1=0xfd; TL1=0xfd; TR1=1; TI=1; REN=1; //串口初始化 SM0=0; SM1=1; EA=1; //开启总中断 ES=1; printf("STC89S52 Read JY901 module demorn"); printf("-------------BY:JYZK-------------rn"); printf("---http://RobotControl.taobao.com---rn"); while(1) { delay_ms(10); printf("Time:20%d-%d-%d %d:%d:%.3frn",(short)stcTime.ucYear,(short)stcTime.ucMonth, (short)stcTime.ucDay,(short)stcTime.ucHour,(short)stcTime.ucMinute,(float)stcTime.ucSecond+(float)stcTime.usMiliSecond/1000); printf("Acc:%.3f %.3f %.3frn",(float)stcAcc.a[0]/32768*16,(float)stcAcc.a[1]/32768*16,(float)stcAcc.a[2]/32768*16); printf("Gyro:%.3f %.3f %.3frn",(float)stcGyro.w[0]/32768*2000,(float)stcGyro.w[1]/32768*2000,(float)stcGyro.w[2]/32768*2000); printf("Angle:%.3f %.3f %.3frn",(float)stcAngle.Angle[0]/32768*180,(float)stcAngle.Angle[1]/32768*180,(float)stcAngle.Angle[2]/32768*180); printf("Mag:%d %d %drn",stcMag.h[0],stcMag.h[1],stcMag.h[2]); printf("Pressure:%lx Height%.2frn",stcPress.lPressure,(float)stcPress.lAltitude/100); printf("DStatus:%d %d %d %drn",stcDStatus.sDStatus[0],stcDStatus.sDStatus[1],stcDStatus.sDStatus[2],stcDStatus.sDStatus[3]); printf("Longitude:%ldDeg%.5fm Lattitude:%ldDeg%.5fmrn",stcLonLat.lLon/10000000,(double)(stcLonLat.lLon % 10000000)/1e5,stcLonLat.lLat/10000000,(double)(stcLonLat.lLat % 10000000)/1e5); printf("GPSHeight:%.1fm GPSYaw:%.1fDeg GPSV:%.3fkm/hrnrn",(float)stcGPSV.sGPSHeight/10,(float)stcGPSV.sGPSYaw/10,(float)stcGPSV.lGPSVelocity/1000); } } void ser() interrupt 4 { if (RI) { RI=0; CopeSerialData(SBUF); } } 复制代码 #include #include "JY901.h" struct STime stcTime={0}; struct SAcc stcAcc={0}; struct SGyro stcGyro={0}; struct SAngle stcAngle={0}; struct SMag stcMag={0}; struct SDStatus stcDStatus={0}; struct SPress stcPress={0}; struct SLonLat stcLonLat={0}; struct SGPSV stcGPSV={0}; void CharToLong(char Dest[],char Source[]) { *Dest = Source[3]; *(Dest+1) = Source[2]; *(Dest+2) = Source[1]; *(Dest+3) = Source[0]; } void CopeSerialData(unsigned char ucData) { static unsigned char ucRxBuffer[12]; static unsigned char ucRxCnt = 0; ucRxBuffer[ucRxCnt++]=ucData; if (ucRxBuffer[0]!=0x55) //数据头不对,则重新开始寻找0x55数据头 { ucRxCnt=0; return; } if (ucRxCnt<11) {return;}//数据不满11个,则返回 else { switch(ucRxBuffer[1]) { case 0x50: stcTime.ucYear = ucRxBuffer[2]; stcTime.ucMonth = ucRxBuffer[3]; stcTime.ucDay = ucRxBuffer[4]; stcTime.ucHour = ucRxBuffer[5]; stcTime.ucMinute = ucRxBuffer[6]; stcTime.ucSecond = ucRxBuffer[7]; stcTime.usMiliSecond=((unsigned short)ucRxBuffer[9]<<8)|ucRxBuffer[8]; break; case 0x51: stcAcc.a[0] = ((unsigned short)ucRxBuffer[3]<<8)|ucRxBuffer[2]; stcAcc.a[1] = ((unsigned short)ucRxBuffer[5]<<8)|ucRxBuffer[4]; stcAcc.a[2] = ((unsigned short)ucRxBuffer[7]<<8)|ucRxBuffer[6];
史海拾趣
|
以前从没接触过这类芯片。现在要用啊。但又不会。 谁能告诉下我m2716在Proteus中如何加载数据,还有在现实中用什么把数据烧到它里面去? 不甚感谢啊... … 查看全部问答> |
|
当设备与 Visual Studio 机器没有 ActiveSync 连接,但有一个有效的 TCP 连接时,部署无效。 解决办法:使用单独提供的 Keyman 工具来执行初始的设备设置. 我想请问KEYMAN工具是什么,在哪里可以找到它,或者下到它? 谢谢~… 查看全部问答> |
|
几乎所有的电子设计中都会使用到电阻,我稍微提供问题,你知道的电阻有哪些参数指标呢?你敢不敢说个大家都不知道的指标?这个大家现在用的多了也许再过多少年后就看不到这位了… 查看全部问答> |
|
做了个东西用的DHT11温湿度传感器 显示是用的数码管动态扫描 由于执行驱动函数用的时间比较长就把显示函数放在了定时器中断里面 问题出来了 定时器中断把DHT11驱动函数的时序给打乱了 读出来的数据一直在跳动 乱 我在驱动函 ...… 查看全部问答> |
|
Error connecting to the target: (Error -151 @ 0x0) One of the FTDI driver functions used during the connect returned bad status or an error. The cause may one or more of: invalid emulator serial number, blank emulator EEPROM, ...… 查看全部问答> |




