K_A12_022 基于STM32等单片机驱动VL53L0X模块 串口与OLED0.96双显示

news2025/2/27 16:26:06

K_A12_022 基于STM32等单片机驱动VL53L0X模块 串口与OLED0.96双显示

  • 一、资源说明
  • 二、基本参数
    • 参数
    • 引脚说明
  • 三、驱动说明
    • UART对应程序:
    • IIC对应程序:
  • 四、部分代码说明
    • 1、接线引脚定义
      • 1.1、STC89C52RC+VL53L0X模块
      • 1.2、STM32F103C8T6+VL53L0X模块
  • 五、基础知识学习与相关资料下载
  • 六、视频效果展示与程序资料获取
  • 七、注意事项
  • 八、接线说明
    • STC89C52RC
      • UART:
      • IIC:
    • STM32F103C8T6
      • UART:
      • IIC:

请添加图片描述
注:偏差校准步骤(均十六进制发送)
1、偏差校准命令
A5 21 0A D0(此处是在10CM处校准)
2、加载数据命令
A5 43 04 EC(断电重启后加载偏差补偿)
3、保存设置命令
A5 87 01 2D(保存设置后生效)

一、资源说明

单片机型号测试条件模块名称代码功能
STC89C52RC晶振11.0592MVL53L0X模块STC89C52RC驱动VL53L0X模块参数 串口与OLED0.96双显示
STM32F103C8T6晶振8M/系统时钟72MVL53L0X模块STM32F103C8T6驱动VL53L0X模块参数 串口与OLED0.96双显示

其他资料目录 直戳跳转

二、基本参数

参数

请添加图片描述

引脚说明

VL53L0X模块引脚说明
VCC正极 3.3-5V供电
GND负极 接GND
CT串口 USART_TX / IIC_SCL
DR串口 USART_RX / IIC_SDA
SET设置上下限距离报警值(电压 0~3.3V)
OUT报警值状态输出

三、驱动说明

UART对应程序:

以51为例

void UartInit(void)
{
    SCON=0x50;   //UART方式1:8位UART;   REN=1:允许接收 
    PCON=0x00;   //SMOD=0:波特率不加倍 
    TMOD=0x20;   //T1方式2,用于UART波特率 
    TH1=0xFD; 
    TL1=0xFD;   //UART波特率设置:FDFD,9600;FFFF,57600
    TR1=1;	 //允许T1计数 
    EA=1;
    TCON |=0x40;//启动定时器1
	IE   |=0x90;//打开串口中断,MCU总中断
}

void UartSend(uint8_t dat)
{
	while(send_ok);//等待发送缓存为空
 	SBUF = dat;
	send_ok=1;//缓存标志置1
}

void UartSendStr(uint8_t *p)
{
	uint8_t k=0;
    while ((*(p+k))!='\0')
    {
        UartSend(*(p+k));
		k++;
    }
}

IIC对应程序:

以51为例

/*
 *@brief 		IIC总线初始化函数
 *@param[in]	NULL
 *@author		MrWeng
 *@date			2020-8-10
 */
void VL53L0X_IIC_Init(void)	
{
		IIC_SDA = 1;//释放IIC总线的数据线。
		IIC_SCL = 1;//释放IIC总线的时钟线。

}
/****************************************************************
通讯起始信号:当 SCL 线是高电平时 SDA 线从高电平向低电平切换,表示通讯的开始;
*****************************************************************/

void VL53L0X_IIC_start(void)  
{

		IIC_SDA = 1;//拉高
		IIC_SCL = 1;
		IIC_Delay();
		IIC_SDA = 0;
		IIC_Delay();
		IIC_SCL = 0;		//拉低时钟线,准备开始时钟

}
/****************************************************************
通讯停止信号:当 SCL 是高电平时 SDA线由低电平向高电平切换,表示通讯的停止。
*****************************************************************/

void VL53L0X_IIC_stop(void) 
{

		IIC_SCL = 1;
		IIC_SDA = 0;
		IIC_Delay();
		IIC_SDA = 1;	//通讯停止
		IIC_SCL = 0;
		IIC_Delay();
}
/****************************************************************
//接收应答信号函数
*****************************************************************/

uint8_t VL53L0X_IIC_Get_ack(void)
{
		uint16_t CNT;

		IIC_SCL = 0;		//拉低时钟线。
		IIC_Delay();
		IIC_SCL = 1;		//拉高时钟线。
		while((IIC_SDA)  && (CNT < 100) )
		{
				CNT++;
				if(CNT == 100)
				{
						return 0;
				}
		}

		IIC_SCL = 0;		//拉低时钟线。
		IIC_Delay();
		return 1;

}
/****************************************************************
//发送应答信号函数
*****************************************************************/

void VL53L0X_IIC_ACK(void)	
{ 

		IIC_SDA = 0;	//拉低数据线,应答
		IIC_SCL = 1;	//产生第九个时钟信号。
		IIC_Delay();
		IIC_SCL = 0;	
		IIC_Delay();
}
//非应答

void VL53L0X_IIC_NACK(void)
{ 

		IIC_SDA = 1;	//拉高数据线,非应答
		IIC_SCL = 1;	//产生第九个时钟信号。
		IIC_Delay();
		IIC_SCL = 0;	
		IIC_Delay();
}

/****************************************************************
//向IIC总线写入一个字节的数据
*****************************************************************/

void VL53L0X_IIC_write_byte(uint8_t Data)
{

		uint8_t i;
		for(i=0;i<8;i++)//八位数据
		{
				if((Data & 0x80) == 0x80)
				{
						IIC_SDA = 1;
				}
				else
				{
						IIC_SDA = 0;
				}
				IIC_Delay();
				IIC_SCL = 1; //一个时钟信号送入数据
				IIC_Delay();
				IIC_SCL = 0;
				IIC_Delay();
				Data = Data << 1;//数据左移一位,把次高位放在最高位,为写入次高位做准备
		}
		IIC_SDA = 0;		//应答处理前拉低,跳过应答
		IIC_Delay();
		VL53L0X_IIC_Get_ack();
}
/****************************************************************
//从IIC总线读取一个字节的数据函数
*****************************************************************/

uint8_t VL53L0X_IIC_read_byte(void)
{

		uint8_t i;
		uint8_t Data = 0;       //定义一个缓冲寄存器。
		IIC_SCL = 0;	//先拉低时钟线
		IIC_SDA = 1;	//再拉高数据线
		for(i = 0;i < 8;i++)
		{
				Data = Data<<1;		//将缓冲字节的数据左移一位,准备读取数据。
				IIC_SCL = 1;				//拉高时钟线,开始读取下一位数据
			  IIC_Delay();
				if(IIC_SDA == 1)		//如果数据线为高平电平。
				{
						Data = Data|0x01;	//则给缓冲字节的最低位写1。
				}
				IIC_SCL = 0;				//拉低时钟线,一位读取完成
				IIC_Delay();
		}
		return Data;					//返回读取的一个字节数据。



}

四、部分代码说明

1、接线引脚定义

需要自定义引脚可在此处更改,STM32要自定义引脚的话也要注意引脚时钟使能的更改

1.1、STC89C52RC+VL53L0X模块

//VL53L0X模块引脚定义
IIC:
sbit IIC_SDA = P1^0;      //数据线
sbit IIC_SCL = P1^1;      //时钟线

UART:
CT(TX) ---------------P3.0
DR(RX)----------------P3.1


//OLED0.96模块引脚定义
sbit SCL=P1^3; //串行时钟
sbit SDA=P1^2; //串行数据

1.2、STM32F103C8T6+VL53L0X模块

//VL53L0X模块引脚定义
IIC:
#define IIC_SDA_PIN   			GPIO_Pin_8  //				
#define IIC_SCL_PIN    			GPIO_Pin_9			// 
#define  IIC_SDA_H   			GPIO_SetBits(GPIOB,IIC_SDA_PIN)
#define  IIC_SDA_L   			GPIO_ResetBits(GPIOB,IIC_SDA_PIN)
#define  IIC_SCL_H   			GPIO_SetBits(GPIOB,IIC_SCL_PIN)
#define  IIC_SCL_L   			GPIO_ResetBits(GPIOB,IIC_SCL_PIN)
UART:
#define  DEBUG_USART2_TX_GPIO_PORT       GPIOA   
#define  DEBUG_USART2_TX_GPIO_PIN        GPIO_Pin_2
#define  DEBUG_USART2_RX_GPIO_PORT       GPIOA
#define  DEBUG_USART2_RX_GPIO_PIN        GPIO_Pin_3

