獨(dú)立按鍵
常用的按鍵電路有兩種形式,獨(dú)立式按鍵和矩陣式按鍵,獨(dú)立式按鍵比較簡單,它們各自與獨(dú)立的輸入線相連接,如圖 8-6 所示。
圖 8-6 獨(dú)立式按鍵原理圖
4 條輸入線接到單片機(jī)的 IO 口上,當(dāng)按鍵 K1 按下時(shí),+5V 通過電阻 R1 然后再通過按鍵 K1 最終進(jìn)入 GND 形成一條通路,那么這條線路的全部電壓都加到了 R1 這個(gè)電阻上,KeyIn1 這個(gè)引腳就是個(gè)低電平。當(dāng)松開按鍵后,線路斷開,就不會有電流通過,那么 KeyIn1和+5V 就應(yīng)該是等電位,是一個(gè)高電平。我們就可以通過 KeyIn1 這個(gè) IO 口的高低電平來判斷是否有按鍵按下。
這個(gè)電路中按鍵的原理我們清楚了,但是實(shí)際上在我們的單片機(jī) IO 口內(nèi)部,也有一個(gè)上拉電阻的存在。我們的按鍵是接到了 P2 口上,P2 口上電默認(rèn)是準(zhǔn)雙向 IO 口,我們來簡單了解一下這個(gè)準(zhǔn)雙向 IO 口的電路,如圖 8-7 所示。
圖 8-7 準(zhǔn)雙向 IO 口結(jié)構(gòu)圖
首先說明一點(diǎn),就是我們現(xiàn)在絕大多數(shù)單片機(jī)的 IO 口都是使用 MOS 管而非三極管,但用在這里的 MOS 管其原理和三極管是一樣的,因此在這里我用三極管替代它來進(jìn)行原理講解,把前面講過的三極管的知識搬過來,一切都是適用的,有助于理解。
圖 8-7 方框內(nèi)的電路都是指單片機(jī)內(nèi)部部分,方框外的就是我們外接的上拉電阻和按鍵。這個(gè)地方大家要注意一下,就是當(dāng)我們要讀取外部按鍵信號的時(shí)候,單片機(jī)必須先給該引腳寫“1”,也就是高電平,這樣我們才能正確讀取到外部按鍵信號,我們來分析一下緣由。
當(dāng)內(nèi)部輸出是高電平,經(jīng)過一個(gè)反向器變成低電平,NPN 三極管不會導(dǎo)通,那么單片機(jī)IO 口從內(nèi)部來看,由于上拉電阻 R 的存在,所以是一個(gè)高電平。當(dāng)外部沒有按鍵按下將電平拉低的話,VCC 也是+5V,它們之間雖然有 2 個(gè)電阻,但是沒有壓差,就不會有電流,線上所有的位置都是高電平,這個(gè)時(shí)候我們就可以正常讀取到按鍵的狀態(tài)了。
當(dāng)內(nèi)部輸出是個(gè)低電平,經(jīng)過一個(gè)反相器變成高電平,NPN 三極管導(dǎo)通,那么單片機(jī)的內(nèi)部 IO 口就是個(gè)低電平,這個(gè)時(shí)候,外部雖然也有上拉電阻的存在,但是兩個(gè)電阻是并聯(lián)關(guān)系,不管按鍵是否按下,單片機(jī)的 IO 口上輸入到單片機(jī)內(nèi)部的狀態(tài)都是低電平,我們就無法正常讀取到按鍵的狀態(tài)了。
這個(gè)和水流其實(shí)很類似的,內(nèi)部和外部,只要有一邊是低電位,那么電流就會順流而下,由于只有上拉電阻,下邊沒有電阻分壓,直接到 GND 上了,所以不管另外一邊是高還是低,那電平肯定就是低電平了。
從上面的分析就可以得出一個(gè)結(jié)論,這種具有上拉的準(zhǔn)雙向 IO 口,如果要正常讀取外部信號的狀態(tài),必須首先得保證自己內(nèi)部輸出的是 1,如果內(nèi)部輸出 0,則無論外部信號是 1還是 0,這個(gè)引腳讀進(jìn)來的都是 0。
矩陣按鍵
在某一個(gè)系統(tǒng)設(shè)計(jì)中,如果需要使用很多的按鍵時(shí),做成獨(dú)立按鍵會大量占用 IO 口,因此我們引入了矩陣按鍵的設(shè)計(jì)。如圖 8-8 所示,是我們的 KST-51 開發(fā)板上的矩陣按鍵電路原理圖,使用 8 個(gè) IO 口來實(shí)現(xiàn)了 16 個(gè)按鍵。
圖 8-8 矩陣按鍵原理圖
如果獨(dú)立按鍵理解了,矩陣按鍵也不難理解,那么我們一起來分析一下。圖 8-8 中,一共有 4 組按鍵,我們只看其中一組,如圖 8-9 所示。大家認(rèn)真看一下,如果 KeyOut1 輸出一個(gè)低電平,KeyOut1 就相當(dāng)于是 GND,是否相當(dāng)于 4 個(gè)獨(dú)立按鍵呢。當(dāng)然這時(shí)候 KeyOut2、KeyOut3、KeyOut4 都必須輸出高電平,它們都輸出高電平才能保證與它們相連的三路按鍵不會對這一路產(chǎn)生干擾,大家可以對照兩張?jiān)韴D分析一下。
圖 8-9 矩陣按鍵變獨(dú)立按鍵示意圖