單片機 第2章 (2)課件_第1頁
單片機 第2章 (2)課件_第2頁
單片機 第2章 (2)課件_第3頁
單片機 第2章 (2)課件_第4頁
單片機 第2章 (2)課件_第5頁
已閱讀5頁,還剩96頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第2章單片機鍵盤接口技術(shù)2.1鍵盤概述2.2非編碼式鍵盤2.3編碼式鍵盤2.1鍵盤概述

2.1.1按鍵的分類

組成鍵盤的按鍵開關(guān)按照結(jié)構(gòu)原理可分為兩類:一類是觸點式按鍵開關(guān),如機械觸點式按鍵、導(dǎo)電橡膠式按鍵、柔性按鍵等;另一類是無觸點按鍵開關(guān),如電氣式按鍵、磁感應(yīng)按鍵等。前者造價低,后者壽命長。目前,單片機系統(tǒng)中最常見的是觸點式按鍵開關(guān)。

(1)機械觸點式按鍵利用彈性使鍵復(fù)位,手感明顯,連線清晰,工藝簡單,適合單件制造,但是觸點處易侵入灰塵而導(dǎo)致接觸不良,體積相對較大。

(2)導(dǎo)電橡膠式按鍵利用橡膠的彈性來復(fù)位,通過壓制的方法把面板上所有的按鍵制成一塊,體積小,裝配方便,適合批量生產(chǎn),但是時間長了,橡膠老化會使彈力下降,同時易侵入灰塵。2.1.2按鍵的輸入

單片機系統(tǒng)中通常使用機械觸點式按鍵開關(guān),其主要功能是把機械上的通、斷轉(zhuǎn)換成為電氣上的邏輯關(guān)系。

如圖2-1(a)所示,機械觸點式按鍵一端接地,另一端提供邏輯電平,為確保按鍵可靠輸入,通過上拉電阻接?+5V電源。按鍵在閉合或斷開的瞬間,由于機械彈性作用的影響,通常伴隨有一定時間的觸點機械抖動,然后其觸點才穩(wěn)定下來。如圖2-1(b)所示,按鍵輸入波形不可避免地出現(xiàn)抖動,這樣就會造成輸入電壓不穩(wěn)定。圖2-1按鍵閉合及斷開時的電壓抖動波形通常按鍵抖動時間的長短與開關(guān)的機械特性有關(guān),一般為5~10ms。這是一個很重要的時間參數(shù),在很多場合都要用到。其中,t1期間為前沿抖動,t2期間為穩(wěn)定期,t3期間為后沿抖動,t1、t2在一起組成按鍵閉合階段。按鍵的閉合穩(wěn)定時間t2由操作人員的按鍵動作來決定,一般在十分之幾秒至幾秒之間。1.硬件方法

硬件消抖的典型做法是:采用R-S觸發(fā)器或RC積分電路。

1)雙穩(wěn)態(tài)消抖

雙穩(wěn)態(tài)消抖即在按鍵輸出端加R-S觸發(fā)器或單穩(wěn)態(tài)觸發(fā)器構(gòu)成消抖電路,如圖2-2所示,觸發(fā)器一旦翻轉(zhuǎn),觸點抖動對其不會產(chǎn)生任何影響。

電路的工作過程如下:

(1)當(dāng)按鍵未按下時,a=0,b=1,輸出A=1,B=0。(2)當(dāng)按鍵按下時,按鍵的機械彈性作用使按鍵產(chǎn)生前沿抖動。

①當(dāng)開關(guān)沒有穩(wěn)定到達b端時,B輸出為0,反饋到上面的與非門的輸入端,封鎖了與非門,雙穩(wěn)態(tài)電路的狀態(tài)不會改變,輸出A保持為1,這樣就消除了前沿的抖動波形。

②當(dāng)開關(guān)穩(wěn)定到達b端時,因a=1,b=0,使A=0,雙穩(wěn)態(tài)電路狀態(tài)發(fā)生翻轉(zhuǎn)。(3)當(dāng)釋放按鍵時,按鍵的機械彈性作用使按鍵產(chǎn)生后沿抖動。

①當(dāng)開關(guān)未穩(wěn)定到達a端時,A=0,封鎖了下面的與非門,雙穩(wěn)態(tài)電路的狀態(tài)保持不變,輸出A保持不變,這樣就消除了后沿的抖動波形。

