K_A12_003 基于STM32等单片机采集光敏二极管模块参数 串口与OLED0.96双显示
K_A12_003 基于STM32等单片机采集光敏二极管模块参数 串口与OLED0.96双显示
- 一、资源说明
- 二、基本参数
- 参数
- 引脚说明
- 三、驱动说明
- IIC地址/采集通道选择/时序
- 对应程序:
- 四、部分代码说明
- 1、接线引脚定义
- 1.1、STC89C52RC+光敏二极管模块
- 1.2、STM32F103C8T6+光敏二极管模块
- 五、基础知识学习与相关资料下载
- 六、视频效果展示与程序资料获取
- 七、注意事项
- 八、接线说明
- STC89C52RC
- STM32F103C8T6
一、资源说明
单片机型号 | 测试条件 | 模块名称 | 代码功能 |
---|---|---|---|
STC89C52RC | 晶振11.0592M | 光敏二极管模块 | STC89C52RC采集光敏二极管模块参数 串口与OLED0.96双显示 |
STM32F103C8T6 | 晶振8M/系统时钟72M | 光敏二极管模块 | STM32F103C8T6采集光敏二极管模块参数 串口与OLED0.96双显示 |
其他资料目录 直戳跳转
二、基本参数
参数
1、可以检测周围环境的亮度和光强(与光敏电阻比较,方向性比较好,可以感知 固定方向的光源)
2、灵敏度可调(图中蓝色数字电位器调节)
3、工作电压 3.3V-5V
4、输出形式
a 模拟量电压输出
b 数字开关量输出(0 和 1)
引脚说明
光敏二极管模块 | 引脚说明 |
---|---|
VCC | 正极 3.3-5V供电 |
GND | 负极 接GND |
DO | 数字量输出 |
AO | 模拟量输出 |
三、驱动说明
STC89C52RC无ADC所以需要借助外部ADC模块 此处用PCF8591模块进行采集
IIC地址/采集通道选择/时序
对应程序:
以51为例
/*******************************************************************起动总线函数
函数原型: void Start_I2c();
功能: 启动I2C总线,即发送I2C起始条件.
********************************************************************/
void Start_I2c()
{PCF8591_SDA=1; /*发送起始条件的数据信号*/PCF8591_SCL=1;IIC_Delay();PCF8591_SDA=0; /*发送起始信号*/IIC_Delay(); PCF8591_SCL=0; /*钳住I2C总线,准备发送或接收数据 */IIC_Delay();
}/*******************************************************************结束总线函数
函数原型: void Stop_I2c();
功能: 结束I2C总线,即发送I2C结束条件.
********************************************************************/
void Stop_I2c()
{PCF8591_SDA=0; /*发送结束条件的数据信号*/PCF8591_SCL=1; /*结束条件建立时间大于4μs*/IIC_Delay();PCF8591_SDA=1; /*发送I2C总线结束信号*/IIC_Delay();
}/*******************************************************************字节数据发送函数
函数原型: void SendByte(UCHAR c);
功能: 将数据c发送出去,可以是地址,也可以是数据,发完后等待应答,并对此状态位进行操作.(不应答或非应答都使ack=0) 发送数据正常,ack=1; ack=0表示被控器无应答或损坏。
********************************************************************/
void SendByte(uint8_t c)
{uint8_t BitCnt;for(BitCnt=0;BitCnt<8;BitCnt++) /*要传送的数据长度为8位*/{if((c<<BitCnt)&0x80)PCF8591_SDA=1; /*判断发送位*/else PCF8591_SDA=0; PCF8591_SCL=1; /*置时钟线为高,通知被控器开始接收数据位*/IIC_Delay(); PCF8591_SCL=0; }IIC_Delay();PCF8591_SDA=1; /*8位发送完后释放数据线,准备接收应答位*/IIC_Delay(); PCF8591_SCL=1;IIC_Delay();if(PCF8591_SDA==1)ack=0; else ack=1; /*判断是否接收到应答信号*/PCF8591_SCL=0;IIC_Delay();
}/*******************************************************************字节数据接收函数
函数原型: UCHAR RcvByte();
功能: 用来接收从器件传来的数据,并判断总线错误(不发应答信号),发完后请用应答函数应答从机。
********************************************************************/
uint8_t RcvByte()
{uint8_t retc;uint8_t BitCnt;retc=0; PCF8591_SDA=1; /*置数据线为输入方式*/for(BitCnt=0;BitCnt<8;BitCnt++){PCF8591_SCL=0; /*置时钟线为低,准备接收数据位*/IIC_Delay();PCF8591_SCL=1; /*置时钟线为高使数据线上数据有效*/IIC_Delay();retc=retc<<1;if(PCF8591_SDA==1)retc=retc+1; /*读数据位,接收的数据位放入retc中 */IIC_Delay();}PCF8591_SCL=0; IIC_Delay();return(retc);
}/********************************************************************应答子函数
函数原型: void Ack_I2c(bit a);
功能: 主控器进行应答信号(可以是应答或非应答信号,由位参数a决定)
********************************************************************/
void Ack_I2c(uint8_t a)
{if(a==0)PCF8591_SDA=0; /*在此发出应答或非应答信号 */else PCF8591_SDA=1;IIC_Delay(); PCF8591_SCL=1;IIC_Delay();PCF8591_SCL=0; /*清时钟线,钳住I2C总线以便继续接收*/IIC_Delay();
}采集通道选择:
ISendByte(PCF8591,0x42);地址:
#define PCF8591 0x90 //PCF8591 地址
四、部分代码说明
1、接线引脚定义
需要自定义引脚可在此处更改,STM32要自定义引脚的话也要注意引脚时钟使能的更改
1.1、STC89C52RC+光敏二极管模块
//光敏二极管模块+PCF8591模块引脚定义
光敏二极管模块----------------------PCF8591
AO--------------------------------AIN2sbit PCF8591_SCL=P1^0; //I2C 时钟
sbit PCF8591_SDA=P1^1; //I2C 数据
//OLED0.96模块引脚定义
sbit SCL=P1^2; //串行时钟
sbit SDA=P1^3; //串行数据
1.2、STM32F103C8T6+光敏二极管模块
//光敏二极管模块引脚定义 GPIOA_0 ADC1通道0
#define ADC_GPIO_APBxClock_FUN RCC_APB2PeriphClockCmd
#define ADC_GPIO_CLK RCC_APB2Periph_GPIOA
#define ADC_PORT GPIOA
#define ADC_PIN GPIO_Pin_0
//OLED0.96模块引脚定义
//-----------------OLED IIC端口定义---------------- #define OLED_SCLK_Clr() GPIO_ResetBits(GPIOB,GPIO_Pin_8)//SCL
#define OLED_SCLK_Set() GPIO_SetBits(GPIOB,GPIO_Pin_8)#define OLED_SDIN_Clr() GPIO_ResetBits(GPIOB,GPIO_Pin_9)//SDA
#define OLED_SDIN_Set() GPIO_SetBits(GPIOB,GPIO_Pin_9)
五、基础知识学习与相关资料下载
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
// 功能描述 : 光敏二极管模块测试程序
// 测试条件 : STC89C52RC 晶振11.0592
接线
光敏二极管模块---------------------------STC89C52RC
VCC------------------------------------5V
GND------------------------------------GND
光敏二极管模块--------------------------PCF8591
AO-------------------------------------AIN2PCF8591--------------------------------STC89C52RC
VCC-- ---------------------------------5V
GND- ----------------------------------GND
SCL- ----------------------------------P1.0 //SCL
SDA- ----------------------------------P1.1 //SDAOLED0.96(IIC) -------------------------STC89C52RC
VCC------------------------------------5V
GND------------------------------------GND
SCL------------------------------------P1^2
SDA------------------------------------P1^3
*************************************************************************************/
STM32F103C8T6
/************************************************************************************
// 生成日期 : 2021-6-21
// 最近修改 : 2021-11-21
// 功能描述 : 光敏二极管模块测试程序
// 测试条件 : STM32F103C8T6 晶振8M 系统时钟 72M
接线
光敏二极管模块----------------------------STM32F103C8T6
VCC-------------------------------------3.3V
GND-------------------------------------GND
AO--------------------------------------PA_0 OLED0.96
VCC-- -----------------------------------3.3V
GND- ------------------------------------GND
SCL- ------------------------------------PB_8 //SCL
SDA- ------------------------------------PB_9 //SDA
*****************************************************************************************/
相关文章:

