欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 135|回復: 1
打印 上一主題 下一主題
收起左側

求VL5310X單片機驅動

[復制鏈接]
跳轉到指定樓層
樓主
ID:1152942 發表于 2025-6-7 22:14 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:68189 發表于 2025-6-9 08:51 | 只看該作者
//只供參考

  1. #include "intrins.h"
  2. #define uchar unsigned char
  3. #define uint unsigned int

  4. #define VL53L0X_REG_IDENTIFICATION_MODEL_ID         0xc0
  5. #define VL53L0X_REG_IDENTIFICATION_REVISION_ID      0xc2
  6. #define VL53L0X_REG_PRE_RANGE_CONFIG_VCSEL_PERIOD   0x50
  7. #define VL53L0X_REG_FINAL_RANGE_CONFIG_VCSEL_PERIOD 0x70
  8. #define VL53L0X_REG_SYSRANGE_START                  0x00
  9. #define VL53L0X_REG_RESULT_INTERRUPT_STATUS         0x13
  10. #define VL53L0X_REG_RESULT_RANGE_STATUS             0x14
  11. #define address 0x52

  12. sbit I2C_SCL = P1^3;
  13. sbit I2C_SDA = P1^2;


  14. void I2C_Delay10us();
  15. void I2C_Start();
  16. void I2C_Stop();
  17. uchar I2C_SendByte(uchar dat);
  18. uchar I2C_ReadByte();
  19. //void I2C_SendACK(bit ack);
  20. void vl53l0x_send(uchar reg,uchar dat);
  21. uchar vl53l0x_read(uchar reg);
  22. short makeuint16(int lsb, int msb);

  23. uchar gbuf[16];
  24. uint acnt ;
  25. uint scnt;
  26. uint dist ;
  27. uchar DeviceRangeStatusInternal;

  28. /*******************************************************************************
  29. * 函 數 名         : Delay1ms()                //@11.0592MHz
  30. * 函數功能                     : 延時
  31. * 輸    入         : 無
  32. * 輸    出         : 無
  33. *******************************************************************************/
  34. void Delay1ms()                //@11.0592MHz
  35. {
  36.     unsigned char i, j;

  37.     _nop_();
  38.     i = 11;
  39.     j = 190;
  40.     do
  41.     {
  42.         while (--j);
  43.     } while (--i);
  44. }
  45. /*******************************************************************************
  46. * 函 數 名         : delay_ms(unsigned int time)
  47. * 函數功能                     : 延時
  48. * 輸    入         : time
  49. * 輸    出         : 無
  50. *******************************************************************************/
  51. void delay_ms(unsigned int time)
  52. {
  53.     unsigned char
  54.     i;
  55.     for(i=1; i<=time; i++)
  56.         Delay1ms();
  57. }
  58. /*******************************************************************************
  59. * 函 數 名         : Delay1us()
  60. * 函數功能                   : 延時
  61. * 輸    入         : 無
  62. * 輸    出         : 無
  63. *******************************************************************************/
  64. void I2C_Delay10us()
  65. {
  66.     unsigned char i;

  67.     _nop_();
  68.     _nop_();
  69.     _nop_();
  70.     i = 24;
  71.     while (--i);
  72. }
  73. /*******************************************************************************
  74. * 函 數 名         : I2C_Start()
  75. * 函數功能                   : 起始信號:在I2C_SCL時鐘信號在高電平期間I2C_SDA信號產生一個下降沿
  76. * 輸    入         : 無
  77. * 輸    出         : 無
  78. * 備    注         : 起始之后I2C_SDA和I2C_SCL都為0
  79. *******************************************************************************/
  80. void I2C_Start()
  81. {
  82.     I2C_SDA = 1;
  83.     I2C_Delay10us();
  84.     I2C_SCL = 1;
  85.     I2C_Delay10us();//建立時間是I2C_SDA保持時間>4.7us
  86.     I2C_SDA = 0;
  87.     I2C_Delay10us();//保持時間是>4us
  88.     I2C_SCL = 0;
  89.     I2C_Delay10us();
  90. }
  91. /*******************************************************************************
  92. * 函 數 名           : I2C_Stop()
  93. * 函數功能                 : 終止信號:在I2C_SCL時鐘信號高電平期間I2C_SDA信號產生一個上升沿
  94. * 輸    入           : 無
  95. * 輸    出                  : 無
  96. * 備    注           : 結束之后保持I2C_SDA和I2C_SCL都為1;表示總線空閑
  97. *******************************************************************************/
  98. void I2C_Stop()
  99. {
  100.     I2C_SDA = 0;
  101.     I2C_Delay10us();
  102.     I2C_SCL = 1;
  103.     I2C_Delay10us();//建立時間大于4.7us
  104.     I2C_SDA = 1;
  105.     I2C_Delay10us();
  106. }
  107. /*******************************************************************************
  108. * 函 數 名           : I2cSendByte(uchar num)
  109. * 函數功能                  : 通過I2C發送一個字節。在I2C_SCL時鐘信號高電平期間,
  110. *                    * 保持發送信號I2C_SDA保持穩定
  111. * 輸    入           : num ,ack
  112. * 輸    出                  : 0或1。發送成功返回1,發送失敗返回0
  113. * 備    注           : 發送完一個字節I2C_SCL=0, 需要應答則應答設置為1,否則為0
  114. *******************************************************************************/
  115. uchar I2C_SendByte(uchar dat)
  116. {
  117.     uchar a = 0,b = 0;//最大255,一個機器周期為1us,最大延時255us。

  118.     for(a=0; a<8; a++)//要發送8位,從最高位開始
  119.     {
  120.         dat <<= 1;
  121.         I2C_SDA=CY;
  122.         I2C_Delay10us();
  123.         I2C_SCL = 1;
  124.         I2C_Delay10us();//建立時間>4.7us
  125.         I2C_SCL = 0;
  126.         I2C_Delay10us();//時間大于4us
  127.     }

  128.     //I2C_SDA = 1;
  129.     //I2C_Delay10us();
  130.     I2C_SCL = 1;
  131.     I2C_Delay10us();
  132.     CY=I2C_SDA;
  133.     I2C_SCL = 0;
  134.     I2C_Delay10us();
  135.     return CY;
  136. }
  137. /*******************************************************************************
  138. * 函 數 名           : I2cReadByte()
  139. * 函數功能                     : 使用I2c讀取一個字節
  140. * 輸    入           : 無
  141. * 輸    出                  : dat
  142. * 備    注           : 接收完一個字節I2C_SCL=0
  143. *******************************************************************************/
  144. uchar I2C_ReadByte()
  145. {
  146.     uchar a = 0,dat = 0;
  147.     I2C_SDA = 1;                        //起始和發送一個字節之后I2C_SCL都是0
  148.     I2C_Delay10us();
  149.     for(a=0; a<8; a++)//接收8個字節
  150.     {
  151.         I2C_SCL = 1;
  152.         I2C_Delay10us();
  153.         dat <<= 1;
  154.         dat |= I2C_SDA;
  155.         I2C_Delay10us();
  156.         I2C_SCL = 0;
  157.         I2C_Delay10us();
  158.     }
  159.     return dat;
  160. }
  161. /*******************************************************************************
  162. * 函 數 名           : vl53l0x_send(uchar reg,uchar dat)
  163. * 函數功能                     : 使用I2c向vl530xl發送命令
  164. * 輸    入           : reg,dat
  165. * 輸    出                  : 無
  166. *******************************************************************************/
  167. void vl53l0x_send(uchar reg,uchar dat)
  168. {
  169.     I2C_Start();
  170.     I2C_SendByte(address);
  171.     I2C_SendByte(reg);
  172.     I2C_SendByte(dat);
  173.     I2C_Stop();
  174. }
  175. /*******************************************************************************
  176. * 函 數 名           : vl53l0x_read(uchar reg)
  177. * 函數功能                     : 使用I2c向vl530x0l讀取一個字節
  178. * 輸    入           : reg
  179. * 輸    出                  : num
  180. *******************************************************************************/
  181. uchar vl53l0x_read(uchar reg)
  182. {
  183.     unsigned char num;
  184.     I2C_Start();
  185.     I2C_SendByte(address); //發送寫器件地址
  186.     I2C_SendByte(reg); //發送要讀取的地址
  187.                 I2C_Stop();
  188.     I2C_Start();
  189.     I2C_SendByte(address+1); //發送讀器件地址
  190.     num=I2C_ReadByte(); //讀取數據
  191.     I2C_Stop();
  192.     return num;
  193. }
  194. /*******************************************************************************
  195. * 函 數 名           :  makeuint16(int lsb, int msb)
  196. * 函數功能                       :  將讀出數據轉換到數組當中
  197. * 輸    入           : lsb,msb
  198. * 輸    出                  : dat
  199. *******************************************************************************/
  200. short makeuint16(int lsb, int msb)
  201. {
  202.     return ((msb & 0xFF) << 8) | (lsb & 0xFF);
  203. }
  204. /*******************************************************************************
  205. * 函 數 名           :  date()
  206. * 函數功能                       :  進行數據的讀取與轉換,將數據處理
  207. * 輸    入           : 無
  208. * 輸    出                  : dist
  209. *******************************************************************************/
  210. unsigned char date()
  211. {
  212.         uchar val = 0;        
  213. //        uchar vall;
  214.         int cnt = 0;
  215.                         vl53l0x_send(VL53L0X_REG_SYSRANGE_START, 0x01);
  216.                 while (cnt < 100)                                      ///檢測數據是否傳輸正常
  217.                 {
  218.       delay_ms(10);
  219.       val = vl53l0x_read(VL53L0X_REG_RESULT_RANGE_STATUS);
  220.       if (val & 0x01) break;
  221.       cnt++;
  222.     }
  223.                  gbuf[0]=vl53l0x_read(0x14);
  224.                  gbuf[7]=vl53l0x_read(0x14+7);
  225.                  gbuf[6]=vl53l0x_read(0x14+6);
  226.                  gbuf[9]=vl53l0x_read(0x14+9);
  227.                  gbuf[8]=vl53l0x_read(0x14+8);
  228.                  gbuf[11]=vl53l0x_read(0x14+11);
  229.                  gbuf[10]=vl53l0x_read(0x14+10);
  230.      acnt = makeuint16(gbuf[7], gbuf[6]);
  231.      scnt = makeuint16(gbuf[9], gbuf[8]);                 
  232.      dist = makeuint16(gbuf[11], gbuf[10]);                 
  233. //                 DeviceRangeStatusInternal = ((gbuf[0] & 0x78) >> 3);
  234. //                         if(DeviceRangeStatusInternal==11&&dist>20&&dist<1200)
  235. //                        {
  236. //                                vall=dist/10000;
  237. //                    OLED_dan(8*0,0,vall+16);
  238. //                    vall=dist%10000/1000;
  239. //                    OLED_dan(8*1,0,vall+16);
  240. //                    vall=dist%1000/100;
  241. //                    OLED_dan(8*2,0,vall+16);
  242. //                    vall=dist%100/10;
  243. //                    OLED_dan(8*3,0,vall+16);
  244. //                    vall=dist%10/1;
  245. //                    OLED_dan(8*4,0,vall+16);
  246. //                        }
  247.                         return  dist;             //該數組為五位
  248. }
  249. void main()
  250. {

  251.         while(1)
  252.         {
  253.     date();
  254.         }
  255. }
復制代碼
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表