51单片机从零到实战(13)——毕设常用ADC模块

发布时间:2026/7/23 22:01:53
51单片机从零到实战(13)——毕设常用ADC模块 第 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);// 第一个是上次的值丢弃vali2c_read_byte(1);// 这才是本次值i2c_stop();returnval;// 0~255 对应 0~5V}2. 电位器读取电压VCC ── 电位器两端 ── GND 中间脚 → PCF8591 AIN0 旋转电位器 → 电压从 0V 变到 5V → ADC 值从 0 变到 255unsignedcharadc_valpcf8591_read(0);// 通道 0floatvoltageadc_val*5.0f/255.0f;// 转成电压printf(ADC: %u, Voltage: %.2fV\r\n,adc_val,voltage);3. 光敏电阻 / 热敏电阻读取光敏电阻和热敏电阻是阻值随光照/温度变化的电阻通过分压电路变成电压VCC ── 光敏电阻 ──┬── PCF8591 AIN1 │ 10kΩ (固定电阻) │ GND 光照越强 → 光敏电阻越小 → AIN1 电压越高 → ADC 值越大下一篇PWM 输出——控制电机和灯光