//OLED0.96模块引脚定义					
/*STM32F103C8T6芯片的硬件I2C: PB6 -- SCL; PB7 -- SDA */
GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_6 | GPIO_Pin_7;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;//I2C必须开漏输出
GPIO_Init(GPIOB, &GPIO_InitStructure);

五、基础知识学习与相关资料下载

1、STC89C52RC程序下载 直戳跳转

2、STM32F103C8T6程序下载
(1)串口下载 直戳跳转
(2)ST-LINK下载 直戳跳转
(3)J-LINK下载 直戳跳转
(4)DAP-LINK下载 直戳跳转

3、OLED0.96程序说明 直戳跳转

4、串口助手下载与使用
(1)安信可调试助手使用 直戳跳转
(2) sscom33串口调试助手使用 直戳跳转
(3)STC-ISP串口调试助手使用 直戳跳转

六、视频效果展示与程序资料获取

视频连接 直戳跳转
资料获取 ( 滑到最后添加个人号)

七、注意事项

1、VCC GND请勿接反,接反易烧
2、OLED显示异常时,排除接线接触不良

八、接线说明

STC89C52RC

UART:


/************************************************************************************
//  生成日期   : 2021-6-21
//  最近修改   : 2021-11-21
//  功能描述   : VL53L0X模块(UART)测试程序
//  测试条件   : STC89C52RC   晶振11.0592
接线
VL53L0X(UART)--------------------------STC89C52RC
VCC------------------------------------5V
GND------------------------------------GND
CT(TX) --------------------------------P3.0
DR(RX)---------------------------------P3.1

OLED0.96(IIC) -------------------------STC89C52RC
VCC------------------------------------5V
GND------------------------------------GND
SCL------------------------------------P1^3
SDA------------------------------------P1^2
*************************************************************************************/

IIC:

/************************************************************************************
//  生成日期   : 2021-6-21
//  最近修改   : 2021-11-21
//  功能描述   : VL53L0X模块(IIC)测试程序
//  测试条件   : STC89C52RC   晶振11.0592
接线
VL53L0X (IIC)--------------------------STC89C52RC
VCC------------------------------------5V
GND------------------------------------GND
CT(SCL)--------------------------------P1.1
DR(SDA)--------------------------------P1.0

OLED0.96(IIC) -------------------------STC89C52RC
VCC------------------------------------5V
GND------------------------------------GND
SCL------------------------------------P1.3
SDA------------------------------------P1.2
*************************************************************************************/

STM32F103C8T6

UART:


/************************************************************************************
//  生成日期   : 2021-6-21
//  最近修改   : 2021-11-21
//  功能描述   : VL53L0X模块(UART)测试程序
//  测试条件   : STM32F103C8T6   晶振8M  系统时钟72M
接线
VL53L0X模块(UART)----------------------STM32F103C8T6
VCC------------------------------------5V
GND------------------------------------GND
CT(TX) --------------------------------PA3
DR(RX)---------------------------------PA2

OLED0.96-------------------------------STM32F103C8T6
VCC------------------------------------3.3V
GND------------------------------------GND
SCL -----------------------------------PB6 
SDA------------------------------------PB7
*************************************************************************************/

IIC:


/************************************************************************************
//  生成日期   : 2021-6-21
//  最近修改   : 2021-11-21
//  功能描述   : VL53L0X模块(IIC)测试程序
//  测试条件   : STM32F103C8T6   晶振8M  系统时钟72M
接线
VL53L0X模块(IIC)-----------------------STM32F103C8T6
VCC------------------------------------5V
GND------------------------------------GND
CT(SCL) -------------------------------PB9
DR(SDA)--------------------------------PB8

OLED0.96-------------------------------STM32F103C8T6
VCC------------------------------------3.3V
GND------------------------------------GND
SCL -----------------------------------PB6 
SDA------------------------------------PB7
*************************************************************************************/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/361369.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

