本文摘要:0章节 一般的按键驱动程序一般来说非常简单。
0章节 一般的按键驱动程序一般来说非常简单。在程序中一旦检测到按键输出口为低电平时,就使用软件延时10ms后再度检测按键输出口。如果依然是低电平则回应有按键按下,之后转至继续执行按键处理程序;否则,当按键输出口为高电平,就不会退出本次按键的检测,新的开始一次按键检测过程。
这种方式不仅由于使用了软件延时而使得MCU的效率减少,同时也不更容易同系统中其他功能模块协商工作,且系统的实时性也劣。本文把单个按键作为一个非常简单的系统,根据状态机的原理对其动作的操作者和证实的过程展开分析,后用状态图回应出来,然后根据状态图续写按键模块程序。 1基于状态机的非常简单按键驱动设计 在一个嵌入式系统中,按键的操作者是随机的。
为了提升CPU的工作效率,在设计按键驱动的时候,利用S3C2440的外部中断来构建对按键的处置。很显著,系统的输出信号与按键相连的I/O口电平,1回应按键正处于对外开放状态,0回应按键正处于开口状态。
而系统的输入信号则回应检测和证实到一次按键的开口操作者,用1回应。 图1得出了一个非常简单按键状态机的状态切换图。 在图中,将1次按键原始的操作者分解成为3个状态。其中,状态0为按键的初始状态,当按键输出为1时,回应按键正处于对外开放,输入0(I/0),下一状态仍为状态0;当按键输出为0时,回应按键开口,但输入还是0(没经过消抖,无法证实按键确实按下),下一状态进入状态1。
状态1为按键开口证实状态,它回应在10ms前按键为开口的,因此当再度检测到按键输出为0时,可以证实按键被按下了(经过10ms的消抖);输入1则回应证实按键开口(0/1),下一状态进入状态2。而当再度检测到按键的输出为1时,回应按键有可能处在晃动阻碍;输入为0(I/0),下一状态回到到状态0。
这样,利用状态1,构建了按键的消抖处置。状态2为等候按键获释状态,因为只有等按键获释后,一次原始的按键操作过程才算已完成。 对图1的分析由此可知,在一次按键操作者的整个过程中,按键的状态就是指状态0状态1状态2,最后回到到状态0的,并且在整个过程中,按键的输入信号仅有在状态1时得出了唯一的一次证实按键开口的信号1,其他状态皆输入0。
因此,图1状态机所回应的按键系统,不仅解决了按键晃动的问题,同时也保证在一次按键的整个过程中,系统只输入一次按键开口信号(1)。
本文来源:best365·官网(中文版)登录入口-www.anartant.com