鍵盤顯示器接口課件_第1頁
鍵盤顯示器接口課件_第2頁
鍵盤顯示器接口課件_第3頁
鍵盤顯示器接口課件_第4頁
鍵盤顯示器接口課件_第5頁
已閱讀5頁,還剩323頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第10章AT89S51單片機(jī)與輸入/輸出

外設(shè)的接口1第10章AT89S51單片機(jī)與輸入/輸出

第10章目錄10.1LED數(shù)碼管的顯示原理

10.1.1LED數(shù)碼管的結(jié)構(gòu)

10.1.2LED數(shù)碼管工作原理10.2鍵盤接口原理

10.2.1鍵盤輸入應(yīng)解決的問題

10.2.2鍵盤的工作原理

10.2.3鍵盤的工作方式10.3鍵盤/顯示器接口設(shè)計(jì)實(shí)例

10.3.1利用AT89S51單片機(jī)串行口實(shí)現(xiàn)的鍵盤/顯示器接口2

10.3.2各種專用的鍵盤/顯示器接口芯片簡介

10.3.3專用接口芯片CH451實(shí)現(xiàn)的鍵盤/顯示器控制

10.3.4專用接口芯片HD7279實(shí)現(xiàn)的鍵盤/顯示器控制10.4AT89S51單片機(jī)與液晶顯示器(LCD)的接口

10.4.1LCD顯示器的分類

10.4.2點(diǎn)陣字符型液晶顯示模塊介紹

10.4.3AT89S51單片機(jī)與LCD的接口及軟件編程10.5AT89S51單片機(jī)與微型打印機(jī)TPP-40A/16A的接口10.6AT89S51單片機(jī)與BCD碼撥盤的接口設(shè)計(jì)310.3.2各種專用的鍵盤/顯示器接口芯片簡介3內(nèi)容概要大多數(shù)的單片機(jī)應(yīng)用系統(tǒng),都要配置輸入外設(shè)和輸出外設(shè)。常用的輸入外設(shè)有鍵盤、BCD碼撥盤等;常用的輸出外設(shè)有LED數(shù)碼管、LCD顯示器、打印機(jī)等。本章介紹AT89S51與各種輸入外設(shè)、輸出外設(shè)的接口設(shè)計(jì)以及軟件編程。4410.1LED數(shù)碼管的顯示原理 LED(LightEmittingDiode)發(fā)光二極管縮寫。LED數(shù)碼管是由發(fā)光二極管構(gòu)成的。10.1.1LED數(shù)碼管的結(jié)構(gòu) 常見的LED數(shù)碼管為“8”字型的,共計(jì)8段。每一段對應(yīng)一個(gè)發(fā)光二極管。有共陽極和共陰極兩種,如圖10-1所示。共陰極發(fā)光二極管的陰極連在一起,通常公共陰極接地。當(dāng)陽極為高電平時(shí),發(fā)光二極管點(diǎn)亮。 同樣,共陽極LED數(shù)碼管的發(fā)光二極管的陽極連接在一起,公共陽極接正電壓,當(dāng)某個(gè)發(fā)光二極管的陰極接低電平時(shí),發(fā)光二極管被點(diǎn)亮,相應(yīng)的段被顯示。510.1LED數(shù)碼管的顯示原理5圖10-18段LED數(shù)碼管結(jié)構(gòu)及外形6圖10-18段LED數(shù)碼管結(jié)構(gòu)及外形6為了使數(shù)碼管顯示不同的符號或數(shù)字,要把某些段發(fā)光二極管點(diǎn)亮,就要為LED數(shù)碼管提供段碼(字型碼)。LED數(shù)碼管共計(jì)8段。正好是一個(gè)字節(jié)。習(xí)慣上是以“a”段對應(yīng)段碼字節(jié)的最低位。各段與字節(jié)中各位對應(yīng)關(guān)系如表10-1所示。按照上述格式,顯示各種字符的8段LED數(shù)碼管的段碼如表10-2所示。7為了使數(shù)碼管顯示不同的符號或數(shù)字,要把某些段發(fā)光二極管點(diǎn)亮,88表10-1只列出了部分段碼,讀者可以根據(jù)實(shí)際情況選用,或重新定義。除“8”字型的LED數(shù)碼管外,市面上還有“±1”型、“米”字型和“點(diǎn)陣”型LED顯示器,如圖10-2所示。本章均以“8”字型的LED數(shù)碼管為例。

圖10-2

其他各種字型的LED顯示器9表10-1只列出了部分段碼,讀者可以根據(jù)實(shí)際情況選用,或重新10.1.2LED數(shù)碼管工作原理 圖10-3所示為顯示4位字符的LED數(shù)碼管的結(jié)構(gòu)原理圖。N位位選線和8

N條段碼線。段碼線控制顯示字型,而位選線控制著該顯示位的LED數(shù)碼管的亮或暗。

圖10-34位LED數(shù)碼管的結(jié)構(gòu)原理圖1010.1.2LED數(shù)碼管工作原理圖10-34位LED數(shù)碼管有靜態(tài)顯示和動態(tài)顯示兩種顯示方式。1.LED靜態(tài)顯示方式無論多少位LED數(shù)碼管,同時(shí)處于顯示狀態(tài)。靜態(tài)顯示方式,各位的共陰極(或共陽極)連接在一起并接地(或接+5V);每位的段碼線(a~dp)分別與一個(gè)8位的I/O口鎖存器輸出相連。如果送往各個(gè)LED數(shù)碼管所顯示字符的段碼一經(jīng)確定,則相應(yīng)I/O口鎖存器鎖存的段碼輸出將維持不變,直到送入另一個(gè)字符的段碼為止。正因?yàn)槿绱耍o態(tài)顯示方式的顯示無閃爍,亮度都較高,軟件控制比較容易。11LED數(shù)碼管有靜態(tài)顯示和動態(tài)顯示兩種顯示方式。11圖10-4為4位LED數(shù)碼管靜態(tài)顯示器電路,各位可獨(dú)立顯示,靜態(tài)顯示方式接口編程容易,但是占用口線較多。對圖10-4電路,若用I/O口線接口,要占用4個(gè)8位I/O口。因此在顯示位數(shù)較多的情況下,所需的電流比較大,對電源的要求也就隨之增高,這時(shí)一般都采用動態(tài)顯示方式。2.LED動態(tài)顯示方式無論在任何時(shí)刻只有一個(gè)LED數(shù)碼管處于顯示狀態(tài),即單片機(jī)采用“掃描”方式控制各個(gè)數(shù)碼管輪流顯示。12圖10-4為4位LED數(shù)碼管靜態(tài)顯示器電路,各位可獨(dú)立顯示,圖10-44位LED靜態(tài)顯示電路13圖10-44位LED靜態(tài)顯示電路13在多位LED顯示時(shí),為簡化硬件電路,通常將所有顯示位的段碼線的相應(yīng)段并聯(lián)在一起,由一個(gè)8位I/O口控制,而各位的共陽極或共陰極分別由相應(yīng)的I/O線控制,形成各位的分時(shí)選通。圖10-5所示為一個(gè)4位8段LED動態(tài)顯示電路。其中段碼線占用一個(gè)8位I/O口,而位選線占用一個(gè)4位I/O口。必須采用動態(tài)的“掃描”顯示方式。即在某一時(shí)刻,只讓某一位的位選線處于選通狀態(tài),而其他各位的位選線處于關(guān)閉狀態(tài),同時(shí),段碼線上輸出相應(yīng)位要有顯示的字符的段碼。14在多位LED顯示時(shí),為簡化硬件電路,通常將所有顯示位的段碼線圖10-54位8段LED動態(tài)顯示電路15圖10-54位8段LED動態(tài)顯示電路15雖然這些字符是在不同時(shí)刻出現(xiàn),而在同一時(shí)刻,只有一位顯示,其他各位熄滅,由于余輝和人眼的“視覺暫留”作用,只要每位顯示間隔足夠短,則可以造成“多位同時(shí)亮”的假象,達(dá)到同時(shí)顯示的效果。LED不同位顯示的時(shí)間間隔(掃描間隔)應(yīng)根據(jù)實(shí)際情況而定。顯示位數(shù)多,將占大量的單片機(jī)時(shí)間,因此動態(tài)顯示的實(shí)質(zhì)是以犧牲單片機(jī)時(shí)間來換取I/O端口的減少。圖10-6所示為8位LED動態(tài)顯示2009.10.10的過程。圖10-6(a)所示為顯示過程,某一時(shí)刻,只有一位LED被選通顯示,其余位則是熄滅的;圖10-6(b)所示為實(shí)際的顯示結(jié)果,人眼看到的是8位穩(wěn)定的同時(shí)顯示的字符。16雖然這些字符是在不同時(shí)刻出現(xiàn),而在同一時(shí)刻,只有一位顯示,其

