對于簡單而且是單一的程序而言,所謂'效率'有時候并不重要
比如我就一個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,再執行按鍵相關操作
按鍵讀取就只占用兩個語句的時間而已
|