在自学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;
}
|