按鈕的程序設計:
單片機程序的設計難題在於,對按鈕開關的判斷,初學者往往會簡單認為檢測到電流即為按鈕按下,其實不然,程序的一段代碼的執行時間是非常短的,而開關的機械結構,使得開關在按下去,在按鈕完全即將接觸到完全接觸之間,電平是不穩定的,代碼在檢測的時候可能會檢測到多個不同的數據,從而影響判斷,此外,單片機的程序除了要檢測開關,也會有其他的任務需要執行,所以程序是在主程序和開關檢測這一塊不斷的進行切換的。有點像操作系統的分時系統。
下面是對按鈕的防抖的方法,分為硬件防抖和軟件防抖,這里介紹的是軟件防抖。
if(value == 0) //一旦檢測到鍵值
{
Delay(); //延時20ms,有效濾除按鍵的抖動
if(value == 0) //再次確定鍵值是否有效
{
…… //執行相應處理
}
}
詳見於 https://blog.csdn.net/shenlei314/article/details/47785411
下面的的這個是我老師給的代碼
boolean checkSwitchState(int pin)
{
int nowState; int count = 0;
nowState = digitalRead(pin); //保存開關的狀態
while(nowState == HIGH)
{
delay(1);
nowState = digitalRead(pin);
count++;
if(count == 10)
return nowState;
}
return LOW;
}
