| 初始化,读出的ID都是正确的,X和Y轴都是正确的,不同方向寄存器值范围:0到320左右; 
 但Z轴不对,不同方向寄存器值范围:700到1220左右;
 水平放置时Z轴寄存器值是1220, 反方向放置是700; (正确应该是: 255 ,0)
 
 u8 ADXL345_Init(void)
 {
 IIC_Init();
 
 if(ADXL345_RD_Reg(DEVICE_ID)==0XE5)        //读取器件ID
 {
 ADXL345_WR_Reg(DATA_FORMAT,0X2B);  //13位全分辨率,输出数据右对齐,16g量程
 ADXL345_WR_Reg(BW_RATE,0x0A);           //数据输出速度为100Hz
 ADXL345_WR_Reg(POWER_CTL,0x28);           //链接使能,测量模式
 ADXL345_WR_Reg(INT_ENABLE,0x00);   //不使用中断
 ADXL345_WR_Reg(OFSX,0x00);
 ADXL345_WR_Reg(OFSY,0x00);
 ADXL345_WR_Reg(OFSZ,0x00);
 
 return 0;
 }
 
 return 1;
 }
 
 //x,y,z:读取到的数据
 void ADXL345_RD_XYZ(short *x,short *y,short *z)
 {
 u8 buf[6];
 u8 i;
 
 IIC_Start();
 IIC_Send_Byte(ADXL_WRITE);        //发送写器件指令
 IIC_Wait_Ack();
 IIC_Send_Byte(0x32);                   //发送寄存器地址(数据缓存的起始地址为0X32)
 IIC_Wait_Ack();
 
 IIC_Start();                                      //重新启动
 IIC_Send_Byte(ADXL_READ);        //发送读器件指令
 IIC_Wait_Ack();
 
 for(i=0;i<6;i++)
 {
 if(i==5)        buf[i]=IIC_Read_Byte(0);        //读取一个字节,不继续再读,发送NACK
 else                         buf[i]=IIC_Read_Byte(1);        //读取一个字节,继续读,发送ACK
 }
 
 IIC_Stop();                                        //产生一个停止条件
 
 *x=(short)((((u16)buf[1]<<8)+buf[0]));
 *y=(short)((((u16)buf[3]<<8)+buf[2]));
 *z=(short)((((u16)buf[5]<<8)+buf[4]));
 }
 |