K_A12_003 基于STM32等单片机采集光敏二极管模块参数 串口与OLED0.96双显示
K_A12_003 基于STM32等单片机采集光敏二极管模块参数 串口与OLED0.96双显示一、资源说明二、基本参数参数引脚说明三、驱动说明IIC地址/采集通道选择/时序对应程序:四、部分代码说明1、接线引脚定义1.1、STC89C52RC光敏二极管模块1.2、STM32F103C8T6光敏二极管模块五、基础知识…...
天才少年稚晖君
稚晖君 简介主要成就华为天才少年简介 彭志辉,1993年出生于江西吉安,科技圈知名KOL,人称“稚晖君”“野生钢铁侠”,原华为天才少年。 2015年本科毕业于电子科技大学生命科学与技术学院;2018年研究生毕业于电子科技大学信息与通信工程学院;毕业后就职于OPPO研究院AI实验…...

【Linux command 09】tcpdump 命令
tcp一款sniffer工具,是Linux上的抓包工具,嗅探器语法tcpdump (选项)选项-c: 指定要抓取的包数量。注意,是最终要获取这么多个包。例如,指定"-c 10"将获取10个包,但可能已经处理了100个包…...
初始结构体
🚀🚀🚀大家觉不错的话,就恳求大家点点关注,点点小爱心,指点指点🚀🚀🚀 目录 🏡前言 🐰结构体的基础知识 🐰结构体的声明 &#x…...
English Learning - Day56 作业打卡 2023.2.10 周五
English Learning - Day56 作业打卡 2023.2.10 周五引言1. 他把车停错了地方,因此被罚了款。2. 这个事我越想越生气。3.他在这工作的时间比我长。4. 没有奋斗,就不会变强大。5.我一到北京就给你打电话。6. 直到我有了孩子,才意识到我的父母有…...
Python中五个不常见的隐晦用法小结
1. 引言 我已经用Python编程5年了(从2017年开始),直到最近才知道以下几个Python中不常见的用法,确实和人们对直观理解有所出入。 闲话少说,我们直接开始吧! 2. 类中的私有变量不是真正的私有 我们直接上…...

