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

VL53L0X激光測距模塊的單片機驅動程序

發布者:Yuexiang888最新更新時間:2019-12-23 來源: 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激光測距模塊的單片機驅動程序

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

推薦閱讀最新更新時間:2025-03-25 00:03

51單片機之IIC&EEPROM的驅動程序
#include reg52.h #include ./delay/delay.h sbit SCL = P2^0; sbit SDA = P2^1; bit ack = 0; unsigned char flag = 1; #define LCDPORT P0 #define LCD_WRITE_DATA 1 #define LCD_WRITE_COM 0 sbit RS = P2^4; sbit RW = P2^5; sbit E = P2^6; #define SUCC 0 #define ERR 1 void iic_start() { SDA = 1; //先操作SDA,在操作SCL SCL =
[單片機]
51單片機DS1302實時時鐘驅動程序
DS1302是低功耗實時時鐘芯片,它可以對年、月、日、周、時、分、秒進行計時,且具有閏年補償等多種功能。主要特點是采用串行數據傳輸,可為掉電保護電源提供可編程的充電功能,并且可以關閉充電功能。 一.基本原理 1.引腳分析 2.時序分析 (1)寫字節 第一個字節是地址字節,第二個字節是數據字節。RST信號必須拉高,否則數據的輸入是無效的。換一句話說,RST信號控制數據|時間信號輸入的開始和結束。地址字節和數據字節的讀取時上升沿有效,而且是由LSB開始讀入。 (2)讀字節 讀一個字節和寫一個字節有明顯的不一樣,先是寫地址字節,然后再讀數據字節,寫地址字節時上升沿有效,而讀數據字節時下降沿有效,當然前提是RST信號必須拉高
[單片機]
51<font color='red'>單片機</font>DS1302實時時鐘<font color='red'>驅動程序</font>
S3C2440 字符設備驅動程序之LED驅動程序_編寫編譯(二)
app: open , read , write 驅動: led_open,led_read,led_write 驅動框架: 一、寫出:led_open,led_read 二、怎么告訴內核? a、定義一個file_operations b、把這個結構體告訴內核: register_chrdev(major,name,file_operations) c、誰來調用它 (register_chrdev) 驅動的入口函數 first_drv_init d、修飾:module_init(first_drv_init) (怎么知道是哪個入口函數) module_init:(入口函數)定義了
[單片機]
S3C2440 字符設備<font color='red'>驅動程序</font>之LED<font color='red'>驅動程序</font>_編寫編譯(二)
1602液晶最新驅動程序
/*1602LCD最新驅程序 備注:1602LCD數據口是P0口 ***因檢測液晶忙狀態不穩定,所以用延時來替代*** 字符橫坐標顯示范圍是1--16; 縱坐標顯示范圍是1--2; */ #include stc89c51.h #include intrins.h #define uchar unsigned char #define H 1 #define L 0 sbit RS=P3^0; // 數據/命令選擇端 sbit RW=P3^1; // 讀/寫選擇端 sbit E=P3^2; // 使能信號 //長時間延時,用于換屏時的顯示延時 void longtime (vo
[單片機]
基于S3C2440嵌入式Linux的步進電機驅動程序
在嵌入式Linux開發過程中需要為指定設備編寫和編譯驅動程序,這與以往在PC機上的Linux驅動開發明顯不同,本文設計了基于S3C2440嵌入式Linux下激光雕刻系統的步進電機驅動程序。 1 硬件系統的設計 步進電機開環控制系統主要由中央控制器、步進電機驅動器、傳感器以及步進電機四大部分組成。本系統采用基于ARM920t內核的S3C244 0A微處理器作為控制系統的中央控制器,該芯片主頻400MHz,最高可達到533MHz,內含多種設備接口,存儲器使用64MB的Nand Flash和64MB的SDRAM。圖1所示為控制系統框圖。 2 系統的工作原理 本系統主要控制兩個兩相混合式步進電機,分別代表X軸和Y
[工業控制]
基于S3C2440嵌入式Linux的步進電機<font color='red'>驅動程序</font>
用類/微驅動模型開發DSP視頻驅動程序
近年來,DSP運算能力的不斷增強,使其在電子設備方面得到了廣泛的應用。DSP/BIOS是TI公司推出的一個實時操作系統,與TI的CCS(Code Composer Studio)集成在一起。用DSP/BIOS可以大大簡化DSP應用程序的開發和調試,其中與外圍設備的I/O接口是DSP應用開發中不可缺少的重要部分。TI公司為C64x系列DSP的開發者提供了一種類/微驅動模型(class/mini drivermodel)。通過對外圍設備設計驅動程序,為高層應用程序提供統一的接口來操作底層硬件。只要是遵循此驅動程序接口標準開發的高層應用程序,都可以在具有相同接口的不同硬件平臺上運行,從而使DSP軟件系統與硬件系統相分離,提高了軟件的可重
[應用]
基于PCI總線的雙DSP系統及WDM驅動程序設計
摘要:介紹了PCI總線控制芯片PCI2040的功能及內部結構,分析了基于PCI總線的雙DSP通信的硬件結構及實現方法,并描述了利用Windows2000 DDK開發WDM設備驅動程序的方法及PCI雙DSP通信驅動程序主要模塊的設計方法和編程注意要點。 關鍵詞:PCI總線 PCI2040 DSP DDK WDM TI公司專門推出了PCI2040橋芯片是專門針對PCI總線和DSP接口用的,本文利用它和DSP來處理視頻信號,并用雙端口RAM實現DSP之間的數據傳輸。 1 硬件設計 1.1 PCI總線控制芯片PCI2040 PCI總線是一種不依附于某個具體處理器的局部總線,它支持32位或64位的總線寬度,頻率通常是33MHz,
[應用]
替代8位MCU,STM32C0的底氣何在?
MCU(單片機)按照位數主要劃分為4位、8位、16位、32位及64位,位數越多,數據處理能力越來越強,應用場景變得更加復雜。觀察整個應用市場,8位和32位是兩大主流,16位則處于二者之間,目前只有部分經典產品擁有存量空間。 8位MCU至今已經應用了幾十年,一直是無數嵌入式應用的主力,尤其是消費產品和醫療器械中的應用。 讓8位MCU屹立不倒的原因在于——便宜、簡單。而在去年,ST推出了一款顛覆市場規則的產品線STM32C0,并打出了“你的下一個8位MCU是32位MCU,它的名字是STM32C0”( 'Your next 8-Bit MCU is a 32-bit!Just call it STM32C0!')的口
[單片機]
替代8位<font color='red'>MCU</font>,STM32C0的底氣何在?
小廣播
設計資源 培訓 開發板 精華推薦

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

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

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京B2-20211791 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 灵山县| 南丰县| 石狮市| 湟中县| 长海县| 焦作市| 奇台县| 平邑县| 甘泉县| 敦化市| 开阳县| 岗巴县| 北辰区| 富裕县| 巴林左旗| 博白县| 宣恩县| 嘉义市| 大田县| 沧源| 泉州市| 奉新县| 定陶县| 广汉市| 青铜峡市| 白城市| 成武县| 淅川县| 绿春县| 定西市| 肇东市| 阳谷县| 邵东县| 綦江县| 石泉县| 临夏市| 夹江县| 巫山县| 水城县| 井冈山市| 万年县|