摘要:本应用笔记介绍了一种扩展扫描的方法,可以扩展MAX6954和MAX6955 LED显示驱动器的键盘扫描范围,从32键扩展到80键。
MAX6954/MAX6955是4线或2线串行接口的LED驱动器,可以控制7段、14段或16段LED或一个16x8的LED矩阵。驱动器还包括5个I/O扩展(GPIO)端口,以及用这些端口自动扫描32个按键、消除按键抖动的所有逻辑控制。另外一个功能选项是通过一个中断引脚通知系统处理器消除键抖。本文介绍的扩展按键扫描方案(从32键扩展到80或更多个按键)需要增添额外的二极管。
表1. MAX6954/MAX6955的标准32键连接
|
P0 |
P1 |
P2 |
P3 |
LED Output O0 |
SW A1 |
SW B1 |
SW C1 |
SW D1 |
LED Output O1 |
SW A2 |
SW B2 |
SW C2 |
SW D2 |
LED Output O2 |
SW A3 |
SW B3 |
SW C3 |
SW D3 |
LED Output O3 |
SW A4 |
SW B4 |
SW C4 |
SW D4 |
LED Output O4 |
SW A5 |
SW B5 |
SW C5 |
SW D5 |
LED Output O5 |
SW A6 |
SW B6 |
SW C6 |
SW D6 |
LED Output O6 |
SW A7 |
SW B7 |
SW C7 |
SW D7 |
LED Output O7 |
SW A8 |
SW B8 |
SW C8 |
SW D8 |
图1. MAX6954/MAX6955的标准32键连接
表1和图1给出了MAX6954/MAX6955的标准8键连接。键切换电路按照4 x 8矩阵(4列、8行)读取32个按键的状态。键盘阵列的8行由8个LED阴极驱动器输出(LED输出O0至LED输出O7)驱动。作为多层LED驱动的一部分,这些LED阴极驱动输出依次拉至低电平320µs (标称值)(顺序驱动LED)。这些驱动器输出分别用来拉低键开关的一端,键的另一端连接在4个输入引脚(P0至P3),这4个输入引脚从内部拉至MAX6954/MAX6955的高电平V+。按下开关时,P0、P1、P2或P3将由相应的LED输出Ox拉至低电平,MAX6954/MAX6955检测按键,并为按键提供去抖。
多个按键被同时按下时,与开关串联的二极管可以防止2个或多个LED阴极驱动输出短路。例如,同时按下SW A1和SW A2时,与按键串联的二极管可以避免LED输出O0与LED输出O1短路,因为在任何情况下至少有一个二极管为反向偏置。二极管采用的是低成本、共阳极的BAW56,SOT23封装。
MAX6954/MAX6955随时判断32个按键按下或释放的动作,器件内部仅为指示这32个按键的状态提供了寄存器。从这一点看,在MAX6954/MAX6955的设计中似乎没有办法扩展扫描电路,需要寻找一种全新的设计方案。
针对这种特殊情况,我们发掘了一种冗余情况。许多应用中只需要了解某一个按键是否被按下。通常,同时按下两个按键的情况被认为是错误的键输入,或者是进入工厂诊断模式。这种两个按键同时按下的情况是一种“冗余”情况,我们把新增按键连接成好像某一对儿键被同时按下的情况,表2和图2所示电路通过组合P0、P1、P2和P3扩充了16个按键。例如,当SW AB1按下时,对于MAX6954/MAX6955而言,所表现出来的状态与SW A1和SW B1同时按下的情况相同。只要每对儿按键(如SW A1和SW B1)的物理位置不相邻,这种扩展架构即可有效工作。软件设计应保证在MAX6954/MAX6955的最小去抖周期内响应按键的/IRQ,保证每个对应于按键扫描的结果都经过适当的分析处理。如果软件对/IRQ响应较慢,将无法区分同时按下两个按键的情况(鉴别增添的按键状态)和顺序按下相同的两个按键的情况。无论是哪种情况,按键去抖寄存器0x08-0x0B将简单地显示每个键位置位。
表2. MAX6954/MAX6955扩展后的48键连接
|
P0 |
P1 |
P2 |
P3 |
P0 & P1 |
P2 & P3 |
LED Output O0 |
SW A1 |
SW B1 |
SW C1 |
SW D1 |
SW AB1 |
SW CD1 |
LED Output O1 |
SW A2 |
SW B2 |
SW C2 |
SW D2 |
SW AB2 |
SW CD2 |
LED Output O2 |
SW A3 |
SW B3 |
SW C3 |
SW D3 |
SW AB3 |
SW CD3 |
LED Output O3 |
SW A4 |
SW B4 |
SW C4 |
SW D4 |
SW AB4 |
SW CD4 |
LED Output O4 |
SW A5 |
SW B5 |
SW C5 |
SW D5 |
SW AB5 |
SW CD5 |
LED Output O5 |
SW A6 |
SW B6 |
SW C6 |
SW D6 |
SW AB6 |
SW CD6 |
LED Output O6 |
SW A7 |
SW B7 |
SW C7 |
SW D7 |
SW AB7 |
SW CD7 |
LED Output O7 |
SW A8 |
SW B8 |
SW C8 |
SW D8 |
SW AB8 |
SW CD8 |
每个附加按键需要一个双二极管(如低成本、共阴极的BAV70,SOT-23封装), 按下开关时,P0和P1或P2和P3被同时拉低。
图2. MAX6954/MAX6955扩展后的48键连接
图2和表2通过组合P0、P1、P2和P3扩充了16个按键。实际上,对于P0-P3键扫描输入还存在另外四种可能的两键组合方式。如果使用了6种两键组合方式,按键数量将增加到80个,如表3所示。图3给出了6个附加按键在LED输出O0行的连接方式。每个附加按键需要一个双二极管。
表3. MAX6954/MAX6955扩展后的80键连接
|
P0 |
P1 |
P2 |
P3 |
P0 & P1 |
P0 & P2 |
P0 & P3 |
P1 & P2 |
P1 & P3 |
P2 & P3 |
LED Output O0 |
SW A1 |
SW B1 |
SW C1 |
SW D1 |
SW AB1 |
SW AC1 |
SW AD1 |
SW BC1 |
SW BD1 |
SW CD1 |
LED Output O1 |
SW A2 |
SW B2 |
SW C2 |
SW D2 |
SW AB2 |
SW AC2 |
SW AD2 |
SW BC2 |
SW BD2 |
SW CD2 |
LED Output O2 |
SW A3 |
SW B3 |
SW C3 |
SW D3 |
SW AB3 |
SW AC3 |
SW AD3 |
SW BC3 |
SW BD3 |
SW CD3 |
LED Output O3 |
SW A4 |
SW B4 |
SW C4 |
SW D4 |
SW AB4 |
SW AC4 |
SW AD4 |
SW BC4 |
SW BD4 |
SW CD4 |
LED Output O4 |
SW A5 |
SW B5 |
SW C5 |
SW D5 |
SW AB5 |
SW AC5 |
SW AD5 |
SW BC5 |
SW BD5 |
SW CD5 |
LED Output O5 |
SW A6 |
SW B6 |
SW C6 |
SW D6 |
SW AB6 |
SW AC6 |
SW AD6 |
SW BC6 |
SW BD6 |
SW CD6 |
LED Output O6 |
SW A7 |
SW B7 |
SW C7 |
SW D7 |
SW AB7 |
SW AC7 |
SW AD7 |
SW BC7 |
SW BD7 |
SW CD7 |
LED Output O7 |
SW A8 |
SW B8 |
SW C8 |
SW D8 |
SW AB8 |
SW AC8 |
SW AD8 |
SW BC8 |
SW BD8 |
SW CD8 |
图3. MAX6954/MAX6955扩展后的80键连接
为什么仅将“同时按下双键”作为判断附加按键的途径呢?3键和4键组合可用来替代双键按下的情况,表4给出了这种附加配置。需要注意的是,4-3组合键每组需要三个二极管,四组键需要4倍数量的二极管。
表4. 3键和4键连接
|
P0 & P1 & P3 |
P0 & P1 & P4 |
P0 & P2 & P3 |
P1 & P2 & P4 |
P0 & P1 & P2 &P3 |
LED Output O0 |
SW ABC1 |
SW ABD1 |
SW ACD1 |
SW BCD1 |
SW ABCD1 |
LED Output O1 |
SW ABC2 |
SW ABD2 |
SW ACD2 |
SW BCD2 |
SW ABCD2 |
LED Output O2 |
SW ABC3 |
SW ABD3 |
SW ACD3 |
SW BCD3 |
SW ABCD3 |
LED Output O3 |
SW ABC4 |
SW ABD4 |
SW ACD4 |
SW BCD4 |
SW ABCD4 |
LED Output O4 |
SW ABC5 |
SW ABD5 |
SW ACD5 |
SW BCD5 |
SW ABCD5 |
LED Output O5 |
SW ABC6 |
SW ABD6 |
SW ACD6 |
SW BCD6 |
SW ABCD6 |
LED Output O6 |
SW ABC7 |
SW ABD7 |
SW ACD7 |
SW BCD7 |
SW ABCD7 |
LED Output O7 |
SW ABC8 |
SW ABD8 |
SW ACD8 |
SW BCD8 |
SW ABCD8 |
排除3键和4键连接的一个最好理由是它们需要更多的二极管。如果应用中所需按键只是略高于32键的限制,则可首先选择本文推荐的方案。只是因为某些偶然因素,让用户找寻3键和4键的方案也是不可取的。
值得注意的是:每个扩充按键的连接方式模拟的是多个按键同时按下的情况,这些按键连接在同一LED阴极驱动器输出端(LED输出O0至LED输出O7)。采用这种连接方式,相关组合的按键总是在同一时间扫描或去抖。如果新增按键所模拟的同时按下的按键由不同的LED阴极驱动输出扫描,这种工作方式将是不可靠的。