SharkTeam:Move合约开发与合约安全
近期,围绕 Aptos 和 Sui,新兴的高性能 L1链 以及这些新链背后的 Move 智能合约编程语言引起了很多关注,社区也非常活跃,很多开发者和项目已经开始积极转向 Move。但Move相对Solidity差别较大,即使是相对比较接近的Rust…...

一篇文章学习什么是进程(万字解析,超多知识点)
目录进程概念进程控制块-PCBPCB的内容分类标识符查看进程信息的方法状态fork函数进程状态R运行状态(running)S睡眠状态(sleeping)D磁盘休眠状态(Disk sleep)T停止状态(stopped)X死亡…...

第01章_数据库概述
第01章_数据库概述 讲师:尚硅谷-宋红康(江湖人称:康师傅) 官网:http://www.atguigu.com 1. 为什么要使用数据库 持久化(persistence):把数据保存到可掉电式存储设备中以供之后使用。大多数情况下&#x…...
我所理解的高通UEFI之display的流程和移植
UEFI的流程UEFI跟uboot一样在OS加载启动之前,正确的指定启动服务,并向内核传递信息,代替原先的uboot。它包含了上电、驱动实现,以及os环境的建立和应用程序(类似于fastboot)。这个os是UEFI自己独立运行独有…...
iozone -a fsync: I/O error
iozone -a fsync: I/O error iozone: interrupted exit iozone 问题表现是手机老化后重启不开机。检查不开机Log,发现/data/system/packages.xml文件有损坏,pull 离线日志,发现出问题前后的日志也不能pull,pull出来的离线日志解压…...

