找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1440|回复: 2
收起左侧

关于单片机ADXL345的程序 这几个取余运算,之后的延时函数作用

[复制链接]
ID:890746 发表于 2021-4-15 17:48 | 显示全部楼层 |阅读模式
在自学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;
}

回复

使用道具 举报

ID:752974 发表于 2021-4-16 08:44 | 显示全部楼层
取余部分是将数字的各个位分离出来,再转换成字符。对时钟线的操作是软件模拟SPI接口时序,完成SPI接口的数据输入输出操作,延时是 为了匹配CPU和345的SPI总线速度。
回复

使用道具 举报

ID:890746 发表于 2021-4-16 10:54 | 显示全部楼层
munuc_w 发表于 2021-4-16 08:44
取余部分是将数字的各个位分离出来,再转换成字符。对时钟线的操作是软件模拟SPI接口时序,完成SPI接口的数 ...

好的谢谢您!我照着这个再看一下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表