本帖最后由 hu9jj 于 2021-4-10 10:34 编辑
#申请原创#
扩展按键功能最简单的方法就是实现长短按键的识别,这样一个按键就可以替代多个按键。我是在按键处理模块中不断对一个变量进行自加,从而获得按键时间的长短,为了提高处理的效率,我使用的是按键的中断方式。下面简单介绍实现的过程:
一、开启中断功能
进入MCC代码配置器,设置按键引脚的下降沿中断模式:
启用中断:
生成代码后,在主程序中设置好相应的参数,按键的中断功能就启用了:
二、中断处理函数
void interruptHandier(void)
{
if(0 == KEY1_GetValue()){ //捕获按键动作
DELAY_milliseconds(20);
if(0 == KEY1_GetValue()){
while(!KEY1_GetValue()){
if(key1<256){
key1++;
DELAY_milliseconds(20);
}
}
}
}
}
三、在主循环中对全局变量key1进行处理,我这里仅仅是显示按键数值:
if(key1>0){ //滚轮按键处理
LCD_write_value(0,0,3,0,1,key1);//显示按键值
key1 = 0; //清按键
}
下面是测试过程的动画,按下按键立即释放,此时的key1值大约在6~10左右;按下按键,稍等片刻后释放,key1值大约为20~30左右;按下约一秒后释放,key1值将大于40(参见屏幕左上角的数值),用户只要稍微练习一下,便可轻松掌握至少三种按键状态。
|