7.1 键盘与显示器接口


7.1 键盘与显示器接口

本节摘要:键盘与显示器是人机交互的两端——矩阵扫描用八根线管理六十四个键,动态扫描用一套口线轮流点亮多位数码管;两者共享同一个思想:时间上的复用换取硬件上的精简。

本章主线的正向旅程从这里出发。人的意图如何变成机器能处理的事件,机器的状态如何变回人能看见的光——这两条转化链上的电路与算法,是接口工程最经典的入门题,也是"复用"思想的最佳讲台。

指尖信号的硬件旅程

先看一个反直觉的算术:64 个键若每个独占一根输入线,需要 64 根口线,任何处理器都不肯接待。矩阵键盘的解法是把键安排在行列交叉点上:八根行线加八根列线,64 个键共用这 16 根线。每个键就是一个开关,按下时把对应的行与列接通——识别哪个键按下,变成了一场时间上轮流进行的问询。

扫描的流程四步。第一步,行线全部输出低电平,读列线:有列线为低,说明这一轮有键按下(也可能是抖动,稍后处理)。第二步,定位行列:把低电平逐行移动(其余行输出高电平),每次读列线,哪一行送出低电平时某列变低,行列坐标即告锁定。第三步,组合成键码:行列号拼成一个字节,查表得到字符。第四步,等待释放并去抖——否则一次按键会被重复识别成多次。

图 7-1:四乘四矩阵键盘的扫描定位

图 7-1:四乘四矩阵键盘的扫描定位

去抖动值得单独一提。机械触点闭合的瞬间会弹跳,电平在几毫秒内起伏数次——若按到即算,一次按键会被记成七八次。软件解法是"延时复测":首次检测到按下后延时十毫秒再读,两次一致才确认,释放同理。硬件解法用电阻电容滤掉高频毛刺,再用施密特触发器整形。量产设备倾向硬件去抖加中断通知,教学实验常用纯软件轮询——两条路线对应 CPU 预算的两种哲学。

扫描代码把流程落到纸面:

; 4 行 4 列矩阵扫描:返回键码 0 至 15,无键返回 FFH SCAN: MOV CL, 0FEH ; 行扫描字:R0 低,其余高 MOV CH, 0 ; 行计数 NEXT_ROW: MOV DX, ROW_PORT MOV AL, CL OUT DX, AL ; 当前行输出低 MOV DX, COL_PORT IN AL, DX ; 读列 AND AL, 0FH CMP AL, 0FH JNZ FOUND ; 有列变低,本行有键 ROL CL, 1 ; 低电平移到下一行 INC CH CMP CH, 4 JB NEXT_ROW MOV AL, 0FFH ; 无键 RET FOUND: ; CH 为行号,AL 低四位含列号,编码查表略 CALL DELAY_10MS ; 去抖 IN AL, DX ; 复测确认 AND AL, 0FH CALL ENCODE_KEY RET

显示端:动态扫描的光学把戏

显示器一侧的功课是反过来的:让有限的口线制造"同时点亮"的错觉。四位数码管若每位独立驱动需要三十二条段线;动态扫描只把各位的段线并联共用一套八根口线,位选线轮流使能——每一时刻只有一位真正点亮,只要轮流的速度超过人眼暂留的临界(每位约一至两毫秒、整轮刷新率过五十赫兹),看起来就是四位同时亮、各自显示各自的字符。段码表加位选轮转,代码结构与键盘扫描惊人地相似——又是同一个复用思想。

动态扫描有一个职业病值得预判:刷新率不足时显示会肉眼可见地闪烁,CPU 负担重时尤甚。扫描靠主循环空隙或定时中断驱动,若主循环某段代码霸占处理器太久,那一轮刷新就会掉拍。把显示扫描放进 8253 定时中断(6.4 的骨架原样适用),是工程上的一劳永逸。

案例展开。背景:学生作品在演示时数码管显示正常,一旦启动串口通信显示就闪烁。操作:测算两侧的时间预算——四位扫描一轮约需六毫秒,串口每字节中断一次、服务约零点三毫秒,通信时每秒近万次中断,累计占用尚不足以击穿刷新率;再查代码发现扫描被安排在主循环空隙执行,而通信期间主循环被长临界区反复打断,扫描节奏断裂。结果:把显示扫描挪进定时器中断,与通信中断按优先级排队,闪烁消失。解读:扫描类接口的命脉是节拍稳定,凡是"靠空隙吃饭"的时序逻辑,在系统繁忙时最先崩盘——节拍型任务必须由定时中断供养。变式:LED 点阵与大屏的扫描原理相同,只是位选换成了行驱动,刷新率预算要按行数重新摊——屏越大,越见这套方法的边界与代价。

连击、长按与显示的亮度账

识别只是开始,体验的细节都在后续状态机里。连击:手指按住不放,扫描程序会反复报同一键——打字机时代连击是缺陷,文本编辑里却是功能,系统的选择权在软件:设一个"重复触发"状态,按住超过五百毫秒后以固定节拍重复上报。长按与组合键:把按键事件交给一个带时间戳的状态机,长按、双击、组合都能定义成不同的状态转移——几十行的状态机换来完整的交互语法,是接口软件里性价比最高的一段代码。

显示端也有一笔亮度账。动态扫描的每位占空比是位数的倒数:八位轮流点亮,每位只有八分之一的时间在发光,平均亮度只有常亮的八分之一——限流电阻要按占空比重新核算,否则显示会莫名偏暗。刷新率与亮度是一对冤家:刷新率高了闪烁消失,但每位点亮时间更短、更暗。显示驱动的参数永远在这条线上找平衡点,加大驱动电流、换高亮器件都是为这个平衡点服务的。

高频追问两则

问:矩阵扫描会不会错过快速按键? 会——扫描周期的理论下限是按键最短按压时间的几分之一。人手按键最短也在几十毫秒量级,常规扫描周期几毫秒绰绰有余;但机械振动的场景(工业面板)要把按键时间与扫描周期重新对账,必要时上硬件锁存。错过键的排查思路与 5.4 的中断丢失如出一辙:又是"处理延迟对事件间隔"的数学题。

问:为什么不用并行口直接接八个键? 八个键可以,八十个不行——口线是硬件世界里最贵的资源之一。矩阵的本质是把口线需求从线性降为平方根,这个思想在存储扩展、显示驱动里反复出现,值得当成一条通用设计律记下来。

本节要点回顾

  • 矩阵是线数的除法:行列交叉把按键的口线需求开方,代价是时间上的轮流问询。
  • 去抖是必答题:弹跳五到十毫秒,软件延时复测或硬件整形,量产倾向前者外包给芯片。
  • 动态扫描是光学把戏:轮流点亮快过人眼暂留,口线需求从每位一套压到全体一套。
  • 节拍型任务归定时中断:扫描寄人篱下必然闪烁,独立的节拍供给才稳。

正向旅程走完,下一站反着走:物理世界的量如何经过触摸屏、传感器与音频接口,最终抵达人的感官。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U