改造说明:ADC 三通道综合显示(LCD1602 版)
由 23.1 电位器电压采集、23.2 光敏电阻 AD 采集、23.3 热敏电阻 AD 采集三个实验合成 ,
对应 B 站教程 16-1 AD/DA(P35)中的三路同时采集演示。
目录
💡 提示:在 Obsidian 中阅读时,也可直接用
[[TOC]]自动生成目录(随标题自动更新)。
一、实验现象
LCD1602 双行实时显示三路参数,互不干扰、同步刷新:
第1行:Pot:2.50V ← 电位器电压(0.00V ~ 5.00V,两位小数)
第2行:Lig:2048 Th:1024 ← 光敏电阻 AD 值 | 热敏电阻 AD 值(0~4095)

Pot 是 Potentiometer(电位器)的缩写------全名太长,工程师日常就直接喊"pot",就像把 resistor 喊成 "res" 一样。

- 旋动电位器 → 电压值连续变化
- 手遮/强光照射光敏电阻 → 光敏 AD 值反向变化
- 手捏升温/放开降温热敏电阻 → 热敏 AD 值变化
二、接线说明(无需新增接线)
| 模块 | 接口 | 占用引脚 |
|---|---|---|
| XPT2046 AD 模块 | 开发板 AD 模块接口 | CS=P3.5, CLK=P3.6, DIN=P3.4, DOUT=P3.7 |
| LCD1602 | 开发板 LCD 接口 | RS=P2.6, RW=P2.5, E=P2.7, D0~D7=P0 |
电位器、光敏电阻、热敏电阻都在同一块 XPT2046 AD 模块上,
把 AD 模块和 LCD1602 同时插上开发板即可,无需飞线。
三、通道映射(关键知识点)
XPT2046 是 12 位串行 ADC,命令字节高四位选通道:
| 命令字 | 通道 | 信号源 | 说明 |
|---|---|---|---|
0x94 |
AD0 | 电位器 | 分压电压 0~5V,可换算为实际电压 |
0xA4 |
AD1 | 光敏电阻 | 光线越强,AD 值越小 |
0xD4 |
AD2 | 热敏电阻 | 温度越高,AD 值越小(NTC) |
四、代码要点
- 三通道轮流读取 :
xpt2046_read_adc_value(0x94/0xA4/0xD4),一次循环读三路。 - 电压换算 :
电压 = 5.0 × AD / 4096。
为避免浮点,代码放大 100 倍用整数算:pot_mv = (u16)((u32)pot_ad * 500 / 4096)。 - AD 值格式化 :
format_ad_value()把 0~4095 补成 4 位字符串(右对齐),
保证 LCD 上数字位置固定、不跳动。 - 刷新间隔 :
delay_ms(100),变化肉眼可辨。
五、编译与烧录
- Keil5 C51 打开
template.uvproj,Rebuild(已验证 0 Error)。 - STC-ISP 下载
Obj/template.hex,单片机型号 STC89C52RC。
六、工程结构
23.5-ADC三通道综合显示(LCD)/
├── User/main.c ← 综合主程序(本次新写)
├── App/lcd1602/ ← LCD1602 驱动(复用 25 实验)
├── App/xpt2046/ ← XPT2046 驱动(复用 23.1)
├── Public/ ← 公共延时与类型定义
├── template.uvproj ← Keil 工程(含 lcd1602 + xpt2046 两组)
└── Obj/template.hex ← 编译产物