电子发烧友App

硬声App

0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示
电子发烧友网>电子资料下载>嵌入式开发>基于状态机的简单按键驱动设计

基于状态机的简单按键驱动设计

2017-10-31 | rar | 0.6 MB | 次下载 | 1积分

资料介绍

 一般的按键驱动程序通常非常简单。在程序中一旦检测到按键输入口为低电平时,就采用软件延时10 ms后再次检测按键输入口。如果仍然是低电平则表示有按键按下,便转入执行按键处理程序;否则,当按键输入口为高电平,就会放弃本次按键的检测,重新开始一次按键检测过程。这种方式不仅由于采用了软件延时而使得MCU的效率降低,同时也不容易同系统中其他功能模块协调工作,且系统的实时性也差。本文把单个按键作为一个简单的系统,根据状态机的原理对其动作的操作和确认的过程进行分析,并用状态图表示出来,然后根据状态图编写出按键接口程序。
  1 基于状态机的简单按键驱动设计
  在一个嵌入式系统中,按键的操作是随机的。为了提高CPU的工作效率,在设计按键驱动的时候,利用S3C2440的外部中断来实现对按键的处理。很明显,系统的输入信号与按键连接的I/O口电平,“1”表示按键处于开放状态,“0”表示按键处于闭合状态。而系统的输出信号则表示检测和确认到一次按键的闭合操作,用“1”表示。
  基于状态机的简单按键驱动设计
  图1给出了一个简单按键状态机的状态转换图。
  在图中,将1次按键完整的操作分解为3个状态。其中,状态0为按键的初始状态,当按键输入为“1”时,表示按键处于开放,输出“0”(I/0),下一状态仍为状态0;当按键输入为“0”时,表示按键闭合,但输出还是“0”(没有经过消抖,不能确认按键真正按下),下一状态进入状态1。
  状态1为按键闭合确认状态,它表示在10 ms前按键为闭合的,因此当再次检测到按键输入为“0”时,可以确认按键被按下了(经过10 ms的消抖);输出“1”则表示确认按键闭合(0/1),下一状态进入状态2。而当再次检测到按键的输入为“1”时,表示按键可能处在抖动干扰;输出为“0”(I/0),下一状态返回到状态0。这样,利用状态1,实现了按键的消抖处理。状态2为等待按键释放状态,因为只有等按键释放后,一次完整的按键操作过程才算完成。
  对图1的分析可知,在一次按键操作的整个过程中,按键的状态是从状态0→状态1→状态2,最后返回到状态0的,并且在整个过程中,按键的输出信号仅在状态1时给出了唯一的一次确认按键闭合的信号“1”,其他状态均输出“0”。因此,图1状态机所表示的按键系统,不仅克服了按键抖动的问题,同时也确保在一次按键的整个过程中,系统只输出一次按键闭合信号(“1”)。
  2 具有连发功能的按键驱动设计
  上面介绍的是最简单的情况,不管按键被按下的时间保持多长,在这个按键的整个过程中都只给出了一次确认的输出。但是有些场合为了方便使用者,根据使用者按按键的时间多少来确定是否按键“连发”。例如,在设置时钟时,按按键的时间较短时,设置加1;按按键时间较长时,设置加10,这时就需要根据按按键的时间长短来确定具体输出。图2是将按键驱动设计为具有连发功能状态机的状态转换图。
  基于状态机的简单按键驱动设计
  当按键按下后1 s内释放了,系统输出为1;当按键按下后1 s没有释放,那么以后每隔0.5 s,输出为2,直到按键释放为止。如果系统输出1,应用程序将变量加1;如果系统输出2,应用程序将变量加10。这样按键驱动就有了处理连发按键的功能了。
下载该资料的人也在下载 下载该资料的人还在阅读
更多 >

评论

查看更多

下载排行

本周

  1. 1GBT1094.11-2022电力变压器第11部分:干式变压器
  2. 14.12 MB   |  3次下载  |  免费
  3. 2FT-7800R对讲机维修手册附原理图
  4. 3.35 MB   |  2次下载  |  免费
  5. 3串口工具UartAssist5.0.exe
  6. 0.60 MB   |  2次下载  |  免费
  7. 4爬电距离和电气间隙计算
  8. 0.75 MB   |  2次下载  |  1 积分
  9. 5UC3584DW次级侧后置稳压器EVM板原理图
  10. 38.97KB   |  2次下载  |  免费
  11. 6UCC38C42 25瓦自谐振复位正激变换器
  12. 320.6KB   |  1次下载  |  免费
  13. 7ZX-D37 BLE主从一体蓝牙模块技术手册
  14. 1.22 MB   |  1次下载  |  免费
  15. 8使用15个时钟周期的ADS7841和ADS7844
  16. 188.55KB   |  1次下载  |  免费

本月

  1. 1无刷电机控制方案设计合作
  2. 1.05 MB   |  22次下载  |  免费
  3. 2美的超薄电磁炉TM-S1-09B主板原理图
  4. 0.08 MB   |  20次下载  |  免费
  5. 3纯电动汽⻋的主要部件及⼯作原理
  6. 5.76 MB   |  12次下载  |  5 积分
  7. 4GP328和GP88S对讲机的维修实列资料合集免费下载
  8. 0.03 MB   |  10次下载  |  10 积分
  9. 5舒尔SLX4无线话筒接收机原理图:二次变频超外差部分
  10. 0.27 MB   |  8次下载  |  免费
  11. 6IP5385_DEMO开发资料
  12. 1.96 MB   |  7次下载  |  2 积分
  13. 7i.MX Linux开发实战指南—基于野火i.MX系列开发板
  14. 17.86 MB   |  7次下载  |  免费
  15. 8Type-C VL160数据手册
  16. 0.92 MB   |  7次下载  |  3 积分

总榜

  1. 1matlab软件下载入口
  2. 未知  |  935115次下载  |  10 积分
  3. 2开源硬件-PMP21529.1-4 开关降压/升压双向直流/直流转换器 PCB layout 设计
  4. 1.48MB  |  420061次下载  |  10 积分
  5. 3Altium DXP2002下载入口
  6. 未知  |  233084次下载  |  10 积分
  7. 4电路仿真软件multisim 10.0免费下载
  8. 340992  |  191363次下载  |  10 积分
  9. 5十天学会AVR单片机与C语言视频教程 下载
  10. 158M  |  183329次下载  |  10 积分
  11. 6labview8.5下载
  12. 未知  |  81581次下载  |  10 积分
  13. 7Keil工具MDK-Arm免费下载
  14. 0.02 MB  |  73805次下载  |  10 积分
  15. 8LabVIEW 8.6下载
  16. 未知  |  65985次下载  |  10 积分