在自學ADXL345,想問一下大佬們這幾個取余運算,之后的延時函數還有那幾個對數據線和時鐘線的操作有什么用啊
單片機源程序如下:
#include<reg52.h>
#include<math.h>
#include"1602.h"
#include <INTRINS.H>
#define SlaveAddress 0xA6
sbit sclk=P1^1;
sbit sda=P1^2;
float dis_datax,dis_datay,dis_dataz,acc,acc1=1000;
uchar BUF[8];
uchar wan, qian, bai, shi ,ge,flag,miao,miao1,n;
uint count;
void conversion(uint temp_data)
{
wan=temp_data/10000+0x30 ;
temp_data=temp_data%10000; //取余運算
qian=temp_data/1000+0x30 ;
temp_data=temp_data%1000; //取余運算
bai=temp_data/100+0x30 ;
temp_data=temp_data%100; //取余運算
shi=temp_data/10+0x30 ;
temp_data=temp_data%10; //取余運算
ge=temp_data+0x30;
}
void delay6us() //6us延時函數
{
_nop_(); _nop_();
}
void delay_ms(uint n) //N ms延時函數
{
uint x,y;
for(x=n;x>0;x--)
for(y=110;y>0;y--);
}
void ADXL345_Start()
{
sda = 1; //拉高數據線
sclk = 1; //拉高時鐘線
delay6us(); //延時
sda = 0; //產生下降沿
delay6us(); //延時
sclk = 0; //拉低時鐘線
}
void ADXL345_Stop()
{
sda = 0; //拉低數據線
sclk = 1; //拉高時鐘線
delay6us(); //延時
sda = 1; //產生上升沿
delay6us(); //延時
}
void ADXL345_SendACK(bit ack)
{
sda = ack; //寫應答信號
sclk = 1; //拉高時鐘線
delay6us(); //延時
sclk = 0; //拉低時鐘線
delay6us(); //延時
}
bit ADXL345_RecvACK()
{
sclk = 1; //拉高時鐘線
delay6us(); //延時
CY = sda; //讀應答信號
sclk = 0; //拉低時鐘線
delay6us(); //延時
return CY;
}
void ADXL345_SendByte(uchar dat)
{
uchar i;
// sclk = 0; //拉低時鐘線
for (i=0; i<8; i++) //8位計數器
{
dat <<= 1; //移出數據的最高位
sda = CY; //送數據口
sclk = 1; //拉高時鐘線
delay6us(); //延時
sclk = 0; //拉低時鐘線
delay6us(); //延時
}
ADXL345_RecvACK();
}
uchar ADXL345_RecvByte()
{
uchar i;
uchar dat = 0;
sda = 1;
// write_com(0x80);
//使能內部上拉,準備讀取數據,
for (i=0; i<8; i++) //8位計數器
{
dat <<= 1;
sclk = 1; //拉高時鐘線
delay6us(); //延時
dat |= sda; //讀數據
sclk = 0; //拉低時鐘線
delay6us(); //延時
}
return dat;
}
|