51单片机从零到实战(13)——毕设常用ADC模块
2026/7/23 22:01:27 网站建设 项目流程

第 13 篇:ADC 模数转换——让单片机"感知"模拟世界

温度、光线、声音、电压——这些是连续的"模拟量"。ADC 把它们变成单片机懂的"数字量"。STC89C52 没有内置 ADC,我们用 PCF8591 模块(I2C 接口,¥5)。


1. PCF8591 读取模拟电压

#definePCF8591_ADDR0x90unsignedcharpcf8591_read(unsignedcharchannel){unsignedcharval;i2c_start();i2c_write_byte(PCF8591_ADDR);// 写命令i2c_write_byte(0x40|channel);// 单端输入 + 通道选择i2c_start();i2c_write_byte(PCF8591_ADDR|1);// 读命令i2c_read_byte(1);// 第一个是上次的值,丢弃val=i2c_read_byte(1);// 这才是本次值i2c_stop();returnval;// 0~255 对应 0~5V}

2. 电位器读取电压

VCC ── 电位器两端 ── GND 中间脚 → PCF8591 AIN0 旋转电位器 → 电压从 0V 变到 5V → ADC 值从 0 变到 255
unsignedcharadc_val=pcf8591_read(0);// 通道 0floatvoltage=adc_val*5.0f/255.0f;// 转成电压printf("ADC: %u, Voltage: %.2fV\r\n",adc_val,voltage);

3. 光敏电阻 / 热敏电阻读取

光敏电阻和热敏电阻是阻值随光照/温度变化的电阻,通过分压电路变成电压:

VCC ── 光敏电阻 ──┬── PCF8591 AIN1 │ 10kΩ (固定电阻) │ GND 光照越强 → 光敏电阻越小 → AIN1 电压越高 → ADC 值越大

下一篇:PWM 输出——控制电机和灯光

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询