資源簡介
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數(shù)據(jù)引腳定義
BYTE?BUF[8];??????????? //接收數(shù)據(jù)緩存區(qū)??????
unsigned?char?devid;
float?pitchroll;
/*
延時5微秒(STC90C52RC---12MHz---12T)
不同的工作環(huán)境需要調(diào)整此函數(shù),注意時鐘過快時需要修改
當改用1T的MCU時請調(diào)整此延時函數(shù)*/
void?Delay5us(){
????_nop_();_nop_();_nop_();_nop_();
????_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();
}
?/*
延時5毫秒(STC90C52RC@12M)
不同的工作環(huán)境需要調(diào)整此函數(shù)
當改用1T的MCU時請調(diào)整此延時函數(shù)*/
void?Delay5ms(){
????WORD?n?=?560;
????while?(n--);
}
//起始信號
void?ADXL345_Start(){
????ADX_SDA?=?1;????????????????????//拉高數(shù)據(jù)線
????ADX_SCL?=?1;????????????????????//拉高時鐘線
????Delay5us();?????????????????//延時
????ADX_SDA?=?0;????????????????????//產(chǎn)生下降沿
????Delay5us();?????????????????//延時
????ADX_SCL?=?0;????????????????????//拉低時鐘線
}?
//停止信號
void?ADXL345_Stop(){
????ADX_SDA?=?0;????????????????????//拉低數(shù)據(jù)線
????ADX_SCL?=?1;????????????????????//拉高時鐘線
????Delay5us();?????????????????//延時
????ADX_SDA?=?1;????????????????????//產(chǎn)生上升沿
????Delay5us();?????????????????//延時
}
/**************************************
發(fā)送應(yīng)答信號
入口參數(shù):ack?(0:ACK?1:NAK)
**************************************/
void?ADXL345_SendACK(bit?ack){
????ADX_SDA?=?ack;??????????????????//寫應(yīng)答信號
????ADX_SCL?=?1;????????????????????//拉高時鐘線
????Delay5us();?????????????????//延時
????ADX_SCL?=?0;????????????????????//拉低時鐘線
????Delay5us();?????????????????//延時
}
/**************************************
接收應(yīng)答信號
**************************************/
bit?ADXL345_RecvACK(){
????ADX_SCL?=?1;????????????????????//拉高時鐘線
????Delay5us();?????????????????//延時
????CY?=?ADX_SDA;???????????????????//讀應(yīng)答信號
????ADX_SCL?=?0;????????????????????//拉低時鐘線
????Delay5us();?????????????????//延時
????return?CY;
}
/**************************************
向IIC總線發(fā)送一個字節(jié)數(shù)據(jù)
**************************************/
void?ADXL345_SendByte(BYTE?dat){
????BYTE?i;
????for?(i=0;?i<8;?i++)?????????//8位計數(shù)器
????{
????????dat?<<=?1;??????????????//移出數(shù)據(jù)的最高位
????????ADX_SDA?=?CY;???????????????//送數(shù)據(jù)口
????????ADX_SCL?=?1;????????????????//拉高時鐘線
????????Delay5us();?????????????//延時
????????ADX_SCL?=?0;????????????????//拉低時鐘線
????????Delay5us();?????????????//延時
????}
????ADXL345_RecvACK();
}
/**************************************
從IIC總線接收一個字節(jié)數(shù)據(jù)
**************************************/
BYTE?ADXL345_RecvByte(){
????BYTE?i;
????BYTE?dat?=?0;
????ADX_SDA?=?1;????????????????????//使能內(nèi)部上拉準備讀取數(shù)據(jù)
????for?(i=0;?i<8;?i++)?????????//8位計數(shù)器
????{
????????dat?<<=?1;
????????ADX_SCL?=?1;????????????????//拉高時鐘線
????????Delay5us();?????????????//延時
????????dat?|=ADX_SDA;?????????????//讀數(shù)據(jù)???????????????
????????ADX_SCL?=?0;????????????????//拉低時鐘線
????????Delay5us();?????????????//延時
????}
????return?dat;
}
//******單字節(jié)寫入*****************************
評論
共有 條評論