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

按键定时扫描

                                    ——有限状态机的软件实现方法

由于按键扫描采用定时扫描方式,由连续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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值