php陀螺仪防刷量,MPU6050陀螺仪读出的数据不改变

该代码实现了一个与MPU6050传感器进行I2C通信的程序,用于读取加速度和陀螺仪的数据。初始化设置包括唤醒传感器、配置采样率和量程。主循环中,程序周期性地读取并处理加速度数据,延迟100毫秒后再进行下一次读取。
摘要由CSDN通过智能技术生成

这个我的代码 :

void Start()

{

SetSCL;

SetSDA;

DelayuS(5);

ClrSDA;

DelayuS(5);

ClrSCL;

}

void Stop()

{

ClrSDA;

SetSCL;

DelayuS(5);

SetSDA;

DelayuS(5);

ClrSDA;

}

//写单字节数据

void Write(uint8_t sdate)

{

uint8_t i;

for(i=0;i<8;i++)

{

DelayuS(5);

if( (sdate&BIT7) == BIT7 )

SetSDA;

else

ClrSDA;

SetSCL;

DelayuS(5);

ClrSCL;

sdate = sdate<<1;

}

}

//等待应答 返回0则表示接受到非应答 有错误

uint8_t ACK()

{

SetSDA;

LPC_GPIO0->FIODIR &= (~BIT23);

SetSCL;

DelayuS(5);

if( (LPC_GPIO0->FIOPIN & BIT23) == BIT23 )

return 0;

ClrSCL;

LPC_GPIO0->FIODIR |= BIT23;

return 1;

}

//接受数据后发送应答

void send_ACK()

{

LPC_GPIO0->FIODIR |= BIT23;

ClrSDA;

SetSCL;

DelayuS(5);

ClrSCL;

}

//接收单字节数据

uint8_t receive()

{

uint8_t i,j,rdate;

j=0x80;

rdate = 0;

LPC_GPIO0->FIODIR &= (~BIT23);

for(i=0;i<8;i++)

{

SetSCL;

if( (LPC_GPIO0->FIOPIN & BIT23) == BIT23)

rdate |= j;

else

rdate &= ~j;

j = j>>1;

DelayuS(5);

ClrSCL;

DelayuS(5);

}

return rdate;

}

void SentData(uint8_t Slave_Address,uint8_t REG_Address,uint8_t REG_Data)

{

Start();

Write(Slave_Address);

ACK();

Write(REG_Address);

ACK();

Write(REG_Data);

ACK();

Stop();

DelaymS(2);

}

uint8_t Read_Gyro(uint8_t Slave_Address,uint8_t REG_Address)

{

Start();

Write(Slave_Address);

ACK();

Write(REG_Address);

ACK();

Start();

Write(Slave_Address+1);

ACK();

gxH = receive();

send_ACK();

gxL = receive();

send_ACK();

gyH = receive();

send_ACK();

gyL = receive();

send_ACK();

gzH = receive();

send_ACK();

gzL = receive();

Stop();

return 1;

}

uint8_t Read_Accel(uint8_t Slave_Address,uint8_t REG_Address)

{

Start();

Write(Slave_Address);

ACK();

Write(REG_Address);

ACK();

Start();

Write(Slave_Address+1);

ACK();

gxH = receive();

send_ACK();

gxL = receive();

send_ACK();

gyH = receive();

send_ACK();

gyL = receive();

send_ACK();

gzH = receive();

send_ACK();

gzL = receive();

Stop();

return 1;

}

int main(void)

{

SystemInit();                // 主要完成系统时钟初始化等功能

LPC_GPIO0->FIODIR |= (BIT23|BIT25);

SentData(MPU6050_Addr,PWR_MGMT_1,0x80);   //复位

DelaymS(50);

SentData(MPU6050_Addr,PWR_MGMT_1,0x00);

SentData(MPU6050_Addr,SMPLRT_DIV,0x07);

SentData(MPU6050_Addr,CONFIG,0x06);

SentData(MPU6050_Addr,GYRO_CONFIG,0x18);   //量程2000deg/s

SentData(MPU6050_Addr,ACCEL_CONFIG,0x01);  //量程2g

while(1)

{

Read_Accel(MPU6050_Addr,ACCEL_XOUT_H);

//Read_Gyro(MPU6050_Addr,GYRO_XOUT_H);

DelaymS(100);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值