Signed-off-by: kevin <kevin@lmve.net>
This commit is contained in:
2024-11-12 23:05:49 +08:00
commit f17aff1ba0
896 changed files with 592866 additions and 0 deletions
+615
View File
@@ -0,0 +1,615 @@
#include "main.h"
#include "c.h"
#include "mpu6050.h"
uint8_t LD_true_1[10]={63, 6, 91, 79, 102, 109, 125, 7, 127, 111};
uint8_t LD_true_2[10]={63, 6, 155, 143, 166, 173, 189, 7, 191, 175};
uint8_t LD_1[10]={63,48, 155, 185, 180, 173, 175, 56, 191};
uint8_t LD_2[10]={63,48, 91, 121, 116, 109, 111, 56, 127, 125};
uint8_t sbuffer[6]={0,0,0,0,0,0};
struct ui
{
uint8_t DT[2];
uint8_t lattice[2][8][8];
};
struct ui dis=
{
0,0,
{
{
{1,1,1,1,1,1,1,1,},
{1,1,1,1,1,1,1,1,},
{1,1,1,1,1,1,1,1,},
{1,1,1,1,1,1,1,1,},
{1,1,1,1,1,1,1,1,},
{1,1,1,1,1,1,1,1,},
{1,1,1,1,1,1,1,1,},
{1,1,1,1,1,1,1,1,},
},
{
{0,0,0,0,0,0,0,0,},
{0,0,0,0,0,0,0,0,},
{0,0,0,0,0,0,0,0,},
{0,0,0,0,0,0,0,0,},
{0,0,0,0,0,0,0,0,},
{0,0,0,0,0,0,0,0,},
{0,0,0,0,0,0,0,0,},
{0,0,0,0,0,0,0,0,},
}
}
};
void send_buffer()
{
uint8_t a,b,c;
D(0);
CLK(0);
RCLK(0);
for(b=0;b<6;b++)
{
c=sbuffer[b];
for(a=0;a<8;a++)
{
if(c&0x80)
{
D(1);
}else
{
D(0);
}
CLK(1);
CLK(0);
c<<=1;
}
}
RCLK(1);
RCLK(0);
}
const uint16_t DEN[8]=//len
{
0x1000,
0x0020,
0x0010,
0x0200,
0x0004,
0x0400,
0x4000,
0x8000,
};
const uint16_t DEP[8]=
{
0x0008,
0x0040,
0x0002,
0x0080,
0x0800,
0x0001,
0x2000,
0x0100,
};
void dis_ui()
{
uint16_t temp=0,temp2=0;
for(uint8_t y=0;y<8;y++)
{
temp=0;
temp|=DEN[0]|DEN[1]|DEN[2]|DEN[3]|DEN[4]|DEN[5]|DEN[6]|DEN[7];
temp&=~DEN[y];
temp2=0;
temp2|=DEN[0]|DEN[1]|DEN[2]|DEN[3]|DEN[4]|DEN[5]|DEN[6]|DEN[7];
temp2&=~DEN[y];
for(uint8_t x=0;x<8;x++)
{
if(dis.lattice[1][y][x]==1)
{
temp|=DEP[x];
}
if(dis.lattice[0][y][x]==1)
{
temp2|=DEP[x];
}
}
if(y<1)//控制数字亮度 0-7
{
sbuffer[0]=dis.DT[1];
sbuffer[1]=dis.DT[0];
}else
{
sbuffer[0]=0;
sbuffer[1]=0;
}
sbuffer[4]=temp;
sbuffer[5]=temp>>8;
sbuffer[3]=temp2;
sbuffer[2]=temp2>>8;
send_buffer();
temp=0;
temp|=DEN[0]|DEN[1]|DEN[2]|DEN[3]|DEN[4]|DEN[5]|DEN[6]|DEN[7];
temp2=0;
temp2|=DEN[0]|DEN[1]|DEN[2]|DEN[3]|DEN[4]|DEN[5]|DEN[6]|DEN[7];
sbuffer[4]=temp;
sbuffer[5]=temp>>8;
sbuffer[3]=temp2;
sbuffer[2]=temp2>>8;
send_buffer();
}
}
uint8_t dir=0;
int rend_int(int MIN_VALUE, int MAX_VALUE) //可控范围的随机数生成
{
return rand() % (MAX_VALUE - MIN_VALUE + 1) + MIN_VALUE; //算法,最大值取余加上最小值就是范围内的数
}
uint8_t move(uint8_t map,int y,int x,uint8_t move_dir)
{
if(dis.lattice[map][y][x])
{
switch(move_dir)
{
case 1:
y+=1;
x+=1;
if((y>7)|(x>7)|(dis.lattice[map][y][x]))
{
return 1;
}else
{
dis.lattice[map][y][x]=1;
dis.lattice[map][y-1][x-1]=0;
return 0;
}
break;
case 2:
y+=1;
if((y>7)|(dis.lattice[map][y][x]))
{
return 1;
}else
{
dis.lattice[map][y][x]=1;
dis.lattice[map][y-1][x]=0;
return 0;
}
break;
case 3:
y+=1;
x-=1;
if((y>7)|(x<0)|(dis.lattice[map][y][x]))
{
return 1;
}else
{
dis.lattice[map][y][x]=1;
dis.lattice[map][y-1][x+1]=0;
return 0;
}
break;
case 4:
x-=1;
if((x<0)|(dis.lattice[map][y][x]))
{
return 1;
}else
{
dis.lattice[map][y][x]=1;
dis.lattice[map][y][x+1]=0;
return 0;
}
break;
case 5:
x-=1;
y-=1;
if((x<0)|(y<0)|(dis.lattice[map][y][x]))
{
return 1;
}else
{
dis.lattice[map][y][x]=1;
dis.lattice[map][y+1][x+1]=0;
return 0;
}
break;
case 6:
y-=1;
if((y<0)|(dis.lattice[map][y][x]))
{
return 1;
}else
{
dis.lattice[map][y][x]=1;
dis.lattice[map][y+1][x]=0;
return 0;
}
break;
case 7:
y-=1;
x+=1;
if((y<0)|(x>7)|(dis.lattice[map][y][x]))
{
return 1;
}else
{
dis.lattice[map][y][x]=1;
dis.lattice[map][y+1][x-1]=0;
return 0;
}
break;
case 8:
x+=1;
if((x>7)|(dis.lattice[map][y][x]))
{
return 1;
}else
{
dis.lattice[map][y][x]=1;
dis.lattice[map][y][x-1]=0;
return 0;
}
break;
}
}
return 1;
}
void scan()
{
int temp_x,temp_y;
uint8_t temp_dir;
switch(dir)
{
case 0: //平躺状态 随机扩散
dis.DT[0]=0;
dis.DT[1]=0;
break;
case 1:
for(temp_y=7;temp_y>=0;temp_y--)
{
for(temp_x=7;temp_x>=0;temp_x--)
{
if(move(0,temp_y,temp_x,dir))
{
if(move(0,temp_y,temp_x,2))
{
move(0,temp_y,temp_x,8);
}
}
if(move(1,temp_y,temp_x,dir))
{
if(move(1,temp_y,temp_x,2))
{
move(1,temp_y,temp_x,8);
}
}
}
}
break;
case 2:
for(temp_y=7;temp_y>=0;temp_y--)
{
for(temp_x=7;temp_x>=0;temp_x--)
{
if(move(0,temp_y,temp_x,dir))
{
if(move(0,temp_y,temp_x,3))
{
move(0,temp_y,temp_x,1);
}
}
if(move(1,temp_y,temp_x,dir))
{
if(move(1,temp_y,temp_x,3))
{
move(1,temp_y,temp_x,1);
}
}
}
}
break;
case 3:
for(temp_y=7;temp_y>=0;temp_y--)
{
for(temp_x=0;temp_x<8;temp_x++)
{
if(move(0,temp_y,temp_x,dir))
{
if(move(0,temp_y,temp_x,4))
{
move(0,temp_y,temp_x,2);
}
}
if(move(1,temp_y,temp_x,dir))
{
if(move(1,temp_y,temp_x,4))
{
move(1,temp_y,temp_x,2);
}
}
}
}
break;
case 4:
for(temp_x=0;temp_x<8;temp_x++)
{
for(temp_y=0;temp_y<8;temp_y++)
{
if(move(0,temp_y,temp_x,dir))
{
if(move(0,temp_y,temp_x,5))
{
move(0,temp_y,temp_x,3);
}
}
if(move(1,temp_y,temp_x,dir))
{
if(move(1,temp_y,temp_x,5))
{
move(1,temp_y,temp_x,3);
}
}
}
}
break;
case 5:
for(temp_x=0;temp_x<8;temp_x++)
{
for(temp_y=0;temp_y<8;temp_y++)
{
if(move(0,temp_y,temp_x,dir))
{
if(move(0,temp_y,temp_x,6))
{
move(0,temp_y,temp_x,4);
}
}
if(move(1,temp_y,temp_x,dir))
{
if(move(1,temp_y,temp_x,6))
{
move(1,temp_y,temp_x,4);
}
}
}
}
break;
case 6:
for(temp_y=0;temp_y<8;temp_y++)
{
for(temp_x=0;temp_x<8;temp_x++)
{
if(move(0,temp_y,temp_x,dir))
{
if(move(0,temp_y,temp_x,7))
{
move(0,temp_y,temp_x,5);
}
}
if(move(1,temp_y,temp_x,dir))
{
if(move(1,temp_y,temp_x,7))
{
move(1,temp_y,temp_x,5);
}
}
}
}
break;
case 7:
for(temp_y=0;temp_y<8;temp_y++)
{
for(temp_x=7;temp_x>=0;temp_x--)
{
if(move(0,temp_y,temp_x,dir))
{
if(move(0,temp_y,temp_x,8))
{
move(0,temp_y,temp_x,6);
}
}
if(move(1,temp_y,temp_x,dir))
{
if(move(1,temp_y,temp_x,8))
{
move(1,temp_y,temp_x,6);
}
}
}
}
break;
case 8:
for(temp_x=7;temp_x>=0;temp_x--)
{
for(temp_y=0;temp_y<8;temp_y++)
{
if(move(0,temp_y,temp_x,dir))
{
if(move(0,temp_y,temp_x,1))
{
move(0,temp_y,temp_x,7);
}
}
if(move(1,temp_y,temp_x,dir))
{
if(move(1,temp_y,temp_x,1))
{
move(1,temp_y,temp_x,7);
}
}
}
}
break;
}
}
uint8_t read_map(uint8_t map)
{
uint8_t a=0;
for(uint8_t y=0;y<8;y++)
{
for(uint8_t x=0;x<8;x++)
{
if(dis.lattice[map][y][x])
{
a++;
}
}
}
return a;
}
void fuck()
{
uint8_t a=0;
uint32_t tike=1000,tike2=0;
uint16_t mup6050_flag=0;
int ax,ay,az,gx,gy,gz,ax_of=0,ay_of=0,az_of=0,gx_of=0,gy_of=0,gz_of=0;
int fax,fay,faz;
HAL_Delay(150);
mup6050_flag=MPU_Init();
if(mup6050_flag!=0)
{
//kill
while(1)
{
}
}
while(1)
{
MPU_Get_Accelerometer(&ax,&ay,&az);
//off set
ax=ax+ax_of;
ay=ay+ay_of;
az=az+az_of;
gx=gx+gx_of;
gy=gy+gy_of;
gz=gz+gz_of;
//to g
fax=((ax/16384.0)* 57.29577)/0.637;
fay=((ay/16384.0)* 57.29577)/0.637;
faz=((az/16384.0)* 57.29577)/0.637;
#define det 20
uint8_t temp1=0,temp2=0;
if((((fax>=(360-det))&(fax<=360))|((fax>=0)&(fax<=det)))&(((fay>=(360-det))&(fay<=360))|((fay>=0)&(fay<=det))))//平躺姿态
{
dir=0;
}else
{
/*
一个诡异的BUG
判断条件过多的时候会改变判断对象的值
所以分两步判断
*/
temp1=0;
temp2=0;
if((fax>0)&(fax<90))
{
temp1=1;
}
if((fax>275)&(fax<360))
{
temp2=1;
}
if((((fay>(360-det))&(fay<=0))|((fay>=0)&(fay<=det)))&temp1)
{
dir=1;
}
if(((fay>(45-det))&(fay<(45+det)))&temp1)
{
dir=8;
}
if((fay>(90-det))&(fay<(90+det)))
{
dir=7;
}
if(((fay>(45-det))&(fay<(45+det)))&temp2)
{
dir=6;
}
if((((fay>(360-det))&(fay<=0))|((fay>=0)&(fay<=det)))&temp2)
{
dir=5;
}
if(((fay>(315-det))&(fay<(315+det)))&temp2)
{
dir=4;
}
if((fay>(270-det))&(fay<(270+det)))
{
dir=3;
}
if(((fay>(315-det))&(fay<(315+det)))&temp1)
{
dir=2;
}
}
if(HAL_GetTick()>tike)
{
tike=HAL_GetTick()+1000;
if(dir==1||dir==2||dir==8)
{
if((dis.lattice[0][7][7]==1)&&dis.lattice[1][0][0]==0)
{
dis.lattice[0][7][7]=0;
dis.lattice[1][0][0]=1;
}
a=read_map(0);
dis.DT[0]=LD_true_1[a/10];
dis.DT[1]=LD_true_2[a%10];
}
if(dir==5||dir==4||dir==6)
{
if((dis.lattice[1][0][0]==1)&&dis.lattice[0][7][7]==0)
{
dis.lattice[1][0][0]=0;
dis.lattice[0][7][7]=1;
}
a=read_map(1);
dis.DT[1]=LD_1[a/10];
dis.DT[0]=LD_2[a%10];
}
}
if(HAL_GetTick()>tike2)
{
tike2=HAL_GetTick()+10;
scan();
}
dis_ui();
}
}
+9
View File
@@ -0,0 +1,9 @@
#define D(x) HAL_GPIO_WritePin(D_GPIO_Port,D_Pin,x)
#define CLK(x) HAL_GPIO_WritePin(LCK_GPIO_Port,LCK_Pin,x)
#define RCLK(x) HAL_GPIO_WritePin(RCK_GPIO_Port,RCK_Pin,x)
void fuck();
+184
View File
@@ -0,0 +1,184 @@
#include "main.h"
#include "mpu6050.h"
extern I2C_HandleTypeDef hi2c1;
//IIC写一个字节
//reg:寄存器地址
//data:数据
//返回值:0,正常
// 其他,错误代码
uint8_t MPU_Write_Byte(uint8_t reg,uint8_t data)
{
unsigned char W_Data=0;
W_Data = data;
HAL_I2C_Mem_Write(&hi2c1, MPU_WRITE, reg, I2C_MEMADD_SIZE_8BIT, &W_Data, 1, 300);
return 0;
}
//IIC读一个字节
//reg:寄存器地址
//返回值:读到的数据
uint8_t MPU_Read_Byte(uint8_t reg)
{
unsigned char R_Data=0;
HAL_StatusTypeDef status = HAL_OK;
status = HAL_I2C_Mem_Read(&hi2c1, MPU_READ, reg, I2C_MEMADD_SIZE_8BIT, &R_Data, 1, 300);
if(status != HAL_OK)
{
}
return R_Data;
}
//IIC连续写
uint8_t MPU_Write_Len(uint8_t reg,uint8_t len,uint8_t *buf)
{
HAL_I2C_Mem_Write(&hi2c1, MPU_WRITE, reg, I2C_MEMADD_SIZE_8BIT, buf, len, 300);
return 0;
}
//IIC连续读
//addr:器件地址
//reg:要读取的寄存器地址
//len:要读取的长度
//buf:读取到的数据存储区
//返回值:0,正常
// 其他,错误代码
uint8_t MPU_Read_Len(uint8_t reg,uint8_t len,uint8_t *buf)
{
HAL_StatusTypeDef status = HAL_OK;
status = HAL_I2C_Mem_Read(&hi2c1, MPU_READ, reg, I2C_MEMADD_SIZE_8BIT, buf, len, 300);
if(status != HAL_OK)
{
}
return 0;
}
//得到温度值
//返回值:温度值(扩大了100倍)
float MPU_Get_Temperature(void)
{
unsigned char buf[2];
short raw;
float temp;
MPU_Read_Len(MPU_TEMP_OUTH_REG,2,buf);
raw=(buf[0]<<8)| buf[1];
temp=(36.53+((double)raw)/340)*100;
// temp = (long)((35 + (raw / 340)) * 65536L);
return temp/100.0f;
}
//得到陀螺仪值(原始值)
//gx,gy,gz:陀螺仪x,y,z轴的原始读数(带符号)
//返回值:0,成功
// 其他,错误代码
uint8_t MPU_Get_Gyroscope(short *gx,short *gy,short *gz)
{
uint8_t buf[6],res;
res=MPU_Read_Len(MPU_GYRO_XOUTH_REG,6,buf);
if(res==0)
{
*gx=((uint16_t)buf[0]<<8)|buf[1];
*gy=((uint16_t)buf[2]<<8)|buf[3];
*gz=((uint16_t)buf[4]<<8)|buf[5];
}
return res;
}
//得到加速度值(原始值)
//gx,gy,gz:陀螺仪x,y,z轴的原始读数(带符号)
//返回值:0,成功
// 其他,错误代码
uint8_t MPU_Get_Accelerometer(int *ax,int *ay,int *az)
{
uint8_t buf[6],res;
res=MPU_Read_Len(MPU_ACCEL_XOUTH_REG,6,buf);
if(res==0)
{
*ax=((uint16_t)buf[0]<<8)|buf[1];
*ay=((uint16_t)buf[2]<<8)|buf[3];
*az=((uint16_t)buf[4]<<8)|buf[5];
}
return res;;
}
//初始化MPU6050
//返回值:0,成功
// 其他,错误代码
uint8_t MPU_Init(void)
{
uint8_t res;
MPU_Write_Byte(MPU_PWR_MGMT1_REG,0X80); //复位MPU6050
HAL_Delay(1);
MPU_Write_Byte(MPU_PWR_MGMT1_REG,0X00); //唤醒MPU6050
HAL_Delay(1);
MPU_Set_Gyro_Fsr(3); //陀螺仪传感器,±2000dps
MPU_Set_Accel_Fsr(0); //加速度传感器,±2g
MPU_Set_Rate(50); //设置采样率50Hz
MPU_Write_Byte(MPU_INT_EN_REG,0X00); //关闭所有中断
MPU_Write_Byte(MPU_USER_CTRL_REG,0X00); //I2C主模式关闭
MPU_Write_Byte(MPU_FIFO_EN_REG,0X00); //关闭FIFO
MPU_Write_Byte(MPU_INTBP_CFG_REG,0X80); //INT引脚低电平有效
res=MPU_Read_Byte(MPU_DEVICE_ID_REG);
if(res==MPU_ADDR)//器件ID正确
{
MPU_Write_Byte(MPU_PWR_MGMT1_REG,0X01); //设置CLKSEL,PLL X轴为参考
MPU_Write_Byte(MPU_PWR_MGMT2_REG,0X00); //加速度与陀螺仪都工作
MPU_Set_Rate(50); //设置采样率为50Hz
//MPU_Set_LPF(50);
}else return 1;
return 0;
}
//设置MPU6050陀螺仪传感器满量程范围
//fsr:0,±250dps;1,±500dps;2,±1000dps;3,±2000dps
//返回值:0,设置成功
// 其他,设置失败
uint8_t MPU_Set_Gyro_Fsr(uint8_t fsr)
{
return MPU_Write_Byte(MPU_GYRO_CFG_REG,fsr<<3);//设置陀螺仪满量程范围
}
//设置MPU6050加速度传感器满量程范围
//fsr:0,±2g;1,±4g;2,±8g;3,±16g
//返回值:0,设置成功
// 其他,设置失败
uint8_t MPU_Set_Accel_Fsr(uint8_t fsr)
{
return MPU_Write_Byte(MPU_ACCEL_CFG_REG,fsr<<3);//设置加速度传感器满量程范围
}
//设置MPU6050的数字低通滤波器
//lpf:数字低通滤波频率(Hz)
//返回值:0,设置成功
// 其他,设置失败
uint8_t MPU_Set_LPF(uint16_t lpf)
{
uint8_t data=0;
if(lpf>=188)data=1;
else if(lpf>=98)data=2;
else if(lpf>=42)data=3;
else if(lpf>=20)data=4;
else if(lpf>=10)data=5;
else data=6;
return MPU_Write_Byte(MPU_CFG_REG,data);//设置数字低通滤波器
}
//设置MPU6050的采样率(假定Fs=1KHz)
//rate:4~1000(Hz)
//返回值:0,设置成功
// 其他,设置失败
uint8_t MPU_Set_Rate(uint16_t rate)
{
uint8_t data;
if(rate>1000)rate=1000;
if(rate<4)rate=4;
data=1000/rate-1;
data=MPU_Write_Byte(MPU_SAMPLE_RATE_REG,data); //设置数字低通滤波器
return MPU_Set_LPF(rate/2); //自动设置LPF为采样率的一半
}
+93
View File
@@ -0,0 +1,93 @@
#include "main.h"
//#define MPU_ACCEL_OFFS_REG 0X06 //accel_offs寄存器,可读取版本号,寄存器手册未提到
//#define MPU_PROD_ID_REG 0X0C //prod id寄存器,在寄存器手册未提到
#define MPU_SELF_TESTX_REG 0X0D //自检寄存器X
#define MPU_SELF_TESTY_REG 0X0E //自检寄存器Y
#define MPU_SELF_TESTZ_REG 0X0F //自检寄存器Z
#define MPU_SELF_TESTA_REG 0X10 //自检寄存器A
#define MPU_SAMPLE_RATE_REG 0X19 //采样频率分频器
#define MPU_CFG_REG 0X1A //配置寄存器
#define MPU_GYRO_CFG_REG 0X1B //陀螺仪配置寄存器
#define MPU_ACCEL_CFG_REG 0X1C //加速度计配置寄存器
#define MPU_MOTION_DET_REG 0X1F //运动检测阀值设置寄存器
#define MPU_FIFO_EN_REG 0X23 //FIFO使能寄存器
#define MPU_I2CMST_CTRL_REG 0X24 //IIC主机控制寄存器
#define MPU_I2CSLV0_ADDR_REG 0X25 //IIC从机0器件地址寄存器
#define MPU_I2CSLV0_REG 0X26 //IIC从机0数据地址寄存器
#define MPU_I2CSLV0_CTRL_REG 0X27 //IIC从机0控制寄存器
#define MPU_I2CSLV1_ADDR_REG 0X28 //IIC从机1器件地址寄存器
#define MPU_I2CSLV1_REG 0X29 //IIC从机1数据地址寄存器
#define MPU_I2CSLV1_CTRL_REG 0X2A //IIC从机1控制寄存器
#define MPU_I2CSLV2_ADDR_REG 0X2B //IIC从机2器件地址寄存器
#define MPU_I2CSLV2_REG 0X2C //IIC从机2数据地址寄存器
#define MPU_I2CSLV2_CTRL_REG 0X2D //IIC从机2控制寄存器
#define MPU_I2CSLV3_ADDR_REG 0X2E //IIC从机3器件地址寄存器
#define MPU_I2CSLV3_REG 0X2F //IIC从机3数据地址寄存器
#define MPU_I2CSLV3_CTRL_REG 0X30 //IIC从机3控制寄存器
#define MPU_I2CSLV4_ADDR_REG 0X31 //IIC从机4器件地址寄存器
#define MPU_I2CSLV4_REG 0X32 //IIC从机4数据地址寄存器
#define MPU_I2CSLV4_DO_REG 0X33 //IIC从机4写数据寄存器
#define MPU_I2CSLV4_CTRL_REG 0X34 //IIC从机4控制寄存器
#define MPU_I2CSLV4_DI_REG 0X35 //IIC从机4读数据寄存器
#define MPU_I2CMST_STA_REG 0X36 //IIC主机状态寄存器
#define MPU_INTBP_CFG_REG 0X37 //中断/旁路设置寄存器
#define MPU_INT_EN_REG 0X38 //中断使能寄存器
#define MPU_INT_STA_REG 0X3A //中断状态寄存器
#define MPU_ACCEL_XOUTH_REG 0X3B //加速度值,X轴高8位寄存器
#define MPU_ACCEL_XOUTL_REG 0X3C //加速度值,X轴低8位寄存器
#define MPU_ACCEL_YOUTH_REG 0X3D //加速度值,Y轴高8位寄存器
#define MPU_ACCEL_YOUTL_REG 0X3E //加速度值,Y轴低8位寄存器
#define MPU_ACCEL_ZOUTH_REG 0X3F //加速度值,Z轴高8位寄存器
#define MPU_ACCEL_ZOUTL_REG 0X40 //加速度值,Z轴低8位寄存器
#define MPU_TEMP_OUTH_REG 0X41 //温度值高八位寄存器
#define MPU_TEMP_OUTL_REG 0X42 //温度值低8位寄存器
#define MPU_GYRO_XOUTH_REG 0X43 //陀螺仪值,X轴高8位寄存器
#define MPU_GYRO_XOUTL_REG 0X44 //陀螺仪值,X轴低8位寄存器
#define MPU_GYRO_YOUTH_REG 0X45 //陀螺仪值,Y轴高8位寄存器
#define MPU_GYRO_YOUTL_REG 0X46 //陀螺仪值,Y轴低8位寄存器
#define MPU_GYRO_ZOUTH_REG 0X47 //陀螺仪值,Z轴高8位寄存器
#define MPU_GYRO_ZOUTL_REG 0X48 //陀螺仪值,Z轴低8位寄存器
#define MPU_I2CSLV0_DO_REG 0X63 //IIC从机0数据寄存器
#define MPU_I2CSLV1_DO_REG 0X64 //IIC从机1数据寄存器
#define MPU_I2CSLV2_DO_REG 0X65 //IIC从机2数据寄存器
#define MPU_I2CSLV3_DO_REG 0X66 //IIC从机3数据寄存器
#define MPU_I2CMST_DELAY_REG 0X67 //IIC主机延时管理寄存器
#define MPU_SIGPATH_RST_REG 0X68 //信号通道复位寄存器
#define MPU_MDETECT_CTRL_REG 0X69 //运动检测控制寄存器
#define MPU_USER_CTRL_REG 0X6A //用户控制寄存器
#define MPU_PWR_MGMT1_REG 0X6B //电源管理寄存器1
#define MPU_PWR_MGMT2_REG 0X6C //电源管理寄存器2
#define MPU_FIFO_CNTH_REG 0X72 //FIFO计数寄存器高八位
#define MPU_FIFO_CNTL_REG 0X73 //FIFO计数寄存器低八位
#define MPU_FIFO_RW_REG 0X74 //FIFO读写寄存器
#define MPU_DEVICE_ID_REG 0X75 //器件ID寄存器
//如果AD0脚(9脚)接地,IIC地址为0X68 (不包含最低位).
//如果接V3.3,则IIC地址为0X69 (不包含最低位).
#define MPU_ADDR 0X68
////因为开发板接GND,所以转为读写地址后,为0XD1和0XD0(如果接GND,则为0XD3和0XD2)
#define MPU_READ 0XD3
#define MPU_WRITE 0XD2
uint8_t MPU_Init(void); //初始化MPU6050
uint8_t MPU_Write_Len(uint8_t reg,uint8_t len,uint8_t *buf); //IIC连续写
uint8_t MPU_Read_Len(uint8_t reg,uint8_t len,uint8_t *buf); //IIC连续读
uint8_t MPU_Write_Byte(uint8_t reg,uint8_t data); //IIC写一个字节
uint8_t MPU_Read_Byte(uint8_t reg); //IIC读一个字节
uint8_t MPU_Set_Gyro_Fsr(uint8_t fsr);
uint8_t MPU_Set_Accel_Fsr(uint8_t fsr);
uint8_t MPU_Set_LPF(uint16_t lpf);
uint8_t MPU_Set_Rate(uint16_t rate);
uint8_t MPU_Set_Fifo(uint8_t sens);
uint8_t MPU_Get_Accelerometer(int *ax,int *ay,int *az);