一、原理图
此处考点分析:可能会在引用iic文件时需要自己在头文件定义SCL/SDA
sbit sda = P2^1;
sbit scl = P2^0;
二、思维导图
三、代码示例
#include "iic.h"
#include "smg.h"
unsigned int adc_value = 0; //AIN3的采样数据
float adc_volt = 0; //AIN3的换算电压
//PCF8591电压采样处理函数
unsigned char Read_PCF8591_AIN3()
{
unsigned char tmp;
I2CStart();
I2CSendByte(0x90); //PCF8591的写设备地址
I2CWaitAck();
//选择AD转换通道
I2CSendByte(0x03); //AIN3通道,可调电阻电压
I2CWaitAck();
I2CStop();
SMG_Info(); //数码管显示函数,等待电压转换完成
I2CStart();
I2CSendByte(0x91); //PCF8591的读设备地址
I2CWaitAck();
//读出AD采样数据
tmp = I2CReceiveByte();
I2CSendAck(0); //产生应答信号
I2CStop();
return tmp;
}
//电压数据应用分析处理
void App_Volt()
{
unsigned char i;
//采样通道3的电压
adc_value = 0;
for(i = 0; i < 3; i++)
{
adc_value += Read_PCF8591_AIN3();
}
adc_value = adc_value / 3;
//将ADC采样到的数据换算成对应的电压值
adc_volt = adc_value * (5.0 / 255);
}
从PCF8591模数转换器中采样AIN3通道的数据,并将采样数据转换为对应的电压值,可以为后续电压数据的应用分析提供基础。
对PCF8591模数转换器进行电压采样处理,并将采样到的数据转换为对应的电压值。下面是对代码的详细分析:
unsigned int adc_value = 0;
:定义了一个无符号整型变量adc_value
,用于存储AIN3通道的采样数据。float adc_volt = 0;
:定义了一个单精度浮点型变量adc_volt
,用于存储AIN3通道的换算电压。
函数Read_PCF8591_AIN3()
:
- 该函数用于从PCF8591模数转换器中读取AIN3通道的采样数据。
- 首先通过I2C通信协议向PCF8591发送写设备地址0x90,并选择AD转换通道为AIN3。
- 然后等待电压转换完成。
- 再次通过I2C通信协议向PCF8591发送读设备地址0x91,读取AD采样数据并返回。
函数App_Volt()
:
- 该函数用于处理采样到的电压数据。
- 首先将
adc_value
清零,然后循环3次调用Read_PCF8591_AIN3()
函数进行采样,并累加到adc_value
中。 - 将累加后的
adc_value
除以3,得到平均值作为最终的采样数据。 - 将采样数据乘以5.0除以255,得到对应的电压值,并存储在
adc_volt
变量中,实现了将ADC采样数据转换为电压值的功能。