蓝桥杯单片机快速开发笔记——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采样到的数据换算成对应的电压值。
  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木木不迷茫(˵¯͒¯͒˵)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值