您的位置:首页 > 其它

按键定时扫描——有限状态机的软件实现方法(上)

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;的状态转换表:

时刻

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_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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: