亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码
標題:
zigbee cc2530裸機模擬IIC接口程序 實現VL53L0X激光測距
[打印本頁]
作者:
大只偉
時間:
2019-4-13 14:58
標題:
zigbee cc2530裸機模擬IIC接口程序 實現VL53L0X激光測距
采用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
作者:
大只偉
時間:
2019-4-13 15:01
由于CC2530是無IIC硬件支持的,所以寫了一個,上面應該是采用普通測距模式,由于該芯片是不提供測距函數的,因此是根據ARDUINO的原碼移植的。
作者:
大只偉
時間:
2019-4-13 15:03
這個才是 main.c
/**************************************/
/* WeBee團隊 */
/* Zigbee學習例程 */
/*例程名稱: */
/*建立時間:2012/04/18 */
/*描述:main
**************************************/
#include <ioCC2530.h>
#include "type.h"
#include "clock.h"
#include "uart.h"
#include "VL53L0.h"
#include "myiic.h"
#include "delay.h"
void main(void)
{
clockInit();
uartInit();
IIC_Init();
u8 val = 0;
u8 gbuf[16];
uint32_t cnt = 0;
// uint16_t count[3];
while(1)
{
VL53L0X_Write_Byte(VL53L0X_REG_SYSRANGE_START, 0x01);//啟動檢測
while(cnt < 100)//當檢測完成,即讀取距離值
{
delay_ms(10);
val = VL53L0X_Read_Byte(VL53L0X_REG_RESULT_RANGE_STATUS);
if( val & 0x01) break;
cnt++;
}
// if( val & 0x01)
// uartSendString("\r\n readey \r\n",12);
// else
// uartSendString("\r\n NOT readey \r\n",16);
VL53L0X_Read_Len(VL53L0X_Add, 0x14 , 12, gbuf);//讀取數據
// count[0] = makeuint16(gbuf[7], gbuf[6]);//ambient count
// count[1] = makeuint16(gbuf[9], gbuf[8]);//signal count
// count[2] = makeuint16(gbuf[11], gbuf[10]);//距離
// DeviceRangeStatusInternal = ((gbuf[0] & 0x78) >> 3);//status
//打印距離值
uartPutInt16(makeuint16(gbuf[11], gbuf[10]));
delay_ms(500);
}
}
作者:
YXDZGD5
時間:
2019-10-3 14:47
非常不錯的資料,值得參考
作者:
YXDZGD5
時間:
2019-10-3 14:48
非常不錯的資料,值得參考,謝謝啦
作者:
史蒂芬吳倩
時間:
2020-4-26 23:59
好資料
歡迎光臨 (http://www.denmoz.com/bbs/)
Powered by Discuz! X3.1