K_A14_003 基于STM32等单片机驱动APDS9960手势运动模块 串口与OLED0.96双显示

news2024/11/27 7:36:05

K_A14_003 基于STM32等单片机驱动APDS9960手势运动模块 串口与OLED0.96双显示

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

请添加图片描述

一、资源说明

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

其他资料目录 直戳跳转

二、基本参数

参数

请添加图片描述

引脚说明

APDS9960手势运动模块引脚说明
VCC正极 3.3/5V供电
GND负极 接GND
SCLIIC时钟线
SDAIIC数据线
INT中断输出

三、驱动说明

时序

请添加图片描述

对应程序:

以51为例

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

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

void APDS9960_IIC_start(void)  
{

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

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

void APDS9960_IIC_stop(void) 
{

		IIC_SCL = 1;
		IIC_SDA = 0;
		IIC_SDA = 1;	//通讯停止
		IIC_SCL = 0;

}
/****************************************************************
//接收应答信号函数
*****************************************************************/

uint8_t APDS9960_IIC_Get_ack(void)
{
		uint16_t CNT;

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

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

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

void APDS9960_IIC_ACK(void)	
{ 

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

}
//非应答

void APDS9960_IIC_NACK(void)
{ 

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

}

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

void APDS9960_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_SCL = 1; //一个时钟信号送入数据
				IIC_SCL = 0;
				Data = Data << 1;//数据左移一位,把次高位放在最高位,为写入次高位做准备
		}
		IIC_SDA = 0;		//应答处理前拉低,跳过应答

}
/****************************************************************
//从IIC总线读取一个字节的数据函数
*****************************************************************/

uint8_t APDS9960_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;				//拉高时钟线,开始读取下一位数据
				if(IIC_SDA == 1)		//如果数据线为高平电平。
				{
						Data = Data|0x01;	//则给缓冲字节的最低位写1。
				}
				IIC_SCL = 0;				//拉低时钟线,一位读取完成
		}
		return Data;					//返回读取的一个字节数据。



}


//读指定地址数据
uint8_t APDS9960_ReadWord(uint8_t* pBuffer, uint8_t ReadAddr, uint16_t NumByteToRead)
{  
	APDS9960_IIC_start();
	APDS9960_IIC_write_byte(APDS9960_I2C_ADDR);
	APDS9960_IIC_Get_ack();				//接收应答	
	APDS9960_IIC_write_byte(ReadAddr);
	APDS9960_IIC_Get_ack();				//接收应答	
	
	APDS9960_IIC_start();
	APDS9960_IIC_write_byte(APDS9960_I2C_ADDR+1);
	APDS9960_IIC_Get_ack();				//接收应答	
	while(NumByteToRead)  
  {
		*pBuffer = APDS9960_IIC_read_byte();
		if(NumByteToRead == 1)
    {
				/* Disable Acknowledgement */
				APDS9960_IIC_NACK();

				/* Send STOP Condition */
				APDS9960_IIC_stop();


		}
		else
		{
			APDS9960_IIC_ACK();
		}
		 pBuffer++; 
		 NumByteToRead--; 
	}
	return 1;
}
uint8_t APDS9960_WriteByte(uint8_t addr,uint8_t APDS_Data) 
{
		APDS9960_IIC_start();
		APDS9960_IIC_write_byte(APDS9960_I2C_ADDR);
		APDS9960_IIC_Get_ack();				//接收应答	
		APDS9960_IIC_write_byte(addr);
		APDS9960_IIC_Get_ack();				//接收应答	
		
		APDS9960_IIC_write_byte(APDS_Data);
		APDS9960_IIC_Get_ack();				//接收应答		
		return 1;
}

四、部分代码说明

1、接线引脚定义

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

1.1、STC89C52RC+APDS9960手势运动模块

//APDS9960手势运动模块引脚定义
sbit IIC_SDA = P1^0;      //数据线
sbit IIC_SCL = P1^1;      //时钟线

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

1.2、STM32F103C8T6+APDS9960手势运动模块


//GPIOB
#define IIC_SDA_PIN   				GPIO_Pin_8  //								
#define IIC_SCL_PIN    				GPIO_Pin_9			// 

//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

