图1所示是传统的按键扫描方案,基带处理器的GPIO键盘控制或某些专用的键盘控制器都采取了这个方式。有些GPIO引脚设计成“列”输出端口,驱动开关矩阵;有些GPIO引脚设计成“行”输入端口,检测按键开关的闭合。通常,没有按键按下时,每个按键上都没有电压。一旦某个按键按下,键盘控制器开始扫描所有的按键。扫描动作通过逐渐升高“列”电压的同时,来轮询监测每“行”的输入电平。一个8 x 8的开关矩阵可经过64个时钟周期完成一遍扫描。时钟频率的范围可以设定在几十kHz到几MHz之间,“列”输出电平在系统的逻辑高和逻辑低之间切换。依据键盘控制器的供电电压,逻辑高电平可以从1.8V到3.3V变化。
Maxim的键盘控制器,如MAX7347/MAX7348/MAX7349、MAX7359和MAX7360采用一种独特的无源扫描方式,利用电流源驱动开关矩阵,并通过检测电流来检测按键动作。图3说明了无源按键扫描的工作原理。一旦按下一个按键,控制器便开始扫描所有按键。扫描时,在所有“列”端口施加电压约为0.5V的恒流源,控制器监测流过依次使能的每“行”电流。因为每一时刻只有一“列”检测到电流流过,所以,对于一个8 x 8开关矩阵,这种无源扫描方式也需要经过64个时钟周期完成扫描。在按键扫描期间,所有“列”电压都是静态的0.5V (有按键按下的列除外),在其对应的“行”端口处于扫描期间,该“列”电压降低到0V。