資源簡介
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;
}
//******單字節寫入*****************************
評論
共有 條評論