。
正文
就这两天,考试的小伙伴在群里问了考试题。大意如下:识别独立按键的长按,短按,通过长按和短按来控制LED的显示方式,短按点亮LED,长按让LEd闪烁。
既然是考试题,我们就用最简单的方式实现功能就好,管它红毛黑猫,抓到耗子就是好猫。
既然是最简单的方式,就不去考虑程序的结构性,时效性,不用中断,不用定时器,就用最最简单的延时方式去检测按键。完整按键程序如下:
if(key1==0){
Delay10ms();
if(key1==0){
//等待按键释放,在等待过程中10ms累加一次,
//后续通过判断这个累加值的大小判断长按还是短按
while(!key1){
cont_step++;
Delay10ms();
}
//cont_step变量的大小控制长按的时常
if(cont_step<120){
cont_key=1;
}
else{cont_key=2;}
cont_step=0;
}
}
//控制LED的显示方式,这里采用闪烁的快慢来区别
//模式1为快闪,模式二为慢闪
switch(cont_key){
case 1: led_flash();
break;
case 2: led_flash1();
break;
}
}
简单演示了一下,功能实现。
简单分析一下,采用最简单演示二次检测法去识别按键是否按下,如果按键被按下后,采用while()等待按键释放,在等待的过程中采用10ms延时等待后去循环的对变量实现加1计数。等到按键释放后再去判断等待过程中的计数值,在本例中,计数值大于120就认为是长按发生,不然就认为是按键短按。这里的计数值为120,实测时间约为2.5左右。
总结
好多为了考试入群的小伙伴,一般是小白,最简单的基础都没学到,所以采用最简单的方式去实现,考试嘛,实现了就好,分数才是硬道理。