薄膜开关矩阵按键在嵌入式产品中很常见,4x4、5x5、8x8等规格都被广泛使用。当主控MCU的GPIO资源紧张时,工程师通常会用移位寄存器或IO扩展器来扩展按键扫描端口。74HC595是最常见的串行输入并行输出移位寄存器,配合少量MCU引脚就能实现8x8甚至更大规模的矩阵扫描。这种方案的优势是布线简单、成本低,但需要考虑扫描时序和功耗平衡。
硬件连接上,74HC595需要三条控制线:数据线SER、时钟线SRCLK、锁存线RCLK。MCU通过SPI或软件模拟SPI向74HC595写入扫描码,扫描码锁存后驱动矩阵的行线;同时通过另一组引脚或移位寄存器读取矩阵的列线状态。整个扫描周期通常在5到10毫秒,按键抖动和长按判定都在MCU端软件处理。
软件实现的关键是扫描时序的设计。一种常见做法是周期性扫描,每隔10到20毫秒完成一次完整的矩阵扫描。扫描时先输出扫描码、读取列线状态、保存按键映射、去抖动判定、然后进入下一个周期。另一种是中断驱动扫描,利用定时器中断触发扫描,可以避免主循环中的阻塞,适合RTOS或事件驱动架构。
低功耗场景下需要特别注意扫描的能耗。74HC595在静态保持时电流很小,但时钟切换瞬间会有动态功耗。如果扫描频率过高,整体功耗会上升。建议扫描频率设定在50到100Hz,既能维持按键响应速度又能控制功耗。对于电池供电的产品,可以考虑按键唤醒机制,平时MCU休眠,按键中断唤醒后再启动扫描。
按键消抖有硬件和软件两种方案。硬件消抖需要在外围添加RC滤波电路,会增加BOM成本;软件消抖通过采样时间窗口或计数器实现,几乎不增加成本。常用的软件消抖算法是延迟采样或N中取M策略,前者实现简单但响应速度慢,后者响应快但需要更多采样点。
按键长按和组合键的实现也有细节。长按通常通过按键持续时间判断,超过设定阈值(比如1秒)后触发长按事件;组合键需要同时检测多行多列的状态,扫描时需要为每个按键组合预留状态空间。复杂按键逻辑下,建议建立按键事件队列而不是直接调用处理函数,这样可以避免按键扫描任务和业务任务之间的耦合。
回到工程实践,74HC595扩展矩阵扫描是一种成熟的低成本方案,特别适合GPIO紧张的MCU和按键数量较多的面板。设计时重点关注扫描时序、消抖算法和功耗平衡三个方面,结合具体的应用场景做参数调优。

常见问题
问:74HC595扩展的矩阵按键最大能支持多少个?
答:单片74HC595提供8路输出,理论上8x8=64个按键;级联两片可支持8x16;级联越多时钟频率要求越高,扫描周期也会变长。
问:扫描频率应该设置多大?
答:通常50到100Hz既能平衡响应速度又能控制功耗;具体频率要看按键响应要求和功耗预算。
问:软件消抖如何选择延迟时间?
答:典型延迟时间为5到20毫秒;机械按键的抖动持续时间通常小于5毫秒,但考虑温度和老化因素建议留有余量。
问:组合键如何避免误触发?
答:在按键事件队列中加入组合键状态判定,只有当所有组成按键都达到按下状态时才触发;按下顺序和持续时间也要作为判定条件。