原理

多个按键通过不同阻值的电阻连接到一个 ADC 输入口。

例如:

             VCC
              |
             R1
              |
              +------ ADC_IO
              |
             按键1
              |
             GND


             VCC
              |
             R2
              |
              +------ ADC_IO
              |
             按键2
              |
             GND

不同按键按下后,ADC 读取不同电压。

例如:

按键电阻ADC电压
无按键-3.3V
KEY11K0.3V
KEY22.2K0.8V
KEY34.7K1.4V
KEY410K2.2V

软件判断 ADC 值即可。


软件判断

例如 STM32 12bit ADC:

ADC范围:0~4095

KEY1:
0~400

KEY2:
600~1000

KEY3:
1200~1800

KEY4:
2200~2800

程序:

uint16_t adc;adc = HAL_ADC_GetValue(&hadc1);if(adc < 400)
{    KEY1();
}else if(adc < 1000)
{    KEY2();
}else if(adc < 1800)
{    KEY3();
}else if(adc < 2800)
{    KEY4();
}

优点

✅ 一个 IO 可以接几十个按键
✅ 成本低
✅ PCB简单
✅ 常用于产品量产

缺点:

❌ 必须使用 ADC
❌ 同时按多个键无法准确识别


方案二:矩阵键盘扫描(节省 IO)

例如 4×4 键盘:

        C1 C2 C3 C4

R1      □  □  □  □

R2      □  □  □  □

R3      □  □  □  □

R4      □  □  □  □

16个按键:

需要:

4个行IO
+
4个列IO

=8个IO

扫描:

拉低R1
读取C1-C4

拉低R2
读取C1-C4

...

优点:

✅ 可以检测多个按键
✅ 适合键盘

缺点:

❌ 需要多个 IO


方案三:电容触摸方式

利用触摸芯片:

例如:

  • TTP223

  • AT42QT

  • STM32 Touch

一个芯片可以管理多个触摸按键。

优点:

✅ 无机械按键寿命问题

缺点:

❌ 成本高一些


方案四:外部按键检测芯片

例如:

I2C按键扩展

按键
 |
PCF8574
 |
I2C
 |
MCU

一个 I2C:

SCL
SDA

可以扩展几十个按键。

常用:

  • PCF8574

  • MCP23017

  • TCA9535


方案五:电阻编码 + 普通 IO(无 ADC)

利用不同时间/脉冲编码:

例如:

按键:

KEY1 → 输出1个脉冲

KEY2 → 输出2个脉冲

KEY3 → 输出3个脉冲

MCU计数判断。

应用较少。


实际产品推荐

需求推荐方案
4~20个按键ADC电阻分压
几十个按键矩阵扫描
面板按键触摸
工业设备I2C扩展
成本最低ADC按键

ADC按键设计注意事项

1. 电阻不要差距太小

例如:

不好:

1K
1.2K
1.5K

ADC容易误判。

推荐:

1K
2.2K
4.7K
10K
22K

采用倍增关系。


2. 增加滤波

ADC输入:

        10K
VKEY ----/\/\/---- ADC

              |
             100nF
              |
             GND

可以减少按键抖动。


3. 留足电压间隔

例如3.3V系统:

不要设计:

KEY1 = 1.20V
KEY2 = 1.25V

建议:

至少:

300~500mV

间隔。


一个实际 8 键方案

3.3V
 |
10K
 |
 +------ ADC
 |
 +--KEY1--1K--GND
 |
 +--KEY2--2.2K--GND
 |
 +--KEY3--4.7K--GND
 |
 +--KEY4--10K--GND
 |
 +--KEY5--22K--GND

一个 ADC:

可以识别:

5~20个按键。


对于 STM32、AVR、PIC、8051 等单片机,ADC电阻分压按键是最经典、成本最低、量产最多的方案。如果是工业控制板,我一般推荐 ADC按键 + 软件滤波 + 长按/短按状态机,可靠性最高。