②當(dāng)開關(guān)穩(wěn)定到達a端時,因a=0,b=1,使A=1,雙穩(wěn)態(tài)電路狀態(tài)發(fā)生翻轉(zhuǎn),輸出A重新返回原來的狀態(tài)。2)濾波消抖

如圖2-3所示,利用RC積分電路可以吸收振蕩脈沖的特點,正確選取適當(dāng)?shù)臅r間常數(shù),便可消除按鍵抖動的影響。圖2-3用RC積分電路構(gòu)成的消抖電路電路的工作過程如下:

(1)當(dāng)按鍵未按下時,電容C兩端的電壓為Vcc,非門輸出為1。

(2)當(dāng)按鍵按下時,由于電容C兩端的電壓不能突變,因此即使在接觸過程中出現(xiàn)抖動,只要C兩端的充電電壓波動不超過非門的開啟電壓(TTL為0.8V左右),非門的輸出就不會改變(可通過選取合適的R1、R2和C的值來實現(xiàn))。2.軟件方法

當(dāng)按鍵較多時,硬件方法將導(dǎo)致系統(tǒng)硬件電路設(shè)計復(fù)雜化,硬件消抖將無法勝任,這時常采用軟件方法進行消抖。

軟件消抖的基本原理是:在檢測到有按鍵按下時,不是立即認定此鍵已被按下,而是執(zhí)行一個10ms左右(具體時間應(yīng)視所使用的按鍵進行調(diào)整)的延時程序后,再確認該鍵電平是否仍然保持閉合狀態(tài)電平,若仍然保持,則確認該鍵真正被按下。這實際上是避開了按鍵按下時的抖動時間,從而消除了前沿抖動的影響。同理,在檢測到按鍵釋放后,再延時5~10ms,消除后沿抖動,然后再對鍵值進行處理。不過一般情況下,我們通常不對按鍵釋放的后沿進行處理,實踐證明,這樣也能滿足一定的要求。

總之,硬件方法一般用在對按鍵操作過程比較嚴格,且按鍵數(shù)量較少的場合,而按鍵數(shù)量較多時,通常采用軟件消抖。更好的做法是利用定時中斷服務(wù)程序或利用標志位的方法來實現(xiàn)軟件消抖。2.1.4按鍵的其他問題

前面對按鍵的分類、輸入及消抖進行了說明,在實際中還應(yīng)該考慮按鍵的串鍵、連擊、多功能鍵、復(fù)合鍵等其他問題。

1.串鍵

串鍵是指同時有一個以上的鍵被按下。串鍵會引起CPU錯誤響應(yīng)。通常采取的策略是:單鍵按下有效,多鍵同時按下無效。3.多功能鍵

在單片機應(yīng)用系統(tǒng)中,為簡化硬件線路,縮小整個系統(tǒng)的規(guī)模,總希望設(shè)置最少的按鍵,獲得最多的控制功能??梢酝ㄟ^軟件的方法實現(xiàn)一鍵多功能。

通常采用的策略是:選擇一個RAM工作單元,對某一個按鍵進行按鍵計數(shù),根據(jù)不同的計數(shù)值,轉(zhuǎn)到子程序。這種計數(shù)多功能鍵最好與顯示器結(jié)合使用,以便知道當(dāng)前的計數(shù)值,同時配合一個啟動鍵。

4.復(fù)合鍵

復(fù)合鍵就是兩個或兩個以上的鍵的聯(lián)合,當(dāng)這些鍵同時被按下時,才能執(zhí)行相應(yīng)的功能程序。實際情況做不到“同時按下”,它們的時間差別可以長到50ms。

通常采用的策略是:定義一個或兩個引導(dǎo)鍵,這些引導(dǎo)鍵被按下時沒什么意義,執(zhí)行空操作。微機鍵盤上的CTRL、SHIFT、ALT等均為引導(dǎo)鍵,其缺點是操作復(fù)雜,且操作時間較長。2.1.5鍵盤的編碼方式

