资深版主
 
- 积分
- 5773
- 金钱
- 5773
- 注册时间
- 2013-11-22
- 在线时间
- 1211 小时
|
发表于 2016-11-21 19:57:21
|
显示全部楼层
本帖最后由 lycreturn 于 2016-11-21 20:55 编辑
大概看了下,这个函数是通过状态机(按键的状态)来实现的,这个函数会被定时调用以判断按键状态。
1.首先判断按键是否为弹起(未按下)状态,如果为弹起态,则调用函数get_key_value判断有没有按键按下,如果有新的按键按下,清零temp_key_dealy_count(用作重新开始计数),按键状态变为按下态;
2.然后调到下一个if语句,由于按键按下态,if条件成立,先执行temp_key_dealy_count自加,
2.1.然后又一个if判断temp_key_dealy_count 有没有达到设定值KEY_DELAY_COUNT(这个用作按键消抖),由于没达到设定值返回0x00, 但是记住这个时候按键任然是按下态 2.2.下一次调用函数get_key_state,由于按键是按下态,直接执行判断temp_key_dealy_count有没有达到KEY_DELAY_COUNT,没有达到,返回0x00,按键任然是按下态;直到temp_key_dealy_count达到KEY_DELAY_COUNT。
3.这时候执行到 if (temp_key_dealy_count > KEY_DELAY_COUNT) 里面,temp_key_dealy_count清零方便下一次计数。然后再次读取按键状态,
3.1.如果按键任然处理按下状态,根据设置,判断是否为连击模式,然后返回相应的值;
3.2.如果松开了,说明按下一次就松开了,为单击模式,然后返回相应的值
|
|