Element UI框架学习篇(五)
Element UI框架学习篇(五) 1 准备工作 1.1 在zlz包下创建数据传输对象类EmpDTO package com.zlz.dto;import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;//根据前台来的 Data public class EmpDTO {private String name;private Stri…...

SpringBoot 全局异常处理用法及原理
SpringBoot 全局异常处理用法及原理 Springboot或springMVC项目中, 我们一般会设置一个全局异常处理, 来对异常进行兜底。 业务代码执行过程中抛出的异常, 如果业务逻辑没有主动捕获,那么异常就会一直往上抛,最后进入…...
浏览器中HTTP请求流程是如何处理的
HTTP 是一种允许浏览器向服务器获取资源的协议,是 Web 的基础,通常由浏览器发起请求,用来获取不同类型的文件,例如 HTML 文件、CSS 文件、JavaScript 文件、图片、视频等。 浏览器端发起 HTTP 请求流程: 1. 构建请求…...

【Pytorch项目实战】之语义分割:U-Net、UNet++、U2Net
文章目录博主精品专栏导航一、前言1.1、什么是图像分割?1.2、语义分割与实例分割的区别1.3、语义分割的上下文信息1.4、语义分割的网络架构二、网络 数据集2.1、经典网络的发展史(模型详解)2.2、分割数据集下载三、算法详解3.1、U-Net3.1.1、…...
七、插件机制
Interceptor MyBatis 插件模块中最核心的接口就是 Interceptor 接口,它是所有 MyBatis 插件必须要实现的接口,其核心定义如下: public interface Interceptor {// 插件实现类中需要实现的拦截逻辑Object intercept(Invocation invocation) …...

kmp算法
前缀函数 π[i]maxk0,⋯,i{k∣s[0,⋯,k−1]s[i−(k−1),⋯,i]}\pi\left[i\right] \max\limits_{k 0,\cdots, i}\left\{k|s\left[0,\cdots,k-1\right] s\left[i-\left(k-1\right) ,\cdots, i\right]\right\} π[i]k0,⋯,imax{k∣s[0,⋯,k−1]s[i−(k−1),⋯,i]} 简单来说…...
【Python】正则表达式简单教程
0x01 正则表达式概念及符号含义 掌握正则表达式,只需要记住不同符号所表示的含义,以及对目标对象模式(或规律)的正确概括。 1、基础内容 字符匹配 在正则表达式中,如果直接给出字符,就是精确匹配。\d 匹…...

SAP ABAP Odata
GetEntity和GetEntitys GetEntitys 创建Odata Project 导入结构 选择需要的字段 设定Key 勾选字段的creatable、updatable、sortable、nullable、filterable属性值。 再依上述步骤创建ZPOITEM结构和实体集 3. 创建ZPOHEADER和ZPOITEM的Association 两个实体集的关联字段&…...
Android native ASAN 排查内存泄漏
一、概述 android 对native - c/c 的调试和排查是比较难受的一件事。我看周遭做window , linux 甚至ios的调试排查起c的代码都比较方便。习惯了app开发去熟悉native是各种痛苦,最主要是排查问题上。后续有时间打算整理下native 的错误排查使用ÿ…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...
Cesium1.95中高性能加载1500个点
一、基本方式: 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》
在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中࿰…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具
文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序
一、开发环境准备 工具安装: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 项目初始化: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...
【决胜公务员考试】求职OMG——见面课测验1
2025最新版!!!6.8截至答题,大家注意呀! 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:( B ) A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

OPENCV形态学基础之二腐蚀
一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...
Java 二维码
Java 二维码 **技术:**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...