打印流、转换流、数据流 、随机访问流

Java知识点总结&#xff1a;想看的可以从这里进入 目录5、打印流6、转换流7、数据流8、随机访问流5、打印流 实现将基本数据类型的数据格式转化为字符串输出&#xff0c;它们提供了一系列重载的print()和println()方法&#xff0c;用于多种数据类型的输出&#xff0c;这种流不会…

基于react+typescript的前端组件库violet-design(字节青训营项目)

文章目录前言一、项目介绍&#x1f48c; 介绍特性兼容性&#x1f4e6; 安装使用 npm 安装使用 yarn 安装浏览器引入&#x1f528; 示例1. 引入样式2. 使用组件按需加载TypeScript✨ 组件&#x1f517; 链接二、项目实现2.1 技术选型2.2 架构设计2.2.1 目标用户和场景2.2.2 组件…

容器技术概述

容器化应用程序 软件应用程序通常依赖于运行时环境提供的其他库、配置文件或服务。软件应用程序的传统运行环境是物理主机或虚拟机&#xff0c;应用程序依赖项作为主机的一部分安装。 例如&#xff0c;考虑一个 Python 应用程序&#xff0c;它需要访问实现 TLS 协议的公共共享…

第 16 章_多版本并发控制

第 16 章_多版本并发控制 1. 什么是MVCC MVCC &#xff08;Multiversion Concurrency Control&#xff09;&#xff0c;多版本并发控制。顾名思义&#xff0c;MVCC 是通过数据行的多个版本管理来实现数据库的并发控制。这项技术使得在InnoDB的事务隔离级别下执行一致性读操作…

剑指 Offer 27. 二叉树的镜像

剑指 Offer 27. 二叉树的镜像 难度&#xff1a;easy\color{Green}{easy}easy 题目描述 请完成一个函数&#xff0c;输入一个二叉树&#xff0c;该函数输出它的镜像。 例如输入&#xff1a; 镜像输出&#xff1a; 示例 1&#xff1a; 输入&#xff1a;root [4,2,7,1,3,…

Office 365 备份与恢复

Microsoft Office 365中的不同服务几乎可以随时访问&#xff0c;这要归功于Microsoft的99.9%正常运行时间记录。但是&#xff0c;Office 365步履蹒跚的一个方面是提供了一种从意外数据丢失中恢复的方法。Microsoft 提供的数据保留功能并非适用于所有数据丢失情况的可行解决方案…

亿级高并发电商项目-- 实战篇 --万达商城项目 十二(编写用户服务、发送短信功能、发送注册验证码功能、手机号验证码登录功能、单点登录等模块)

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是小童&#xff0c;Java开发工程师&#xff0c;CSDN博客博主&#xff0c;Java领域新星创作者 &#x1f4d5;系列专栏&#xff1a;前端、Java、Java中间件大全、微信小程序、微信支付、若依框架、Spring全家桶 &#x1f4…

Leetcode力扣秋招刷题路-0082

从0开始的秋招刷题路&#xff0c;记录下所刷每道题的题解&#xff0c;帮助自己回顾总结 82. 删除排序链表中的重复元素 II 给定一个已排序的链表的头 head &#xff0c; 删除原始链表中所有重复数字的节点&#xff0c;只留下不同的数字 。返回 已排序的链表 。 示例 1&#…

这6个视频剪辑素材库,你一定要知道~

推荐5个免费商用视频素材网站&#xff0c;建议收藏哦&#xff01; 1、菜鸟图库 视频素材下载_mp4视频大全 - 菜鸟图库 网站素材量很大&#xff0c;有设计、图片、音频、视频等超多素材&#xff0c;大部分都能免费下载。视频素材都很高清&#xff0c;有自然、人物、科技、农业…

前端页面开发模块组织结构

