娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2024年12月23日(星期一)

正在發生

2019年12月23日 | VL53L0X激光測距模塊的單片機驅動程序

發布者:Yuexiang888 來源: 51hei關鍵字:VL53L0X  激光測距模塊  單片機  驅動程序 手機看文章 掃描二維碼
隨時隨地手機看文章

自己做的激光測距VL53L0X程序,拿出來和大家分享。這程序里面沒有加顯示設備,因為不知道大家要使用什么來顯示,所以請根據個人情況來進行修改添加,但是附件里面的程序是我加上OLED后的程序
各位請按需使用。

單片機源程序如下:

#include

#include "intrins.h"

#define uchar unsigned char

#define uint unsigned int


#define VL53L0X_REG_IDENTIFICATION_MODEL_ID         0xc0

#define VL53L0X_REG_IDENTIFICATION_REVISION_ID      0xc2

#define VL53L0X_REG_PRE_RANGE_CONFIG_VCSEL_PERIOD   0x50

#define VL53L0X_REG_FINAL_RANGE_CONFIG_VCSEL_PERIOD 0x70

#define VL53L0X_REG_SYSRANGE_START                  0x00

#define VL53L0X_REG_RESULT_INTERRUPT_STATUS         0x13

#define VL53L0X_REG_RESULT_RANGE_STATUS             0x14

#define address 0x52


sbit I2C_SCL = P1^3;

sbit I2C_SDA = P1^2;



void I2C_Delay10us();

void I2C_Start();

void I2C_Stop();

uchar I2C_SendByte(uchar dat);

uchar I2C_ReadByte();

//void I2C_SendACK(bit ack);

void vl53l0x_send(uchar reg,uchar dat);

uchar vl53l0x_read(uchar reg);

short makeuint16(int lsb, int msb);


uchar gbuf[16];

uint acnt ;

uint scnt;

uint dist ;

uchar DeviceRangeStatusInternal;


/*******************************************************************************

* 函 數 名         : Delay1ms()                //@11.0592MHz

* 函數功能                     : 延時

* 輸    入         : 無

* 輸    出         : 無

*******************************************************************************/

void Delay1ms()                //@11.0592MHz

{

    unsigned char i, j;


    _nop_();

    i = 11;

    j = 190;

    do

    {

        while (--j);

    } while (--i);

}

/*******************************************************************************

* 函 數 名         : delay_ms(unsigned int time)

* 函數功能                     : 延時

* 輸    入         : time

* 輸    出         : 無

*******************************************************************************/

void delay_ms(unsigned int time)

{

    unsigned char

    i;

    for(i=1; i<=time; i++)

        Delay1ms();

}

/*******************************************************************************

* 函 數 名         : Delay1us()

* 函數功能                   : 延時

* 輸    入         : 無

* 輸    出         : 無

*******************************************************************************/

void I2C_Delay10us()

{

    unsigned char i;


    _nop_();

    _nop_();

    _nop_();

    i = 24;

    while (--i);

}

/*******************************************************************************

* 函 數 名         : I2C_Start()

* 函數功能                   : 起始信號:在I2C_SCL時鐘信號在高電平期間I2C_SDA信號產生一個下降沿

* 輸    入         : 無

* 輸    出         : 無

* 備    注         : 起始之后I2C_SDA和I2C_SCL都為0

*******************************************************************************/

void I2C_Start()

{

    I2C_SDA = 1;

    I2C_Delay10us();

    I2C_SCL = 1;

    I2C_Delay10us();//建立時間是I2C_SDA保持時間>4.7us

    I2C_SDA = 0;

    I2C_Delay10us();//保持時間是>4us

    I2C_SCL = 0;

    I2C_Delay10us();

}

/*******************************************************************************

* 函 數 名           : I2C_Stop()

* 函數功能                 : 終止信號:在I2C_SCL時鐘信號高電平期間I2C_SDA信號產生一個上升沿

* 輸    入           : 無

* 輸    出                  : 無

* 備    注           : 結束之后保持I2C_SDA和I2C_SCL都為1;表示總線空閑

*******************************************************************************/

void I2C_Stop()

{

    I2C_SDA = 0;

    I2C_Delay10us();

    I2C_SCL = 1;

    I2C_Delay10us();//建立時間大于4.7us

    I2C_SDA = 1;

    I2C_Delay10us();

}

/*******************************************************************************

* 函 數 名           : I2cSendByte(uchar num)

* 函數功能                  : 通過I2C發送一個字節。在I2C_SCL時鐘信號高電平期間,

*                    * 保持發送信號I2C_SDA保持穩定

* 輸    入           : num ,ack

* 輸    出                  : 0或1。發送成功返回1,發送失敗返回0

* 備    注           : 發送完一個字節I2C_SCL=0, 需要應答則應答設置為1,否則為0

*******************************************************************************/

