標(biāo)題:
VL53l0x激光測距程序和資料
[打印本頁]
作者:
bink97
時間:
2017-8-12 14:30
標(biāo)題:
VL53l0x激光測距程序和資料
vl530l0x資料
0.png
(41.64 KB, 下載次數(shù): 80)
下載附件
2017-8-12 17:20 上傳
單片機(jī)源程序如下:
/*****************************
更新日期2017年2月28日
模擬串口參考stc官方程序
來自arduino實例
使用11.0592MHz內(nèi)部RC;
VL53L0X:
SCL-->P3.3
SDA-->P3.2
串口:
P3.0 RXD
P3.1 TXD
*******************************/
#include"stc.h"
#include"i2c.h"
#include"VL53L0X.h"
#include "intrins.h"
#define uchar unsigned char
#define uint unsigned int
/***********全局變量定義**************/
bit flag;
uchar val1;
short val_s;
uchar gbuf[16];
uint acnt ;
uint scnt;
uint dist ;
uchar DeviceRangeStatusInternal;
#define BAUD 0xFE80 // 9600bps @ 11.0592MHz
//sfr AUXR = 0x8E;
sbit RXB = P3^0; //define UART TX/RX port
sbit TXB = P3^1;
typedef bit BOOL;
typedef unsigned char BYTE;
typedef unsigned int WORD;
BYTE TBUF,RBUF;
BYTE TDAT,RDAT;
BYTE TCNT,RCNT;
BYTE TBIT,RBIT;
BOOL TING,RING;
BOOL TEND,REND;
void UART_INIT();
void delay()
{
unsigned char i;
for(i=0; i<100; i++);
}
void Delay1ms() //@11.0592MHz
{
unsigned char i, j;
_nop_();
i = 11;
j = 190;
do
{
while (--j);
} while (--i);
}
void delay_ms(unsigned int time)
{
unsigned char
i;
for(i=1; i<=time; i++)
Delay1ms();
}
void uartsend_int16(short val)
{
uchar val1;
val1=val/10000;
while(!TEND);
TEND=0;
TBUF='0'+val1;
TING=1;
val1=val%10000/1000;
while(!TEND);
TEND=0;
TBUF='0'+val1;
TING=1;
val1=val%1000/100;
while(!TEND);
TEND=0;
TBUF='0'+val1;
TING=1;
val1=val%100/10;
while(!TEND);
TEND=0;
TBUF='0'+val1;
TING=1;
val1=val%10/1;
while(!TEND);
TEND=0;
TBUF='0'+val1;
TING=1;
}
void uartprintf(char *s)
{
int i=0;
while(s[i]!='\0')
{
while(!TEND);
TEND=0;
TBUF=s[i];
TING=1;
i++;
}
}
void uartprintenter()
{
while(!TEND);
TEND=0;
TBUF=0x0d;
TING=1;
while(!TEND);
TEND=0;
TBUF=0x0a;
TING=1;
}
void main()
{
uchar val = 0;
int cnt = 0;
TMOD = 0x00; //timer0 in 16-bit auto reload mode
AUXR = 0x80; //timer0 working at 1T mode
TL0 = BAUD;
TH0 = BAUD>>8; //initial timer0 and set reload value
TR0 = 1; //tiemr0 start running
ET0 = 1; //enable timer0 interrupt
PT0 = 1; //improve timer0 interrupt priority
EA = 1; //open global interrupt switch
UART_INIT();
uartprintf("start");
while (1)
{
vl53l0x_send(VL53L0X_REG_SYSRANGE_START, 0x01);
while (cnt < 100) { // 1 second waiting time max
delay_ms(10);
val = vl53l0x_read(VL53L0X_REG_RESULT_RANGE_STATUS);
if (val & 0x01) break;
cnt++;
}
if (val & 0x01) uartprintf("ready");
else uartprintf("not ready");
uartprintenter();
//vl53l0x_read_block(0x14, 12);
gbuf[0]=vl53l0x_read(0x14);
gbuf[7]=vl53l0x_read(0x14+7);
gbuf[6]=vl53l0x_read(0x14+6);
gbuf[9]=vl53l0x_read(0x14+9);
gbuf[8]=vl53l0x_read(0x14+8);
gbuf[11]=vl53l0x_read(0x14+11);
gbuf[10]=vl53l0x_read(0x14+10);
acnt = makeuint16(gbuf[7], gbuf[6]);
scnt = makeuint16(gbuf[9], gbuf[8]);
dist = makeuint16(gbuf[11], gbuf[10]);
DeviceRangeStatusInternal = ((gbuf[0] & 0x78) >> 3);
if(DeviceRangeStatusInternal==11&&dist>20&&dist<1200)
{
uartprintf("distance:");
uartsend_int16(dist);
uartprintf("mm");
uartprintenter();
}
else
{
uartprintf("error");
uartprintenter();
}
delay_ms(100);
}
}
void tm0() interrupt 1 using 1
{
if (RING)
{
if (--RCNT == 0)
{
RCNT = 3; //reset send baudrate counter
if (--RBIT == 0)
{
RBUF = RDAT; //save the data to RBUF
RING = 0; //stop receive
REND = 1; //set receive completed flag
}
else
{
RDAT >>= 1;
if (RXB) RDAT |= 0x80; //shift RX data to RX buffer
}
}
}
else if (!RXB)
{
RING = 1; //set start receive flag
RCNT = 4; //initial receive baudrate counter
RBIT = 9; //initial receive bit number (8 data bits + 1 stop bit)
}
if (--TCNT == 0)
{
TCNT = 3; //reset send baudrate counter
if (TING) //judge whether sending
{
if (TBIT == 0)
{
TXB = 0; //send start bit
TDAT = TBUF; //load data from TBUF to TDAT
TBIT = 9; //initial send bit number (8 data bits + 1 stop bit)
}
else
……………………
…………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
VL53l0x激光測距.rar
(62.09 KB, 下載次數(shù): 174)
2017-8-12 14:29 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
jianren2
時間:
2018-1-28 19:57
感謝分享,多謝了呃
作者:
jianren2
時間:
2018-1-28 19:58
感謝您的分享,這份資料太難找了
作者:
xql2008
時間:
2019-9-22 23:05
怎么沒初始化,跑起來有問題
作者:
jnshuhe
時間:
2019-9-23 08:47
謝謝分享,感謝樓主!
作者:
湛蜀湘
時間:
2019-11-11 23:31
寫得太亂了,
作者:
馮666
時間:
2021-8-16 16:39
這個顯示用的是哪個
作者:
qiangtech
時間:
2021-8-17 09:40
這個芯片最近挺火的,它的精度可以達(dá)到什么程度?
作者:
dfyy8888
時間:
2022-5-2 21:28
這個芯片最近挺火的,不知精度如何。
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1