找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 1440|回復(fù): 2
收起左側(cè)

關(guān)于單片機(jī)ADXL345的程序 這幾個(gè)取余運(yùn)算,之后的延時(shí)函數(shù)作用

[復(fù)制鏈接]
ID:890746 發(fā)表于 2021-4-15 17:48 | 顯示全部樓層 |閱讀模式
在自學(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;
}

回復(fù)

使用道具 舉報(bào)

ID:752974 發(fā)表于 2021-4-16 08:44 | 顯示全部樓層
取余部分是將數(shù)字的各個(gè)位分離出來(lái),再轉(zhuǎn)換成字符。對(duì)時(shí)鐘線的操作是軟件模擬SPI接口時(shí)序,完成SPI接口的數(shù)據(jù)輸入輸出操作,延時(shí)是 為了匹配CPU和345的SPI總線速度。
回復(fù)

使用道具 舉報(bào)

ID:890746 發(fā)表于 2021-4-16 10:54 | 顯示全部樓層
munuc_w 發(fā)表于 2021-4-16 08:44
取余部分是將數(shù)字的各個(gè)位分離出來(lái),再轉(zhuǎn)換成字符。對(duì)時(shí)鐘線的操作是軟件模擬SPI接口時(shí)序,完成SPI接口的數(shù) ...

好的謝謝您!我照著這個(gè)再看一下
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表