#include"mpu6050.h"
#include"LCD12864.h"
#include <math.h>
#include <INTRINS.H>
#include <stdio.h>
void I2C_Start()
{
SDA = 1;
SCL = 1;
delay_us(1);
SDA = 0;
delay_us(1);
SCL = 0;
}
void I2C_Stop()
{
SDA = 0;
SCL = 1;
delay_us(1);
SDA = 1;
delay_us(1);
}
void I2C_SendACK(bit ack)
{
SDA = ack;
SCL = 1;
delay_us(1);
SCL = 0;
delay_us(1);
}
bit I2C_RecvACK()
{
SCL = 1;
delay_us(1);
CY = SDA;
SCL = 0;
delay_us(1);
return CY;
}
void I2C_SendByte(uchar dat)
{
uchar i;
for (i=0; i<8; i++)
{
dat <<= 1;
SDA = CY;
SCL = 1;
delay_us(1);
SCL = 0;
delay_us(1);
}
I2C_RecvACK();
}
uchar I2C_RecvByte()
{
uchar i;
uchar dat = 0;
SDA = 1;
for (i=0; i<8; i++ )
{
dat <<= 1;
SCL = 1;
delay_us(1);
dat |= SDA;
SCL = 0;
delay_us(1);
}
return dat;
}
void Single_WriteI2C(uchar REG_Address,uchar REG_data)
{
I2C_Start();
I2C_SendByte(SlaveAddress);
I2C_SendByte(REG_Address);
I2C_SendByte(REG_data);
I2C_Stop();
}
uchar Single_ReadI2C(uchar REG_Address)
{
uchar REG_data;
I2C_Start();
I2C_SendByte(SlaveAddress);
I2C_SendByte(REG_Address);
I2C_Start();
I2C_SendByte(SlaveAddress+1);
REG_data=I2C_RecvByte();
I2C_SendACK(1);
I2C_Stop();
return REG_data;
}
void InitMPU6050()
{
Single_WriteI2C(PWR_MGMT_1, 0x00);
Single_WriteI2C(SMPLRT_DIV, 0x07);
Single_WriteI2C(CONFIG, 0x06);
Single_WriteI2C(GYRO_CONFIG, 0x18);
Single_WriteI2C(ACCEL_CONFIG, 0x01);
}
int GetData(uchar REG_Address)
{
uchar H,L;
H=Single_ReadI2C(REG_Address);
L=Single_ReadI2C(REG_Address+1);
return (H<<8)+L;
}
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; //取余运算
*++s =temp_data/10+0x30;
temp_data=temp_data%10; //取余运算
*++s =temp_data+0x30;
}
//void Display10BitData(int value,uchar x,uchar y)
//{
// uchar dis[3]; //显示数字(-511至512)的字符数组
// value/=64; //转换为10位数据
// lcd_printf(dis, value); //转换数据显示
// LcdDdram_Display(x,y,dis); //启始列,行,显示数组,显示长度
//}
void Display10BitData(int value,uchar x,uchar y)
{
uchar dis[3]; //显示数字(-511至512)的字符数组
value/=64; //转换为10位数据
//lcd_printf(dis, value); //转换数据显示
LCD_ShowNum( x,y,value,3);
}
void DisplaySignedData(int value,uchar x,uchar y)
{
uchar dis[2]; //显示数字(-511至512)的字符数组
value/=64; //转换为10位数据
//lcd_printf(dis, value); //转换数据显示
LCD_ShowSignNum( x,y,value,3);
}
//void IMUupdate(void)
//{
//
//uint q0 = 1, q1 = 0, q2 = 0, q3 = 0;
//uint exInt = 0, eyInt = 0, ezInt = 0;
//
//uint Yaw ;
//uint Roll ;
//uint Pitch ;
//
//
//float norm;
//float vx, vy, vz;
//float ex, ey, ez;
//float ax,ay,az;
//float gx,gy,gz;
//
//ax = GetData(ACCEL_XOUT_H);
//ay = GetData(ACCEL_YOUT_H);
//az = GetData(ACCEL_ZOUT_H);
//
//gx = GetData(GYRO_XOUT_H);
//gy = GetData(GYRO_YOUT_H);
//gz = GetData(GYRO_ZOUT_H);
//
//norm = sqrt(ax*ax + ay*ay + az*az);
//ax = ax / norm;
//ay = ay / norm;
//az = az / norm;
//
//vx = 2*(q1*q3 - q0*q2);
//vy = 2*(q0*q1 - q2*q3);
//vz = q0*q0 - q1*q1 - q2*q2 + q3*q3;
//
//ex = (ay*vz - az*vy);
//ey = (az*vx - ax*vz);
//ez = (ax*vy - ay*vx);
//
//exInt = exInt + ex*0.002;
//eyInt = eyInt + ey*0.002;
//ezInt = ezInt + ez*0.002;
//
//
//gx = gx + 100.0*ex + exInt;
//gy = gy + 100.0*ey + eyInt;
//gz = gz + 100.0*ez + ezInt;
//
//
//q0 = q0 + (-q1*gx - q2*gy - q3*gz)*0.001;
//q1 = q1 + (q0*gx + q2*gz - q3*gy)*0.001;
//q2 = q2 + (q0*gy - q1*gz + q3*gx)*0.001;
//q3 = q3 + (q0*gz + q1*gy - q2*gx)*0.001;
//
//norm = sqrt(q0*q0 + q1*q1 + q2*q2 + q3*q3);
////Display10BitData(norm);
//
//q0 = q0 / norm;
//q1 = q1 / norm;
//q2 = q2 / norm;
//q3 = q3 / norm;
//Yaw = atan2(2*(q1*q2 + q0*q3),q0*q0+q1*q1-q2*q2-q3*q3)* 57.3;
//Pitch = asin(-2*q1*q3+2*q0*q2)*57.3;
//Roll = atan2(2 * q2 * q3 + 2*q0*q1,-2*q1*q1-2*q2*q2+1)*57.3;
//
/// }
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
51单片机:YF-S201+MPU6050+LCD12864显示流量和加速度.zip (72个子文件)
51单片机:YF-S201+MPU6050+LCD12864显示流量和加速度
delay.OBJ 1KB
1.OBJ 8KB
51测试程序.lnp 74B
LCD12864.h 601B
delay.LST 1KB
project0716_uvopt.bak 60KB
1_Opt.Bak 1KB
11.lnp 36B
Last Loaded PlayMusic.DBK 133KB
1_Uv2.Bak 2KB
STARTUP.LST 14KB
project0714_uvopt.bak 59KB
1.c 0B
project0716.plg 8KB
math.h 1KB
uart.h 74B
main.OBJ 11KB
1.opt.bak 1KB
1.Uv2.bak 2KB
flowdetection.LST 1KB
11 3KB
1_uvproj.bak 13KB
project.M51 33KB
STARTUP.A51 6KB
SoundPlay.h 5KB
LCD12864.LST 9KB
mpu6050.h 1KB
1.uvopt 56KB
11.M51 6KB
flowdetection.c 221B
mpu6050.LST 10KB
project0716 36KB
1 4KB
main.LST 5KB
project0716.M51 33KB
project.lnp 126B
project0716.hex 8KB
51测试程序 5KB
project.plg 3KB
project_uvopt.bak 60KB
1_uvopt.bak 56KB
LCD12864.OBJ 10KB
uart.LST 1KB
project0716.uvproj 14KB
flowdetection.OBJ 1KB
1.plg 1KB
delay.h 118B
uart.c 446B
project.uvopt 64KB
STARTUP.OBJ 749B
11.plg 165B
project_uvproj.bak 14KB
51测试程序.plg 6KB
mpu6050 0B
LCD12864.c 4KB
mpu6050.c 5KB
delay.c 278B
flowdetection.h 116B
PlayMusic.PWI 768B
1.LST 10KB
uart.OBJ 2KB
1.M51 7KB
XuanWeiProgPlatformConfig.XML 2KB
project0714.uvopt 60KB
main.c 2KB
project0716_uvproj.bak 14KB
1.lnp 35B
project0716.lnp 130B
project0716.uvopt 60KB
51测试程序.M51 6KB
mpu6050.OBJ 14KB
project 35KB
共 72 条
- 1
资源评论
宫成师
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功