圖10-68位LED動態(tài)顯示過程和結(jié)果動態(tài)顯示的優(yōu)點(diǎn)是硬件電路簡單,顯示器越多,優(yōu)勢越明顯。缺點(diǎn)是顯示亮度不如靜態(tài)顯示的亮度高。如果“掃描”速率較低,會出現(xiàn)閃爍現(xiàn)象。171710.2鍵盤接口原理鍵盤具有向單片機(jī)輸入數(shù)據(jù)、命令等功能,是人與單片機(jī)對話的主要手段。下面介紹鍵盤的工作原理和鍵盤的工作方式。10.2.1鍵盤輸入應(yīng)解決的問題1.鍵盤的任務(wù)任務(wù)有三項(xiàng):(1)判別是否有鍵按下?若有,進(jìn)入下一步工作。(2)識別哪一個(gè)鍵被按下,并求出相應(yīng)的鍵值。(3)根據(jù)鍵值,找到相應(yīng)鍵值的處理程序入口。1810.2鍵盤接口原理182.鍵盤輸入的特點(diǎn)常見鍵盤:觸摸式鍵盤、薄膜鍵盤和按鍵式鍵盤,最常用的是按鍵式鍵盤。按鍵實(shí)質(zhì)上就是一個(gè)開關(guān)。如圖10-7(a)所示,按鍵開關(guān)的兩端分別連接在行線和列線上,通過鍵盤開關(guān)機(jī)械觸點(diǎn)的斷開、閉合,其行線電壓輸出波形如圖10-7(b)所示。

圖10-7

鍵盤開關(guān)及其行線波形192.鍵盤輸入的特點(diǎn)19圖10-7(b)所示的t1和t3分別為鍵的閉合和斷開過程中的抖動期(呈現(xiàn)一串負(fù)脈沖),抖動時(shí)間長短與開關(guān)的機(jī)械特性有關(guān),一般為5~10ms,t2為穩(wěn)定的閉合期,其時(shí)間由按鍵動作確定,一般為十分之幾秒到幾秒,t0、t4為斷開期。3.按鍵的識別鍵的閉合與否,行線輸出電壓上就是呈現(xiàn)高電平或低電平。高電平,表示鍵斷開,低電平則表示鍵閉合,通過對行線電平的高低狀態(tài)的檢測,可確認(rèn)按鍵按下以及按鍵釋放與否。為了確保對一次按鍵動作只確認(rèn)一次按鍵有效,必須消除抖動期t1和t3的影響。20圖10-7(b)所示的t1和t3分別為鍵的閉合和斷開過程中的4.如何消除按鍵的抖動按鍵去抖動的方法有兩種:一種軟件延時(shí),本思想是:在檢測到有鍵按下時(shí),該鍵所對應(yīng)的行線為低電平,執(zhí)行一段延時(shí)10ms的子程序后,確認(rèn)該行線電平是否仍為低電平,如果仍為低電平,則確認(rèn)該行確實(shí)有鍵按下。當(dāng)按鍵松開時(shí),行線的低電平變?yōu)楦唠娖剑瑘?zhí)行一段延時(shí)10ms的子程序后,檢測該行線為高電平,說明按鍵確實(shí)已經(jīng)松開。采取本措施,可消除兩個(gè)抖動期t1和t3的影響。另一種是采用專用的鍵盤/顯示器接口芯片,這類芯片中都有自動去抖動的硬件電路。214.如何消除按鍵的抖動2110.2.2鍵盤的工作原理鍵盤可分為兩類:非編碼鍵盤和編碼鍵盤。非編碼鍵盤是利用按鍵直接與單片機(jī)相連接而成,這種鍵盤通常使用在按鍵數(shù)量較少的場合。使用這種鍵盤,系統(tǒng)功能通常比較簡單,需要處理的任務(wù)較少,但是可以降低成本、簡化電路設(shè)計(jì)。按鍵的信息通過軟件來獲取。1.非編碼鍵盤常見的為兩種結(jié)構(gòu):獨(dú)立式鍵盤和矩陣式鍵盤。(1)獨(dú)立式鍵盤特點(diǎn)是:一鍵一線,各鍵相互獨(dú)立,每個(gè)鍵各接一條I/O口線,通過檢測I/O輸入線的電平狀態(tài),可容易地判斷哪個(gè)按鍵被按下,如圖10-8所示。2210.2.2鍵盤的工作原理22圖10-8獨(dú)立式鍵盤接口電路23圖10-8獨(dú)立式鍵盤接口電路23對于圖10-8的鍵盤,圖中的上拉電阻保證按鍵釋放時(shí),輸入檢測線上有穩(wěn)定的高電平。當(dāng)某一按鍵按下時(shí),對應(yīng)的檢測線就變成了低電平,與其他按鍵相連的檢測線仍為高電平,只需讀入I/O輸入線的狀態(tài),判別哪一條I/O輸入線為低電平,很容易識別哪個(gè)鍵被按下。優(yōu)點(diǎn):電路簡單,各條檢測線獨(dú)立,識別按下按鍵的軟件編寫簡單。適用于鍵盤按鍵數(shù)目較少的場合,不適用于鍵盤按鍵數(shù)目較多的場合,因?yàn)閷⒄加幂^多的I/O口線。24對于圖10-8的鍵盤,圖中的上拉電阻保證按鍵釋放時(shí),輸入檢測識別某一鍵是否按下的子程序:KEYIN: MOV P1,0FFH;P1口寫入1,設(shè)置P1口為輸入狀態(tài) MOV A,P1 ;讀入8個(gè)按鍵的狀態(tài) CJNE A,#0FFH,QUDOU;有鍵按下,跳去抖動 LJMP RETURN ;無鍵按下,返回

QUDOU:MOVR3,A ;8個(gè)按鍵的狀態(tài)送R3保存 LCALLDELAY10 ;調(diào)用延時(shí)子程序,軟件去鍵抖動 MOV A,P1 ;再一次讀入8個(gè)按鍵的狀態(tài) CJNE A,R3,RETURN;兩次鍵值比較,不同, ;是抖動引起,轉(zhuǎn)RETURN 25識別某一鍵是否按下的子程序:25KEY0:

MOV C,P1.0;有鍵按下,讀P1.0的按鍵狀態(tài) JC KEY1 ;P1.0為高,該鍵未按下,跳KEY1, ;判下一個(gè)鍵 LJMP PKEY0 ;P1.0的鍵按下,跳PKEY0處理KEY1:

MOV C,P1.1;讀P1.1的按鍵狀態(tài) JC KEY2 ;P1.1為高,該鍵未按下,跳KEY2, ;判下一個(gè)鍵 LJMP PKEY1 ;P1.1的鍵按下,跳PKEY1處理26KEY0: MOV C,P1.0;有鍵按下,讀P1.0的按鍵KEY2:

MOV C,P1.2 ;讀P1.2的按鍵狀態(tài) JC KEY3 ;P1.2為高,該鍵未按下,跳 ;KEY3,判下一個(gè)鍵 LJMP PKEY2

;P1.2的鍵按下,跳PKEY2處理KEY3:

MOV C,P1.3 ;讀P1.3的按鍵狀態(tài) …… ……KEY7:

MOV C,P1.7 ;讀P1.7的按鍵狀態(tài) JC RETURN ;P1.7為高,該鍵未按下,跳

;RETURN處 LJMP PKEY7

;P1.7的鍵按下,跳PKEY7處理RETURN:

RET ;子程序返回27KEY2: MOV C,P1.2 ;讀P1.2的按鍵狀態(tài)27軟件延時(shí)10ms子程序DELAY10的編寫,參見第4章。對應(yīng)8個(gè)按鍵的鍵處理程序PKEY0~PKEY7,根據(jù)按鍵功能的要求來編寫。注意,在進(jìn)入鍵處理程序后,需要先等待按鍵釋放,再執(zhí)行鍵處理功能。另外,在鍵處理程序完成后,一定要跳向RETURN標(biāo)號處返回。(2)矩陣式鍵盤矩陣式(也稱行列式)鍵盤用于按鍵數(shù)目較多的場合,由行線和列線組成,按鍵位于行、列的交叉點(diǎn)上。如圖10-9所示,一個(gè)44的行、列結(jié)構(gòu)可以構(gòu)成一個(gè)16個(gè)按鍵鍵盤。在按鍵數(shù)目較多的場合,要節(jié)省較多的I/O口線。28軟件延時(shí)10ms子程序DELAY10的編寫,參見第4章。對應(yīng)圖10-9

