欢迎光临
我们一直在努力

IIC型是什么型号STC15/STC15F2K60S2/STC15W4K32S4系列读取MPU6050陀螺仪串口显示代码

STC15W4K32S4单片机 DS18B20温度传感器 串口调试助手显示实验例程KEIL源码 int main() while (–j);
} while (–i);
}

//========================================================================
// 函数: void I2C_Start()
// 描述: I2C起始信号.
// 参数: none.
// 返回: none.
// 版本: V1.0, 2017-06-23
//========================================================================
void I2C_Start()
{
I2C_SDA = 1; //拉高数据线
I2C_SCL = 1; //拉高时钟线
NOP2(); //等待机器反应
I2C_SDA = 0; //产生下降沿
I2C_SCL = 0; //拉低时钟线
}

//========================================================================
// 函数: void I2C_Stop()
// 描述: I2C停止信号.
// 参数: none.
// 返回: none.
// 版本: V1.0, 2017-06-23
//========================================================================
void I2C_Stop()
{
I2C_SDA = 0; //拉低数据线
I2C_SCL = 1; //拉高时钟线
NOP2(); //等待机器反应
I2C_SDA = 1; //产生上升沿
NOP1(); //等待机器反应
}

//========================================================================
// 函数: void I2C_SendACK(bit ack)
// 描述: I2C发送应答信号.
// 参数: ack (0:ACK 1:NAK).
// 返回: none.
// 版本: V1.0, 2017-06-23
//========================================================================
void I2C_SendACK(bit ack)
{
I2C_SDA = ack; //写应答信号
I2C_SCL = 1; //拉高时钟线
NOP2(); //等待机器反应
I2C_SCL = 0; //拉低时钟线
NOP1(); //等待机器反应
}

//========================================================================
// 函数: bit I2C_RecvACK()
// 描述: I2C接收应答信号.
// 参数: none.
// 返回: 1:成功,0:失败.
// 版本: V1.0, 2017-06-23
//========================================================================
bit I2C_RecvACK()
{
I2C_SCL = 1; //拉高时钟线
NOP2(); //等待机器反应
CY = I2C_SDA; //读应答信号
I2C_SCL = 0; //拉低时钟线
return CY;
}

//========================================================================
// 函数: void I2C_SendByte(u8 dat)
// 描述: 向I2C总线发送一个字节数据.
// 参数: dat:要发送的数据.
// 返回: none.
// 版本: V1.0, 2017-06-23
//========================================================================
void I2C_SendByte(unsigned char dat)
{
unsigned char i;
for (i=0; i<8; i++) //8位计数器
{
dat <<= 1; //移出数据的最高位
I2C_SDA = CY; //送数据口
I2C_SCL = 1; //拉高时钟线
NOP2(); //等待机器反应
I2C_SCL = 0; //拉低时钟线
}
I2C_RecvACK();
}

//========================================================================
// 函数: unsigned char I2C_RecvByte()
// 描述: 从I2C总线接收一个字节数据.
// 参数: none.
// 返回: 接收到的数据.
// 版本: V1.0, 2017-06-23
//========================================================================
unsigned char I2C_RecvByte()
{
unsigned char i;
unsigned char dat = 0;
I2C_SDA = 1; //使能内部上拉,准备读取数据,
for (i=0; i<8; i++) //8位计数器
{
dat <<= 1;
I2C_SCL = 1; //拉高时钟线
NOP2(); //等待机器反应
dat |= I2C_SDA; //读数据
I2C_SCL = 0; //拉低时钟线
}
return dat;
}

//========================================================================
// 函数: void Single_WriteI2C(unsigned char REG_Address,unsigned char REG_data)
// 描述: 向I2C设备写入一个字节数据.
// 参数: REG_Address:地址.
// REG_data:要写入的数据.
// 返回: none.
// 版本: V1.0, 2017-06-23
//========================================================================
void Single_WriteI2C(unsigned char REG_Address,unsigned char REG_data)
{
I2C_Start(); //起始信号
I2C_SendByte(SlaveAddress); //发送设备地址+写信号
I2C_SendByte(REG_Address); //内部寄存器地址,
I2C_SendByte(REG_data); //内部寄存器数据,
I2C_Stop(); //发送停止信号
}

//========================================================================
// 函数: unsigned char Single_ReadI2C(unsigned char REG_Address)
// 描述: 从I2C设备读取一个字节数据.
// 参数: REG_Address:地址.
// 返回: 读取到的数据.
// 版本: V1.0, 2017-06-23
//========================================================================
unsigned char Single_ReadI2C(unsigned char REG_Address)
{
unsigned char REG_data;
I2C_Start(); //起始信号
I2C_SendByte(SlaveAddress); //发送设备地址+写信号
I2C_SendByte(REG_Address); //发送存储单元地址,从0开始
I2C_Start(); //起始信号
I2C_SendByte(SlaveAddress+1); //发送设备地址+读信号
REG_data=I2C_RecvByte(); //读出寄存器数据
I2C_SendACK(1); //接收应答信号
I2C_Stop(); //停止信号
return REG_data;
}

//========================================================================
// 函数: void MPU6050_init()
// 描述: 初始化MPU6050.
// 参数: none.
// 返回: none.
// 版本: V1.0, 2017-06-23
//========================================================================
void MPU6050_Init()
{
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(u8 REG_Address)
// 描述: 读取数据并合成为int型数据.
// 参数: REG_Address:地址.
// 返回: 读取到的数据.
// 版本: V1.0, 2017-06-23
//========================================================================
int GetData(unsigned char REG_Address)
{
unsigned c

赞(0)
未经允许不得转载:上海聚慕医疗器械有限公司 » IIC型是什么型号STC15/STC15F2K60S2/STC15W4K32S4系列读取MPU6050陀螺仪串口显示代码

登录

找回密码

注册