uchar I2C_SendByte(uchar dat)

{

    uchar a = 0,b = 0;//最大255,一個機器周期為1us,最大延時255us。


    for(a=0; a<8; a++)//要發送8位,從最高位開始

    {

        dat <<= 1;

        I2C_SDA=CY;

        I2C_Delay10us();

        I2C_SCL = 1;

        I2C_Delay10us();//建立時間>4.7us

        I2C_SCL = 0;

        I2C_Delay10us();//時間大于4us

    }


    //I2C_SDA = 1;

    //I2C_Delay10us();

    I2C_SCL = 1;

    I2C_Delay10us();

    CY=I2C_SDA;

    I2C_SCL = 0;

    I2C_Delay10us();

    return CY;

}

/*******************************************************************************

* 函 數 名           : I2cReadByte()

* 函數功能                     : 使用I2c讀取一個字節

* 輸    入           : 無

* 輸    出                  : dat

* 備    注           : 接收完一個字節I2C_SCL=0

*******************************************************************************/

uchar I2C_ReadByte()

{

    uchar a = 0,dat = 0;

    I2C_SDA = 1;                        //起始和發送一個字節之后I2C_SCL都是0

    I2C_Delay10us();

    for(a=0; a<8; a++)//接收8個字節

    {

        I2C_SCL = 1;

        I2C_Delay10us();

        dat <<= 1;

        dat |= I2C_SDA;

        I2C_Delay10us();

        I2C_SCL = 0;

        I2C_Delay10us();

    }

    return dat;

}

/*******************************************************************************

* 函 數 名           : vl53l0x_send(uchar reg,uchar dat)

* 函數功能                     : 使用I2c向vl530xl發送命令

* 輸    入           : reg,dat

* 輸    出                  : 無

*******************************************************************************/

void vl53l0x_send(uchar reg,uchar dat)

{

    I2C_Start();

    I2C_SendByte(address);

    I2C_SendByte(reg);

    I2C_SendByte(dat);

    I2C_Stop();

}

/*******************************************************************************

* 函 數 名           : vl53l0x_read(uchar reg)

* 函數功能                     : 使用I2c向vl530x0l讀取一個字節

* 輸    入           : reg

* 輸    出                  : num

*******************************************************************************/

uchar vl53l0x_read(uchar reg)

{

    unsigned char num;

    I2C_Start();

    I2C_SendByte(address); //發送寫器件地址

    I2C_SendByte(reg); //發送要讀取的地址

                I2C_Stop();

    I2C_Start();

    I2C_SendByte(address+1); //發送讀器件地址

    num=I2C_ReadByte(); //讀取數據

    I2C_Stop();

    return num;

}

/*******************************************************************************

* 函 數 名           :  makeuint16(int lsb, int msb)

* 函數功能                       :  將讀出數據轉換到數組當中

* 輸    入           : lsb,msb

* 輸    出                  : dat

*******************************************************************************/

short makeuint16(int lsb, int msb) 

{

    return ((msb & 0xFF) << 8) | (lsb & 0xFF);

}

/*******************************************************************************

* 函 數 名           :  date()

* 函數功能                       :  進行數據的讀取與轉換,將數據處理

* 輸    入           : 無

* 輸    出                  : dist

*******************************************************************************/

unsigned char date()

