原创 嵌入式系统的按键扫描程序设计01

2010-3-30 22:06 2892 6 6 分类: MCU/ 嵌入式

<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />2009104星期日下午410<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


 


标题:嵌入式系统的按键扫描程序设计01


一、嵌入式键盘的种类


嵌入式系统中常用的键盘有三种类型:


1、线式键盘:每个按键对应一个IO口。


2、矩阵式键盘:当按键数目较多时,可以采用。


3、专用键盘:这种键盘本身有芯片对按键进行扫描,并形成一定格式的扫描码,用户程序通过中断或查询的方式读取该扫描码。


二、按键的工作方式


我手边现在的两个ARM开发板都只有简单按键,因此主要是关注线式键盘的工作方式和特点,结合我手机键盘上按键的功能,现在我关注的键盘实现有以下几种方式:


1单纯的一次按键操作:当按下该按键时,执行一个对应的功能函数。


这种功能的实现也有好几种方式:(1)中断,将IO口配置为中断,在中断服务子程序中执行功能函数。(2)中断,在中断中置标志位,在前台主循环中,根据标志执行相应的子程序。(3)查询,在主循环中不断查询IO口的状态,若发现被按下,则调用相应的功能子程序。(4)前面几种方式,都比较简单,而实现的按键工作方式也比较简单,如果应用程序采用操作系统,则可以借助操作系统的强大功能较好的处理按键,对于单次按键,可以很好的实现软件消除抖动,按键处理可以在按下时、也可以在释放时,也可以同时对按下和释放产生按键消息。以下较复杂的按键处理都在操作系统中实现。


2按键的短击和连击


这种情况按键消息在按下时产生,消抖确认后产生一次按键消息;按下时间超过一定值,则判断为连击:以后每隔一段较短时间,产生一次按键消息。这种连击主要用于嵌入式系统的参数调节,在没有可供直接输入参数的条件下,参数的改变只能通过按+-键调节,如果每按一次加1,那就太慢了,因此提供这种连击功能。


3按键的短击和长击实现


这种情况按键消息在释放时产生,在按下等待释放时进行时间累计,释放后根据按下时间的长短判读为短击或长击,发送对应的按键消息。我们比较常见的例子就是手机的关机功能,该案件短按时起挂断、返回作用,如果按键时间较长,则执行关机功能。这可以用软件扫描按键来实现。


4按键的单击和和双击


windows操作系统中,对双击用的很好。在嵌入式系统中,如果要利用较少的按键实现更多的控制方式,也可以引入按键的双击判断功能。不过这种实现起来可能比较麻烦,在我写这篇博文时,前面三种都已经实现了,双击的实现还在构思之中,暂时的思路是这样:利用状态机,该状态机有等待按下、延时确认1、延时确认2、等待释放、释放确认等待双击、双击确认、双击等待释放和双击释放八种状态,判读的关键:(1)等待释放阶段进行计时,在释放确认时如果时间较长,则直接输出单击消息,回到等待按键状态。(2)如果时间短,则在释放确认等待阶段继续计时,如果超时,则输出单击消息,回到等待按键状态。(3)如果在双击等待阶段检测到 按键的按下状态,则经延时确认输出双击消息。


5多键按下时候的处理问题


1)如果每个按键对应一个任务处理,这些按键可以相互独立,不受影响。但这样太浪费系统资源了。


2)如果几个按键接到同一个IO口,用一个任务进行处理多键按下的情况就比较麻烦。一个键先按下,在未释放时又按下了另一个键,涉及到后面按键如何判断的问题。由于现在开发板上没有这种键盘,这个问题暂时搁下。


6组合按键


这个问题,我反而觉得比较简单一点,线键盘中专门设置一个或两个按键作为组合功能键,其它作为普通功能键,平时并不去检测组合功能键,而只在按键确认时检测组合功能键是否按下,如果为按下状态,则发出组合按键消息;否则发单独按键消息。


 


未完待续

文章评论0条评论)

登录后参与讨论
我要评论
0
6
关闭 站长推荐上一条 /2 下一条