采用IAR環境,實現普通模塊測距,串口輸出數據。
代碼如下:
- #include "VL53L0.h"
- #include "myiic.h"
- uint16_t bswap(u8 b[])
- {
- uint16_t val = ((b[0]<< 8) & b[1]);
- return val;
- }
- uint16_t VL53L0X_decode_vcsel_period(short vcsel_period_reg)
- {
- uint16_t vcsel_period_pclks = (vcsel_period_reg + 1) <<1;
- return vcsel_period_pclks;
- }
- uint16_t makeuint16(int lsb, int msb)
- {
- return ((msb & 0xFF) << 8) | (lsb & 0xFF);
- }
- //IIC連續寫
- //addr:器件地址
- //reg:寄存器地址
- //len:寫入長度
- //buf:數據區
- //返回值:0,正常
- // 其他,錯誤代碼
- u8 VL53L0X_Write_Len(u8 addr,u8 reg,u8 len,u8 *buf)
- {
- u8 i;
- IIC_Start();
- IIC_Send_Byte((addr<<1)|0);//發送器件地址+寫命令
- if(IIC_Wait_Ack()) //等待應答
- {
- IIC_Stop();
- return 1;
- }
- IIC_Send_Byte(reg); //寫寄存器地址
- IIC_Wait_Ack(); //等待應答
- for(i=0;i<len;i++)
- {
- IIC_Send_Byte(buf[i]); //發送數據
- if(IIC_Wait_Ack()) //等待ACK
- {
- IIC_Stop();
- return 1;
- }
- }
- IIC_Stop();
- return 0;
- }
- //IIC連續讀
- //addr:器件地址
- //reg:要讀取的寄存器地址
- //len:要讀取的長度
- //buf:讀取到的數據存儲區
- //返回值:0,正常
- // 其他,錯誤代碼
- u8 VL53L0X_Read_Len(u8 addr,u8 reg,u8 len,u8 *buf)
- {
- IIC_Start();
- IIC_Send_Byte((addr<<1)|0);//發送器件地址+寫命令
- if(IIC_Wait_Ack()) //等待應答
- {
- IIC_Stop();
- return 1;
- }
- IIC_Send_Byte(reg); //寫寄存器地址
- IIC_Wait_Ack(); //等待應答
- IIC_Start();
- IIC_Send_Byte((addr<<1)|1);//發送器件地址+讀命令
- IIC_Wait_Ack(); //等待應答
- while(len)
- {
- if(len==1)*buf=IIC_Read_Byte(0);//讀數據,發送nACK
- else *buf=IIC_Read_Byte(1); //讀數據,發送ACK
- len--;
- buf++;
- }
- IIC_Stop(); //產生一個停止條件
- return 0;
- }
- //IIC寫一個字節
- //reg:寄存器地址
- //data:數據
- //返回值:0,正常
- // 其他,錯誤代碼
- u8 VL53L0X_Write_Byte(u8 reg,u8 data)
- {
- IIC_Start();
- IIC_Send_Byte((VL53L0X_Add<<1)|0);//發送器件地址+寫命令
- if(IIC_Wait_Ack()) //等待應答
- {
- IIC_Stop();
- return 1;
- }
- IIC_Send_Byte(reg); //寫寄存器地址
- IIC_Wait_Ack(); //等待應答
- IIC_Send_Byte(data);//發送數據
- if(IIC_Wait_Ack()) //等待ACK
- {
- IIC_Stop();
- return 1;
- }
- IIC_Stop();
- return 0;
- }
- //IIC讀一個字節
- //reg:寄存器地址
- //返回值:讀到的數據
- u8 VL53L0X_Read_Byte(u8 reg)
- {
- u8 res;
- IIC_Start();
- //IIC_Send_Byte((VL53L0X_Add<<1)|0);//發送器件地址+寫命令
- IIC_Send_Byte(0x52);//發送器件地址+寫命令
- IIC_Wait_Ack(); //等待應答
- IIC_Send_Byte(reg); //寫寄存器地址
- IIC_Wait_Ack(); //等待應答
- IIC_Start();
- IIC_Send_Byte(0x53 );//發送器件地址+讀命令
- IIC_Wait_Ack(); //等待應答
- res=IIC_Read_Byte(0);//讀取數據,發送nACK
- IIC_Stop(); //產生一個停止條件
- return res;
- }
復制代碼
附帶芯片原理圖、接線及ARDUINO原碼。
0.png (45.69 KB, 下載次數: 84)
下載附件
2019-4-13 16:13 上傳
全部資料51hei下載地址:
裸機程序(new).zip
(1.04 MB, 下載次數: 126)
2019-4-13 14:58 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|