矩陣式鍵盤接口29圖10-9矩陣式鍵盤接口29矩陣中無按鍵按下時(shí),行線為高電平;當(dāng)有按鍵按下時(shí),行線電平狀態(tài)將由與此行線相連的列線的電平?jīng)Q定。列線的電平如果為低,則行線電平為低;列線的電平如果為高,則行線的電平也為高,這是識別按鍵是否按下的關(guān)鍵所在。由于矩陣式鍵盤中行、列線為多鍵共用,各按鍵彼此將相互發(fā)生影響,所以必須將行、列線信號配合,才能確定閉合鍵位置。下面討論矩陣式鍵盤按鍵的識別方法。①掃描法。第1步,識別鍵盤有無鍵按下;第2步,如有鍵被按下,識別出具體的鍵位。下面以圖10-9所示的鍵3被按下為例,說明識別過程。30矩陣中無按鍵按下時(shí),行線為高電平;當(dāng)有按鍵按下時(shí),行線電平狀第1步,識別鍵盤有無鍵按下。先把所有列線均置為0,然后檢查各行線電平是否都為高,如果不全為高,說明有鍵按下,否則無鍵被按下。例如,當(dāng)鍵3按下時(shí),第1行線為低,還不能確定是鍵3被按下,因?yàn)槿绻恍械逆I2、1或0之一被按下,行線也為低電平。只能得出第1行有鍵被按下的結(jié)論。第2步,識別出哪個(gè)按鍵被按下。采用逐列掃描法,在某一時(shí)刻只讓1條列線處于低電平,其余所有列線處于高電平。當(dāng)?shù)?列為低電平,其余各列為高電平時(shí),因?yàn)槭擎I3被按下,第1行的行線仍處于高電平;31第1步,識別鍵盤有無鍵按下。先把所有列線均置為0,然后檢查各當(dāng)?shù)?列為低電平,其余各列為高電平時(shí),第1行的行線仍處于高電平;直到讓第4列為低電平,其余各列為高電平時(shí),此時(shí)第1行的行線電平變?yōu)榈碗娖?,?jù)此,可判斷第1行第4列交叉點(diǎn)處的按鍵,即鍵3被按下。綜上所述,掃描法的思想是,先把某一列置為低電平,其余各列置為高電平,檢查各行線電平的變化,如果某行線電平為低電平,則可確定此行此列交叉點(diǎn)處的按鍵被按下。32當(dāng)?shù)?列為低電平,其余各列為高電平時(shí),第1行的行線仍處于高電②線反轉(zhuǎn)法。掃描法要逐列掃描查詢,有時(shí)則要多次掃描。而線反轉(zhuǎn)法則很簡練,無論被按鍵是處于第一列或最后一列,均只需經(jīng)過兩步便能獲得此按鍵所在的行列值,下面以圖10-10所示的矩陣式鍵盤為例,介紹線反轉(zhuǎn)法的具體步驟。

讓行線編程為輸入線,列線編程為輸出線,并使輸出線輸出為全低電平,則行線中電平由高變低的所在行為按鍵所在行。

再把行線編程為輸出線,列線編程為輸入線,并使輸出線輸出為全低電平,則列線中電平由高變低所在列為按鍵所在列。33②線反轉(zhuǎn)法。掃描法要逐列掃描查詢,有時(shí)則要多次掃描。而線反兩步即可確定按鍵所在的行和列,從而識別出所按的鍵。

圖10-10

采用線反轉(zhuǎn)法的矩陣式鍵盤34兩步即可確定按鍵所在的行和列,從而識別出所按的鍵。34假設(shè)鍵3被按下。第一步,P1.0~P1.3輸出全為“0”,然后,讀入P1.4~P1.7線的狀態(tài),結(jié)果P1.4=0,而P1.5~P1.7均為1,因此,第1行出現(xiàn)電平的變化,說明第1行有鍵按下;第二步,讓P1.4~P1.7輸出全為“0”,然后,讀入P1.0~P1.3位,結(jié)果P1.0=0,而P1.1~P1.3均為1,因此第4列出現(xiàn)電平的變化,說明第4列有鍵按下。綜上所述,即第1行、第4列按鍵被按下,此按鍵即鍵3按下。線反轉(zhuǎn)法簡單適用,但不要忘記按鍵去抖動處理。35假設(shè)鍵3被按下。3510.2.3鍵盤的工作方式單片機(jī)在忙于其他各項(xiàng)工作任務(wù)時(shí),如何兼顧鍵盤的輸入,這取決于鍵盤的工作方式。工作方式選取原則是,既要保證及時(shí)響應(yīng)按鍵操作,又不過多占用單片機(jī)工作時(shí)間。鍵盤工作方式有3種,即編程掃描、定時(shí)掃描和中斷掃描。1.編程掃描方式也稱查詢方式,利用單片機(jī)空閑時(shí),調(diào)用鍵盤掃描子程序,反復(fù)掃描鍵盤。如果單片機(jī)的查詢的頻率過高,雖能及時(shí)響應(yīng)鍵盤的輸入,但也會影響其他任務(wù)的進(jìn)行。查詢的頻率過低,可能會鍵盤輸入漏判。3610.2.3鍵盤的工作方式36所以要根據(jù)單片機(jī)系統(tǒng)的繁忙程度和鍵盤的操作頻率,來調(diào)整鍵盤掃描的頻率。2.定時(shí)掃描方式每隔一定的時(shí)間對鍵盤掃描一次。在這種方式中,通常利用單片機(jī)內(nèi)的定時(shí)器產(chǎn)生的定時(shí)中斷,進(jìn)入中斷子程序來對鍵盤進(jìn)行掃描,在有鍵按下時(shí)識別出該鍵,并執(zhí)行相應(yīng)鍵的處理程序。為了不漏判有效的按鍵,定時(shí)中斷的周期一般應(yīng)小于100ms。37所以要根據(jù)單片機(jī)系統(tǒng)的繁忙程度和鍵盤的操作頻率,來調(diào)整鍵盤掃3.中斷掃描方式為提高單片機(jī)掃描鍵盤的工作效率,可采用中斷掃描方式,如圖10-11所示。圖中的鍵盤只有在鍵盤有按鍵按下時(shí),發(fā)出中斷請求信號,單片機(jī)響應(yīng)中斷,執(zhí)行鍵盤掃描程序中斷服務(wù)子程序。如無鍵按下,單片機(jī)將不理睬鍵盤。此種方式的優(yōu)點(diǎn)是,只有按鍵按下時(shí),才進(jìn)行處理,所以其實(shí)時(shí)性強(qiáng),工作效率高。383.中斷掃描方式38圖10-11

采用線反轉(zhuǎn)法的矩陣式鍵盤39圖10-11采用線反轉(zhuǎn)法的矩陣式鍵盤39非編碼矩陣式鍵盤所完成的工作分為3個(gè)層次。(1)單片機(jī)如何來監(jiān)視鍵盤的輸入,體現(xiàn)在鍵盤的工作方式上就是:①編程掃描;②定時(shí)掃描;③中斷掃描。(2)確定按下鍵的鍵號。體現(xiàn)在按鍵的識別方法上就是:①掃描法;②線反轉(zhuǎn)法。(3)根據(jù)按下鍵的鍵號,實(shí)現(xiàn)按鍵的功能,即跳向?qū)?yīng)的鍵處理程序。10.3鍵盤/顯示器接口設(shè)計(jì)實(shí)例在單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)中,一般都是把鍵盤和顯示器放在一起考慮。也有的系統(tǒng)僅單獨(dú)需要鍵盤或顯示器。介紹幾種實(shí)用的鍵盤/顯示器接口的設(shè)計(jì)方案。40非編碼矩陣式鍵盤所完成的工作分為3個(gè)層次。4010.3.1利用AT89S51串行口實(shí)現(xiàn)的鍵盤/顯示器接口 當(dāng)AT89S51單片機(jī)的串行口未作它用時(shí),可使用AT89S51的串行口的方式0的輸出方式,構(gòu)成鍵盤/顯示器接口,如圖10-12所示。 8個(gè)74LS164:74LS164(0)~74LS164(7)作為8位LED數(shù)碼管的段碼輸出口,AT89S51的P3.4、P3.5作為兩行鍵的行狀態(tài)輸入線,P3.3作為TXD引腳同步移位脈沖輸出控制線,P3.3=0時(shí),與門封死,禁止同步移位脈沖輸出。這種方案主程序可不必掃描顯示器,軟件設(shè)計(jì)簡單,使單片機(jī)有更多的時(shí)間處理其他事務(wù)。 下面列出顯示子程序和鍵盤掃描子程序。4110.3.1利用AT89S51串行口實(shí)現(xiàn)的鍵盤/顯示器接

圖10-12

用AT89S51串行口擴(kuò)展鍵盤/顯示器4242顯示子程序:DIR:

SETB P3.3 ;P3.3=1,允許TXD腳同步移位脈沖輸出 MOV R7,#08H ;送出的段碼個(gè)數(shù) MOV R0,#7FH ;7FH~78H為顯示數(shù)據(jù)緩沖區(qū)DL0:

