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

2019-11-11来源: 51hei关键字:BWT901CL  单片机  Arduino程序  蓝牙9轴

//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];

[1] [2]
关键字:BWT901CL  单片机  Arduino程序  蓝牙9轴 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic479581.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:单片机MQ-2烟雾检测+ADC0809 AD转换+lcd1602显示程序
下一篇:基于51单片机的DS18B20温控系统设计

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

AVR单片机测温基于DS18B20
#include<iom16v.h>#include<macros.h>#include<delay.h>#define uint unsigned int#define uchar unsigned char#define dula_set PORTA |=BIT(3) //数码管段选#define dula_clr PORTA &=~BIT(3)#define wale_set PORTA |=BIT(4)//数码管位选#define wale_clr PORTA &=~BIT(4) #define DQ_IN DDRA&=~BIT(5)#define DQ_
发表于 2019-11-20
AVR单片机控制继电器
#include "macros.h"#define uchar unsigned char#define uint  unsigned intvoid delay_ms(uchar i){uchar a,b;for(a=1;a<i;a++)   for(b=1;b<141;b++)   {;}}void main(void){DDRA=0X80;PORTA=0X80;DDRB=0XFF;PORTB=0XFF;DDRC=0X01;PORTC=0X01;DDRD=0X00;PORTD=0XFF;while(1)  {&nbs
发表于 2019-11-20
AVR单片机控制继电器
PIC16F877A单片机的PWM输出程序
模块为PWM 工作方式,且其工作循环PR2=0XFF;       //设置PWM 的工作周期TRISC=0XFB;      //设置CCP1 引脚为输出方式while(1){  k++;  CCPR1L=k;  delay();  if(k>253)k=1;} }////////////////////////////////////////////////////////////////////////////////////////////下面的是AVR单片机ATMEGA16的PWM信号输出程序GCC编译
发表于 2019-11-20
LCD1602在PIC单片机中的使用程序
#include<pic.h>__CONFIG(0x1832);        //芯片配置字,看门狗关,上电延时开,掉电检测关,低压编程关,加密,4M晶体HS振荡#define rs RA1#define rw RA2#define e  RA3const char web[ ]={' ','W','W','W','.','P','I','C','1','6','.','C',&#
发表于 2019-11-20
LCD1602控制要领(pic单片机)
PIC板使用LCD时需要将J401摘除LCD 4脚(RS数据/命令选择端H/L)-----RB2LCD 5脚(R/W读写选择端H/L)---------RB1LCD 6脚(E使能读H,写L->H)----------RB0控制要领:如无检忙则可在每次操作之前作适当延时即可.写命令:rs = 0;rw = 0;ep = 0->1->0;(用于初始化和在控制显示的位置)写数据:rs = 1;rw = 0;ep = 0->1->0;(用于显示内容)初始化:Write_COM(0x38);//双列16X2Write_COM(0x0C);//开显示;无不显光标;光标不闪烁Write_COM(0x06);//写入数
发表于 2019-11-20
PIC单片机在MPLAB-IDE中使用HitechC编译器
PIC单片机的C语言使用(一)在MPLAB-IDE中使用HitechC编译器 一、装入编译器:1、启动MPLAB-IDE,如下图所示选择Project-》Install Language Tool2、在弹出的安装语言工具对话框里“Language Suite”选项现在显示的是Microchip,点击后面的箭头来选择语言。 我使用的工具是HI-TECH PICCME,所以选择为“HI-TECH PICC”。3、接下来在“Tool Name”里选择编译器组件的调用路径,这里有“PICC Compiler”(C编译器)、“PICC Assembler”(汇编器)和“PICC Linker”(链接器)3项都需要设置
发表于 2019-11-20
PIC单片机在MPLAB-IDE中使用HitechC编译器
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved