历史上的今天
返回首页

历史上的今天

今天是: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];

推荐阅读

史海拾趣

EOZ Secme公司的发展小趣事

在电子产品市场竞争日益激烈的背景下,EOZ Secme始终坚守品质至上的原则。公司从原材料采购、生产流程到售后服务都进行严格把控,确保每一件产品都符合高标准的质量要求。这种对品质的执着追求让EOZ Secme的产品在市场上赢得了良好的口碑,也使其品牌价值得到了显著提升。

DIOTEC公司的发展小趣事

为了进一步完善全球产业布局,DIOTEC于2007年在印度普纳建立了新的生产基地。这座工厂紧邻印度的“门户城市”孟买,为DIOTEC在印度市场的拓展提供了有力支持。印度工厂的投产,不仅加强了DIOTEC在全球市场的竞争力,也进一步巩固了其在亚洲市场的地位。

Glorious Sources Co Ltd公司的发展小趣事
确认声音输出装置(如扬声器)是否完好且连接正确。
兵字(BingZi)公司的发展小趣事

随着市场的不断变化和客户需求的日益多样化,兵字公司意识到,要想在市场中保持领先地位,就必须不断进行技术创新。于是,公司投入大量研发资源,成功研发出了小型精密互感器。这一创新产品不仅填补了市场空白,还为公司带来了可观的收益。同时,兵字公司也凭借这一技术突破,进一步巩固了在电子元器件领域的领先地位。

Exar [Exar Corporation]公司的发展小趣事

Exar公司自1971年在加利福尼亚州成立以来,最初以生产高性能、高可靠性的线性集成电路而著名。然而,随着技术的进步和市场的变化,Exar逐渐意识到通信领域的巨大潜力。因此,在1980年代初,公司开始专注于串行通信和数据存储解决方案,包括UARTs(通用异步收发器)和存储器ICs。这一转变不仅扩大了Exar的市场覆盖范围,也为其后续的发展奠定了坚实的基础。

Greenwich Instruments Ltd公司的发展小趣事

Greenconn Corp自创立之初便致力于连接器技术的研发与创新。在20世纪末,随着电子产品的普及和通讯技术的飞速发展,连接器作为电子设备间的桥梁,其重要性日益凸显。Greenconn Corp凭借其敏锐的市场洞察力和强大的研发实力,成功研发出了一系列高性能、高可靠性的连接器产品,迅速在汽车电子、通信设备等领域占据了一席之地。这些创新产品不仅满足了市场对连接器高质量、高效率的需求,还推动了整个电子行业的发展。

问答坊 | AI 解惑

菜鸟求救啊....关于m2716的用法...

以前从没接触过这类芯片。现在要用啊。但又不会。 谁能告诉下我m2716在Proteus中如何加载数据,还有在现实中用什么把数据烧到它里面去? 不甚感谢啊... …

查看全部问答>

mc55模块上电20秒后自动关机问题

将mc55模块/IGT引脚置低电平后,mc55模块上电开机,但20秒后mc55模块会自动关机.每次都是这样,找不到原因,请各位指教.谢谢…

查看全部问答>

我想请问KEYMAN工具是个什么?

当设备与 Visual Studio 机器没有 ActiveSync 连接,但有一个有效的 TCP 连接时,部署无效。 解决办法:使用单独提供的 Keyman 工具来执行初始的设备设置. 我想请问KEYMAN工具是什么,在哪里可以找到它,或者下到它? 谢谢~…

查看全部问答>

请问一下接近开关 常开加常闭是什么意思。

我就知道接近开关有常开,和常闭,怎么还有一个一开一闭的,这个一开一闭算起什么作用呢?…

查看全部问答>

【一起学习器件指标】你敢不敢说个大家不知道的电阻指标

几乎所有的电子设计中都会使用到电阻,我稍微提供问题,你知道的电阻有哪些参数指标呢?你敢不敢说个大家都不知道的指标?这个大家现在用的多了也许再过多少年后就看不到这位了…

查看全部问答>

关于定时器中断打断芯片驱动函数时序的问题???!!!

做了个东西用的DHT11温湿度传感器  显示是用的数码管动态扫描 由于执行驱动函数用的时间比较长就把显示函数放在了定时器中断里面  问题出来了 定时器中断把DHT11驱动函数的时序给打乱了 读出来的数据一直在跳动 乱 我在驱动函 ...…

查看全部问答>

求助~~急

哪位大哥知道51单片机中读秒指示电路的工作原理?求解答…

查看全部问答>

我的C2000无法仿真了.问题已解决。

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, ...…

查看全部问答>