./taobaozuopin.json```c
#include "ADXL345.h" /*
/ void I2C_Start() { SDAOUT; SDA1; / 拉高数据线 / SCLOUT; SCL1; / 拉高时钟线 / delay_us( 5 ); / 延时 / SDA0; / 产生下降沿 / delay_us( 5 ); / 延时 / SCL0; / 拉低时钟线 / } /
/ void I2C_Stop() { SDAOUT; SDA0; / 拉低数据线 / SCLOUT; SCL1; / 拉高时钟线 / delay_us( 5 ); / 延时 / SDA1; / 产生上升沿 / delay_us( 5 ); / 延时 / } /
/ void I2C_SendACK( uchar ack ) { SDAOUT; SCLOUT; if ( ack ) SDA1; else SDA0; / SDA = ack; //写应答信号 / SCL1; / 拉高时钟线 / delay_us( 5 ); / 延时 / SCL0; / 拉低时钟线 / delay_us( 5 ); / 延时 / } /
/ uchar I2C_RecvACK() { uchar cy; SCLOUT; SCL1; / 拉高时钟线 / SDAIN; delay_us( 5 ); / 延时 / if ( SDADATA ) { cy = 1; }else { cy = 0; } / cy = SDA; //读应答信号 / SCL0; / 拉低时钟线 / delay_us( 5 ); / 延时 / SDAOUT; return(cy); } /
/ void I2C_SendByte( uchar dat ) { uchar i; SDAOUT; for ( i = 0; i < 8; i++ ) / 8位计数器 / { if ( (dat << i) & 0x80 ) { SDA1; }else { SDA0; } / SDA = cy; //送数据口 / SCLOUT; SCL1; / 拉高时钟线 / delay_us( 5 ); / 延时 / SCL0; / 拉低时钟线 / delay_us( 5 ); / 延时 / } I2C_RecvACK(); } /
/ uchar I2C_RecvByte() { uchar i; uchar dat = 0, cy; SDAOUT; SCLOUT; SDA1; / 使能内部上拉,准备读取数据, / SDAIN; for ( i = 0; i < 8; i++ ) / 8位计数器 / { dat <<= 1; SCL1; / 拉高时钟线 / delay_us( 5 ); / 延时 / if ( SDADATA ) { cy = 1; }else { cy = 0; } dat |= cy; / 读数据 / SCL0; / 拉低时钟线 / delay_us( 5 ); / 延时 / } SDAOUT; return(dat); } /
/ void Single_WriteI2C( uchar SlaveAddress, uchar REG_Address, uchar REG_data ) { I2C_Start(); / 起始信号 / I2C_SendByte( SlaveAddress ); / 发送设备地址+写信号 / I2C_SendByte( REG_Address ); / 内部寄存器地址, / I2C_SendByte( REG_data ); / 内部寄存器数据, / I2C_Stop(); / 发送停止信号 / } /
/ uchar I2C_ReadByte( uchar SlaveAddress, uchar REG_Address ) { uchar 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); } char ADXL345_Init( void ) { Single_WriteI2C( 0xA6, 0x31, 0x0B ); / 格式 / Single_WriteI2C( 0xA6, 0x2C, 0x08 ); / rate */ Single_WriteI2C( 0xA6, 0x2D, 0x08 ); Single_WriteI2C( 0xA6, 0x2E, 0x00 ); /*不开中断 / Single_WriteI2C( 0xA6, 0x1E, 0x00 ); Single_WriteI2C( 0xA6, 0x1F, 0x00 ); Single_WriteI2C( 0xA6, 0x20, 0x05 ); if ( I2C_ReadByte( 0xA6, 0x00 ) != 0xe5 ) / 读取ADXL345地址看是否有连接成功 / { delay_ms( 200 ); return(1); } return(0); } short jiasu_xyz[3]; void ADXL345_GetValue( void ) { //float x; //float y; //float z; short xyz = 0; / linshizhi */ short qqq = 0; xyz = (short) I2C_ReadByte( 0xA6, DATAX1 ); xyz <<= 8; xyz += (short) I2C_ReadByte( 0xA6, DATAX0 ); qqq = (short) xyz; //x = qqq * 3.9; jiasu_xyz[0] = qqq; xyz = (short) I2C_ReadByte( 0xA6, DATAY1 ); xyz <<= 8; xyz += (short) I2C_ReadByte( 0xA6, DATAY0 ); qqq = (short) xyz; //y = qqq * 3.9; jiasu_xyz[1] = qqq; xyz = (short) I2C_ReadByte( 0xA6, DATAZ1 ); xyz <<= 8; xyz += (short) I2C_ReadByte( 0xA6, DATAZ0 ); qqq = (short) xyz; //z = qqq * 3.9; jiasu_xyz[2] = qqq; }
```c #ifndef __ADXL345_H #define __ADXL345_H #include "msp430.h" #include "sys.h" char ADXL345_Init(void); void ADXL345_GetValue(void); #endif
csharphttps://docs.qq.com/sheet/DUEdqZ2lmbmR6UVdU?tab=BB08J2
本文作者:Dong
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!