2024-09-01
售卖作品
00

./taobaozuopin.json```c

#include "ADXL345.h" /*

  • 345只需要接五根线,其余乱七八糟的不用接
  • P1.4接SCL
  • P1.5接SDA
  • 3.3接3.3V
  • CS接3.3V
  • GND接GND / #define SCL1 P1OUT |= BIT4 #define SCL0 P1OUT &= ~BIT4 #define SCLOUT P1DIR |= BIT4 #define SDA1 P1OUT |= BIT5 / IIC数据引脚 / #define SDA0 P1OUT &= ~BIT5 #define SDAIN P1DIR &= ~BIT5 #define SDAOUT P1DIR |= BIT5 #define SDADATA (P1IN & BIT5) #define I2C2_SLAVE_ADDRESS7 0xA6 / 0x3A//ALT ADDRES / #define DEVID 0x00 #define THRESH_TAP 0x1D #define OFSX 0x1E #define OFSY 0x1F #define OFSZ 0x20 #define DUR 0x21 #define Latent 0x22 #define Window 0x23 #define THRESH_ACT 0x24 #define THRESH_INACT 0x25 #define TIME_INACT 0x26 #define ACT_INACT_CTL 0x27 #define THRESH_FF 0x28 #define TIME_FF 0x29 #define TAP_AXES 0x2A #define ACT_TAP_STATUS 0x2B #define BW_RATE 0x2C #define POWER_CTL 0x2D #define INT_ENABLE 0x2E #define INT_MAP 0x2F #define INT_SOURCE 0x30 #define DATA_FORMAT 0x31 #define DATAX0 0x32 #define DATAX1 0x33 #define DATAY0 0x34 #define DATAY1 0x35 #define DATAZ0 0x36 #define DATAZ1 0x37 #define FIFO_CTL 0x38 #define FIFO_STATUS 0x39 /

  • I2C起始信号

/ void I2C_Start() { SDAOUT; SDA1; / 拉高数据线 / SCLOUT; SCL1; / 拉高时钟线 / delay_us( 5 ); / 延时 / SDA0; / 产生下降沿 / delay_us( 5 ); / 延时 / SCL0; / 拉低时钟线 / } /


  • I2C停止信号

/ void I2C_Stop() { SDAOUT; SDA0; / 拉低数据线 / SCLOUT; SCL1; / 拉高时钟线 / delay_us( 5 ); / 延时 / SDA1; / 产生上升沿 / delay_us( 5 ); / 延时 / } /


  • I2C发送应答信号
  • 入口参数
    (0
    1
    )

/ void I2C_SendACK( uchar ack ) { SDAOUT; SCLOUT; if ( ack ) SDA1; else SDA0; / SDA = ack; //写应答信号 / SCL1; / 拉高时钟线 / delay_us( 5 ); / 延时 / SCL0; / 拉低时钟线 / delay_us( 5 ); / 延时 / } /


  • I2C接收应答信号

/ 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); } /


  • 向I2C总线发送一个字节数据

/ 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(); } /


  • 从I2C总线接收一个字节数据

/ 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); } /


  • 向I2C设备写入一个字节数据

/ 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(); / 发送停止信号 / } /


  • 从I2C设备读取一个字节数据

/ 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

帮助、问询

csharp
https://docs.qq.com/sheet/DUEdqZ2lmbmR6UVdU?tab=BB08J2
如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:Dong

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!