欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1681|回復: 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 單片機教程網

快速回復 返回頂部 返回列表