模块组织 任何超过 1000 行的 CSS 代码,你都曾经历过这样的体验: 这个 class 到底是什么意思呢?这个 class 在哪里被使用呢?如果我创建一个 xxoo class,会造成冲突吗?Reasonable System for CSS Stylesheet Structure 的目标就是解决以上问题,它不是一个框架,而是通过…

Freemarker快速入门

freemarker提供很多指令用于解析各种类型的数据模型参考地址&#xff1a;http://freemarker.foofun.cn/ref_directives.html一.测试搭建Freemarker的运行环境并进行测试.1.添加Freemarker与SpringBoot的整合包XML <!-- Spring Boot 对结果视图 Freemarker 集成 --> <d…

互斥锁原理

如果有交互的公共数据区域&#xff0c;我们需要让一个进程先执行&#xff0c;一个进程后执行&#xff0c;互斥锁就是用锁的方式让他们的竞争关系变得有序。 临界区问题 临界区是在程序之间有公共数据交互时产生的区域&#xff0c;没有两个进程可以在它们各自的临界区同时执行…

我的 System Verilog 学习记录(1)

引言 技多不压身&#xff0c;准备开始学一些 System Verilog 的东西&#xff0c;充实一下自己&#xff0c;这个专栏的博客就记录学习、找资源的一个过程&#xff0c;希望可以给后来者一些借鉴吧&#xff0c;IC找工作的都加把油&#xff01; 本文是准备先简单介绍一下环境搭建…

C++11智能指针std::shared_ptr介绍及使用

介绍 shared_ptr是一种智能指针(smart pointer)&#xff0c;作用有如同指针&#xff0c;但会记录有多少个shared_ptrs共同指向一个对象。这便是所谓的引用计数(reference counting),比如我们把只能指针赋值给另外一个对象,那么对象多了一个智能指针指向它,所以这个时候引用计数…

洛谷P1125 [NOIP2008 提高组] 笨小猴 C语言/C++

[NOIP2008 提高组] 笨小猴 题目描述 笨小猴的词汇量很小&#xff0c;所以每次做英语选择题的时候都很头疼。但是他找到了一种方法&#xff0c;经试验证明&#xff0c;用这种方法去选择选项的时候选对的几率非常大&#xff01; 这种方法的具体描述如下&#xff1a;假设 maxn\…

【C++】2.类和对象(上)

1.面向过程和面向对象 C语言是面向过程的&#xff0c;关注的是过程&#xff0c;分析出求解问题的步骤&#xff0c;通过函数调用逐步解决问题。C是基于面向对象的&#xff0c;关注的是对象&#xff0c;将一件事情拆分成不同的对象&#xff0c;靠对象之间的交互完成。 2.类的引入…

【发版或上线项目保姆级心得】

第一步&#xff1a;先在正式环境创建数据库/新增表格或者字段 在数据库表中增加字段/表格&#xff0c;不会报错。 但是切记不要过早数据库字段/表格或者删除字段/表格 第二步&#xff1a;修改配置文件 先将正式环境需要的配置给写好&#xff0c;包括但不仅限于数据库配置、…

秋招面试问题整理之机器学习篇

文章目录随机森林在决策树的哪些方面做出了改进随机森林里每棵树的权重不一定会变成什么模型方差和偏差&#xff0c;正则化解决的是方差大还是偏差大的问题正则化的方法总结了解VC维吗svd了解吗随机森林在决策树的哪些方面做出了改进 回答思路&#xff1a; 随机森林和决策树有…

同步syslog日志到服务端

目录结构前言Windows下安装syslog服务端&#xff08;Syslog Watcher Manager&#xff09;Linux下syslog服务端搭建java同步日志代码块日志同步测试前言 系统同步日志到syslog服务器&#xff0c;此文章记录以下内容&#xff1a; Windows下syslog服务端&#xff08;Syslog Watc…

主食吃什么最健康?

又到了订饭的时候了&#xff0c;今天打算吃什么呢&#xff1f;面包&#xff1f;炒饭&#xff1f;面条&#xff1f;还是粥&#xff1f;上面说到的这些都是主食。大家都知道主食能带来很强的饱腹感&#xff0c;而且还是身体最重要、最经济的营养来源。但五谷杂粮&#xff0c;营养…