蓝桥杯单片机快速开发笔记——PCF8591电压信号探测器(可调电阻Rb2电压)和采样光敏电阻

一、原理图

    此处考点分析:可能会在引用iic文件时需要自己在头文件定义SCL/SDA

sbit sda = P2^1;
sbit scl = P2^0;

二、思维导图

三、代码示例

#include "iic.h"
#include "smg.h"

unsigned int adc1_value = 0;     //AIN1的采样数据
float adc1_volt = 0;             //AIN1的换算电压
unsigned int adc3_value = 0;     //AIN3的采样数据
float adc3_volt = 0;             //AIN3的换算电压


//PCF8591电压采样处理函数
unsigned char Read_PCF8591_ADC(unsigned char ain)
{
	unsigned char tmp;
	I2CStart();
	I2CSendByte(0x90);    //PCF8591的写设备地址
	I2CWaitAck();
	//选择AD转换通道
    if(ain == 1)
    {
      I2CSendByte(0x01); //通道1,光敏电阻电压
    }
    else if(ain == 3)
    {
      I2CSendByte(0x03); //通道3,可调电阻电压
    }    
	I2CWaitAck();
	I2CStop();
	SMG_Info();  //数码管显示函数,等待电压转换完成
	I2CStart();
	I2CSendByte(0x91);    //PCF8591的读设备地址
	I2CWaitAck();
	//读出AD采样数据
	tmp = I2CReceiveByte();
	I2CSendAck(0);        //产生应答信号
	I2CStop();
	return tmp;
}

//采样光敏电阻和可调电阻的电压数据应用分析处理
void App_Volt()
{
	unsigned char i;
	//采样通道3的电压
	adc3_value = 0;
	for(i = 0; i < 3; i++)
	{
		adc3_value += Read_PCF8591_ADC(3);
	}
	adc3_value = adc3_value / 3;
	//将ADC采样到的数据换算成对应的电压值
	adc3_volt = adc3_value * (5.0 / 255);
	
    unsigned char n;
	//采样通道1的电压
	adc1_value = 0;
	for(n = 0; n < 3; n++)
	{
		adc1_value += Read_PCF8591_ADC(1);
	}
	adc1_value = adc1_value / 3;
	//将ADC采样到的数据换算成对应的电压值
	adc1_volt = adc1_value * (5.0 / 255);
}

       从PCF8591模数转换器中采样AIN3通道和AIN1通道的数据,并将采样数据转换为对应的电压值,可以为后续电压数据的应用分析提供基础。

       

  1. Read_PCF8591_ADC(unsigned char ain)函数用于从PCF8591模数转换器中读取ADC采样数据。在函数中:

    • 发送起始信号,并发送PCF8591的写设备地址。
    • 根据传入的参数ain选择AD转换通道,如果ain为1,则选择通道1(光敏电阻电压),如果为3,则选择通道3(可调电阻电压)。
    • 等待电压转换完成,调用SMG_Info()函数进行数码管显示。
    • 发送起始信号,并发送PCF8591的读设备地址。
    • 读出AD采样数据,产生应答信号,停止信号,并返回读取的数据。
  2. App_Volt()函数用于应用分析处理采样到的电压数据。在函数中:

    • 通过循环采样通道3的电压数据,并计算平均值,然后将ADC采样到的数据换算成对应的电压值。
    • 类似地,采样通道1的电压数据,并计算平均值,然后将ADC采样到的数据换算成对应的电压值。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024,这些优质可视化大屏素材,承包你一整年的可视化项目

可视化设计一直以来是个难题。如果不知道方法论、没有相关资源&#xff0c;那即使熬了几个大夜&#xff0c;掉了一地头发&#xff0c;设计出来了的东西也只会落个遭人嫌弃的下场。 所以&#xff0c;为了帮助大家提高可视化开发效率&#xff0c;快速制作出美观的可视化效果&…

luceda ipkiss教程 63:器件端口延伸ExtendPorts

案例分享&#xff1a;通过picazzo3库中的ExtendPorts函数实现器件的端口延伸 如&#xff1a; 所有代码如下&#xff1a; from si_fab import all as pdk from ipkiss3 import all as i3 from picazzo3.container.extend_ports import ExtendPorts# Building the MMI PCell wi…

C语言例:整型常量025,求解十进制和十六进制

1. 八进制数的每一位乘以对应的权值&#xff08;8的幂&#xff09;&#xff0c;然后将结果相加&#xff0c;得到十进制数。 025 21 2.八进制先转二进制&#xff08;一变三&#xff09;&#xff0c;再二进制转十六进制&#xff08;四合一&#xff09; 025 0001 0101 0…

Unity类银河恶魔城学习记录11-1 p103 Item源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili ItemData.cs using System.Collections; using System.Collections.Generi…

vue3+ts动态表单渲染,antd的useForm改造

let fieldList: any getFormFields(fieldInfo.coreNavigationList[0].list[0].list,fieldInfo.positionCodeRespVO,isCanBeUpdateProcess.value,isDetail.value 1); fieldInfo数据格式&#xff1a; {"name": "默认模板","status": "ENA…

03、判断和循环

三、判断与循环 文章目录 三、判断与循环顺序结构分支结构If语句在程序中就是用来判断的switch 循环结构forwhiledo while 顺序结构 顺序结构是Java程序默认的执行流程&#xff0c;按照代码的先后顺序&#xff0c;从上到下依次执行。 分支结构 If语句在程序中就是用来判断的 …

