張 麗
(陜西職業(yè)技術(shù)學(xué)院,陜西 西安 710100)
隨著社會(huì)的發(fā)展,大量的電子設(shè)備進(jìn)入到我們的日常生活中,比如全自動(dòng)的洗衣機(jī),汽車(chē)的電子控制系統(tǒng)等等。在使用這些設(shè)備的過(guò)程中,我們需要傳達(dá)指令,而指令的傳達(dá)都離不開(kāi)一個(gè)關(guān)鍵部件——鍵盤(pán)。這里的鍵盤(pán)不只包含計(jì)算機(jī)的鍵盤(pán),而是更廣義的鍵盤(pán):只要一個(gè)電子設(shè)備需要我們傳達(dá)指令,那么在這個(gè)設(shè)備上都有鍵盤(pán)。
單片機(jī)鍵盤(pán)根據(jù)不同的驅(qū)動(dòng)控制方式,大體可分為兩大類(lèi),一類(lèi)是獨(dú)立式鍵盤(pán);一類(lèi)是矩陣式鍵盤(pán)。
獨(dú)立式鍵盤(pán)是鍵盤(pán)發(fā)展的早期階段,應(yīng)用在對(duì)按鍵復(fù)雜度要求較低的設(shè)備上。獨(dú)立式鍵盤(pán)的原理非常簡(jiǎn)單,就是將單片機(jī)的I/O口(輸入/輸出口)與按鍵物理連接起來(lái),鍵盤(pán)有多少按鍵,每個(gè)按鍵都要和單片機(jī)的一個(gè)I/O口相連。這樣設(shè)計(jì)的優(yōu)點(diǎn)是結(jié)構(gòu)簡(jiǎn)單,不需要過(guò)多的連線。但是缺點(diǎn)也非常明顯:常見(jiàn)的80系列單片機(jī)總共只有四十個(gè)端口,而I/O口只有三十二個(gè),一個(gè)鍵盤(pán)就占去了其中大部分的I/O口,那單片機(jī)就沒(méi)有足夠的端口去控制其它設(shè)備了。
在獨(dú)立式鍵盤(pán)的基礎(chǔ)上,通過(guò)技術(shù)的不斷完善,最終發(fā)展到比較成熟的矩陣式鍵盤(pán)。矩陣式鍵盤(pán)是將單片機(jī)的I/O口分成行線和列線兩類(lèi),通過(guò)的矩陣式排列,在行線和列線的交匯點(diǎn)接上按鍵,這樣,最大程度的減少了對(duì)單片機(jī)I/O口的占用,并組成按鍵相對(duì)較多的鍵盤(pán)。例如,如果用8個(gè)I/O口,4條做行線,4條做列線,就構(gòu)成了一共有十六個(gè)按鍵的4×4矩陣式鍵盤(pán),矩陣式鍵盤(pán)電路如圖1所示。
矩陣式鍵盤(pán)根據(jù)不同的軟件掃描方式,可以分為循環(huán)掃描法和線反轉(zhuǎn)法。循環(huán)掃描法的原理是讓單片機(jī)的CPU不停的去掃描鍵盤(pán)的行線和列線,如果發(fā)現(xiàn)行線和列線的電平相對(duì)于初始值發(fā)生改變,就判斷有按鈕被按下,然后調(diào)用鍵盤(pán)掃描程序確立按鍵,這種方法程序結(jié)構(gòu)簡(jiǎn)單,易于實(shí)現(xiàn),但是掃描一次耗費(fèi)較多時(shí)間,占用CPU的資源過(guò)大。線反轉(zhuǎn)法的原理是通過(guò)行線和列線的互換來(lái)確立按鍵,相比較循環(huán)掃描法,不但速度快,而且準(zhǔn)確度更高。但是不管采用哪種方法,不管有沒(méi)有按鍵被按下,都需要程序從系統(tǒng)通電開(kāi)始,就時(shí)時(shí)刻刻不停的掃描鍵盤(pán)端口,這樣,不但效率較低,而且占用大量CPU資源,降低整個(gè)系統(tǒng)的運(yùn)行速度。所以,理想的鍵盤(pán)是每當(dāng)有按鍵被按下時(shí),系統(tǒng)調(diào)用鍵盤(pán)掃描程序,確立按鍵的位置。這樣,就必須引入單片機(jī)的中斷系統(tǒng)。
圖1 矩陣式鍵盤(pán)原理圖
中斷是指計(jì)算機(jī)在執(zhí)行程序的過(guò)程中,當(dāng)出現(xiàn)異常情況或特殊請(qǐng)求時(shí),計(jì)算機(jī)停止現(xiàn)行程序的運(yùn)行,轉(zhuǎn)向?qū)@些異常情況或特殊請(qǐng)求的處理,處理結(jié)束后再返回現(xiàn)行程序的間斷處,繼續(xù)執(zhí)行原程序。中斷是單片機(jī)實(shí)時(shí)地處理內(nèi)部或外部事件的一種內(nèi)部機(jī)制。當(dāng)某種內(nèi)部或外部事件發(fā)生時(shí),單片機(jī)的中斷系統(tǒng)將迫使CPU暫停正在執(zhí)行的程序,轉(zhuǎn)而去進(jìn)行中斷事件的處理,中斷處理完畢后,又返回被中斷的程序處,繼續(xù)執(zhí)行下去。
單片機(jī)的內(nèi)部一共包含五個(gè)中斷源:外部中斷0、外部中斷1、定時(shí)器/計(jì)數(shù)器T0、 定時(shí)器/計(jì)數(shù)器T1和串口。單片機(jī)給這五個(gè)中斷源分配了各自的入口地址。其中兩個(gè)外部中斷源用來(lái)反饋外電路傳遞的中斷信號(hào);定時(shí)器/計(jì)數(shù)器T0、 定時(shí)器/計(jì)數(shù)器T1這兩個(gè)中斷源用來(lái)控制系統(tǒng)的定時(shí)和計(jì)數(shù),串口中斷源用來(lái)控制系統(tǒng)與外部的信息交換。
a.外部中斷源
單片機(jī)有兩個(gè)外部中斷源,分別稱(chēng)為外部中斷0和外部中斷1。單片機(jī)給這兩個(gè)中斷源分配了端口,分別是P3.2和P3.3。P3.2是外部中斷0的中斷信號(hào)輸入端,被稱(chēng)為INT0;P3.3是外部中斷1的中斷信號(hào)輸入端,被稱(chēng)為INT1。它們有兩種觸發(fā)方式,低電平有效或下降沿有效。也就是當(dāng)這兩個(gè)端口收到來(lái)自外電路的低電平或者下降沿的時(shí)候,就會(huì)觸發(fā)中斷響應(yīng),主程序就停下來(lái),跳入外部中斷0或外部中斷1的中斷程序中。
b.定時(shí)器/計(jì)數(shù)器T0、 定時(shí)器/計(jì)數(shù)器T1中斷源
這兩個(gè)中斷源不需要輸入端,每當(dāng)定時(shí)器/計(jì)數(shù)器T0或定時(shí)器/計(jì)數(shù)器T1定時(shí)或者計(jì)數(shù)結(jié)束的時(shí)候,會(huì)自動(dòng)觸發(fā)中斷響應(yīng)。主程序會(huì)停下,跳入定時(shí)器/計(jì)數(shù)器T0或 定時(shí)器/計(jì)數(shù)器T1的中斷程序中。
c.串口中斷源
串口中斷源同樣不需要輸入端,每當(dāng)單片機(jī)發(fā)送完一組數(shù)據(jù),或者接收完一組數(shù)據(jù)的時(shí)候,串口中斷就會(huì)啟動(dòng),主程序會(huì)停下,轉(zhuǎn)而跳入串口的中斷程序中。
中斷法矩陣式鍵盤(pán)的硬件電路和其它矩陣式鍵盤(pán)沒(méi)有任何區(qū)別,只需要在普通的矩陣式鍵盤(pán)上引入一個(gè)多輸入與門(mén),將所有行線或者列線作為多輸入與門(mén)的輸入端,與門(mén)的輸出接到外部中斷0或者外部中斷1上。當(dāng)有按鍵按下時(shí),與門(mén)的輸出電平就會(huì)由原本的高電平跳轉(zhuǎn)為低電平,從而在P3.2或者P3.3上產(chǎn)生一個(gè)負(fù)躍變,此時(shí)主程序會(huì)停止,轉(zhuǎn)入外部中斷0或者外部中斷1的中斷程序中。我們只需將鍵盤(pán)掃描程序放在中斷程序內(nèi),便實(shí)現(xiàn)了中斷法的矩陣式鍵盤(pán)設(shè)計(jì)。
鍵盤(pán)作為向系統(tǒng)操作人員的干預(yù)指令的接口,以其特定的按鍵序列代表著各種確定的操作命令,所以,準(zhǔn)確無(wú)誤的辨認(rèn)每個(gè)鍵的動(dòng)作和其所處的狀態(tài),是系統(tǒng)能否正常工作的關(guān)鍵。
多數(shù)鍵盤(pán)的按鍵多使用機(jī)械式彈性開(kāi)關(guān),一個(gè)電信號(hào)通過(guò)機(jī)械觸點(diǎn)的斷開(kāi),閉合過(guò)程完成高低電平的切換。由于機(jī)械觸點(diǎn)的彈性作用,一個(gè)按鍵開(kāi)關(guān)在閉合及斷開(kāi)的瞬間必然伴隨著一連串的抖動(dòng)。
抖動(dòng)過(guò)程的長(zhǎng)短是由按鍵的機(jī)械特性決定,一般是10~20ms。 為了使CPU對(duì)一次按鍵動(dòng)作只確認(rèn)一次,必須消除抖動(dòng)的影響,抖動(dòng)的防治分為硬件和軟件兩種方式。
硬件防抖動(dòng)方法:通過(guò)硬件電路消除按鍵過(guò)程中的抖動(dòng)的影響是一種廣為采用的措施。這種做法,工作可靠且節(jié)省機(jī)時(shí),硬件防抖動(dòng)電路如圖2所示。
軟件防抖動(dòng)方法:如前所述,若采用硬件消抖電路,那么N個(gè)鍵就必須配有N個(gè)防抖電路。因此,當(dāng)按鍵的個(gè)數(shù)比較多時(shí),硬件防抖將無(wú)法勝任。在這種情況下,可以采用軟件的方法進(jìn)行防抖。當(dāng)?shù)谝淮螜z測(cè)到有建按下時(shí),先用軟件延時(shí)(10~20ms),而后再確認(rèn)鍵電平是否依舊維持閉合狀態(tài)的電平。若保持閉合狀態(tài)電平,則確認(rèn)此間已按下,從而消除抖動(dòng)影響。
軟件防抖動(dòng)通過(guò)延遲程序完成,將延遲程序聲明在函數(shù)體內(nèi),在需要的時(shí)候調(diào)用。延遲程序如下所示:
程序由兩層for循環(huán)組成,內(nèi)層200次,外層100次,總循環(huán)次數(shù)20000次??梢钥吹剑h(huán)的主題語(yǔ)句為空,所以每次循環(huán)不做任何動(dòng)作,只是達(dá)到了延時(shí)的目的。
圖2 防抖動(dòng)電路
鍵盤(pán)是人機(jī)交互中信息輸入的重要入口,設(shè)計(jì)合理的鍵盤(pán)要求反映快速、按鍵判斷準(zhǔn)確、系統(tǒng)資源占用合理。用單片機(jī)的中斷法實(shí)現(xiàn)的矩陣式鍵盤(pán)符合這些要求,是目前鍵盤(pán)設(shè)計(jì)中最常用的方式。
[1]郭天祥.51單片機(jī)C語(yǔ)言教程[M],北京:電子工業(yè)出版社,2005
[2]任克強(qiáng),王新勇.基于S3C2440A的液晶觸摸亂序密碼鍵盤(pán)設(shè)計(jì)[J].計(jì)算機(jī)安全.2010(11)
[3]鄔正義,范瑜,徐惠鋼等.現(xiàn)代無(wú)線通信技術(shù)[M].北京:高等教育出版社,2006.
[4]唐述凱.8086/806616位微機(jī)處理器入門(mén) 第六章8086/8088支持電路[J].微處理機(jī).1984(04)
[5]蔡卓恩,李小青.基于TMS320F2812的雙DSP芯片并行處理系統(tǒng)設(shè)計(jì)[J].機(jī)械研究與應(yīng)用.2010(02)
[6]陳平.基于PWM技術(shù)的A/D轉(zhuǎn)換電路的設(shè)計(jì)[J].微計(jì)算機(jī)信息.2007(29)
[8]張喜紅,祁懷遠(yuǎn),李鵬.C8051F系列單片機(jī)開(kāi)發(fā)與C語(yǔ)言編程[J].電子產(chǎn)品可靠性與環(huán)境試驗(yàn).2011(03)