按键检测
2017-11-14 13:11
85 查看
1
按键检测有以下几个步骤
1、检测有无按键按下
2、逐行扫描(逐行扫描功耗比较小,也可以采用行列反转的方式,
但是功耗比较大,多用于交流电中)
这里是四行三列的按键。
按键检测有以下几个步骤
1、检测有无按键按下
2、逐行扫描(逐行扫描功耗比较小,也可以采用行列反转的方式,
但是功耗比较大,多用于交流电中)
这里是四行三列的按键。
U8 Keypad_scan(void) { static unsigned char result = 0; switch (Keypad_ScanPara.step) { case 0://确认 keypad_init(); if(SSW4_PV == E_KEY_ST_PUSH)//检测第一列 { Keypad_ScanPara.row =1; Keypad_ScanPara.KeypadFLAG =1; Keypad_ScanPara.KeypadTime++;/*用delay()计时会导致 KeypadTime的值得方式,来实现delay(),来实现软件滤波。*/ } else if(SSW5_PV == E_KEY_ST_PUSH) { Keypad_ScanPara.row =2; Keypad_ScanPara.KeypadFLAG =1 ; Keypad_ScanPara.KeypadTime++; } else if(SSW6_PV == E_KEY_ST_PUSH) { Keypad_ScanPara.row =3; Keypad_ScanPara.KeypadFLAG =1; Keypad_ScanPara.KeypadTime++; } else//未扫描到按键 { Keypad_ScanPara.KeypadFLAG = 0; Keypad_ScanPara.KeypadTime = 0; } if(Keypad_ScanPara.KeypadTime > KEY_SHORTCNT)//按键时间大于防抖时间 { Keypad_ScanPara.step = 1; //确立按键按下 Keypad_ScanPara.line = 0; } break; case 1://扫描 SSW0_OUTPUT; SSW0_L; SSW1_OUTPUT; SSW1_H; SSW2_OUTPUT; SSW2_H; SSW3_OUTPUT; SSW3_H; __NOP(); __NOP(); if((SSW4_PV == E_KEY_ST_PUSH) || (SSW5_PV == E_KEY_ST_PUSH) || (SSW6_PV == E_KEY_ST_PUSH)) { Keypad_ScanPara.line = 1; } else { SSW0_OUTPUT; SSW0_H; SSW1_OUTPUT; SSW1_L; SSW2_OUTPUT; SSW2_H; SSW3_OUTPUT; SSW3_H; __NOP(); __NOP(); if((SSW4_PV == E_KEY_ST_PUSH) || (SSW5_PV == E_KEY_ST_PUSH) || (SSW6_PV == E_KEY_ST_PUSH)) { Keypad_ScanPara.line = 2; } else { SSW0_OUTPUT; SSW0_H; SSW1_OUTPUT; SSW1_H; SSW2_OUTPUT; SSW2_L; SSW3_OUTPUT; SSW3_H; __NOP(); __NOP(); if((SSW4_PV == E_KEY_ST_PUSH) || (SSW5_PV == E_KEY_ST_PUSH) || (SSW6_PV == E_KEY_ST_PUSH)) { Keypad_ScanPara.line = 3; } else { SSW0_OUTPUT; SSW0_H; SSW1_OUTPUT; SSW1_H; SSW2_OUTPUT; SSW2_H; SSW3_OUTPUT; SSW3_L; __NOP(); __NOP(); __NOP(); __NOP(); __NOP(); __NOP(); __NOP(); __NOP(); if((SSW4_PV == E_KEY_ST_PUSH) || (SSW5_PV == E_KEY_ST_PUSH) || (SSW6_PV == E_KEY_ST_PUSH)) { Keypad_ScanPara.line = 4; } else { Keypad_ScanPara.row = 0; Keypad_ScanPara.line = 0; Keypad_ScanPara.KeypadFLAG = 0; Keypad_ScanPara.KeypadTime = 0; } } } } if(Keypad_ScanPara.line>0 && Keypad_ScanPara.line <5) { result = 1; } else { Keypad_ScanPara.step = 0 ; } break; case 2://弹起 keypad_init(); if((SSW4_PV == E_KEY_ST_RELEASE) &&(SSW5_PV == E_KEY_ST_RELEASE) && (SSW6_PV == E_KEY_ST_RELEASE)) { Keypad_ScanPara.step = 0 ; } result = 0; break; } return result; }
相关文章推荐
- 检测键盘按键事件
- 检测按键
- Javascript 检测键盘按键信息及键码值对应介绍
- 多功能检测按键-3 按键扫描 单按 长按 多个按键 响应方式
- 基于位运算插值的,easyX多按键检测<类>
- [RTT例程练习] 2.3 信号量-检测按键(同步) -(信号量互斥)
- 按键检测----kbhit函数
- Android增加一个物理按键检测步骤
- 经典按键检测程序(二)--带长按检测
- J2ME控制响应按键的算法以及冲突检测的方法和动画的处理
- unity中连接Xbox手柄设置及按键检测
- 裸奔程序之外部中断检测按键
- AVR外部中断INT1检测按键,使用LED作指示
- 51单片机外设之——独立按键的检测(传统法一)
- 51单片机外设之——按键的检测(带有标志位的按键识别法)
- 按键松手检测 - 检测是否连续按下
- Android增加一个物理按键检测步骤
- MC9S12G128 按键检测
- 51单片机实现单键重复按键检测
- pygame中使用事件扫描实现对按键的检测以及小游戏的编写