鍵盤是由一組規(guī)則排列的按鍵組成的,每一個按鍵所在的物理位置不同,對應(yīng)的功能也不同。按鍵所在的物理位置的編碼稱為鍵碼,而按鍵所對應(yīng)的功能或數(shù)值稱為鍵名或鍵值,如數(shù)字鍵0~9、字符鍵0AH~0FH、功能鍵10H等。鍵碼是人為規(guī)定的,由相應(yīng)的鍵值處理程序來實現(xiàn)。2.2非編碼式鍵盤

2.2.1鍵盤的工作方式

鍵盤的工作方式有程序掃描方式、定時掃描方式和中斷方式。

1.程序掃描方式

程序掃描方式就是在主程序循環(huán)掃描各任務(wù)的中間,加入鍵盤掃描的任務(wù)。當(dāng)主程序掃描的任務(wù)太多或任務(wù)耗時較長時,單片機的反應(yīng)會有些慢。2.定時掃描方式

定時掃描方式是指采用定時中斷方式對鍵盤進行掃描,以響應(yīng)鍵盤輸入的請求。這種方式避免了程序掃描方式的缺點,能及時讀取鍵盤的輸入,但不管鍵盤上有無鍵閉合,CPU總是定時掃描鍵盤,降低了CPU的效率。

程序掃描方式和定時掃描方式相似,都屬于查詢方式,后者較前者的實時性強,但需占用一個定時器。3.中斷方式

中斷方式是指各個按鍵都接到一個與門上,當(dāng)任何一個按鍵被按下時,都會使與門輸出為低電平,從而引起單片機的中斷,這樣就克服了定時掃描方式的不足,但需要額外的硬件電路,并占用一個外部中斷源。中斷方式的好處是不用在主程序中不斷地循環(huán)查詢,如果有鍵被按下,則單片機再去做相應(yīng)的處理。圖2-4鍵盤的組成形式1.獨立式鍵盤

獨立式鍵盤是指各個按鍵相互獨立,每個按鍵的一端接地,另一端占用一個I/O口線。按鍵被按下時輸出低電平有效,為了保證按鍵斷開時輸出高電平,在每個按鍵的輸出端接入10kΩ左右的上拉電阻。2.矩陣式鍵盤

矩陣式鍵盤也稱為行列式鍵盤,由行線和列線組成,按鍵一端接行線,另一端接列線,行、列線不相交,按鍵數(shù)等于矩陣行數(shù)和列數(shù)的乘積。同樣,為了保證按鍵斷開時,輸出高電平,列線或行線通過上拉電阻接到?+5V上,每一根行線、列線占用一個I/O口線。

例如,一個鍵盤有20個按鍵,如果采用獨立式,則需要20個I/O口線;如果采用矩陣式(如4根行線、5根列線),則只需要占用9個I/O口線。2.2.3獨立式鍵盤

1.接口電路

獨立式鍵盤單片機接口電路的設(shè)計一般采用低電平輸入有效方式,按鍵直接與單片機的I/O口線相接。為了保證按鍵斷開時,I/O口線有確定的高電平,在每個按鍵的輸入端接有上拉電阻。圖2-5(a)、(b)分別為采用查詢方式和中斷方式的接口電路。當(dāng)使用80C51單片機的I/O口作為按鍵的輸入端口時,如果使用P1、P2、P3端口,則因端口內(nèi)部已有上拉電阻,故外部的上拉電阻可省略。當(dāng)采用P0端口時,應(yīng)外接10kΩ左右的上拉電阻。

1)查詢方式

如圖2-5(a)所示,平時無鍵被按下時,各I/O口均為高電平;當(dāng)某鍵被按下時,相應(yīng)的輸入線為低電平。CPU查詢此輸入口的狀態(tài)就可很容易地判斷哪個鍵被按下。2)中斷方式

如圖2-5(b)所示,按鍵S0~S2的數(shù)據(jù)輸出線相與后與單片機的外部中斷相連。平時無鍵被按下時,各I/O口均為高電平,也為高電平;當(dāng)某鍵被按下時,相應(yīng)的輸入線為低電平,則為低電平,申請中斷,CPU響應(yīng)中斷后查詢此輸入口的狀態(tài)就可知道哪個鍵閉合。圖2-5獨立式鍵盤接口電路2.程序設(shè)計