{

        uchar val = 0;        

//        uchar vall;

        int cnt = 0;

[1] [2]
關鍵字:VL53L0X  激光測距模塊  單片機  驅動程序 引用地址:VL53L0X激光測距模塊的單片機驅動程序

上一篇:全自動洗衣機控制器設計的單片機代碼
下一篇:單片機直流電機調速并顯示的仿真與程序源碼

推薦閱讀

ABI Research指出目前工業用外骨骼(exoskeleton)裝置的潛在市場規模逾260萬套,遠超過目前與可預見的未來市場的供給量,商機之大已是供應商的出貨量所不能及。相關技術的進展、顯而易見的投資報酬率,將為積極創新、能提供商業價值的供應商提供絕佳舞臺。 根據報導,外骨骼裝置持續發展且開始標準化,專為醫療復健與行動輔助而設計的外骨骼裝置尚未被...
產業鏈指出,蘋果將改變iPhone的發布周期。在上半年發布兩款新iPhone,下半年發布另外兩款。調整產品方向的周期變短是為了快速響應市場反饋。 據上游供應鏈表示,蘋果已經做好了推出5G版iPhone的準備,一共是四款型號,預計總備貨量將達到1.2億臺。 產業鏈消息人士透露,明年將會出現5G手機的換機潮,為了把握這個機會,蘋果不甘落后,因此規劃了4款機型...
據外媒報道,來自霍尼韋爾和英國南安普頓大學光電子研究中心(University of Southampton&#39;s Optoelectronics Research Centre )的研究人員使用一種新型空心光纖(hollow core optical fiber),克服了先前限制諧振腔光纖陀螺儀(resonator fiber optic gyroscopes)性能的幾個因素,大幅度提高了陀螺儀的性能,比此前發布的涉及空心光纖...
1.定時器分類STM32F1系列中,除了互聯型的產品,共有8個定時器,分為基本定時器、通用定時器和高級定時器。基本定時器是一個16位只能向上計數的定時器,只能定時,沒有外部IO。通用定時器是一個16位可以向上/下計數的定時器,可以定時,可以輸出比較,可以輸入捕捉,每個定時器有四個外部IO。高級定時器是一個16位可以向上/下計數的定時器,可以定時,可以...

史海拾趣

問答坊 | AI 解惑

這里有個小程序PIC12C508的,可能看有什么問題?

#include<htc.h> __CONFIG (INTRC & PROTECT & MCLREN & WDTEN); const unsigned char cs @ 0x1FF; void DelayUs( int  x)    // 32US {while(--x!=0)   { CLRWDT();     NOP();   ...…

查看全部問答∨

瞬時無功理論諧波檢測方法

瞬時無功理論諧波檢測方法的資料下載,免費貢獻給大家…

查看全部問答∨

UART接收程序丟失數據的問題

各位大俠,我用AVR ATMEGA16的UART來接收上位機串口調試助手發來的數據,假設為0x53,0x26,0x53,0x89,0x47,前面兩個數據總是對的,然后第三位就接到了最后一個數據,中間的數據就丟失了。 接收中斷程序如下: #pragma interrupt_handler uart_rx_ ...…

查看全部問答∨

請教9261的串口收發問題

請教9261的串口收發問題 我在核中添加了下面的代碼: at91_register_uart(AT91SAM9261_ID_US1, 1, ATMEL_UART_RTS); at91_register_uart(AT91SAM9261_ID_US2, 2, ATMEL_UART_RTS); at91_register_uart(AT91SAM9261_ID_US3, 3, ATMEL_UART_RTS ...…

查看全部問答∨

觸摸屏控制器

最近要作一款控制器是TSC2006的觸摸屏的驅動!請問和ADS7846控制器有什么區別!可以通用嗎!如果有區別請大哥們描述的詳細點!…

查看全部問答∨

張帆的驅動開發群

我建了個驅動開發群,QQ群:11312034 本人是《Windows驅動開發技術詳解》的作者張帆,希望一起交流。 …

查看全部問答∨

EVC下EDIT控件為何無法進行輸入法的輸入

編輯完對話框類后無法在EDIT里輸入漢字; 還有請幫忙看看一下代碼怎么修改 LOGFONT m_lf;                 //字體結構 strcpy(m_lf.lfFaceName,ipadress ); 報錯:error C2664: \ ...…

查看全部問答∨

高手幫忙解釋一下定時器的時間怎么算的?!

比如下面這段代碼:void main(void){WDTCTL = WDTPW + WDTHOLD; //停止看門狗定時器P1DIR |= 0x01; // 設P1.0為輸出//TA1CTL = RT1SSEL_0 + MC_2 + TAIE; // ACLK, 定時器A計數模式,且開中斷功能TA1CTL=TASSEL_2+ID_3+MC_1; //SMCLK(8KHZ). 8分頻 ...…

查看全部問答∨

大家有沒有學MSP5438A系列的,交流交流啊

5438A剛買了板子,還沒入門,想求一些易入門的資料…

查看全部問答∨

有關鋰電池的充電次數

1、關于電量     我們經常會看到少則幾萬毫安,多則十幾萬毫安的移動電源。即便沒有虛標,這么多的電量并不代表都能充到你的手機里。額定容量不等于實際可用容量,在電量存儲的過程中也會遺失一部分電。     舉個例子,如果 ...…

查看全部問答∨
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 石嘴山市| 平顶山市| 衡南县| 广东省| 柯坪县| 井陉县| 舞钢市| 河池市| 慈利县| 监利县| 胶州市| 东宁县| 华坪县| 德兴市| 弥勒县| 财经| 揭西县| 游戏| 宝清县| 滨州市| 阿克苏市| 呼玛县| 龙江县| 永修县| 玛纳斯县| 彰化县| 梁山县| 济源市| 新昌县| 丰县| 内丘县| 湾仔区| 大关县| 福建省| 马鞍山市| 龙门县| 宁明县| 缙云县| 台南县| 灵武市| 新晃|