opc客户端

支持opc&#xff0c;da&#xff0c;ua通信&#xff08;匿名登陆及用户登陆&#xff09; 支持批量节点数据监听&#xff0c;当数据有变化时更新 支持单个节点读取和写入 KeepServer做为modbus server keepserver通信配置 https://blog.csdn.net/xiaochenXIHUA/article/detail…

高通推出第三代骁龙8s移动平台,首款终端预计将于3月面市

2024年3月18日&#xff0c;圣迭戈——高通技术公司今日宣布推出第三代骁龙8s移动平台&#xff0c;为更多Android旗舰智能手机带来骁龙8系平台上最广受欢迎的特性&#xff0c;实现非凡的顶级移动体验。这款全新旗舰级平台的主要特性包括支持强大的终端侧生成式AI功能、始终感知的…

操作系统核心知识点大梳理

计算机结构 现代计算机模型是基于-冯诺依曼计算机模型 计算机在运行时&#xff0c;先从内存中取出第一条指令&#xff0c;通过控制器的译码&#xff0c;按指令的要求&#xff0c;从存储器中取出数据进行指定的运算和逻辑操作等加工&#xff0c;然后再按地址把结果送到内存中去…

【Leetcode-21合并两个有序链表】

题目详情&#xff1a; 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1&#xff1a; 输入&#xff1a;l1 [1,2,4], l2 [1,3,4] 输出&#xff1a;[1,1,2,3,4,4]示例 2&#xff1a; 输入&#xff1a;l1 [], l2 […

由浅到深认识C语言(4):数组

该文章Github地址&#xff1a;https://github.com/AntonyCheng/c-notes 在此介绍一下作者开源的SpringBoot项目初始化模板&#xff08;Github仓库地址&#xff1a;https://github.com/AntonyCheng/spring-boot-init-template & CSDN文章地址&#xff1a;https://blog.csdn…

市场复盘总结 20240318

仅用于记录当天的市场情况&#xff0c;用于统计交易策略的适用情况&#xff0c;以便程序回测 短线核心&#xff1a;不参与任何级别的调整&#xff0c;采用龙空龙模式 一支股票 10%的时候可以操作&#xff0c; 90%的时间适合空仓等待 二进三&#xff1a; 进级率中 36% 最常用…

【LeetCode每日一题】303. 区域和检索 - 数组不可变

文章目录 [303. 区域和检索 - 数组不可变](https://leetcode.cn/problems/range-sum-query-immutable/)思路&#xff1a;前缀和代码&#xff1a; 303. 区域和检索 - 数组不可变 思路&#xff1a;前缀和 1.因为要根据给出的两个索引&#xff0c;来返回索引区间的和 2.创建一个…

选Gitee还是GitHub?

2024年3月18日&#xff0c;周一晚上 我选择GitHub 因为GitHub可以无限创建仓库

电脑装win11(作si版)

装win11经历 前言&#xff1a;因为我的u盘今天到了&#xff0c;迫不及待试试装机 然后在一系列准备好工具后&#xff0c;便是开始拿学校的机房电脑来试试手了~~ 前期准备 下载好win11镜像&#xff08;可以去微软官网下载&#xff09; 下载Rufus工具 https://www.lanzoue.com/…

Qt学习--继承(并以分文件实现)

基类 & 派生类 一个类可以派生自多个类&#xff0c;这意味着&#xff0c;它可以从多个基类继承数据和函数。定义一个派生类&#xff0c;我们使用一个类派生列表来指定基类。类派生列表以一个或多个基类命名。 总结&#xff1a;简单来说&#xff0c;父类有的&#xff0c;子…

【Chapter1】操作系统概述,计算机操作系统教程,第四版,左万利,王英

文章目录 一、操作系统的基本概念1.1操作系统的层次结构1.2操作系统的运行视图1.3操作系统的概念(定义)1.4操作系统的功能和目标1.4.1操作系统的功能和目标——作为系统资源的管理者1.4.2操作系统的功能和目标——向上层提供方便易用的服务1.4.2.1GUI&#xff1a;图形化用户接口…

力扣函数题:查找子字符串

//C语言strstr(str1,str2);判断字符串str2是否是str1的子串&#xff0c;是返回str1字符串从str2第一次出现的位置开始到str1结尾的字符串&#xff0c;否则返回NULLint numOfStrings(char ** patterns, int patternsSize, char * word){int n0;int i0;while(i<patternsSize){…

综合交易模型----可转债三低策略实盘qmt版,提供源代码

链接 综合交易模型----可转债三低策略实盘qmt版&#xff0c;提供源代码 (qq.com) 可转债3低策略是指选择正股市值低、转债余额低、溢价率低的可转债进行投资的策略。 市值低&#xff1a;指的是可转债对应的正股市场价值较小&#xff0c;这通常意味着需要较少的资金就可以对股价…

upload-labs-pass01

1.安装好环境进入关卡&#xff08;记得打开小皮&#xff09; 2.可以看到第一关是要求上传图片&#xff0c;但是同时限制了图片类型&#xff0c;那么如果我们将木马写入图片&#xff0c;但是类型又不在白名单&#xff0c;就要想办法绕过 3.可以看到这里的要求是有check&#xff…