三轴陀螺仪mpu6050测试程序

  • 格式:doc
  • 大小:455.00 KB
  • 文档页数:9

下载文档原格式

  / 9
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
//LCD1602显示字符串
//****************************************
void DisplayListChar(uchar X,uchar Y,uchar *DData,L)
{
uchar ListLength=0;
Y&=0x1;
X&=0xF;
while(L--)
//函数声明
//****************************************
void delay(unsigned int k);//延时
//LCD相关函数
void InitLcd();//初始化lcd1602
void lcd_printf(uchar *s,int temp_data);
void InitLcd()
{
WriteCommandLCM(0x38,1);
WriteCommandLCM(0x08,1);
WriteCommandLCM(0x01,1);
WriteCommandLCM(0x06,1);
WriteCommandLCM(0x0c,1);
DisplayOneChar(0,0,'A');
uchar I2C_RecvByte();
void I2C_ReadPage();
void I2C_WritePage();
void display_ACCEL_x();
void display_ACCEL_y();
void display_ACCEL_z();
uchar Single_ReadI2C(uchar REG_Address);//读取I2C数据
#defineACCEL_XOUT_H0x3B
#defineACCEL_XOUT_L0x3C
#defineACCEL_YOUT_H0x3D
#defineACCEL_YOUT_L0x3E
#defineACCEL_ZOUT_H0x3F
#defineACCEL_ZOUT_L0x40
#defineTEMP_OUT_H0x41
void I2C_Start()
{
SDA = 1; //拉高数据线
SCL = 1; //拉高时钟线
Delay5us(); //延时
SDA = 0; //产生下降沿
Delay5us(); //延时
SCL = 0; //拉低时钟线
}
//**************************************
DataPort=dataW;_nop_();
LCM_EN=1;_nop_();_nop_();LCM_EN=0;
}
//****************************************
//LCD1602写入一个字符
//****************************************
DisplayOneChar(0,1,'G');
}
//****************************************
//LCD1602写允许
//****************************************
void WaitForEnable(void)
{
DataPort=0xff;
//编译环境Keil uVision2
//参考宏晶网站24c04通信程序
//功能:显示加速度计和陀螺仪的10位原始数据
//时间:2013年3月1日
//****************************************
#include <REG52.H>
#include <math.h> //Keil library
#include <stdio.h> //Keil library
#include <INTRINS.H>
typedef unsigned char uchar;
typedef unsigned short ushort;
typedef unsigned int uint;
//****************************************
//定义51单片机端口
//****************************************
#define DataPort P0//LCD1602数据端口
sbit SCL=P1^0;//IIC时钟引脚定义
sbit SDA=P1^1;//IIC数据引脚定义
sbit LCM_RS=P2^0;//LCD1602命令端口
void deຫໍສະໝຸດ Baiduay(unsigned int k)
{
unsigned int i,j;
for(i=0;i<k;i++)
{
for(j=0;j<121;j++);
}
}
//****************************************
//LCD1602初始化
//****************************************
InvenSense公司的三轴陀螺仪MPU6050测试程序。IIC接口,51单片机驱动,LCD1602同步显示。
硬件原理图
//****************************************
// MPU6050 IIC测试程序
//使用单片机STC89C52
//晶振:11.0592M
//显示:LCD1602
}
//****************************************
//LCD1602写入数据
//****************************************
void WriteDataLCM(uchar dataW)
{
WaitForEnable();
LCM_RS=1;LCM_RW=0;_nop_();
*++s =temp_data/10+0x30;
temp_data=temp_data%10; //取余运算
*++s =temp_data+0x30;
}
//****************************************
//延时
//****************************************
void Single_WriteI2C(uchar REG_Address,uchar REG_data);//向I2C写入数据
//****************************************
//整数转字符串
//****************************************
void lcd_printf(uchar *s,int temp_data)
{
if(temp_data<0)
{
temp_data=-temp_data;
*s='-';
}
else *s=' ';
*++s =temp_data/100+0x30;
temp_data=temp_data%100; //取余运算
//**************************************
void Delay5us()
{
_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();
//MPU6050操作函数
void InitMPU6050();//初始化MPU6050
void Delay5us();
void I2C_Start();
void I2C_Stop();
void I2C_SendACK(bit ack);
bit I2C_RecvACK();
void I2C_SendByte(uchar dat);
void WriteDataLCM(uchar dataW);//LCD数据
void WriteCommandLCM(uchar CMD,uchar Attribc);//LCD指令
void DisplayOneChar(uchar X,uchar Y,uchar DData);//显示一个字符
void DisplayListChar(uchar X,uchar Y,uchar *DData,L);//显示字符串
void DisplayOneChar(uchar X,uchar Y,uchar DData)
{
Y&=1;
X&=15;
if(Y)X|=0x40;
X|=0x80;
WriteCommandLCM(X,0);
WriteDataLCM(DData);
}
//****************************************
{
DisplayOneChar(X,Y,DData[ListLength]);
ListLength++;
X++;
}
}
//**************************************
//延时5微秒(STC90C52RC@12M)
//不同的工作环境,需要调整此函数
//当改用1T的MCU时,请调整此延时函数
_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();
}
//**************************************
//I2C起始信号
//**************************************
#defineTEMP_OUT_L0x42
#defineGYRO_XOUT_H0x43
#defineGYRO_XOUT_L0x44
#defineGYRO_YOUT_H0x45
#defineGYRO_YOUT_L0x46
#defineGYRO_ZOUT_H0x47
#defineGYRO_ZOUT_L0x48
LCM_RS=0;LCM_RW=1;_nop_();
LCM_EN=1;_nop_();_nop_();
while(DataPort&0x80);
LCM_EN=0;
}
//****************************************
//LCD1602写入命令
//****************************************
void WriteCommandLCM(uchar CMD,uchar Attribc)
{
if(Attribc)WaitForEnable();
LCM_RS=0;LCM_RW=0;_nop_();
DataPort=CMD;_nop_();
LCM_EN=1;_nop_();_nop_();LCM_EN=0;
//定义类型及变量
//****************************************
uchar dis[4];//显示数字(-511至512)的字符数组
intdis_data;//变量
//intTemperature,Temp_h,Temp_l;//温度及高低位数据
//****************************************
#defineSMPLRT_DIV0x19//陀螺仪采样率,典型值:0x07(125Hz)
#defineCONFIG0x1A//低通滤波频率,典型值:0x06(5Hz)
#defineGYRO_CONFIG0x1B//陀螺仪自检及测量范围,典型值:0x18(不自检,2000deg/s)
#defineACCEL_CONFIG0x1C//加速计自检、测量范围及高通滤波频率,典型值:0x01(不自检,2G,5Hz)
sbit LCM_RW=P2^1;//LCD1602命令端口
sbit LCM_EN=P2^2;//LCD1602命令端口
//****************************************
//定义MPU6050内部地址
//****************************************
#definePWR_MGMT_10x6B//电源管理,典型值:0x00(正常启用)
#defineWHO_AM_I0x75//IIC地址寄存器(默认数值0x68,只读)
#defineSlaveAddress0xD0//IIC写入时的地址字节数据,+1为读取
//****************************************