MAX6959是4位、9段LED驱动器,可自动扫描并消除8个按键开关的抖动,通过一个中断引脚通知系统处理器消除键抖(引脚兼容的MAX6958可以驱动相同数量的LED,但没有键盘扫描功能)。本文介绍的扩展按键扫描方案(从8键扩展到12键)需要在附加键上增添双二极管。
表1. MAX6959 LED显示驱动器的标准8键连接
图1. MAX6959 LED显示驱动器的标准8键连接
表1和图1给出了MAX6959的标准8键连接。键切换电路按照2 x 4矩阵(2列、4行)读取8个按键的状态。键盘阵列的4行由4个LED阴极驱动器输出(DIG0/SEG0至DIG3/SEG3)驱动。作为多层LED驱动的一部分,这些LED阴极驱动输出依次拉至低电平320µs (标称值) (顺序驱动LED)。这些驱动器输出分别用来拉低键开关的一端,键的另一端连接在两个输入端:INPUT1和INPUT2,这两个输入端从内部拉至MAX6959的高电平V+。按下开关时,INPUT1或INPUT2将由相应的DIG_/SEG_输出拉至低电平,MAX6959检测按键,并为按键提供去抖。
多个按键被同时按下时,与开关串联的二极管可以防止2个或多个LED阴极驱动输出短路。例如,同时按下Key0和Key1时,与按键串联的二极管可以避免DIG0/SEG0与DIG1/SEG1短路,因为在任何情况下至少有一个二极管为反向偏置。二极管采用的是低成本、共阳极的BAW56,SOT-23封装。
MAX6959随时判断8个按键按下或释放的动作,器件内部的8位寄存器指示这8个按键的状态。从这一点看,在MAX6959的设计中似乎没有办法扩展扫描电路,到此为止,大家可能会有一种“受骗”的感觉。
公平地讲,我们是在发掘一种冗余情况。许多应用中只需要了解某一个按键是否被按下。通常,同时按下两个按键的情况被认为是错误的键输入,或者是进入工厂诊断模式。这种两个按键同时按下的情况即为“冗余”情况,我们把4个增添的按键连接成好像某一对儿键被同时按下的情况,如表2所示。例如,当Key8按下时,对于MAX6959而言,所表现出来的状态与Key0和Key4同时按下的情况相同。只要每对儿按键(如Key0和Key4)的物理位置不相邻,这种扩展架构即可有效工作。软件设计应保证在30.3ms的最小去抖周期内响应按键的IRQ,保证每个对应于按键扫描的结果都经过适当的分析处理。如果软件对IRQ响应较慢,将无法区分同时按下两个按键的情况(鉴别增添的按键状态)和顺序按下相同的两个按键的情况。无论是哪种情况,按键去抖寄存器0 x 08将简单地显示每个键位置位。
表2. MAX6959 LED显示驱动器扩展后的12键连接
图2所示电路,每个附加按键需要一个双二极管(如低成本、共阴极的BAV70,SOT-23封装), 按下开关时,INPUT1和INPUT2被同时拉低。
图2. MAX6959 LED显示驱动器扩展后的12键连接
最后,值得注意的是:增添的4个按键的连接方式模拟的是两个按键同时按下的情况,这两个按键连接在四个LED阴极驱动器输出的某个输出端,DIG0/SEG0至DIG3/SEG3。采用这种连接方式,每对儿按键总是在同一时间扫描或去抖。如果新增按键所模拟的同时按下的两个键由不同的LED阴极驱动输出扫描,这种工作方式将是不可靠的。因为键扫描是顺序执行的,一次两个按键,附加按键将会错过一个LED阴极驱动器的去抖周期,而在另一个周期去抖。这样,同时按下两个按键将表现为顺序按下两个按键的情况。采用本文推荐的连接方式可以避免这一问题,因为每对儿按键表现为双键同时去抖。