|
在自學(xué)ADXL345,想問(wèn)一下大佬們這幾個(gè)取余運(yùn)算,之后的延時(shí)函數(shù)還有那幾個(gè)對(duì)數(shù)據(jù)線和時(shí)鐘線的操作有什么用啊
單片機(jī)源程序如下:
#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; //取余運(yùn)算
qian=temp_data/1000+0x30 ;
temp_data=temp_data%1000; //取余運(yùn)算
bai=temp_data/100+0x30 ;
temp_data=temp_data%100; //取余運(yùn)算
shi=temp_data/10+0x30 ;
temp_data=temp_data%10; //取余運(yùn)算
ge=temp_data+0x30;
}
void delay6us() //6us延時(shí)函數(shù)
{
_nop_(); _nop_();
}
void delay_ms(uint n) //N ms延時(shí)函數(shù)
{
uint x,y;
for(x=n;x>0;x--)
for(y=110;y>0;y--);
}
void ADXL345_Start()
{
sda = 1; //拉高數(shù)據(jù)線
sclk = 1; //拉高時(shí)鐘線
delay6us(); //延時(shí)
sda = 0; //產(chǎn)生下降沿
delay6us(); //延時(shí)
sclk = 0; //拉低時(shí)鐘線
}
void ADXL345_Stop()
{
sda = 0; //拉低數(shù)據(jù)線
sclk = 1; //拉高時(shí)鐘線
delay6us(); //延時(shí)
sda = 1; //產(chǎn)生上升沿
delay6us(); //延時(shí)
}
void ADXL345_SendACK(bit ack)
{
sda = ack; //寫(xiě)應(yīng)答信號(hào)
sclk = 1; //拉高時(shí)鐘線
delay6us(); //延時(shí)
sclk = 0; //拉低時(shí)鐘線
delay6us(); //延時(shí)
}
bit ADXL345_RecvACK()
{
sclk = 1; //拉高時(shí)鐘線
delay6us(); //延時(shí)
CY = sda; //讀應(yīng)答信號(hào)
sclk = 0; //拉低時(shí)鐘線
delay6us(); //延時(shí)
return CY;
}
void ADXL345_SendByte(uchar dat)
{
uchar i;
// sclk = 0; //拉低時(shí)鐘線
for (i=0; i<8; i++) //8位計(jì)數(shù)器
{
dat <<= 1; //移出數(shù)據(jù)的最高位
sda = CY; //送數(shù)據(jù)口
sclk = 1; //拉高時(shí)鐘線
delay6us(); //延時(shí)
sclk = 0; //拉低時(shí)鐘線
delay6us(); //延時(shí)
}
ADXL345_RecvACK();
}
uchar ADXL345_RecvByte()
{
uchar i;
uchar dat = 0;
sda = 1;
// write_com(0x80);
//使能內(nèi)部上拉,準(zhǔn)備讀取數(shù)據(jù),
for (i=0; i<8; i++) //8位計(jì)數(shù)器
{
dat <<= 1;
sclk = 1; //拉高時(shí)鐘線
delay6us(); //延時(shí)
dat |= sda; //讀數(shù)據(jù)
sclk = 0; //拉低時(shí)鐘線
delay6us(); //延時(shí)
}
return dat;
}
|
|