• 大小: 7KB
    文件类型: .c
    金币: 1
    下载: 0 次
    发布日期: 2021-05-16
  • 语言: 其他
  • 标签: ADXL345  

资源简介

51单片机ADXL345三轴加速度传感器源代码

资源截图

代码片段和文件信息

/*
 * ADXL345模块
 * 用途:ADXL345模块
 * 作者:
 * 日期:2016-05-03
 */
#include 
#include 
#include 
#include “ADXL345.h“

sbit ADX_SCL=P2^1;      //IIC时钟引脚定义
sbit ADX_SDA=P2^0;      //IIC数据引脚定义


BYTE BUF[8];            //接收数据缓存区      
unsigned char devid;
float pitchroll;

/*
延时5微秒(STC90C52RC---12MHz---12T)
不同的工作环境需要调整此函数,注意时钟过快时需要修改
当改用1T的MCU时请调整此延时函数*/

void Delay5us(){
    _nop_();_nop_();_nop_();_nop_();
    _nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();
}

 /*
延时5毫秒(STC90C52RC@12M)
不同的工作环境需要调整此函数
当改用1T的MCU时请调整此延时函数*/

void Delay5ms(){
    WORD n = 560;

    while (n--);
}

//起始信号
void ADXL345_Start(){
    ADX_SDA = 1;                    //拉高数据线
    ADX_SCL = 1;                    //拉高时钟线
    Delay5us();                 //延时
    ADX_SDA = 0;                    //产生下降沿
    Delay5us();                 //延时
    ADX_SCL = 0;                    //拉低时钟线


//停止信号

void ADXL345_Stop(){
    ADX_SDA = 0;                    //拉低数据线
    ADX_SCL = 1;                    //拉高时钟线
    Delay5us();                 //延时
    ADX_SDA = 1;                    //产生上升沿
    Delay5us();                 //延时
}

/**************************************
发送应答信号
入口参数:ack (0:ACK 1:NAK)
**************************************/
void ADXL345_SendACK(bit ack){
    ADX_SDA = ack;                  //写应答信号
    ADX_SCL = 1;                    //拉高时钟线
    Delay5us();                 //延时
    ADX_SCL = 0;                    //拉低时钟线
    Delay5us();                 //延时
}

/**************************************
接收应答信号
**************************************/
bit ADXL345_RecvACK(){
    ADX_SCL = 1;                    //拉高时钟线
    Delay5us();                 //延时
    CY = ADX_SDA;                   //读应答信号
    ADX_SCL = 0;                    //拉低时钟线
    Delay5us();                 //延时

    return CY;
}

/**************************************
向IIC总线发送一个字节数据
**************************************/
void ADXL345_SendByte(BYTE dat){
    BYTE i;

    for (i=0; i<8; i++)         //8位计数器
    {
        dat <<= 1;              //移出数据的最高位
        ADX_SDA = CY;               //送数据口
        ADX_SCL = 1;                //拉高时钟线
        Delay5us();             //延时
        ADX_SCL = 0;                //拉低时钟线
        Delay5us();             //延时
    }
    ADXL345_RecvACK();
}

/**************************************
从IIC总线接收一个字节数据
**************************************/
BYTE ADXL345_RecvByte(){
    BYTE i;
    BYTE dat = 0;

    ADX_SDA = 1;                    //使能内部上拉准备读取数据
    for (i=0; i<8; i++)         //8位计数器
    {
        dat <<= 1;
        ADX_SCL = 1;                //拉高时钟线
        Delay5us();             //延时
        dat |=ADX_SDA;             //读数据               
        ADX_SCL = 0;                //拉低时钟线
        Delay5us();             //延时
    }
    return dat;
}

//******单字节写入*****************************

评论

共有 条评论