獨立式鍵盤接口電路簡單,軟件程序也簡單易寫,有查詢方式和中斷方式兩種結(jié)構(gòu)。由于按鍵的數(shù)目較少,且相互獨立,按鍵識別容易,因此CPU可以根據(jù)按鍵被按下時所對應(yīng)的I/O輸入口的狀態(tài)直接進行編碼識別。對鍵值的處理一般采取直接處理的方式,即用跳轉(zhuǎn)指令A(yù)JMP或采用散轉(zhuǎn)指令JMP@A+DPTR。1)查詢方式

如圖2-5(a)所示,I/O口采用P1口,先逐位查詢每根I/O口線的輸入狀態(tài),如某一根I/O口線輸入為低電平,則可確認該I/O口線所對應(yīng)的按鍵已被按下,然后,再轉(zhuǎn)向該鍵的鍵值處理程序。

當(dāng)某一按鍵Sn(n=0~2)閉合時,P1.n輸入為低電平;釋放時,P1.n輸入為高電平。程序中,F(xiàn)0~F2為每個按鍵的功能程序的入口地址標號,PROM0~PROM2分別為每個按鍵的功能程序。

START:MOVA,#0FFH

MOVP1,A ;置輸入方式

MOVA,P1

JNB ACC.0,XD ;查詢P1.0是否為低電平

JNB ACC.1,XD ;查詢P1.1是否為低電平

JNB ACC.2,XD ;查詢P1.2是否為低電平

SJMPSTART

XD: LCALL Delay10ms ;延時10ms,消除抖動

MOV A,#0FFH

MOV P1,A ;置輸入方式

MOV A,P1

JNB ACC.0,F(xiàn)0 ;查詢P1.0是否為低電平

JNB ACC.1,F(xiàn)1 ;查詢P1.1是否為低電平

JNB ACC.2,F(xiàn)2 ;查詢P1.2是否為低電平

SJMP START ;無鍵按下,返回

F0: AJMP PROM0 ;轉(zhuǎn)0號鍵功能程序

F1: AJMP PROM1

F2: AJMP PROM2PROM0: … ;0號鍵功能程序

LJMP START

PROM1: … ;1號鍵功能程序

LJMP START

PROM2: … ;2號鍵功能程序

LJMP START

Delay10ms:… ;延時10ms子程序

RET2)中斷方式

查詢方式使CPU時刻處于鍵盤檢測狀態(tài),不能干別的事情。為了提高CPU的效率,可采用中斷方式。

如圖2-5(b)所示,各個按鍵都接到一個“與門”上,當(dāng)任何一個按鍵被按下時,都會使“與門”輸出為低電平,從而引起單片機中斷。它的好處在于:主程序不必不斷地循環(huán)查詢,只有中斷請求(表示有鍵按下)時,單片機才去做相應(yīng)的處理。總之,獨立式鍵盤的特點是各個按鍵相互獨立,單獨占用一根I/O口線,每根I/O口線的按鍵工作狀態(tài)不會影響其他I/O口線的工作狀態(tài),電路配置靈活,軟件結(jié)構(gòu)簡單。按鍵比較少或口線比較富余時,可以采用這種類型的鍵盤,但當(dāng)按鍵數(shù)量較多時,I/O口線浪費較大,而且查詢按鍵的時間也較長,不宜采用。2.2.4矩陣式鍵盤

1.接口電路

圖2-6所示的鍵盤為兩種典型的鍵盤布局,一般由16個按鍵組成(即4×4矩陣式鍵盤結(jié)構(gòu)),正好可以直接用單片機的一個并行口實現(xiàn),這也是一般單片機系統(tǒng)中最常用的一種形式,其單片機接口電路如圖2-7所示。圖2-6兩種典型的鍵盤布局圖2-7P1口直接構(gòu)成的4×4矩陣式鍵盤接口電路矩陣式鍵盤的工作原理是:按鍵設(shè)置在行列線交叉點上,行列線分別連接按鍵開關(guān)的兩端,列線通過上拉電阻接到+5V上。無鍵按下時,所有列線都處于高電平狀態(tài);有鍵按下時,按鍵所在行列線將導(dǎo)通,此時按鍵所在列線電平狀態(tài)將由與此列線相連的行線電平?jīng)Q定,行線電平為低,則列線電平為低;行線電平為高,則列線電平為高。這是識別矩陣鍵盤按鍵是否被按下的關(guān)鍵所在。需要說明的是:在單片機應(yīng)用系統(tǒng)中,除了直接通過單片機I/O口連接鍵盤外,還可以通過三態(tài)緩沖器573、8155、8255等I/O口擴展芯片來外接鍵盤,或者利用單片機的串行接口通過串/并轉(zhuǎn)換芯片74LS164來擴展鍵盤。

