說到鍵盤掃描,相信大多數(shù)人第一反應(yīng)就是行列矩陣掃描,這樣我們可以用相對(duì)有限的IO口得到盡可能多的按鍵。鍵盤掃描是單片機(jī)技術(shù)的一種基本處理方法,學(xué)校的單片機(jī)課程都會(huì)有相應(yīng)章節(jié)進(jìn)行闡述,只要按照課本上講述的方法,一般都能設(shè)計(jì)出比較可靠的鍵盤掃描電路與程序。 課本上的鍵盤掃描方法(見下圖接法二)不能說是盡善盡美,從易懂性、成本、程序難易程度等方面綜合看應(yīng)該是不錯(cuò)的方法,給人感覺是已經(jīng)沒有太多的改善空間,至少我是這么認(rèn)為的。 然而前段時(shí)間一位臺(tái)灣朋友畫給我的鍵盤掃描矩陣電路(見下圖接法二),讓我又一次看到到自己的思維還有許多地方被自己的所謂“經(jīng)驗(yàn)”束縛著。 單純的從硬件接法看,兩種接法并沒有明顯區(qū)別,接法一甚至要復(fù)雜一些,但如果結(jié)合到鍵盤掃描的程序來看,就會(huì)發(fā)現(xiàn)接法一確實(shí)更好。 兩種接法我都沒有把上拉電阻包含進(jìn)來,來讓我們看一下兩種接法到底有什么不同: 接法二: 我們熟悉的傳統(tǒng)掃鍵處理電路,假定鍵盤行列IO口標(biāo)號(hào)分別為H1/H2/H3和V1/V2/V3,掃鍵流程通常如下。 2.1. H1設(shè)置為輸出,H2/H3和V1/V2/V3設(shè)置為輸入 2.2. H1分別輸出1和0,讀V1/V2/V3狀態(tài),如果Vy狀態(tài)與H1一致,則認(rèn)為H1與Vy交叉位置的鍵按下 2.3. H2設(shè)置為輸出,H1/H3和V1/V2/V3設(shè)置為輸入 2.4. H2分別輸出1和0,讀V1/V2/V3狀態(tài),如果Vy狀態(tài)與H2一致,則認(rèn)為H2與Vy交叉位置的鍵按下 2.5. H3設(shè)置為輸出,H1/H2和V1/V2/V3設(shè)置為輸入 2.6. H3分別輸出1和0,讀V1/V2/V3狀態(tài),如果Vy狀態(tài)與H3一致,則認(rèn)為H3與Vy交叉位置的鍵按下 接法一: 新掃鍵處理電路,假定鍵盤行列IO口標(biāo)號(hào)分別為H1/H2/H3和V1/V2/V3,掃鍵流程通常如下。 1.1. H1/H2/H3和V1/V2/V3都設(shè)置為輸入 1.2. 讀H1/H2/H3和V1/V2/V3狀態(tài),如果Hx和Vy讀到的狀態(tài)均為0,則認(rèn)為Hx與Vy交叉位置的鍵按下 從上面流程可以看出接法一的程序代碼要簡(jiǎn)單不少,既能減少掃鍵的代碼量,又能加快掃鍵處理的時(shí)間,站在軟件的角度看確實(shí)要比接法二要好。后來我反思了一下為什么我們教材上的傳統(tǒng)處理方法沒有采用接法一,雖然接法一軟件上要簡(jiǎn)單一些,但硬件布局要復(fù)雜,傳統(tǒng)的按鍵只有兩條接線,接法一需要三條接線,所以用傳統(tǒng)的按鍵是無法實(shí)現(xiàn)的,但現(xiàn)在許多電子產(chǎn)品的按鍵都用導(dǎo)電橡膠或鍋?zhàn)衅瑏韺?shí)現(xiàn),所以接法一變得可行。 注:這兩種電路對(duì)于同時(shí)按鍵達(dá)到3個(gè)的情況都有可能形成錯(cuò)誤的按鍵邏輯。 來源:電子工程網(wǎng) |