/************************************************************************************
//  生成日期   : 2021-6-21
//  最近修改   : 2021-11-21
//  功能描述   : APDS9960手势运动块测试程序
//  测试条件   : STC89C52RC   晶振11.0592
接线
APDS9960手势运动-----------------------STC89C52RC
VCC------------------------------------5V
GND------------------------------------GND
SCL------------------------------------P1^1
SDA------------------------------------P1^0

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

STM32F103C8T6

/************************************************************************************
//  生成日期   : 2021-6-21
//  最近修改   : 2021-11-21
//  功能描述   : APDS9960手势运动块测试程序
//  测试条件   : STM32F103C8T6   晶振8M  系统时钟72M
接线
APDS9960手势运动 ---------------------STM32F103C8T6
VCC------------------------------------3.3V
GND------------------------------------GND
SCL -----------------------------------PB9
SDA------------------------------------PB8

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

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

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

相关文章

实例解析Java反射

反射是大多数语言里都必不不可少的组成部分&#xff0c;对象可以通过反射获取他的类&#xff0c;类可以通过反射拿到所有方法&#xff08;包括私有&#xff09;&#xff0c;拿到的方法可以调用&#xff0c;总之通过“反射”&#xff0c;我们可以将Java这种静态语言附加上动态特…

【OpenCV】车牌自动识别算法的设计与实现

写目录一. &#x1f981; 设计任务说明1.1 主要设计内容1.1.1 设计并实现车牌自动识别算法&#xff0c;基本功能要求1.1.2 参考资料1.1.3 参考界面布局1.2 开发该系统软件环境及使用的技术说明1.3 开发计划二. &#x1f981; 系统设计2.1 功能分析2.1.1 车辆图像获取2.1.2 车牌…

研报精选230303

目录 【个股230303中泰证券_李子园】李子园&#xff1a;甜牛奶行业龙头&#xff0c;全国化加速推进中【行业230303中国银河】医药月报23or02&#xff1a;集采持续推进&#xff0c;控费仍是政策主基调【行业230303国联证券】银行行业专题研究&#xff1a;财富管理月报&#xff1…

征集令!寻找别出心裁的i.MX9352应用方案Demo

想要体验NXP全新的i.MX 9352这颗高性价比处理器吗&#xff1f;想要展示由你亲手打造的超炫酷的应用方案Demo吗&#xff1f;想要领取至高500元的京东E卡奖励吗&#xff1f;现在飞凌嵌入式全都给到你&#xff01;面向全体工程师征集基于飞凌嵌入式OK-MX9352-C开发板设计的优质应用…

【Linux】Shell详解

&#x1f60a;&#x1f60a;作者简介&#x1f60a;&#x1f60a; &#xff1a; 大家好&#xff0c;我是南瓜籽&#xff0c;一个在校大二学生&#xff0c;我将会持续分享Java相关知识。 &#x1f389;&#x1f389;个人主页&#x1f389;&#x1f389; &#xff1a; 南瓜籽的主页…

Flutter Button 实例

大家好&#xff0c;我是 17。 在上篇文章 使用 Flutter Button 介绍了如何修改 button 的样式&#xff0c;本文来具体实践一下。 本文列举一些常用的 button 效果&#xff0c;以便在用到的时候方便使用。因为 ElevatedButton 最常用&#xff0c;所以大多以 ElevatedButton 举…

wifi 概率性自动断线(IpReachabilityMonitor)和 案例介绍

IpReachabilityMonitor机制,有时候会遇到用户反馈wifi 会概率性自动断线,最后发现是系统有开启IpReachabilityMonitor 机制,可能是在干扰严重环境下或相对弱信号下让系统误判导致下断线。 这篇博主写的非常好.wifi 概率性自动断线(IpReachabilityMonitor)_lost_provision…

Cesium+Vue3+vite 环境搭建(nvm安装使用),以及简单上手

目录 【nvm的安装和使用】 1、安装nvm 2、配置nvm 3、测试 一、Vite项目 1、创建一个新的Vite项目 解决问题&#xff1a;npm ERR! Unexpected token . 2、安装Cesium插件 3、项目配置 【1】在vite.config.js里进行配置 【2】清空style.css 【3】在App.vue里面进行全…

深度剖析指针(下)——“C”

各位CSDN的uu们你们好呀&#xff0c;今天小雅兰的内容还是我们的指针呀&#xff0c;上两篇博客我们基本上已经把知识点过了一遍&#xff0c;这篇博客就让小雅兰来带大家看一些和指针有关的题目吧&#xff0c;现在&#xff0c;就让我们进入指针的世界吧 复习&#xff1a; 数组和…

利用Albumentations工具包进行图像的数据增强(以yolo数据标注格式为例)

最近在看数据增强方法时&#xff0c;看到了这个有趣的工具包&#xff0c;研究了下并以yolo数据标注格式为例写了一个示例脚本。 该工具最大的好处是会根据你使用的数据增强方法自动修改标注框信息&#xff01; import albumentations as A import cv2 import os""&…

【摄像头模块】口罩识别功能调试问题总结

文章目录一. 初始化二.程序烧录三.识别是否佩戴口罩小项目中常用到摄像头模块&#xff0c;文章内容疑问&#xff0c;可以私信交流 一. 初始化 1.初始界面为版本号&#xff0c;以及SD卡识别 如果未出现此界面&#xff0c;则可以按板子上的RST键&#xff0c;或者重新刷固件 …

C++动态规划之最长上升子序列

1 子序列与上升子序列1.1 子序列一个序列A{a1,a2,...an}中任意删除若干项&#xff0c;剩余的序列叫做A的一个子序列。例如序列A{1,3,5,4,2}&#xff0c;删除其中的第3项和第5项&#xff0c;得到序列B{1,3,4}&#xff0c;删除其中的第3项和第4项&#xff0c;得到序列C{1&#xf…

详述java的设计模式(三)

1.装饰者模式 装饰者模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其结构。这种类型的设计模式属于结构型模式&#xff0c;它是作为现有的类的一个包装。 使用场景&#xff1a; 在不影响其他对象的情况下&#xff…

使用Python免费试用最新Openai API

一、背景介绍 3月2日凌晨&#xff0c;OpenAI放出了真正的ChatGPT API&#xff0c;不是背后的GPT-3.5大模型&#xff0c;是ChatGPT的本体模型&#xff01;ChatGPT API价格为1k tokens/$0.002&#xff0c;等于每输出100万个单词&#xff0c;价格才2.7美金&#xff08;约18元人民…

数据可视化展示:打工人常见职业病,颈腰椎病占比最高达66.51%

身体健康才是一切的根本。只有身体健健康康才能更好的去享受世间的美好&#xff0c;无论是谁都应当注重身体健康&#xff0c;而不是无度的挥霍它&#xff01; 良好的身体&#xff0c;释放给工作&#xff0c;健壮的体魄&#xff0c;享受美好生活&#xff0c;良好的心态&#xff…

2023年独立站建站平台有哪些?

在当今互联网时代&#xff0c;网站已经成为了人们展示自我、宣传企业、交流信息的重要平台。如果您想要打造自己的网站&#xff0c;但是没有足够的技术和设计经验&#xff0c;那么独立站建站平台可能是一个不错的选择。下面介绍一些常见的独立站建站平台。 WordPress&#xff…

活动回顾(PPT+视频)|全球人工智能开发者先锋大会 Jina AI 的现场直击!

2 月 25 - 26 日&#xff0c;全球人工智能开发者先锋大会&#xff08;GAIDC&#xff09;在上海临港中心成功举办&#xff0c;Jina AI 的高级算法工程师参加「 AI 工程化 MLOps 论坛」为大家带来精彩的主题演讲《多模态 AI 应用开发新范式》&#xff0c;开源集市迎来近 500 位小…

Python机器学习实战(一)

文章目录基于逻辑回归实现乳腺癌预测基于k-近邻算法实现鸢尾花分类基于决策树实现葡萄酒分类基于朴素贝叶斯实现垃圾短信分类基于支持向量机实现葡萄酒分类基于高斯混合模型实现鸢尾花分类基于主成分分析实现鸢尾花数据降维基于奇异值分解实现图片压缩基于逻辑回归实现乳腺癌预…

谷歌seo独立站搜索引擎优化指南【2023新版】

作为一个拥有十年操作经验的个人站长&#xff0c;我认为SEO是网站优化的核心&#xff0c;它可以帮助我们的网站在搜索引擎上获得更高的排名和更多的流量。在本篇文章中&#xff0c;我将分享我的谷歌SEO独立站搜索引擎优化指南&#xff0c;希望对您有所帮助。 一、关键词研究 关…

Invalid <url-pattern> [sso.action] in filter mapping

Tomcat 8.5.86版本启动web项目报错Caused by: java.lang.IllegalArgumentException: Invalid <url-pattern> [sso.action] in filter mapping 查看项目的web.xml文件相关片段 <filter-mapping><filter-name>SSOFilter</filter-name><url-pattern&g…