MOVA,@R0 ;取出要顯示的數(shù)送A ADDA,#0DH ;加上偏移量 MOVCA,@A+PC ;查段碼表SEGTAB,取出段碼 MOVSBUF,A ;將段碼送串行口的SBUFDL1:

JNB TI,DL1 ;查詢1個(gè)字節(jié)的段碼輸出完否?

CLR TI ;

1字節(jié)的段碼輸出完,清TI標(biāo)志 DEC R0 ;指向下一個(gè)顯示數(shù)據(jù)單元43顯示子程序:43 DJNZ R7,DL0 ;段碼個(gè)數(shù)計(jì)數(shù)器R7是否為0,如不 ;為0,繼續(xù)送段碼 CLRP3.3 ;

8個(gè)段碼輸出完畢,關(guān)閉顯示器輸出 RET ;返回SEGTAB:DB0C0H,0F9H,0A4H,0B0H,99H;共陽極段 ;碼表 DB 92H,82H,0F8H,90H;

DB 88H,83H,0C6H,0A1H,86H; DB 8FH,0BFH,8CH,0FFH,0FFH;44 DJNZ R7,DL0 ;段碼個(gè)數(shù)計(jì)數(shù)器R7是否為0,如不鍵盤掃描子程序:KEYI:

MOVA,#00H;判斷有無鍵按下,使所有列線為0 MOVSBUF,A;掃描鍵盤的(8)號74LS164輸出為

;00H,使所有列線為0KL0:

JNB TI,KL0 ;串行輸出完否? CLRTI ;串行輸出完畢,清TIKL1:

JNB P3.4,PK1;第1行有閉合鍵嗎?如有,跳PK1 ;進(jìn)行處理 JB P3.5,KL1;在第2行鍵中有閉合鍵嗎?無閉 ;合鍵跳KL145鍵盤掃描子程序:45PK1:

ACALLDL10 ;調(diào)用延時(shí)10ms子程,軟件消抖動 JNB P3.4,PK2 ;判斷是否由抖動引起? JB P3.5,KL1PK2:

MOVR7,#08H ;不是抖動引起的 MOVR6,#0FEH ;判別是哪一個(gè)鍵按下,F(xiàn)EH為最左 ;1列為低 MOVR3,#00H ;R3為列號寄存器 MOVA,R6KL5:

MOVSBUF,A ;列掃描,列掃描碼從串行口輸出

46PK1: ACALLDL10 ;調(diào)用延時(shí)10ms子KL2:

JNB TI,KL2 ;等待串行口發(fā)送完 CLRTI ;串行口發(fā)送完畢,清TI標(biāo)志 JNB P3.4,PKONE ;讀第1行線狀態(tài),第1行有鍵 ;閉合,跳PKONE JB P3.5,NEXT ;讀第2行狀態(tài),2行某鍵否? MOVR4,#08H ;2行中有鍵被按下,行首鍵 ;號08H送R4 AJMPPK3PKONE:MOVR4,#00H ;1行鍵中有鍵按下,行首鍵 ;號00H送R4PK3:

MOVSBUF,#00H ;等待鍵釋放,發(fā)送00H使所 ;有列線為低47KL2: JNB TI,KL2 ;等待串行口發(fā)送KL3:

JNB TI,KL3 ;判1個(gè)字節(jié)是否發(fā)送完畢 CLRTI ;發(fā)送完畢,清標(biāo)志KL4:

JNB P3.4,KL4 ;判行線狀態(tài) JNB P3.5 MOVA,R4 ;兩行線均為高,說明鍵已釋放

ADDA,R3 ;計(jì)算得鍵碼→A RETNEXT: MOVA,R6 ;列掃描碼左移一位,判下一列鍵 RL A MOVR6,A ;記住列掃描碼于R6中

48KL3: JNB TI,KL3 ;判1個(gè)字節(jié)是

INC R3 ;列號增1 DJNZR7,KL5 ;列計(jì)數(shù)器R7減1,8列 ;鍵都檢查完否? AJMPKEYI ;

8列掃描完,開始下一個(gè)鍵盤掃描周期DL10:

MOVR7,#0AH ;延時(shí)10ms子程序DL:

MOVR6,#0FFHDL6:

DJNZR6,DL6 DJNZR7,DL RET本例中,如只需LED數(shù)碼管顯示部分,可把鍵盤部分的電路去掉即可;如只需鍵盤,可把LED數(shù)碼管部分的電路去掉。49 INC R3 ;列號增14910.3.2各種專用的鍵盤/顯示器接口芯片簡介用專用芯片,可省去編寫鍵盤/顯示器動態(tài)掃描程序以及鍵盤去抖動程序編寫的繁瑣工作。目前各種專用接口芯片種類繁多,各有特點(diǎn),總體趨勢是并行接口芯片逐漸退出,串行接口芯片越來越多的得到應(yīng)用。早期的較為流行的鍵盤/顯示器芯片8279,目前流行的鍵盤/顯示器接口芯片均采用串行通信方式,占用口線少。常見的芯片有:周立功公司的ZLG7289A、ZLG7290B、MAX7219、南京沁恒公司的CH451、HD7279和BC7281等。5010.3.2各種專用的鍵盤/顯示器接口芯片簡介50這些芯片全采用動態(tài)掃描方式,且控制的鍵盤均為編碼鍵盤。1.專用鍵盤/顯示器接口芯片8279可編程的并行鍵盤/顯示器接口芯片。內(nèi)部有鍵盤FIFO(先進(jìn)先出堆棧)/傳感器雙重功能的8×8=64字節(jié)RAM,鍵盤控制部分可控制8×8的鍵盤矩陣,能自動獲得按下鍵的鍵號。自動去鍵盤抖動并具有雙鍵鎖定保護(hù)功能。顯示RAM的容量為16×8位,最多可控制16個(gè)LED數(shù)碼管顯示。8279已經(jīng)逐漸淡出市場。51這些芯片全采用動態(tài)掃描方式,且控制的鍵盤均為編碼鍵盤。512.專用鍵盤/顯示器芯片ZLG7290B采用I2C串行口總線結(jié)構(gòu),可實(shí)現(xiàn)8位LED顯示和64鍵的鍵盤管理,需外接晶振,使用按鍵功能時(shí)要接8個(gè)二極管,電路稍顯復(fù)雜,且每次I2C通信間隔稍長(10ms)。功能:閃爍、段點(diǎn)亮、段熄滅、功能鍵、連擊鍵計(jì)數(shù)等。其中,功能鍵實(shí)現(xiàn)了組合按鍵,這在此類芯片中極具特點(diǎn);連擊鍵計(jì)數(shù)實(shí)現(xiàn)了識別長按鍵的功能,也是獨(dú)有的。3.專用顯示器芯片MAX7219MAXIM(美信)公司的產(chǎn)品。該芯片采用串行SPI接口,僅是單純驅(qū)動共陰極LED數(shù)碼管,沒有鍵盤管理功能。522.專用鍵盤/顯示器芯片ZLG7290B524.專用顯示器芯片BC7281可驅(qū)動16位LED數(shù)碼管顯示和實(shí)現(xiàn)64鍵的鍵盤管理,可實(shí)現(xiàn)閃爍、段點(diǎn)亮、段熄滅等功能。最大特點(diǎn)是通過外接移位寄存器驅(qū)動16位LED數(shù)碼管。但所需外圍電路較多,占PCB空間較大,且在驅(qū)動16位LED數(shù)碼管時(shí),由于采用動態(tài)掃描方式工作,電流噪聲過大。5.專用鍵盤/顯示器芯片HD7279與單片機(jī)間采用串行通信,可控制并驅(qū)動8位LED數(shù)碼管和實(shí)現(xiàn)64(8×8)鍵的鍵盤管理。外圍電路簡單,價(jià)格低廉。由于具有上述優(yōu)點(diǎn),目前得到較為廣泛的應(yīng)用。534.專用顯示器芯片BC7281536.專用鍵盤/顯示器芯片CH451可動態(tài)驅(qū)動8位LED數(shù)碼管顯示,具有BCD碼譯碼、閃爍、移位等功能。內(nèi)置大電流驅(qū)動級,段電流不小于30mA,位電流不小于160mA。內(nèi)置64(8×8)鍵鍵盤控制器,可對8×8矩陣鍵盤自動掃描,且有去抖動電路,并提供鍵盤中斷和按鍵釋放標(biāo)志位,可供查詢按鍵按下與釋放狀態(tài)。片內(nèi)內(nèi)置上電復(fù)位和看門狗定時(shí)器。芯片性價(jià)比較高,是目前使用較為廣泛的專用的鍵盤/顯示器接口芯片之一。但抗干擾能力不是很強(qiáng),不支持組合鍵識別。上述各種芯片,CH451和HD7279使用較多。從性價(jià)比,首推CH451,主要對LED數(shù)碼管的驅(qū)動功能較完善。546.專用鍵盤/顯示器芯片CH4515410.3.3專用接口芯片CH451實(shí)現(xiàn)的鍵盤/顯示器控制 介紹專用鍵盤/顯示器接口芯片CH451(南京沁恒公司)1.基本功能與引腳介紹 內(nèi)部集成數(shù)碼管顯示驅(qū)動和鍵盤掃描控制的專用鍵盤/顯示器接口芯片。內(nèi)置RC振蕩電路,可以直接動態(tài)驅(qū)動8位LED數(shù)碼管(或者64只LED),可實(shí)現(xiàn)顯示數(shù)字左移、右移、左循環(huán)、右循環(huán)、各位顯示數(shù)字獨(dú)立閃爍等功能。 內(nèi)置大電流驅(qū)動級,段電流不小于30mA,字電流不小于160mA,并有16級亮度控制功能;5510.3.3專用接口芯片CH451實(shí)現(xiàn)的鍵盤/顯示器控制在鍵盤控制方面,該芯片內(nèi)有64鍵鍵盤控制器,可實(shí)現(xiàn)8×8矩陣編碼鍵盤的掃描,并內(nèi)置自動去抖動電路,可提供按鍵中斷與按鍵釋放標(biāo)志位等功能。與單片機(jī)的接口,可選用1線串行接口或高速4線串行接口,片內(nèi)有上電復(fù)位電路,同時(shí)可提供高電平有效復(fù)位和低電平有效復(fù)位兩種輸出,同時(shí)片內(nèi)提供看門狗WatchDog。56在鍵盤控制方面,該芯片內(nèi)有64鍵鍵盤控制器,可實(shí)現(xiàn)8×8矩陣兩種封裝形式:28腳的表貼型封裝(SOP型)以及24腳的雙列直插

