对于简单而且是单一的程序而言,所谓'效率'有时候并不重要
比如我就一个LED手电,按键就是开关的作用而已,这个时候,去抖动,没有什么比delay更爽的了,手电开了就开了,ADC用中断,就再也没有其它的事情做了,我还怕单片机累着了不成?
但是你也必须要学会提高单片机效率,有的系统对效率确实是有很高的要求的
对于你说的"时间片轮询法"我没学过,基于百度的理解,感觉这也不怎么好
我常用的办法是:
1,先声明一个全局变量 time,key结构体其实也行,个人习惯而已
2,按键按下之后,time清除,key置位
3,在systick或者定时器中断中,time++
4,主函数就是 if(key&&(time >= 50ms)//50mS由自己决定延时时间
{
key = 0;
执行按键相关处理
}
这样一来,随便你按键怎么按,怎么抖动,它只作一个处理: time = 0; key = 1;
永远是以你最后松开按键之后,稳定了之后的50mS,再执行按键相关操作
按键读取就只占用两个语句的时间而已
|