|
发表于 2014-4-25 12:29:29
|
显示全部楼层
if (regValue & DATA_STATUS_ZYXDR_MASK)
{
//读取三轴加速度计值
MMA845xReadMultiRegisters(OUT_X_MSB_REG, buffer, 6);
ax = (buffer[0] << 8) | buffer[1];
ay = (buffer[2] << 8) | buffer[3];
az = (buffer[4] << 8) | buffer[5];
//32位符号扩展
if (ax & 0x8000)
{
ax |= (~(unsigned int)0) << 16;
}
if (ay & 0x8000)
{
ay |= (~(unsigned int)0) << 16;
}
if (az & 0x8000)
{
az |= (~(unsigned int)0) << 16;
}
//有符号数右移(正数高位补0,负数高位补1)
ax >>= offset;
ay >>= offset;
az >>= offset;
//处理一下,以方便格式化输出
ax1 = (unsigned int)ax & 0xFFFF;
ay1 = (unsigned int)ay & 0xFFFF;
az1 = (unsigned int)az & 0xFFFF;
//以十六进制方式输出三轴加速度计的值(原始值)
printf("ax=0x%04x, ay=0x%04x, az=0x%04x\n", ax1, ay1, az1);
//以十进制方式输出三轴加速度计的值
printf("ax=%6d, ay=%6d, az=%6d\n", ax, ay, az);
}
你好,可以详细解释一下该段程序为什对数据这样操作吗? |
|