圖2-8所示為通過并行接口芯片8255擴展I/O口構(gòu)成的4×8矩陣式鍵盤接口電路。圖2-88255擴展的4×8矩陣式鍵盤接口電路2.按鍵的識別方法

由于矩陣式鍵盤采用行列式結(jié)構(gòu),行列線和多個鍵相連,因此各按鍵的按下與否均影響該鍵所在行線和列線的電平,各鍵間相互影響。也就是說,一根I/O口線的狀態(tài)已經(jīng)不能確定哪一個鍵被按下,需要通過連接到按鍵兩端的兩根I/O口線的狀態(tài)共同確定按鍵的狀態(tài),因此,必須將行線與列線信號狀態(tài)分別處理并綜合考慮才能確定按鍵的行列位置。1)掃描法

行掃描法就是使行線逐行步進輸出“0”(相當(dāng)于逐行動態(tài)接地),列線輸入;相反,列掃描法就是使列線逐列步進輸出“0”(相當(dāng)于逐列動態(tài)接地),行線輸入。

掃描法原理如圖2-9所示。這里以行掃描法為例,即P1.0~P1.3為行輸出線,分時逐行輸出“0”,P1.4~P1.7為列輸入線。注意:在讀P1.4~P1.7引腳狀態(tài)時,必須先向它們寫“1”。圖2-9掃描法原理圖具體分析如下:

(1)將P1口置“1”,然后令P1.0輸出“0”時,掃描第0行,讀入P1的狀態(tài)。具體描述如下:

①當(dāng)0鍵被按下時,讀入P1的狀態(tài)為11101110,即0EEH。

②當(dāng)1鍵被按下時,讀入P1的狀態(tài)為11011110,即0DEH。

③當(dāng)2鍵被按下時,讀入P1的狀態(tài)為10111110,即0BEH。

④當(dāng)3鍵被按下時,讀入P1的狀態(tài)為01111110,即7EH。(2)當(dāng)P1.1輸出“0”時,掃描第1行,讀入P1的狀態(tài)。

具體描述如下:

①當(dāng)4鍵被按下時,讀入P1的狀態(tài)為11101101,即0EDH。

②當(dāng)5鍵被按下時,讀入P1的狀態(tài)為11011101,即0DDH。

③當(dāng)6鍵被按下時,讀入P1的狀態(tài)為10111101,即0BDH。

④當(dāng)7鍵被按下時,讀入P1的狀態(tài)為01111101,即7DH。(3)當(dāng)P1.2輸出“0”時,掃描第2行,P1.2所在的第2行的0、1、2、3列的4個按鍵8、9、A、B分別被按下時,對應(yīng)的P1狀態(tài)分別為0EBH、0DBH、0BBH、7BH。

(4)當(dāng)P1.3輸出“0”時,掃描第3行,P1.3所在的第3行的0、1、2、3列的4個按鍵C、D、E、F分別被按下時,對應(yīng)的P1狀態(tài)分別為0E7H、0D7H、0B7H、77H。2)反轉(zhuǎn)法

前面介紹的掃描法要逐行(列)掃描查詢,當(dāng)被按下的鍵在最后一行(列)時,要經(jīng)過多次掃描才能最后獲得鍵值;反轉(zhuǎn)法則顯得很簡練,無論被按下的鍵是處于第一列或是最后一列,均只需兩步即可獲得此按鍵所在的行列值。

