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