在學習單片機的時候想必大家都接觸過按鍵,按鍵是一個人機交互的接口設備,在剛開始接觸的時候最簡單也是最直接的辦法就是將按鍵直接接到一個I/O口上,然后檢測I/O上的電平變化,假設按鍵另一端接在GND上,則一旦檢測到低電平就認為是按鍵觸發了(此處假設已經進行了去抖,軟件去抖也好,硬件去抖也好),乍一看,no problem!而且還是very good!其實這對於初學者而言確實是入門的不二選擇,但對大佬而言就是錯誤的設計思想。問題出在去檢測I/O口這個過程,CPU必須每隔一段時間檢測,一般用定時器去實現,間隔時間太長了達不到實時的性能,時間太短了有浪費CPU資源,因為在很多場合按鍵處於觸發的時間段時相當少的,比如學校的自動圈存機,一般情況下時沒人用的,那就意味着CPU每間隔時間去查看I/O是非常不合理的,只有當按鍵按下采取查看,這才是最合理的方式。這樣就必須引入外部中斷的設計方案,一個按鍵的設計原理圖如下:
如果有兩個甚至多個按鍵,那如何弄了,很簡單,使用或門來解決這個問題。電路圖如下: