和12歲小同志搞創(chuàng)客開發(fā):檢測按鍵狀態(tài)的兩件法寶
機緣巧合在網(wǎng)上認(rèn)識一位12歲小同志,從零開始系統(tǒng)輔導(dǎo)其創(chuàng)客開發(fā)思維和技巧。
按鍵是創(chuàng)客開發(fā)過程中必不可少的器件之一,用戶可以通過按鍵實現(xiàn)交互控制。例如:按鍵開關(guān)燈、長按按鍵解除報警、按鍵實現(xiàn)設(shè)備控制等功能。
檢測按鍵狀態(tài)有兩種方式:第一種,檢測按鍵端口的輸出電壓信號變化,判斷按鍵的狀態(tài);第二種,按鍵狀態(tài)變化觸發(fā)中斷。
下面讓我們學(xué)習(xí)這兩種檢測按鍵狀態(tài)的方法~
1
檢測電平變化,判斷按鍵狀態(tài)
在如何驅(qū)動各類型傳感器?這篇文章中講到:可以將傳感器進行分類,主要包括:數(shù)字量輸出類型傳感器、數(shù)字量輸入類型傳感器、模擬量電壓類型傳感器、模擬量電流類型傳感器和協(xié)議類型傳感器。
按鍵本質(zhì)上并不是傳感器,但是按照驅(qū)動方式來看,可當(dāng)作數(shù)字量輸出類型傳感器,進行驅(qū)動。
可以通過按鍵的設(shè)計圖明白其中的原理,如下圖所示,假設(shè)TP點接入單片機IO端口,當(dāng)按鍵未被按下時,此處為5V高電平,當(dāng)按鍵被按下時,此處就會變?yōu)?V低電平,通過這種高、低電平狀態(tài)變化判斷按鍵的狀態(tài)變化。
那么設(shè)計按鍵控制LED亮、滅的程序就非常好理解了,如下所示:
2
使用中斷觸發(fā),判斷按鍵狀態(tài)
我們在設(shè)計功能時,難免要用到延時,如果延時時間過長,可以發(fā)現(xiàn)按鍵就不那么靈敏了,主要原因在于:延時消耗過多的處理器資源,程序大多時間都運行在延時函數(shù)中,無法進行按鍵狀態(tài)的判斷。
這時候就需要使用中斷觸發(fā)功能了~
當(dāng)控制器正在處理內(nèi)部數(shù)據(jù)時,外界發(fā)生了緊急情況,要求CPU暫停當(dāng)前的工作轉(zhuǎn)去處理這個緊急事件。處理完畢后,再回到原來被中斷的地址,繼續(xù)原來的工作,這樣的過程稱為中斷,過程如下所示:
可通過監(jiān)測按鍵電平信號變化,觸發(fā)中斷,如下圖情況所示,當(dāng)按鍵未按下,此時是5V高電平信號。
當(dāng)按下按鍵瞬間,高電平會切換到低電平,產(chǎn)生下降沿信號,此時可觸發(fā)下降沿中斷。
當(dāng)松開按鍵瞬間,低電平會切換到高電平,產(chǎn)生上降沿信號,此時可觸發(fā)上降沿中斷。
中斷程序的實現(xiàn)也非常簡單,無需在主程序中設(shè)計程序,選擇合適的中斷信號觸發(fā)模式,將需要實現(xiàn)的功能寫在中斷處理函數(shù)中,當(dāng)檢測到相應(yīng)的觸發(fā)信號,中斷處理函數(shù)就可以運行了,如下所示:
有一點需要注意,中斷處理函數(shù)適合處理“急件”,處理完畢后,再回到原來被中斷的地址,繼續(xù)原來的工作,所以不應(yīng)該在中斷程序中有大量長時間的延時,以免對主程序產(chǎn)生影響。
往期推薦
