2 软件实现
2.1 按键的抗干扰处理
通常当按键按下以后(不考虑人的操作因素),会有一个5-10ms的抖动期,用软件延时来进行去抖处理。当按键释放后才向主机发送数据,具体方法是用状态机,将按键过程分成以下几个状态S0—S4,如图4所示:
没有按钮动作时,检测线都为高电平,保持在S0状态;扫描面板,当某个按钮按下(相应检测线为低电平)进入S1状态;完成去抖延时(T0中断20次)后进入S2状态,再次扫描面板,检测到低电平且为同一个按钮(行、列线相同)进入S3状态,没有检测到低电平或者不为同一个按钮则再次进入S0状态;按钮释放后进入S4状态,给主机发送按钮编号,发送完成进入S0状态。
2.2 旋钮的抗干扰处理
与档位开关一样,旋钮转动一周会有若干停顿点。停顿点较少的旋钮[2][4]在停止转动时1、2脚总会处于一个稳定的低电平。而停顿点较多的旋钮在停止转动时则电平状态不定,1、2脚有可能处于高电平也可能处于低电平(如图1),所以不可用与之类似的任何检测电平状态的方法来判断旋钮的转动。
用示波器分析波形后得知,不管1、2脚最终状态如何,只要转动旋钮就会有电平变化,从高到低,或从低到高,所以选用动态的边沿扫描。除了在刚上电的时候需要扫描获得每个旋钮的初始状态,每过一段时间都要定时扫描旋钮状态,一旦有电平变化(上升沿/下降沿),就认为是一次有效的转动。定时的时间确定为1ms[5],因为即使很快转动旋钮的情况下,每次脉冲高电平宽度一般都有十几到几十毫秒。在设计时可用1个字的位向量pre_knob和cur_knob分别保存最近的两次扫描结果,每位对应一个旋钮。低电平时相应位置1,高电平置0,用下降沿判断(即10时)认为对应位的旋钮有转动。
2.3 旋钮转动量的计算
旋钮转动量的计算方法也是本文讨论的一个重点。旋钮转动的时候,可以转动一个停顿点就发一次,但会增加通信量和主机的处理负担,而且单片机的任务非常单一,即检测前面板的动作,资源利用也不多,因此可以用单片机计算出旋钮转动量后一起发送给主机。
方法是:给每个旋钮配置1个字节的发送缓冲保存转动量。每当旋钮转动一个停顿点,单片机就检测发送缓冲是否为空,不为空则将缓冲中的转动量加1,若为空则发送旋钮编号给主机,等待主机响应,此时旋钮继续转动,转动量不断增加,主机响应后再将发送缓冲里的转动量发送给主机,发送完成后清空缓冲。
3 结论
完成硬件和软件设计之后,仿真调试,烧录单片机,将电路板与PC机连接,操作电路板上的按钮和旋钮,结果表明按钮和旋钮识别及时准确,完全符合实时操作的要求。并已应用于课题组的数字存储大功率半导体管特性曲线图示仪中。
本文采用的面板设计具有成本低、周期短、可扩展、设计灵活、安全可靠等优点。可以根据实际需要增加功能按键,而不需要重做软件设计。可以为相关领域研究人员提供一种可供参考的面板设计方法。