(DIP)封裝,如圖10-13所示。

圖10-13

CH451的封裝與引腳57兩種封裝形式:28腳的表貼型封裝(SOP型)以及24腳的雙列28腳與24腳在功能上稍有差別,引腳定義見表10-3。5828腳與24腳在功能上稍有差別,引腳定義見表10-3。582.CH451的操作命令命令均為12位,其中高4位為標(biāo)識碼,低8位為參數(shù),(1)空操作命令編碼:0000××××××××B。對CH451無任何影響。可應(yīng)用在多個(gè)CH451的級聯(lián)中,透過前級CH451向后級CH451發(fā)送操作命令而不影響前級CH451的狀態(tài)。例如,要將操作命令001000000001B發(fā)送給兩級級聯(lián)電路中的后級CH451(后級CH451的DIN引腳連接到前級CH451的DOUT引腳),只要在該操作命令后添加空操作592.CH451的操作命令59命令000000000000B再發(fā)送,該操作命令將經(jīng)過前級CH451到達(dá)后級CH451,而空操作命令留給了前級CH451。另外,為在不影響CH451的前提下,使DCLK變化以清除看門狗計(jì)時(shí)器,也可以發(fā)送空操作命令。在非級聯(lián)的應(yīng)用中,空操作命令可只發(fā)送高4位。(2)芯片內(nèi)部復(fù)位命令編碼:001000000001B??蓪H451的各個(gè)寄存器和各種參數(shù)復(fù)位到默認(rèn)的狀態(tài)。芯片上電時(shí),CH451均被復(fù)位,此時(shí)各個(gè)寄存器均復(fù)位為0,各種參數(shù)均恢復(fù)為默認(rèn)值。60命令000000000000B再發(fā)送,該操作命令將經(jīng)過前級C(3)字?jǐn)?shù)據(jù)移位命令編碼:0011000000[D1][D0]B。命令共有4個(gè):開環(huán)左移、右移,閉環(huán)左移、右移。D0=0時(shí)為開環(huán),D0=時(shí)為閉環(huán);D1=0時(shí)左移,D1=1時(shí)為右移。開環(huán)左移時(shí),DIG0引腳對應(yīng)的單元補(bǔ)00H,此時(shí)不譯碼方式顯示為空格,BCD譯碼方式時(shí)顯示為0;開環(huán)右移時(shí),DIG7引腳對應(yīng)的單元補(bǔ)00H;而在閉環(huán)時(shí)DIG0與DIG7頭尾相接,閉環(huán)移位。61(3)字?jǐn)?shù)據(jù)移位命令61(4)設(shè)定系統(tǒng)參數(shù)命令編碼:010000000[WDOG][KEYB][DISP]B。用于設(shè)定CH451的系統(tǒng)級參數(shù),如看門狗WDOG使能、鍵盤掃描使能KEYB、顯示驅(qū)動使能DISP等。各個(gè)參數(shù)均可通過命令中的1位數(shù)據(jù)來進(jìn)行控制,將相應(yīng)數(shù)據(jù)位置為1可啟用該功能,否則關(guān)閉該功能(默認(rèn)值)。(5)設(shè)定顯示參數(shù)命令編碼:0101[MODE(1位)][LIMIT(3位)][INTENSITY(4位)]B。設(shè)定CH451的顯示參數(shù),其中譯碼方式MODE(1位)、掃描極限LIMIT(3位)、顯示亮度INTENSITY(4位)。62(4)設(shè)定系統(tǒng)參數(shù)命令62譯碼方式MODE=1,為BCD譯碼方式,MODE=0時(shí)為不譯碼方式。CH451默認(rèn)不譯碼方式,此時(shí)8個(gè)數(shù)據(jù)寄存器中字節(jié)數(shù)據(jù)的位7~位0分別對應(yīng)8個(gè)數(shù)碼管的小數(shù)點(diǎn)和段a~段g,當(dāng)某段數(shù)據(jù)位為1時(shí),對應(yīng)的段點(diǎn)亮;當(dāng)某段數(shù)據(jù)位為0時(shí)熄滅。CH451BCD譯碼方式主要用于LED數(shù)碼管驅(qū)動,單片機(jī)只要給出二進(jìn)制數(shù)的BCD碼,便由CH451將其譯碼并直接驅(qū)動LED數(shù)碼管以顯示對應(yīng)的字符。BCD譯碼方式是對顯示數(shù)據(jù)寄存器字節(jié)中的數(shù)據(jù)位4~位0進(jìn)行BCD譯碼,可用于控制段驅(qū)動引腳SEG6~SEG0的輸出,它們對應(yīng)于數(shù)碼管的段g~段a,同時(shí)可用字節(jié)63譯碼方式MODE=1,為BCD譯碼方式,MODE=0時(shí)為不譯數(shù)據(jù)的位7來控制SEG7段對應(yīng)的LED數(shù)碼管的小數(shù)點(diǎn),字節(jié)數(shù)據(jù)的位6和位5不影響B(tài)CD譯碼的輸出,它們可以是任意值。將位4~位0進(jìn)行BCD譯碼可顯示以下28個(gè)字符,其中00000B~01111B分別對應(yīng)于顯示字符“0~F”,10000B~11010B分別對應(yīng)于顯示“空格”、“+”、“-”、“=”、“[”、“]”、“_”、“H”、“L”、“P”、“.”,其余值為空格。掃描極限LIMIT控制位001B~111B和000B(默認(rèn)值)可分別設(shè)定掃描極限1~7和8。64數(shù)據(jù)的位7來控制SEG7段對應(yīng)的LED數(shù)碼管的小數(shù)點(diǎn),字節(jié)數(shù)顯示亮度INTENSITY控制位(4位)可實(shí)現(xiàn)16級顯示亮度控制。0001B~1111B和0000B(默認(rèn)值)則用于分別設(shè)定顯示驅(qū)動占空比1/16~15/16和16/16,(6)設(shè)定閃爍控制命令編碼:[D7S][D6S][D5S][D4S][D3S][D2S][D1S][D0S]B用于設(shè)定CH451的閃爍顯示屬性,其中D7S~D0S位分別對應(yīng)于8個(gè)數(shù)碼管的字驅(qū)動DIG7~DIG0,并控制DIG7~DIG0的屬性,將相應(yīng)的數(shù)據(jù)位置為1則閃爍顯示,否則為不閃爍的正常顯示(默認(rèn)值)。(7)加載顯示數(shù)據(jù)命令編碼:[DIG_ADDR][DIG_DATA]B。65顯示亮度INTENSITY控制位(4位)可實(shí)現(xiàn)16級顯示亮用于將顯示字節(jié)數(shù)據(jù)DIG_DATA(8位)寫入DIG_ADDR(3位)指定的數(shù)據(jù)寄存器中。DIG_ADDR的000B~111B分別用于指定顯示寄存器的地址0~7,并分別對應(yīng)于DIG0~DIG7引腳驅(qū)動的8個(gè)LED數(shù)碼管。DIG_DATA為待寫入的顯示字節(jié)數(shù)據(jù)。(8)讀取按鍵代碼命令編碼:0111××××××××B。用于獲得CH451最近檢測到的有效按鍵的代碼。CH451通常從DOUT引腳向單片機(jī)輸出按鍵代碼,按鍵代碼是7位數(shù)據(jù),最高位是狀態(tài)碼,位5~位0是掃描碼。讀取按鍵代碼命令的位7~位0可以是任意值,可將該命令縮短為4位,即位11~位8。66用于將顯示字節(jié)數(shù)據(jù)DIG_DATA(8位)寫入DIG_ADD例如,CH451檢測到有效按鍵并向單片機(jī)發(fā)出中斷請求時(shí),假如按鍵代碼是5EH,則單片機(jī)先向CH451發(fā)出讀取按鍵代碼命令0111B,然后再從DOUT獲得按鍵代碼5EH。CH451所提供的按鍵代碼為7位,位2~位0是列掃描碼,位5~位3是行掃描碼,位6是按鍵的狀態(tài)碼(鍵按下為1,鍵釋放為0)。對8×8鍵盤,即連接在DIG7~DIG0與SEG7~SEG0之間的鍵按下時(shí),CH451所提供的按鍵代碼是固定的,如圖10-14所示。如果需要鍵被釋放時(shí)的按鍵代碼,可將圖10-14所示的按鍵代碼的位6置0,也可將按鍵代碼減去40H。67例如,CH451檢測到有效按鍵并向單片機(jī)發(fā)出中斷請求時(shí),假如例如,連接DIG3與SEG4的鍵被按下時(shí),按鍵代碼為63H,鍵被釋放后,按鍵代碼是23H。單片機(jī)可在任何時(shí)候讀取有效按鍵的代碼,但一般在CH451檢測到有效按鍵并向發(fā)出鍵盤中斷請求時(shí),進(jìn)入中斷服務(wù)程序讀取按鍵代碼,此時(shí)按鍵代碼的位6總是1。另外,如需了解按鍵何時(shí)釋放,可通過查詢方式定期讀取按鍵代碼,直到按鍵代碼的位6為0。注意:CH451不支持組合鍵。如需要組合鍵功能,則可利用兩片CH451來實(shí)現(xiàn)。具體的實(shí)現(xiàn),請見相關(guān)資料。68例如,連接DIG3與SEG4的鍵被按下時(shí),按鍵代碼為63H,3.CH451與AT89S51單片機(jī)的接口接口電路如圖10-14所示,使用4線串行接口。其中DOUT腳連到外部中斷輸入

