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 的错误排查使用ÿ…...
霞鹜文楷GB:为什么选择这款免费开源的中文国标字体?
霞鹜文楷GB:为什么选择这款免费开源的中文国标字体? 【免费下载链接】LxgwWenkaiGB An open-source Simplified Chinese font derived from Klee One. 项目地址: https://gitcode.com/gh_mirrors/lx/LxgwWenkaiGB 霞鹜文楷GB是一款基于日本Klee O…...
告别吃灰!用Kindle打造唐诗宋词字帖屏保的完整避坑指南(含繁简转换技巧)
用Kindle打造唐诗宋词字帖屏保的完整指南 作为一个长期关注数字阅读与传统文化的深度用户,我发现Kindle的墨水屏特性非常适合展示书法字帖。这种将现代科技与传统艺术结合的方式,不仅能提升设备使用率,还能在日常碎片时间中培养书写习惯。本文…...
如何通过Superalgos教育模块快速掌握算法交易:新手入门完整指南
如何通过Superalgos教育模块快速掌握算法交易:新手入门完整指南 【免费下载链接】Superalgos Superalgos/Superalgos: 是一个开源的分布式社交网络分析和数据挖掘平台。适合对大数据分析、机器学习、区块链以及分布式系统有兴趣的开发者。 项目地址: https://gitc…...
别再只用CEC2005了!手把手教你用MATLAB跑通CEC2017测试集(附完整代码)
从CEC2005到CEC2017:MATLAB实战迁移指南与性能优化技巧 当优化算法研究者还在使用CEC2005作为基准测试时,前沿论文早已转向更具挑战性的CEC2017测试集。这个转变不仅仅是数字上的更新,更代表着优化算法评估标准的一次重大飞跃。本文将带你从零…...
家常饺子·每家不一样
你家的馅,和我家的不一样 1. 食材清单(家家都有) 食材分类具体材料分量备注皮面粉3碗买现成的饺子皮也行水适量和面用馅猪肉馅1斤肥瘦三七开白菜或韭菜1把看你家爱吃什么姜末一点点葱花一小把盐1勺生抽1勺香油几滴 2. 核心步骤:…...
量子行走:从理论到Python实现——3. 量子门、电路与编程基础
目录 3. 量子门、电路与编程基础 3.1 单量子比特门 3.1.1 泡利门与旋转门 3.1.2 哈达玛门与相位门 3.2 多量子比特门 3.2.1 受控门 3.2.2 纠缠门与SWAP操作 3.3 量子电路构建与优化 3.3.1 电路表示与DAG结构 3.3.2 变分电路 3. 量子门、电路与编程基础 量子计算体系的…...
开源AI助手竟能自主建频道、做视频?李宏毅深度解析“小龙虾”的神秘工作原理!
最近全网爆火的「养龙虾」到底是什么?为什么一个开源的 AI 助理项目,能让 AI 自己创建 YouTube 频道、自己做教学视频、24 小时自主干活? 台大李宏毅老师的这堂《解剖小龙虾 — 以 OpenClaw 为例介绍 AI Agent 的运作原理》,用最通…...
NXP S32K3xx之HSE密钥管理与安全服务实战
1. HSE密钥管理基础:从零开始理解安全引擎 第一次接触NXP S32K3xx的HSE模块时,我被各种密钥术语搞得晕头转向。经过几个实际项目的打磨,现在我可以负责任地告诉你:理解HSE密钥管理就像学习一门新语言,掌握基础词汇后就…...
ESP32硬件定时器虚拟化:16路ISR定时器实现原理与工程实践
1. ESP32_New_TimerInterrupt 库深度解析:16路高精度硬件定时器中断的工程实践1.1 为什么嵌入式系统迫切需要此库在ESP32系列微控制器的实际工程开发中,硬件定时器资源极其稀缺且关键。标准ESP32芯片仅配备两组定时器组(Timer Group 0/1&…...
ubuntu系统检测内核配置是否支持Docker核心模块
有一些内核缺少 Docker 所需的核心模块(overlayfs、bridge、iptables 相关等)所以在安装docker之前可以先检查一下。 脚本,可以检测Kernel配置是否符合Docker的运行要求 源地址:https://github.com/moby/moby/blob/master/contr…...
