多个按键识别出短按、双击、长按的一种简单方案"/>
多个按键识别出短按、双击、长按的一种简单方案
几个普通按键实现复杂的功能在现在的嵌入式系统中应用非常常见,一方面是为了考虑到硬件平台的大小,毕竟现在的东西越来越小巧(功能相同的情况下越小越显得高逼格);另一方面是按键太多会影响平台的美观性和适用性,毕竟要是一个平台上面有一大堆按键会加大工作人员学习难度,在这种情况下很容易发生误操作。
最近在忙一个网上接的小项目,做着做着客户提了许多新功能,但麻烦的事当初画板子的时候没有考虑到这些(是我的原因,在画板之前没有考虑周全)。项目原来只需要控制继电器按照设定的时间通断,然后提示本次是否有错误,想着挺简单的就接了。结果做着做着客户居然还要能保存和读取测量错误的数据,顿时给我懵逼了。
数据存储的话就需要用到存储器,还好芯片有自带的EEPROM,可以把数据存在这里面。麻烦的是如何控制把存进去的错误数据读出来。按照最初的要求我只设置了两个拨码开关负责通道的通断,普通按键只有三个负责修改时间和循环次数。普通按键三个分别实现:当前位选数值+1、当前位选数值-1、当前位选向左移位。至于调整的那个通道就看拨码开关哪个是打开的状态(这里双通道都打开不能识别反而不执行任何动作)。
把更新后的要求仔细分析了一下发现如果一个按键一个功能的话需要用到14个普通按键(具体功能如下):
按键一 | 通道一时间参数修改; |
按键二 | 通道一循环次数参数修改; |
按键三 | 读取通道一当前次数存储的的错误数据; |
按键四 | 读取通道一所有存储的的错误数据; |
按键五 | 清除通道一存储的数据; |
按键六 | 通道二时间参数修改; |
按键七 | 通道二循环次数参数修改; |
按键八 | 读取通道二当前次数存储的的错误数据; |
按键九 | 读取通道二所有存储的的错误数据; |
按键十 | 清除通道二存储的数据; |
按键十一 | 数码管位选移位; |
按键十二 | 数码管位选数值+1; |
按键十三 | 数码管位选数值-1; |
按键十四 | 已修改的参数保存; |
很明显不可能用这么多的按键,14个按键看着都头晕,只得另寻他法。在网上看了一篇如何实现按键单击、双击、长按的帖子上面还有详细的程序和注释(链接如下:单片机按键识别篇---单击---双击----长按 - 一切都会好 - 博客园)。顿时发现我的这14个功能都不是是个事,一个按键三个状态,三个按键就可以组合成27个状态,这对于我这点需求不是轻而易举。
至于如何实现单按键识别三种状态网上有很多,基本都是差不多的原理,我这里就不详细说明了。我这里详
更多推荐
多个按键识别出短按、双击、长按的一种简单方案
发布评论