按键定时扫描——有限状态机的软件实现方法(上)
2016-05-20 10:22
531 查看
按键定时扫描
——有限状态机的软件实现方法
由于按键扫描采用定时扫描方式,由连续2次或3次扫描的状态来判断按键是否按下,
所以可以采用有限状态机--即时序逻辑思维,来判断按键是否按下。
图一
Keydown的卡诺图:
得到逻辑表达式:
Keydown =(~keyn-1)& keyn
Keyup = keyn-1 & (~keyn)
Keypress = keyn
此系统不能去抖
改进状态机:
去抖算法原理:
按键扫描时序图
定义变量:Curr_avoidkey 表示当前经去抖后的按键状态 , 即Avoidkeyn
Last_avoidkey 表示上次经去抖后的按键状态, 即Avoidkeyn-1
Curr_Scankey 表示当前扫描的按键状态, 即keyn
Last_Scankey 表示上次扫描的按键状态, 即keyn-1
Curr_avoidkey;的状态转换表:
Curr_avoidkey的卡诺图:
Curr_avoidkey = (Curr_Scankey & Last_Scankey) | Last_avoidkey & (Curr_Scankey ^ Last_Scankey)得算法表达式:
经过去抖算法后:
keydown = (~Last_avoidkey) & Curr_avoidkey
keyup = Last_avoidkey & (~Curr_avoidkey)
keypress = Curr_avoidkey
Last_Scankey = Curr_Scankey
Last_avoidkey= Curr_avoidkey
——有限状态机的软件实现方法
由于按键扫描采用定时扫描方式,由连续2次或3次扫描的状态来判断按键是否按下,
所以可以采用有限状态机--即时序逻辑思维,来判断按键是否按下。
图一
Keydown的卡诺图:
得到逻辑表达式:
Keydown =(~keyn-1)& keyn
Keyup = keyn-1 & (~keyn)
Keypress = keyn
此系统不能去抖
改进状态机:
去抖算法原理:
按键扫描时序图
定义变量:Curr_avoidkey 表示当前经去抖后的按键状态 , 即Avoidkeyn
Last_avoidkey 表示上次经去抖后的按键状态, 即Avoidkeyn-1
Curr_Scankey 表示当前扫描的按键状态, 即keyn
Last_Scankey 表示上次扫描的按键状态, 即keyn-1
Curr_avoidkey;的状态转换表:
时刻 | Last_Scankey | Curr_Scankey | Last_avoidkey | Curr_avoidkey |
1 | 0 | 0 | 0 | 0 |
2 | 0 | 1 | 0 | 0 |
3 | 1 | 0 | 0 | 0 |
4 | 0 | 1 | 0 | 0 |
5 | 1 | 1 | 0 | 1 |
6 | 1 | 1 | 1 | 1 |
7 | 1 | 0 | 1 | 1 |
8 | 0 | 1 | 1 | 1 |
9 | 1 | 0 | 1 | 1 |
10 | 0 | 0 | 1 | 0 |
11 | 0 | 0 | 0 | 0 |
Curr_avoidkey = (Curr_Scankey & Last_Scankey) | Last_avoidkey & (Curr_Scankey ^ Last_Scankey)得算法表达式:
经过去抖算法后:
keydown = (~Last_avoidkey) & Curr_avoidkey
keyup = Last_avoidkey & (~Curr_avoidkey)
keypress = Curr_avoidkey
Last_Scankey = Curr_Scankey
Last_avoidkey= Curr_avoidkey
相关文章推荐
- Swift-条件语句
- DatagramSocket类简单实现文件下载
- 拦截器 过滤器 配置
- Android 弹款点击空白处不消失
- Ubuntu系统启用Apache Mod_rewrite模块
- 使用ESESC对功耗和温度进行仿真
- C# ~ 从 XML 到 Linq 到 Linq to XML
- 使用Consul打造弹性可扩展的PaaS平台
- 类外通过void指针间接访问类内私有成员变量
- const mutable 等的作用
- HTML 5 <input> placeholder 属性
- context.openFileoutput及文件存储,删除,读取简单用法
- Spring技术内幕之Spring MVC与Web环境(01)-MVC模式
- ios 8新特性
- Android 开发工具下载网址
- Swift-可空链式调用
- Appium搭建
- objc非主流代码技巧
- C# ~ 从 XML 到 Linq 到 Linq to XML
- 软链接和硬链接详解