资源简介
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;
}
//******单字节写入*****************************
评论
共有 条评论