腳,用中斷方式響應(yīng)有效按鍵。也可用查詢方式確定CH451是否檢測到有效按鍵,同時(shí)還可向單片機(jī)提供復(fù)位信號RESET,并帶有WatchDog功能。CH451的段驅(qū)動腳串200Ω電阻用于限制和均衡段驅(qū)動電流。在5V下,串接200Ω電阻對應(yīng)的段電流為13mA。CH451具有64鍵的鍵盤掃描功能,為防止鍵按下后在SEG信號線與DIG信號線之間形成短路而影響數(shù)碼管顯示,一般應(yīng)在CH451的DIG0~DIG7腳與鍵盤矩陣之間串接限流電阻,阻值1kΩ~10kΩ。693.CH451與AT89S51單片機(jī)的接口69圖10-14

CH451與AT89S51單片機(jī)的接口電路70圖10-14CH451與AT89S51單片機(jī)的接口電路7將P1.0與DIN連接可用于輸入串行數(shù)據(jù),串行數(shù)據(jù)輸入的順序是低位在前,高位在后。另外,在上電復(fù)位后,CH451默認(rèn)選擇1線串行接口,如需選擇4線串行接口,則應(yīng)在DCLK輸出串行時(shí)鐘之前,先在DIN上輸出一個(gè)低電平脈沖,以通知CH451為4線串行接口。將P1.1與DCLK連接可提供串行時(shí)鐘,以使CH451在其上升沿從DIN輸入數(shù)據(jù),并在其下降沿從DOUT輸出數(shù)據(jù)。71將P1.0與DIN連接可用于輸入串行數(shù)據(jù),串行數(shù)據(jù)輸入的順序LOAD用于加載串行數(shù)據(jù),CH451一般在其上升沿加載移位寄存器中的12位數(shù)據(jù)以作為操作命令進(jìn)行分析并處理。也就是說,LOAD的上升沿是串行數(shù)據(jù)幀的幀完成標(biāo)志,此時(shí)無論移位寄存器中的12位數(shù)據(jù)是否有效,CH451都會將其當(dāng)作操作命令來處理。應(yīng)注意,在級聯(lián)電路中,單片機(jī)每次輸出的串行數(shù)據(jù)必須是單個(gè)CH451的串行數(shù)據(jù)的位數(shù)乘以級聯(lián)的級數(shù)。下面介紹該接口電路的驅(qū)動程序:72LOAD用于加載串行數(shù)據(jù),CH451一般在其上升沿加載移位寄CH451初始化子程序:INIT:

CLR P1.0 ;DIN腳先置低,當(dāng)有上跳沿時(shí) ;選擇CH451為4線串行接口 SETBP1.1 ;置DCLK為默認(rèn)的高電平 SETB P1.0 ;置DIN為高電平,產(chǎn)生上跳 ;沿,選4線串行接口 SETB P1.2 ;置LOAD腳為高電平 SETB P3.2 ;置

(P3.2)為輸入 MOV B,#04H ;設(shè)置系統(tǒng)參數(shù)命令 MOV A,#07H;WatchDog使能,開鍵盤、顯示功能

LCALLWRITE ;調(diào)用寫命令子程序WRITE MOV B,#03H ;設(shè)置移位命令73CH451初始化子程序:73 MOV A,#00H ;開環(huán)左移 LCALLWRITE ;調(diào)用寫命令子程序WRITE MOV B,#05H ;設(shè)置顯示參數(shù) MOV A,#00H ;不譯碼,8位顯示,最高亮度 LCALLWRITE ;調(diào)用寫命令子程序WRITE MOV B,#06H ;設(shè)置閃爍控制 MOV A,#00H ;不閃爍 LCALLWRITE ;調(diào)用寫命令子程序WRITE CLR IT0 ;置外中斷請求信號為低電平觸發(fā) CLR IE0 ;清外中斷的中斷請求標(biāo)志 SETB EX0 ;允許鍵盤中斷 SETB EA ;總中斷允許 RET ;子程序返回74 MOV A,#00H ;開環(huán)左移74寫入命令子程序:入口:B、Acc中裝入待寫的12位命令數(shù)據(jù),低8位在Acc中,高4位在B的低4位中WRITE:CLR EX0 ;禁止鍵盤中斷 CLR P1.2 ;置LOAD腳為低,命令開始 MOV R7,#08H ;將Acc中8位送出WRIT_8:RRCA ;低位在前,高位在后 CLR P1.1 ;置DCLK腳為低電平 MOV P1.0,C ;送出1位數(shù)據(jù) SETB P1.1;時(shí)鐘上升沿,通知CH451輸入位數(shù)據(jù) DJNZ R7,WRIT_8 ;8位數(shù)據(jù)未送完,繼續(xù)75寫入命令子程序:75 MOV A,B MOV R7,#04H ;將B中4位送出WRIT_4:RRCA ;低位在前高位在后 CLR P1.1 ;置DCLK腳為低電平 MOV P1.0,C ;送出1位數(shù)據(jù) SETB P1.1 ;產(chǎn)生時(shí)鐘上升沿,通知 ;CH451輸入位數(shù)據(jù) DJNZ R7,WRIT_4 ;4位數(shù)據(jù)未送完,繼續(xù)

SETB P1.2 ;產(chǎn)生加載上跳沿,通知 ;CH451處理命令數(shù)據(jù) SETB EX0 ;允許鍵盤中斷 RET76 MOV A,B76讀入鍵值子程序:

出口:鍵值數(shù)據(jù)在Acc中。READ: CLR EXO ;禁止鍵盤中斷 CLR P1.2 ;命令開始 MOV A,#07H;讀取鍵值命令的高4位0111B MOV R7,#04H;忽略12位命令的低8位READ_4READ_4:RRC A ;低位在前,高位在后 CLR P1.1 ;置DCLK腳為低電平 MOV P1.0,C ;讀入1位數(shù)據(jù) SETB P1.1 ;置DCLK腳為高電平 DJNZ R7,READ_4 ;4位數(shù)據(jù)未完繼續(xù) SETB P1.2;加載上跳沿,通知CH451處理命令數(shù)據(jù) MOV A ;先清除鍵值單元以便移位77讀入鍵值子程序:77 MOV R7,#07H

