高级会员
- 积分
- 857
- 威望
- 445
- 贡献
- 254
- 兑换币
- 283
- 注册时间
- 2015-3-10
- 在线时间
- 79 小时
- 毕业学校
- 无
|
15贡献
源程序附上
void IIC_Start(void)
{
SCL = 0;
SDA = 1;
;
SCL = 1;
nops();
SDA = 0;
nops();
SCL = 0;
}
void IIC_Stop(void)
{
SCL = 0;
;
SDA = 0;
;
SCL = 1;
nops();
SDA = 1;
nops();
SCL = 0;
}
void Write_Byte(unsigned char SendChar)
{
unsigned char i;
for(i = 0;i < 8;i++)
{
SCL = 0;
if((SendChar<<i)&0x80)
SDA = 1;
else
SDA = 1;
;
SCL = 1;
nops();
SCL = 0;
}
nops();
SDA = 1;
;
SCL = 1;
nops();
SCL = 0;
}
unsigned char Read_Byte(void)
{
unsigned char i;
unsigned char ReadChar = 0;
SCL = 0;
;
SDA = 1;
for(i = 0;i < 8;i++)
{
;
SCL = 0;
nops();
SCL = 1;
;
ReadChar <<= 1;
ReadChar += 1;
}
SCL = 0;
return ReadChar;
}
void MMA8451_Write_Byte(unsigned char Address, unsigned char Thedata)
{
IIC_Start();
Write_Byte(0x38);
Write_Byte(Address);
Write_Byte(Thedata);
IIC_Stop();
}
unsigned char MMA8451_Read_Byte(unsigned char Address)
{
unsigned char Ret = 100;
IIC_Start(); //启动
Write_Byte(0x38); //写入设备ID及写信号
Write_Byte(Address); //X地址
IIC_Start(); //重新发送开始
Write_Byte(0x39); //写入设备ID及读信
Ret=Read_Byte(); //读取一字节
IIC_Stop();
return Ret;
}
void MMA8451_Init(void)
{
MMA8451_Write_Byte(0x2A,0x04);
nops(); nops(); nops();
nops(); nops(); nops();
MMA8451_Write_Byte(0x0E,0x00); //2G
nops(); nops(); nops();
nops(); nops(); nops();
MMA8451_Write_Byte(0x2A,0x01); //激活状态
nops(); nops(); nops();
nops(); nops(); nops();
}
这是读取数据
x_h=MMA8451_Read_Byte(0x01); // 读取高位
x_l=MMA8451_Read_Byte(0x02); // 读取低位
x=((x_h<<8)+x_l)>>2; // 14位精度
y_h=MMA8451_Read_Byte(0x03); // 读取高位
y_l=MMA8451_Read_Byte(0x04); // 读取低位
y=((y_h<<8)+y_l)>>2; // 14位精度
z_h=MMA8451_Read_Byte(0x05); // 读取高位
z_l=MMA8451_Read_Byte(0x06); // 读取低位
z=((z_h<<8)+z_l)>>2; // 14位精度
|
|