下面介紹反轉(zhuǎn)法的兩個步驟,其原理圖如圖2-10所示。圖2-10反轉(zhuǎn)法原理圖(1)將P1.3~P1.0編程為行輸入線,P1.7~P1.4編程為列輸出線,并使P1口輸出為0FH(保證列輸出P1.7~P1.4為0000)。若有鍵被按下,則P1.3~P1.0肯定不全為1,其中為0的位對應(yīng)的是按鍵的所在行位置。如圖2-10(a)所示,若按下A鍵,則P1.3~P1.0輸入肯定為1011,按鍵在第2行。將這個數(shù)據(jù)存放到存儲器的某個單元(如N單元)中。(2)將第(1)步中的傳送方向反轉(zhuǎn)過來,即將P1.4~P1.7定義為輸入,P1.0~P1.3定義為輸出,并使I/O口輸出的數(shù)據(jù)為N單元的數(shù)據(jù)(因為這時已經(jīng)知道鍵所在的行位置),然后讀入I/O口數(shù)據(jù)。該數(shù)據(jù)的P1.7~P1.4位中“0”電平對應(yīng)的位就是按下鍵的列位置。如果按下的是圖2-10(b)所示的鍵,則P1.7~P1.4輸入肯定為1011,按下鍵在第2列。3)掃描程序下面編制基于掃描法識別按鍵的鍵盤掃描子程序(通常將查詢鍵碼的過程稱之為“掃描”):當(dāng)有鍵被按下時,將鍵值送回寄存器A;當(dāng)無鍵被按下時,將“0”送回A。;*****************掃描0行**********************************

GET_KEY: MOV P1,#0FEH

;掃描第0行,即P1口輸出11111110

MOV A,P1

;讀入P1口,判斷第0行是否有某一列的鍵被按下

CJNE A,#0FEH,K3

;若不相等,則按鍵在第0行,轉(zhuǎn)去進行鍵值分析

;若相等,則無鍵被按下,掃描下一行;*********************掃描1行*************************

MOV P1,#0FDH

;掃描第1行,即P1口輸出11111101

MOV A,P1

;判斷第1行是否有某一列的鍵被按下

CJNE A,#0FDH,K3

;若不相等,則按鍵在第1行,轉(zhuǎn)去進行鍵值分析

;若相等,則無鍵被按下,掃描下一行;*****************掃描2行************************

MOV P1,#0FBH ;掃描第2行

MOV A, P1

;判斷第2行是否有某一列的鍵被按下

CJNE A,#0FBH,K3

;若不相等,則按鍵在第2行,轉(zhuǎn)去進行鍵值分析

;若相等,則無鍵被按下,掃描下一行;***********************掃描3行*************************

MOV P1,#0F7H ;掃描第3行

MOV A,P1 ;判斷第3行是否有某一列的鍵被按下

CJNE A,#0F7H,K3

;若不相等,則按鍵在第3行,轉(zhuǎn)去進行鍵值分析

MOV A,#0

;若相等,則無鍵被按下,A中返回“0"

RET ;返回

K3:… ;鍵值分析

… 3.鍵值分析

鍵值分析是由鍵值處理程序來完成的。鍵值處理程序的關(guān)鍵是如何對按鍵進行編碼,從而獲取按鍵所對應(yīng)的鍵號或鍵值。鍵號是鍵盤上各鍵的編號,如0、1、…、A、B、…、F。鍵值是指根據(jù)掃描原理,各鍵所對應(yīng)的十六進制數(shù)碼,如0EEH、0DEH、…、0BBH、7BH、…、77H。在鍵盤處理程序中,每個鍵都被賦予了一個鍵號。(1)對于獨立式鍵盤,由于按鍵的數(shù)目較少,且鍵盤中各個按鍵互不干擾,因此可以根據(jù)實際需要對鍵盤中的按鍵進行靈活編碼。

最簡單的編碼方式就是直接狀態(tài)編碼,即根據(jù)I/O輸入口所直接反映的相應(yīng)按鍵被按下的狀態(tài)進行編碼。假如圖

2-5中的S0鍵被按下,則P1口的輸入狀態(tài)是11111110,S0鍵的直接狀態(tài)編碼就是FEH。CPU可以通過直接讀取I/O口的狀態(tài)來獲取按鍵的直接狀態(tài)編碼值,然后根據(jù)這個值直接進行鍵值分析處理。(2)對于矩陣式鍵盤,由于按鍵的數(shù)目較多,采用行列式結(jié)構(gòu),鍵盤中各個按鍵相互影響,因此,鍵盤中的按鍵編碼較為復(fù)雜,需要綜合考慮。

