基于状态机的单片机按键短按长按功能的实现.doc
《基于状态机的单片机按键短按长按功能的实现.doc》由会员分享,可在线阅读,更多相关《基于状态机的单片机按键短按长按功能的实现.doc(2页珍藏版)》请在三一文库上搜索。
1、基于状态机的单片机按键短按长按功能的实现1、引言在自己在科研实践和对学生教学中发现,现在单片机学习中对于按键处理的方法都是:检测按键、延时消抖、按键执行、等待释放,整个按键处理的程序中大量出现delay_1ms(5);和while(!key);这样的语句,这明显是在给自己找麻烦,延时消抖与等待释放需要消耗CPU运行时间,执行效率低下,而且这种方法处理的按键程序也实现不了按键的短按、长按等灵活的按键操作方式。本文讲述了一种用状态机实现按键扫描的方法,达到按键的短按和长按功能,高效的处理按键消抖问题。2、状态机状态机在软件编程中非常重要,一个思路清晰而且高效的程序,必然有状态机的身影浮现。比如在按
2、键命令解析程序中,本来是在状态1中,触发一个按键后切换到状态2,再触发另一个按键切换到状态3,或者返回到状态1。按键的击键过程也是一种状态的切换,也可以看着是一个状态机,一个按键的击键过程包括:按下、抖动、闭合、抖动和释放等状态。我们只要把这些状态机的思想想办法用程序表示出来就可以了。3、按键的状态机实现我们这里用状态机是为解决问题的,那么我们就要从问题本身去思考。为了实现按键扫描,达到按键短按和长按的功能,可以根据一个按键从按下按键到释放按键的整个过程将按键分为4个状态:S0:等待按键按下S1:按键按下S2:等待按键短按释放S3:等待按键长按释放假设按键按下为低电平0,按键未按下为高电平1,
3、按键的整个过程我们就可以通过状态转移图表示出来,如图1所示。首先,按键的初始状态为S0,当检测到输入为1时,表示按键没有按下,保持S0;当输入为0时,表示按键按下,状态转入S1。在S1状态中,检测输入信号是否为0,如果为0,执行按键程序转入S2;如果为1,表示之前的按键操作是干扰信号,回到S0。在S2状态中,如果输入信号是1,则回到S0,表示按键短按已经释放;如果按键没有释放,输入为0时,就开始计时,计时没有结束前一直在S2,当计时结束了,转入S3,表示按键一直按着,为长按功能,在S2计时过程中,输入从0变为1也会回到S0。在S3状态中,输入信号为1,返回S0,表示按键长按释放;输入信号为0,执行相应的按键程序,也可以计时,等计时结束执行按键程序,达到按键连击的功能。这就是采用状态机进行按键检测达到短按与长按的整个过程。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 状态机 单片机 按键 短按长按 功能 实现
链接地址:https://www.31doc.com/p-3417915.html