资料介绍
一般的按键驱动程序通常非常简单。在程序中一旦检测到按键输入口为低电平时,就采用软件延时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 基于状态机的简单按键驱动设计
在一个嵌入式系统中,按键的操作是随机的。为了提高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。这样按键驱动就有了处理连发按键的功能了。
下载该资料的人也在下载
下载该资料的人还在阅读
更多 >
- 按键状态机代码 7次下载
- labview状态机分享 11次下载
- LABVIEW的状态机实现资料合集 41次下载
- 蓝桥杯单片机状态机按键按下和松开实现不同功能
- STM32实现按键有限状态机(超详细,易移植)
- 状态模式(状态机)
- 基于STM32按键的防抖和松开处理:状态机
- 基于状态机的汽车电动滑移门系统 8次下载
- 使用Synplify设计安全的VHDL状态机 12次下载
- 使用状态机的按键消抖处理方法电子钟程序免费下载
- 2021_同步状态机的原理、结构和设计 3次下载
- 状态机原理及用法 0次下载
- 利用状态机的按键消抖程序 30次下载
- 状态机代码生成工具 9次下载
- 如何写好状态机
- 状态机该怎么监控 310次阅读
- Spring状态机的实现原理和使用方法 1680次阅读
- SaberRD状态机建模工具介绍(一)什么是状态机建模 1249次阅读
- 状态机怎么上来就错了?怎么解决? 289次阅读
- 什么是状态机?状态机的种类与实现 7941次阅读
- 一个基于事件驱动的有限状态机 673次阅读
- 基于事件驱动的有限状态机介绍 941次阅读
- 如何构建基于状态机的软件系统 1417次阅读
- 状态机到底是什么 3671次阅读
- 状态机概述 如何理解状态机 1w次阅读
- 状态机和组合逻辑的冒险竞争浅析 3876次阅读
- 简述如何使用Harmony的动态驱动和状态机来编写程序 3934次阅读
- 基于状态机的单片机按键短按长按功能的实现 1.8w次阅读
- 初学者对有限状态机(FSM)的设计的认识 4142次阅读
- 利用状态机的状态机实现层次结构化设计 3248次阅读
下载排行
本周
- 1GBT1094.11-2022电力变压器第11部分:干式变压器
- 14.12 MB | 3次下载 | 免费
- 2FT-7800R对讲机维修手册附原理图
- 3.35 MB | 2次下载 | 免费
- 3串口工具UartAssist5.0.exe
- 0.60 MB | 2次下载 | 免费
- 4爬电距离和电气间隙计算
- 0.75 MB | 2次下载 | 1 积分
- 5UC3584DW次级侧后置稳压器EVM板原理图
- 38.97KB | 2次下载 | 免费
- 6UCC38C42 25瓦自谐振复位正激变换器
- 320.6KB | 1次下载 | 免费
- 7ZX-D37 BLE主从一体蓝牙模块技术手册
- 1.22 MB | 1次下载 | 免费
- 8使用15个时钟周期的ADS7841和ADS7844
- 188.55KB | 1次下载 | 免费
本月
- 1无刷电机控制方案设计合作
- 1.05 MB | 22次下载 | 免费
- 2美的超薄电磁炉TM-S1-09B主板原理图
- 0.08 MB | 20次下载 | 免费
- 3纯电动汽⻋的主要部件及⼯作原理
- 5.76 MB | 12次下载 | 5 积分
- 4GP328和GP88S对讲机的维修实列资料合集免费下载
- 0.03 MB | 10次下载 | 10 积分
- 5舒尔SLX4无线话筒接收机原理图:二次变频超外差部分
- 0.27 MB | 8次下载 | 免费
- 6IP5385_DEMO开发资料
- 1.96 MB | 7次下载 | 2 积分
- 7i.MX Linux开发实战指南—基于野火i.MX系列开发板
- 17.86 MB | 7次下载 | 免费
- 8Type-C VL160数据手册
- 0.92 MB | 7次下载 | 3 积分
总榜
- 1matlab软件下载入口
- 未知 | 935115次下载 | 10 积分
- 2开源硬件-PMP21529.1-4 开关降压/升压双向直流/直流转换器 PCB layout 设计
- 1.48MB | 420061次下载 | 10 积分
- 3Altium DXP2002下载入口
- 未知 | 233084次下载 | 10 积分
- 4电路仿真软件multisim 10.0免费下载
- 340992 | 191363次下载 | 10 积分
- 5十天学会AVR单片机与C语言视频教程 下载
- 158M | 183329次下载 | 10 积分
- 6labview8.5下载
- 未知 | 81581次下载 | 10 积分
- 7Keil工具MDK-Arm免费下载
- 0.02 MB | 73805次下载 | 10 积分
- 8LabVIEW 8.6下载
- 未知 | 65985次下载 | 10 积分
评论
查看更多