①鍵號編碼:按鍵的鍵號由行號和列號唯一確定,所以分別對行號和列號進行二進制編碼,然后將兩值合成一個字節(jié),高4位是行號,低4位是列號。例如,34H表示第3行、第4列的按鍵,而C4H表示第12行、第4列的按鍵等。但這種編碼方式對于不同行的鍵,其離散性較大。例如,對于一個4×4的鍵盤,14H鍵和21H鍵之間間隔13,實際上卻是兩個連續(xù)的鍵,因此不利于鍵值分析處理。所以,常常采用依次排列鍵號的方式對按鍵進行編碼。對于一個4×4的鍵盤,可以鍵號編碼為:01H、02H、03H、04H、…、0EH、0FH,共16個。②鍵值編碼:每個按鍵都有自己的行值和列值,行值和列值的組合就是這個按鍵的鍵值編碼。例如,“按鍵的識別方法”部分中所述,“E”號鍵對應(yīng)行線P1.3?=?0,其他全為“1”,行值為0111B,列線中P1.6=0,其他的全為“1”,列值為1011B,故“E”號鍵對應(yīng)鍵值編碼為10110111B,高4位是列值,低4位是行值。以此類推,結(jié)合圖2-9和圖2-10,鍵號與鍵值的對應(yīng)關(guān)系如表2-2所示。(3)求鍵號與鍵值。鍵號編碼與鍵值編碼之間有一定的對應(yīng)關(guān)系,可以通過查表或計算的方法來獲取。

①計算:鍵號?=?行首鍵號?+?列號。圖2-10中,列號是0、1、2、3,行首鍵號是0、4、8、12。

例如,對于“A”號鍵,10=8(行首鍵號)+2(列號)。②參照表2-2,將鍵號“0”到“F”所對應(yīng)的鍵值做成一個固定的表格,然后將識別按鍵的鍵值與表中的鍵值逐一進行比較,同時計數(shù)器從0開始計數(shù),若不相等,則增1,若相等,則計數(shù)器的值即為鍵號。相關(guān)參考匯編程序如下: … ;求鍵值和鍵號

PRO_KEY: MOV R1, #16 ;16個按鍵

MOV R2, #0 ;計數(shù)器

MOV DPTR, #KeyTAB ;鍵值表首地址

COMP: MOV A, R2

MOVC A, @A+DPTR

CJNE A, B, KK

;識別按鍵的鍵值在單元B中進行比較,若不相等則繼續(xù)

MOV A, R2 ;若相等,則取鍵號 RET

KK: INC R2

DJNZ R1, COMP

RET

KeyTABDB0EEH,0DEH,0BEH,07EH ;0123

DB0EDH,0DDH,0BDH,07DH ;4567

DB0EBH,0DBH,0BBH,07BH ;89AB

DB0E7H,0D7H,0B7H,077H ;CDEF4.程序設(shè)計

軟件實現(xiàn)過程及其程序設(shè)計結(jié)構(gòu)分為以下四個步驟(如圖2-11所示):

(1)判斷鍵盤上有無鍵被按下。其方法為:快速掃描,即P1.0~P1.3端口輸出全為0,讀P1.3~P1.7端口狀態(tài),當(dāng)全為“1”時,說明鍵盤無鍵按下,當(dāng)不全為“1”時,說明鍵盤有鍵被按下。圖2-11鍵盤掃描程序流程圖(2)消除按鍵抖動的影響。其方法為:在判斷有鍵被按下后,調(diào)用軟件延時程序消除鍵盤抖動,再判斷鍵盤狀態(tài),若該鍵仍處于閉合狀態(tài),則確定該鍵被按下,否則作按鍵抖動處理。

(3)求鍵號和鍵值。根據(jù)前面介紹的按鍵識別方法,確定按鍵的行列位置,再利用計算或查表的方法求取按鍵的鍵號。根據(jù)按鍵位置進行鍵的重新編號,從而得到按鍵的鍵值。(4)等待釋放并進行鍵值處理。為了保證按鍵每閉合一次,CPU僅作一次處理,等待按鍵釋放后,再進行此次按鍵的鍵值分析處理。相關(guān)參考匯編程序如下:

SCAN_KEY:MOVP1,#0F0H

;P1口初始化,快速掃描,所有行線輸出全為0

MOVA,P1

CJNEA,#0F0H,XD