;讀入7位鍵值READ_7:MOVC,P3.2 ;讀入1位數(shù)據(jù) CLR P1.1 ;置DCLK腳低電平,產(chǎn)生下跳 ;沿,通知CH451輸出下一位 RLC A ;數(shù)據(jù)移入Acc,高位前,低位后 SETB P1.1 ;置DCLK腳為高電平 DJNZ R7,READ_7 ;7位數(shù)據(jù)未完繼續(xù) MOV IE0 ;清中斷標(biāo)志,讀操作過程中 ;有低電平脈沖 SETB EX0 ;允許鍵盤中斷 RET78 MOV R7,#07H ;讀入7位鍵值78使用CH451擴(kuò)展鍵盤顯示接口,具有接口簡單、占用CPU資源少、外圍器件簡單、性能價(jià)格比高等優(yōu)點(diǎn),在各種單片機(jī)系統(tǒng)中得以廣泛的應(yīng)用。79使用CH451擴(kuò)展鍵盤顯示接口,具有接口簡單、占用CPU資源10.3.4專用接口芯片HD7279實(shí)現(xiàn)的鍵盤/顯示器控制HD7279是目前使用較廣泛的另一種專用接口芯片。1.

HD7279A簡介能同時(shí)驅(qū)動8個(gè)共陰極LED數(shù)碼管(或64個(gè)獨(dú)立的LED發(fā)光二極管)和64(88)鍵的編碼鍵盤矩陣??刂芁ED數(shù)碼管采用動態(tài)掃描的循環(huán)顯示方式。具有如下特性:

與單片機(jī)采用串口方式,僅占4條口線,接口簡單;

內(nèi)部有譯碼器,可直接接收BCD碼或十六進(jìn)制碼,同時(shí)具有兩種譯碼方式,實(shí)現(xiàn)LED數(shù)碼管位尋址和段尋址,可方便地控制每位LED數(shù)碼管中任意一段是否發(fā)光;8010.3.4專用接口芯片HD7279實(shí)現(xiàn)的鍵盤/顯示器控內(nèi)部有驅(qū)動器,可直接驅(qū)動不超過25.4mm的LED數(shù)碼管。片選信號輸入,易實(shí)現(xiàn)多于8位顯示器或多于64鍵的鍵盤控制。具有自動消除鍵抖動并識別有效鍵值的功能。HD7279A芯片占用口線少,外圍電路簡單,具有較高性價(jià)比,已在鍵盤/顯示器接口的設(shè)計(jì)中獲得廣泛應(yīng)用。(1)引腳說明與電氣特性為28腳標(biāo)準(zhǔn)雙列直插式封裝(DIP),單一+5V供電。其引腳如圖10-15所示,引腳功能見表10-4。81內(nèi)部有驅(qū)動器,可直接驅(qū)動不超過25.4mm的LED數(shù)碼管。8

圖10-15

HD7279A的引腳82828383位驅(qū)動輸出端DIG0~DIG7連接8只LED數(shù)碼管的共陰極;段驅(qū)動輸出端SA~SG分別連接至LED數(shù)碼管的a~g段的陽極,而DP腳連至小數(shù)點(diǎn)dp的陽極。DIG0~DIG7和DP以及SA~SG還分別是64鍵的鍵盤的列線和行線,完成對鍵盤的譯碼和鍵值識別。88矩陣陣列中的每個(gè)鍵值(見圖10-19)可用讀鍵盤命令讀出,鍵值范圍是00H~3FH。與單片機(jī)連接僅需4條口線:

、DATA、CLK和KEY。84位驅(qū)動輸出端DIG0~DIG7連接8只LED數(shù)碼管的共陰極;:當(dāng)單片機(jī)訪問HD7279A芯片(寫入命令、顯示數(shù)據(jù)、位地址、段地址或讀出鍵值等)時(shí),應(yīng)將其置為低電平。DATA:串行數(shù)據(jù)端,當(dāng)單片機(jī)向HD7279A芯片發(fā)送數(shù)據(jù)時(shí),DATA為輸入端;當(dāng)單片機(jī)從HD7279A芯片讀入鍵值時(shí),DATA為輸出端。CLK:數(shù)據(jù)串行傳送的同步時(shí)鐘輸入端,時(shí)鐘的上升沿將數(shù)據(jù)寫入HD7279A中或從HD7279A中讀出數(shù)據(jù)。85:當(dāng)單片機(jī)訪問HD7279A芯片(寫入命KEY:為按鍵信號輸出端,在無鍵按下時(shí)為高電平,在有鍵按下時(shí)變?yōu)榈碗娖?,并且一直保持到該按下鍵至釋放為止。

:為復(fù)位端,由低電平變?yōu)楦唠娖?,并?jīng)過18~25ms復(fù)位結(jié)束。通常,該端接+5V即可。若對可靠性要求較高,則可外接復(fù)位電路,或直接由單片機(jī)控制。RC:用于外接振蕩元件,其典型值為R=1.5k,C=15pF。NC:懸空。HD7279A的電氣特性如表10-5所示。86KEY:為按鍵信號輸出端,在無鍵按下時(shí)為高電平,在有鍵按下時(shí)(2)控制命令介紹

6條純命令、7條帶數(shù)據(jù)命令和1條讀鍵盤命令組成。①純命令(6條)。所有純命令都是單字節(jié),見表10-6。87(2)控制命令介紹87②帶數(shù)據(jù)命令(7條)。均由雙字節(jié)組成,第一字節(jié)為命令標(biāo)志碼(有的還有位地址),第二字節(jié)為顯示內(nèi)容。a.按方式0譯碼顯示命令88②帶數(shù)據(jù)命令(7條)。均由雙字節(jié)組成,第一字節(jié)為命令標(biāo)志碼命令中的a2、a1、a0表示LED數(shù)碼管的位地址,表示顯示數(shù)據(jù)是送給哪一位LED的,L1表示LED最低位,L8表示LED最高位,具體位地址的譯碼見表10-7。89命令中的a2、a1、a0表示LED數(shù)碼管的位地址,表示顯示數(shù)命令中的d3、d2、d1、d0為顯示數(shù)據(jù),收到這些數(shù)據(jù)后,HD7279A按表10-8所示的規(guī)則譯碼和顯示。dp為小數(shù)點(diǎn)顯示控制位,dp=1時(shí),小數(shù)點(diǎn)顯示,dp=0時(shí),小數(shù)點(diǎn)不顯示。命令中的×××為無影響位。

90命令中的d3、d2、d1、d0為顯示數(shù)據(jù),收到這些數(shù)據(jù)后,H例如,命令第一字節(jié)為80H,第二字節(jié)為08H,則L1位LED顯示內(nèi)容為8,小數(shù)點(diǎn)dp熄滅:命令第一字節(jié)為87H,第二字節(jié)為8EH,則L8位LED顯示內(nèi)容為P,小數(shù)點(diǎn)dp點(diǎn)亮。b.按方式1譯碼顯示命令該命令和按方式0譯碼顯示的含義基本相同,不同的是譯碼方式為1,LED顯示的內(nèi)容與十六進(jìn)制相對應(yīng),如表10-9所示。a2、a1、a0位地址譯碼表如表10-9所示91例如,命令第一字節(jié)為80H,第二字節(jié)為08H,則L1位LED

表10-9