;若有,則轉(zhuǎn)去進行鍵消抖處理

SJMPNO_KEY;若無鍵被按下,則A中返回“0”XD: LCALL DELY10ms;延時10ms,消抖

MOV P1,#0F0H

MOV A,P1

;消抖時間過后,再判斷是否有鍵被按下

CJNE A,#0F0H,GET_KEY

;若有鍵被按下,則開始按鍵掃描

NO_KEY:MOVA,#0;若無鍵被按下,則A中返回“0”

RET

GET_KEY: … ;按鍵掃描程序

… …

MOV P1, #0F0H;等待按鍵被釋放

SF: MOV A,P1

CJNE A,#0F0H,SF

PRO_KEY: … ;鍵值分析

…2.3編?碼?式?鍵?盤

非編碼式鍵盤接口電路中,無論是直接通過單片機I/O口連接鍵盤,還是利用8155、8255等I/O口擴展芯片外接鍵盤,往往都會占用CPU有限的資源。因此,一些芯片公司推出了通用鍵盤顯示接口芯片,比較典型的有美國Intel公司早期推出的8279、廣州周立功單片機發(fā)展有限公司近期推出的ZLG7289和ZLG7290等。2.3.1ZLG7289概述

ZLG7289內(nèi)部含有譯碼器,可直接接收BCD碼或十六進制碼,并同時具有2種譯碼方式。此外,ZLG7289還具有多種控制指令,如消隱﹑閃爍﹑左移﹑右移﹑段尋址等。ZLG7289具有片選信號,可方便地實現(xiàn)多于8位的顯示或多于64鍵的鍵盤接口。ZLG7289的技術(shù)特點如下:

(1)串行接口,無需外圍元件即可直接驅(qū)動LED數(shù)碼管。

(2)功能上完全替代8279、8155、8255、7279、7219系列器件。

(3)各位獨立控制譯碼、不譯碼、消隱和閃爍屬性。

(4)具有段尋址指令,可方便地控制獨立LED數(shù)碼管。

(5)?64鍵鍵盤控制器,內(nèi)含去抖動電路。(6)標準DIP28/SOIC28封裝。

(7)工作電壓范圍很寬,為?+2.7~6V。

(8)工作溫度范圍為?-40~?+85℃。

(9)段電流可達15mA以上,字電流可達100mA。

ZLG7289可廣泛地應(yīng)用于儀器儀表、工業(yè)控制器、條形顯示器、控制面板等領(lǐng)域。2.3.2ZLG7289的引腳排列及功能說明

ZLG7289芯片具有標準的DIP28和SOIC28兩種封裝形式。其引腳排列如圖2-12所示,各引腳的功能說明如表2-3所示。圖2-12ZLG7289的引腳排列(SOIC28,DIP28)2.3.3ZLG7289鍵盤接口方法

ZLG7289的典型應(yīng)用電路如圖2-13所示。圖2-13ZLG7289編碼式鍵盤接口電路1.?ZLG7289與單片機鍵盤接口

圖2-13中,以80C51單片機為例,給出了ZLG7289與單片機的接口電路,采用SPI串行總線方式,ZLG7289的、CLK、DIO和分別與單片機的P1.0、P1.1、P1.2和連接,只需要占用單片機的4根I/O口線。2.?ZLG7289與鍵盤和LED數(shù)碼管的連接

在圖2-13中,ZLG7289應(yīng)連接共陰極數(shù)碼管,應(yīng)用中無需用到的數(shù)碼管和鍵盤可以不連接,因而省去數(shù)碼管和對數(shù)碼管設(shè)置消隱屬性均不會影響鍵盤的使用。

數(shù)碼管電路中,由于ZLG7289采用循環(huán)掃描工作方式,如果采用普通的數(shù)碼管,亮度可能不夠,因此應(yīng)采用高亮度或超高亮度的數(shù)碼管,且尺寸也不宜選得過大(一般字符高度不超過1英寸(1英寸=2.54厘米),如果使用大型的數(shù)碼管,則應(yīng)選用適當(dāng)?shù)尿?qū)動電路)。按鍵電路中,必須有相應(yīng)的下拉電阻(如R1~R8,阻值為100kΩ)和位選電阻(如R17~R24,阻值為10kΩ,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論