方式1譯碼顯示表例如,命令第一字節(jié)為C8H,第二字節(jié)為09H,則L1位LED顯示內(nèi)容為9,小數(shù)點(diǎn)dp熄滅;命令第一字節(jié)為C9H,第二字節(jié)為8FH,則L2位LED顯示內(nèi)容為F,小數(shù)點(diǎn)dp點(diǎn)亮。d3~d0(十六進(jìn)制)LED顯示d3~d0(十六進(jìn)制)LED顯示0H08H81H19H92H2AHA3H3BHB4H4CHC5H5DHD6H6EHE7H7FHF92 表10-9 方式1譯碼顯示表d3~d0(c.不譯碼顯示命令命令中的a2、a1、a0仍為位地址,譯碼表如表10-8所示。第2字節(jié)仍為LED顯示內(nèi)容,其中dp和A~G分別代表LED的小數(shù)點(diǎn)和對應(yīng)的段,當(dāng)取值為1時(shí),該段點(diǎn)亮;取值為0時(shí),該段熄滅,見表10-10。93c.不譯碼顯示命令93可在指定位上顯示字符。例如,若命令第一字節(jié)為95H,第二字節(jié)為3EH,則在L6位LED上顯示字符U,小數(shù)點(diǎn)dp熄滅。d.閃爍控制命令命令規(guī)定了每個(gè)數(shù)碼管的閃爍屬性。d8~d1分別對應(yīng)L8~L1位數(shù)碼管,其值為1時(shí),LED不閃爍;其值為0時(shí),LED閃爍。如表10-11所示,該命令默認(rèn)所有數(shù)碼管均不閃爍。94可在指定位上顯示字符。例如,若命令第一字節(jié)為95H,第二字節(jié)例如,命令第一字節(jié)為88H,第二字節(jié)為97H,則L7、L6、L4位LED閃爍。e.消隱控制命令95例如,命令第一字節(jié)為88H,第二字節(jié)為97H,則L7、L6、該命令規(guī)定了每個(gè)數(shù)碼管的消隱屬性。d8~d1分別對應(yīng)L8~L1位數(shù)碼管,其值為1時(shí),LED顯示;值為0時(shí),消隱,如表10-12所示。應(yīng)注意至少要有一個(gè)LED數(shù)碼管保持顯示,如全部消隱,該命令無效。例如,命令第一字節(jié)為98H,第二字節(jié)為81H,則L7、L6、L5、L4、L3、L2位LED消隱。96該命令規(guī)定了每個(gè)數(shù)碼管的消隱屬性。d8~d1分別對應(yīng)L8~Lf.段點(diǎn)亮命令點(diǎn)亮某個(gè)LED數(shù)碼管中的某一段或獨(dú)立的64個(gè)LED發(fā)光二極管中的某一個(gè)。d5~d0取值為00H~3FH,點(diǎn)亮段見表10-13。例如,命令第一字節(jié)為E0H,第二字節(jié)為00H,則點(diǎn)亮L1位LED的g段;第二字節(jié)為10H,則點(diǎn)亮L3位LED的g段。97f.段點(diǎn)亮命令979898g.段關(guān)閉命令關(guān)閉某個(gè)數(shù)碼管中的某一段。d5~d0的取值為00H~3FH,所對應(yīng)的關(guān)閉段同表10-12,僅將點(diǎn)亮段變?yōu)殛P(guān)閉段。例如,命令第一字節(jié)為C0H,第二字節(jié)為00H,則關(guān)閉L1位LED的g段;第二字節(jié)為10H,則關(guān)閉L3位LED的g段。99g.段關(guān)閉命令99③讀取鍵盤命令 從HD7279A讀出當(dāng)前按鍵值。命令第一字節(jié)為15H,表示單片機(jī)寫到HD7279A是讀鍵命令,而第二字節(jié)d7~d0為從HD7279A中讀的按鍵值,其范圍為00H~3FH。 當(dāng)按鍵按下時(shí),KEY引腳從高電平變?yōu)榈碗娖?,并保持到按鍵釋放為止。在此期間,若HD7279A收到來自單片機(jī)的讀鍵盤命令15H,則HD7279A向單片機(jī)輸出當(dāng)前的按鍵代碼。100③讀取鍵盤命令100注意,HD7279A只能給出其中一個(gè)按下鍵的代碼,不適合需要兩個(gè)或兩個(gè)以上鍵同時(shí)按下的場合。如果確實(shí)需要雙鍵組合使用,可在單片機(jī)某位I/O引腳接一鍵,HD7279A所連鍵盤共同組成雙鍵功能。④時(shí)序HD7279A采用串行方式與單片機(jī)通信,串行數(shù)據(jù)從DATA引腳送入或輸出,并與CLK端同步。當(dāng)片選信號

變?yōu)榈碗娖胶?,DATA引腳上的數(shù)據(jù)在CLK脈沖上升沿作用下寫入或讀出HD7279A的數(shù)據(jù)緩沖器。101注意,HD7279A只能給出其中一個(gè)按下鍵的代碼,不適合需要(3)命令時(shí)序a.純命令時(shí)序單片機(jī)發(fā)出8個(gè)CLK脈沖,向HD7279A發(fā)出8位命令,DATA引腳最后為高阻態(tài),如圖10-16所示。

圖10-16

純命令時(shí)序102(3)命令時(shí)序102b.帶數(shù)據(jù)命令時(shí)序單片機(jī)發(fā)出16個(gè)CLK脈沖,前8個(gè)向HD7279A發(fā)送8位命令;后8個(gè)向HD7279A傳送8位顯示數(shù)據(jù),DATA引腳最后為高阻態(tài),如圖10-17所示。

圖10-17

帶數(shù)據(jù)命令時(shí)序103b.帶數(shù)據(jù)命令時(shí)序103c.讀鍵盤命令時(shí)序單片機(jī)發(fā)出16個(gè)CLK脈沖,前8個(gè)向HD7279A發(fā)送8位命令;發(fā)送完之后DATA引腳為高阻態(tài);后8個(gè)CLK由HD7279A向單片機(jī)返回8位按鍵值,DATA引腳為輸出狀態(tài)。最后一個(gè)CLK脈沖的下降沿將DATA引腳恢復(fù)為高阻態(tài),如圖10-18所示。

圖10-18

讀鍵盤命令時(shí)序104c.讀鍵盤命令時(shí)序104保證正確的時(shí)序是HD7279A正常工作的前提條件。當(dāng)選定HD7279A的振蕩元件RC和單片機(jī)的晶振之后,應(yīng)調(diào)節(jié)延時(shí)時(shí)間,使時(shí)序中的T1~T8滿足表10-14要求。應(yīng)仔細(xì)調(diào)整HD7279A時(shí)序,使其運(yùn)行時(shí)間接近最短。105保證正確的時(shí)序是HD7279A正常工作的前提條件。當(dāng)選定HD2.AT89S51單片機(jī)與HD7279A接口設(shè)計(jì)(1)硬件接口電路圖10-19為單片機(jī)與HD7279A的接口電路,外接振蕩元件為典型值,晶振頻率為12MHz。上電后,HD7279A大約經(jīng)過15~18ms的時(shí)間才進(jìn)入工作狀態(tài)。單片機(jī)判斷鍵盤矩陣中是否有按鍵按下,是通過KEY腳電平來判斷的。使用中斷方式時(shí),可將KEY腳接至單片機(jī)的外部中斷輸入端,并設(shè)置成跳沿觸發(fā)。HD7279A控制顯示器時(shí),應(yīng)連接共陰極顯示器。對于不使用的按鍵和顯示器,可以不連接。省去的顯示器或?qū)?062.AT89S51單片機(jī)與HD7279A接口設(shè)計(jì)106顯示器設(shè)置的消隱、閃爍屬性,均不影響鍵盤的使用。除非不用顯示器,否則串聯(lián)在DP及SA~SG引線上的200電阻不可省去。 如果不使用鍵盤,圖10-19所示的與鍵盤連接的10k電阻和100k電阻便可省去。如果使用鍵盤,電路中的100k下拉電阻則不可省去。 HD7279A采用動態(tài)循環(huán)掃描方式,如果采用普通的LED數(shù)碼管亮度不夠,則可采用高亮度或超高亮度型號的LED數(shù)碼管。

圖10-19所示的3、5、26引腳懸空。107顯示器設(shè)置的消隱、閃爍屬性,均不影響鍵盤的使用。除非不用顯示圖10-19

AT89S51單片機(jī)與HD7279A的接口電路108圖10-19AT89S51單片機(jī)與HD7279A的接口電(2)驅(qū)動程序設(shè)計(jì)根據(jù)圖10-19,編程實(shí)現(xiàn)當(dāng)有按鍵按下時(shí),單片機(jī)讀取該按鍵的代碼并將其顯示在LED數(shù)碼管上。程序中使用單片機(jī)內(nèi)RAM的29H和28H兩個(gè)單元。29H單元位地址為48H~4FH;28H單元位地址為40H~47H。①發(fā)送29H單元中的數(shù)據(jù)到HD7279A,高位在前。程序入口條件為

=1,CLK

=

0。

SETB P1.0 ;

=1 CLR P1.1 ;CLK=0SEND:MOV R2,#08H ;發(fā)送8位數(shù)據(jù) CLR P1.0 ;

=0

109(2)驅(qū)動程序設(shè)計(jì)109 LCALL DELY1 ;延時(shí)50s(T1)LOOP1:MOV C,4FH;29H單元的D7位傳至HD7279A MOV P1.2,C ;數(shù)據(jù)出現(xiàn)在DATA引腳上 SETB P1.1 ;置CLK為高電平,數(shù)據(jù)寫入HD7279A MOV A,29H ;待發(fā)數(shù)據(jù)左移1位 RL A MOV 29H,A LCALL DELY2 ;延時(shí)8s(T2) CLR P1.1 ;置CLK為低電平 LCALL DELY2 ;延時(shí)8s(T3) DJNZ R2,LOOP1 ;檢測8位數(shù)據(jù)是否發(fā)送完畢

110 LCALL DELY1 ;延時(shí)50s(T1)110 CLR P1.2;發(fā)送完畢,

DATA為低電平(輸出狀態(tài)) RET ;返回②讀入的鍵碼送到28H單元,高位在前。程序入口條件為=

0,

CLK

=

0。 CLR P1.0 ;

=0 CLR P1.1 ;CLK=0RESE:

MOV R2,#08H ;接收8位數(shù)據(jù) SETB P1.2 ;P1.2輸出鎖存器為高電平,準(zhǔn)備輸入

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論