版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、 第10章 AT89S51單片機(jī)與輸入/輸出 外設(shè)的接口12 第10章 目錄10.1 LED數(shù)碼管的顯示原理 10.1.1 LED數(shù)碼管的結(jié)構(gòu) 10.1.2 LED數(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)的鍵盤/顯示器接口 10.3.2 各種專用的鍵盤/顯示器接口芯片簡介 10.3.3 專用接口芯片CH451實(shí)現(xiàn)的鍵盤/顯示器控制 10.3.4 專用接口芯片HD7279實(shí)現(xiàn)的鍵盤/顯示器控制10.4 AT89S51單片機(jī)
2、與液晶顯示器(LCD)的接口 10.4.1 LCD顯示器的分類 10.4.2 點(diǎn)陣字符型液晶顯示模塊介紹 10.4.3 AT89S51單片機(jī)與LCD的接口及軟件編程10.5 AT89S51單片機(jī)與微型打印機(jī)TPP-40A/16A的接口10.6 AT89S51單片機(jī)與BCD碼撥盤的接口設(shè)計(jì)3內(nèi)容概要大多數(shù)的單片機(jī)應(yīng)用系統(tǒng),都要配置輸入外設(shè)和輸出外設(shè)。常用的輸入外設(shè)有鍵盤、BCD碼撥盤等;常用的輸出外設(shè)有LED數(shù)碼管、LCD顯示器、打印機(jī)等。本章介紹AT89S51與各種輸入外設(shè)、輸出外設(shè)的接口設(shè)計(jì)以及軟件編程。410.1 LED數(shù)碼管的顯示原理LED(Light Emitting Diode)發(fā)光
3、二極管縮寫。LED數(shù)碼管是由發(fā)光二極管構(gòu)成的。10.1.1 LED數(shù)碼管的結(jié)構(gòu)常見的LED數(shù)碼管為“8”字型的,共計(jì)8段。每一段對應(yīng)一個發(fā)光二極管。有共陽極和共陰極兩種,如圖10-1所示。共陰極發(fā)光二極管的陰極連在一起,通常公共陰極接地。當(dāng)陽極為高電平時,發(fā)光二極管點(diǎn)亮。同樣,共陽極LED數(shù)碼管的發(fā)光二極管的陽極連接在一起,公共陽極接正電壓,當(dāng)某個發(fā)光二極管的陰極接低電平時,發(fā)光二極管被點(diǎn)亮,相應(yīng)的段被顯示。56圖10-1 8段LED數(shù)碼管結(jié)構(gòu)及外形為了使數(shù)碼管顯示不同的符號或數(shù)字,要把某些段發(fā)光二極管點(diǎn)亮,就要為LED數(shù)碼管提供段碼(字型碼)。LED數(shù)碼管共計(jì)8段。正好是一個字節(jié)。習(xí)慣上是以
4、“a”段對應(yīng)段碼字節(jié)的最低位。各段與字節(jié)中各位對應(yīng)關(guān)系如表10-1所示。按照上述格式,顯示各種字符的8段LED數(shù)碼管的段碼如表10-2所示。78表10-1只列出了部分段碼,讀者可以根據(jù)實(shí)際情況選用,或重新定義。除 “8”字型的LED數(shù)碼管外,市面上還有“1”型、“米”字型和“點(diǎn)陣”型LED顯示器,如圖10-2所示。本章均以“8”字型的LED數(shù)碼管為例。 圖10-2 其他各種字型的LED顯示器910.1.2 LED數(shù)碼管工作原理圖10-3所示為顯示4位字符的LED數(shù)碼管的結(jié)構(gòu)原理圖。N位位選線和8N條段碼線。段碼線控制顯示字型,而位選線控制著該顯示位的LED數(shù)碼管的亮或暗。10圖10-3 4位L
5、ED數(shù)碼管的結(jié)構(gòu)原理圖LED數(shù)碼管有靜態(tài)顯示和動態(tài)顯示兩種顯示方式。1LED靜態(tài)顯示方式無論多少位LED數(shù)碼管,同時處于顯示狀態(tài)。靜態(tài)顯示方式,各位的共陰極(或共陽極)連接在一起并接地(或接+5V);每位的段碼線(adp)分別與一個8位的I/O口鎖存器輸出相連。如果送往各個LED數(shù)碼管所顯示字符的段碼一經(jīng)確定,則相應(yīng)I/O口鎖存器鎖存的段碼輸出將維持不變,直到送入另一個字符的段碼為止。正因?yàn)槿绱?,靜態(tài)顯示方式的顯示無閃爍,亮度都較高,軟件控制比較容易。11圖10-4為4位LED數(shù)碼管靜態(tài)顯示器電路,各位可獨(dú)立顯示,靜態(tài)顯示方式接口編程容易,但是占用口線較多。對圖10-4電路,若用I/O口線接口
6、,要占用4個8位I/O口。因此在顯示位數(shù)較多的情況下,所需的電流比較大,對電源的要求也就隨之增高,這時一般都采用動態(tài)顯示方式。2LED動態(tài)顯示方式無論在任何時刻只有一個LED數(shù)碼管處于顯示狀態(tài),即單片機(jī)采用“掃描”方式控制各個數(shù)碼管輪流顯示。1213圖10-4 4位LED靜態(tài)顯示電路在多位LED顯示時,為簡化硬件電路,通常將所有顯示位的段碼線的相應(yīng)段并聯(lián)在一起,由一個8位I/O口控制,而各位的共陽極或共陰極分別由相應(yīng)的I/O線控制,形成各位的分時選通。圖10-5所示為一個4位8段LED動態(tài)顯示電路。其中段碼線占用一個8位I/O口,而位選線占用一個4位I/O口。必須采用動態(tài)的“掃描”顯示方式。即
7、在某一時刻,只讓某一位的位選線處于選通狀態(tài),而其他各位的位選線處于關(guān)閉狀態(tài),同時,段碼線上輸出相應(yīng)位要有顯示的字符的段碼。1415圖10-5 4位8段LED動態(tài)顯示電路雖然這些字符是在不同時刻出現(xiàn),而在同一時刻,只有一位顯示,其他各位熄滅,由于余輝和人眼的“視覺暫留”作用,只要每位顯示間隔足夠短,則可以造成“多位同時亮”的假象,達(dá)到同時顯示的效果。LED不同位顯示的時間間隔(掃描間隔)應(yīng)根據(jù)實(shí)際情況而定。顯示位數(shù)多,將占大量的單片機(jī)時間,因此動態(tài)顯示的實(shí)質(zhì)是以犧牲單片機(jī)時間來換取I/O端口的減少。圖10-6所示為8位LED動態(tài)顯示2009.10.10的過程。圖10-6(a)所示為顯示過程,某一
8、時刻,只有一位LED被選通顯示,其余位則是熄滅的;圖10-6(b)所示為實(shí)際的顯示結(jié)果,人眼看到的是8位穩(wěn)定的同時顯示的字符。16 圖10-6 8位LED動態(tài)顯示過程和結(jié)果動態(tài)顯示的優(yōu)點(diǎn)是硬件電路簡單,顯示器越多,優(yōu)勢越明顯。缺點(diǎn)是顯示亮度不如靜態(tài)顯示的亮度高。如果“掃描”速率較低,會出現(xiàn)閃爍現(xiàn)象。1710.2 鍵盤接口原理鍵盤具有向單片機(jī)輸入數(shù)據(jù)、命令等功能,是人與單片機(jī)對話的主要手段。下面介紹鍵盤的工作原理和鍵盤的工作方式。10.2.1 鍵盤輸入應(yīng)解決的問題1鍵盤的任務(wù)任務(wù)有三項(xiàng):(1) 判別是否有鍵按下?若有,進(jìn)入下一步工作。(2)識別哪一個鍵被按下,并求出相應(yīng)的鍵值。(3)根據(jù)鍵值,找
9、到相應(yīng)鍵值的處理程序入口。182鍵盤輸入的特點(diǎn)常見鍵盤:觸摸式鍵盤、薄膜鍵盤和按鍵式鍵盤,最常用的是按鍵式鍵盤。按鍵實(shí)質(zhì)上就是一個開關(guān)。如圖10-7(a)所示,按鍵開關(guān)的兩端分別連接在行線和列線上,通過鍵盤開關(guān)機(jī)械觸點(diǎn)的斷開、閉合,其行線電壓輸出波形如圖10-7(b)所示。 圖10-7 鍵盤開關(guān)及其行線波形19圖10-7(b)所示的t1和t3分別為鍵的閉合和斷開過程中的抖動期(呈現(xiàn)一串負(fù)脈沖),抖動時間長短與開關(guān)的機(jī)械特性有關(guān),一般為510ms,t2為穩(wěn)定的閉合期,其時間由按鍵動作確定,一般為十分之幾秒到幾秒,t0、t4為斷開期。3按鍵的識別鍵的閉合與否,行線輸出電壓上就是呈現(xiàn)高電平或低電平。
10、高電平,表示鍵斷開,低電平則表示鍵閉合,通過對行線電平的高低狀態(tài)的檢測,可確認(rèn)按鍵按下以及按鍵釋放與否。為了確保對一次按鍵動作只確認(rèn)一次按鍵有效,必須消除抖動期t1和t3的影響。204如何消除按鍵的抖動按鍵去抖動的方法有兩種:一種軟件延時,本思想是:在檢測到有鍵按下時,該鍵所對應(yīng)的行線為低電平,執(zhí)行一段延時10ms的子程序后,確認(rèn)該行線電平是否仍為低電平,如果仍為低電平,則確認(rèn)該行確實(shí)有鍵按下。當(dāng)按鍵松開時,行線的低電平變?yōu)楦唠娖?,?zhí)行一段延時10ms的子程序后,檢測該行線為高電平,說明按鍵確實(shí)已經(jīng)松開。采取本措施,可消除兩個抖動期t1和t3的影響。另一種是采用專用的鍵盤/顯示器接口芯片,這類
11、芯片中都有自動去抖動的硬件電路。2110.2.2 鍵盤的工作原理鍵盤可分為兩類:非編碼鍵盤和編碼鍵盤。非編碼鍵盤是利用按鍵直接與單片機(jī)相連接而成,這種鍵盤通常使用在按鍵數(shù)量較少的場合。使用這種鍵盤,系統(tǒng)功能通常比較簡單,需要處理的任務(wù)較少,但是可以降低成本、簡化電路設(shè)計(jì)。按鍵的信息通過軟件來獲取。1非編碼鍵盤常見的為兩種結(jié)構(gòu):獨(dú)立式鍵盤和矩陣式鍵盤。(1)獨(dú)立式鍵盤特點(diǎn)是:一鍵一線,各鍵相互獨(dú)立,每個鍵各接一條I/O口線,通過檢測I/O輸入線的電平狀態(tài),可容易地判斷哪個按鍵被按下,如圖10-8所示。22圖10-8 獨(dú)立式鍵盤接口電路23對于圖10-8的鍵盤,圖中的上拉電阻保證按鍵釋放時,輸入檢
12、測線上有穩(wěn)定的高電平。當(dāng)某一按鍵按下時,對應(yīng)的檢測線就變成了低電平,與其他按鍵相連的檢測線仍為高電平,只需讀入I/O輸入線的狀態(tài),判別哪一條I/O輸入線為低電平,很容易識別哪個鍵被按下。優(yōu)點(diǎn):電路簡單,各條檢測線獨(dú)立,識別按下按鍵的軟件編寫簡單。適用于鍵盤按鍵數(shù)目較少的場合,不適用于鍵盤按鍵數(shù)目較多的場合,因?yàn)閷⒄加幂^多的I/O口線。24識別某一鍵是否按下的子程序:KEYIN:MOVP1,0FFH;P1口寫入1,設(shè)置P1口為輸入狀態(tài)MOVA,P1;讀入8個按鍵的狀態(tài)CJNEA,#0FFH,QUDOU;有鍵按下,跳去抖動LJMPRETURN;無鍵按下,返回QUDOU:MOV R3,A;8個按鍵的
13、狀態(tài)送R3保存LCALL DELAY10;調(diào)用延時子程序,軟件去鍵抖動MOVA,P1;再一次讀入8個按鍵的狀態(tài)CJNEA,R3,RETURN;兩次鍵值比較,不同, ;是抖動引起,轉(zhuǎn)RETURN25KEY0:MOVC,P1.0;有鍵按下,讀P1.0的按鍵狀態(tài)JCKEY1;P1.0為高,該鍵未按下,跳KEY1,;判下一個鍵LJMPPKEY0;P1.0的鍵按下,跳PKEY0處理KEY1:MOVC,P1.1;讀P1.1的按鍵狀態(tài)JCKEY2;P1.1為高,該鍵未按下,跳KEY2, ;判下一個鍵LJMPPKEY1;P1.1的鍵按下,跳PKEY1處理26KEY2:MOVC,P1.2;讀P1.2的按鍵狀態(tài)J
14、CKEY3;P1.2為高,該鍵未按下,跳;KEY3,判下一個鍵LJMPPKEY2;P1.2的鍵按下,跳PKEY2處理KEY3:MOVC,P1.3;讀P1.3的按鍵狀態(tài)KEY7:MOVC,P1.7;讀P1.7的按鍵狀態(tài)JCRETURN;P1.7為高,該鍵未按下,跳;RETURN處LJMPPKEY7;P1.7的鍵按下,跳PKEY7處理RETURN: RET ;子程序返回27軟件延時10ms子程序DELAY10的編寫,參見第4章。對應(yīng)8個按鍵的鍵處理程序PKEY0 PKEY7,根據(jù)按鍵功能的要求來編寫。注意,在進(jìn)入鍵處理程序后,需要先等待按鍵釋放,再執(zhí)行鍵處理功能。另外,在鍵處理程序完成后,一定要跳
15、向RETURN標(biāo)號處返回。(2)矩陣式鍵盤矩陣式(也稱行列式)鍵盤用于按鍵數(shù)目較多的場合,由行線和列線組成,按鍵位于行、列的交叉點(diǎn)上。如圖10-9所示,一個44的行、列結(jié)構(gòu)可以構(gòu)成一個16個按鍵鍵盤。在按鍵數(shù)目較多的場合,要節(jié)省較多的I/O口線。2829圖10-9 矩陣式鍵盤接口矩陣中無按鍵按下時,行線為高電平;當(dāng)有按鍵按下時,行線電平狀態(tài)將由與此行線相連的列線的電平?jīng)Q定。列線的電平如果為低,則行線電平為低;列線的電平如果為高,則行線的電平也為高,這是識別按鍵是否按下的關(guān)鍵所在。由于矩陣式鍵盤中行、列線為多鍵共用,各按鍵彼此將相互發(fā)生影響,所以必須將行、列線信號配合,才能確定閉合鍵位置。下面討
16、論矩陣式鍵盤按鍵的識別方法。 掃描法。第1步,識別鍵盤有無鍵按下;第2步,如有鍵被按下,識別出具體的鍵位。下面以圖10-9所示的鍵3被按下為例,說明識別過程。30第1步,識別鍵盤有無鍵按下。先把所有列線均置為0,然后檢查各行線電平是否都為高,如果不全為高,說明有鍵按下,否則無鍵被按下。例如,當(dāng)鍵3按下時,第1行線為低,還不能確定是鍵3被按下,因?yàn)槿绻恍械逆I2、1或0之一被按下,行線也為低電平。只能得出第1行有鍵被按下的結(jié)論。第2步,識別出哪個按鍵被按下。采用逐列掃描法,在某一時刻只讓1條列線處于低電平,其余所有列線處于高電平。當(dāng)?shù)?列為低電平,其余各列為高電平時,因?yàn)槭擎I3被按下,第1行的
17、行線仍處于高電平;31當(dāng)?shù)?列為低電平,其余各列為高電平時,第1行的行線仍處于高電平;直到讓第4列為低電平,其余各列為高電平時,此時第1行的行線電平變?yōu)榈碗娖剑瑩?jù)此,可判斷第1行第4列交叉點(diǎn)處的按鍵,即鍵3被按下。綜上所述,掃描法的思想是,先把某一列置為低電平,其余各列置為高電平,檢查各行線電平的變化,如果某行線電平為低電平,則可確定此行此列交叉點(diǎn)處的按鍵被按下。32 線反轉(zhuǎn)法。掃描法要逐列掃描查詢,有時則要多次掃描。而線反轉(zhuǎn)法則很簡練,無論被按鍵是處于第一列或最后一列,均只需經(jīng)過兩步便能獲得此按鍵所在的行列值,下面以圖10-10所示的矩陣式鍵盤為例,介紹線反轉(zhuǎn)法的具體步驟。讓行線編程為輸入線
18、,列線編程為輸出線,并使輸出線輸出為全低電平,則行線中電平由高變低的所在行為按鍵所在行。再把行線編程為輸出線,列線編程為輸入線,并使輸出線輸出為全低電平,則列線中電平由高變低所在列為按鍵所在列。33兩步即可確定按鍵所在的行和列,從而識別出所按的鍵。 圖10-10 采用線反轉(zhuǎn)法的矩陣式鍵盤34假設(shè)鍵3被按下。第一步,P1.0P1.3輸出全為“0”,然后,讀入P1.4P1.7線的狀態(tài),結(jié)果P1.4=0,而P1.5P1.7均為1,因此,第1行出現(xiàn)電平的變化,說明第1行有鍵按下;第二步,讓P1.4P1.7輸出全為“0”,然后,讀入P1.0P1.3位,結(jié)果P1.0=0,而P1.1P1.3均為1,因此第4
19、列出現(xiàn)電平的變化,說明第4列有鍵按下。綜上所述,即第1行、第4列按鍵被按下,此按鍵即鍵3按下。線反轉(zhuǎn)法簡單適用,但不要忘記按鍵去抖動處理。3510.2.3 鍵盤的工作方式單片機(jī)在忙于其他各項(xiàng)工作任務(wù)時,如何兼顧鍵盤的輸入,這取決于鍵盤的工作方式。工作方式選取原則是,既要保證及時響應(yīng)按鍵操作,又不過多占用單片機(jī)工作時間。鍵盤工作方式有3種,即編程掃描、定時掃描和中斷掃描。1編程掃描方式也稱查詢方式,利用單片機(jī)空閑時,調(diào)用鍵盤掃描子程序,反復(fù)掃描鍵盤。如果單片機(jī)的查詢的頻率過高,雖能及時響應(yīng)鍵盤的輸入,但也會影響其他任務(wù)的進(jìn)行。查詢的頻率過低,可能會鍵盤輸入漏判。36所以要根據(jù)單片機(jī)系統(tǒng)的繁忙程度
20、和鍵盤的操作頻率,來調(diào)整鍵盤掃描的頻率。2定時掃描方式每隔一定的時間對鍵盤掃描一次。在這種方式中,通常利用單片機(jī)內(nèi)的定時器產(chǎn)生的定時中斷,進(jìn)入中斷子程序來對鍵盤進(jìn)行掃描,在有鍵按下時識別出該鍵,并執(zhí)行相應(yīng)鍵的處理程序。為了不漏判有效的按鍵,定時中斷的周期一般應(yīng)小于100ms。373中斷掃描方式為提高單片機(jī)掃描鍵盤的工作效率,可采用中斷掃描方式,如圖10-11所示。圖中的鍵盤只有在鍵盤有按鍵按下時,發(fā)出中斷請求信號,單片機(jī)響應(yīng)中斷,執(zhí)行鍵盤掃描程序中斷服務(wù)子程序。如無鍵按下,單片機(jī)將不理睬鍵盤。此種方式的優(yōu)點(diǎn)是,只有按鍵按下時,才進(jìn)行處理,所以其實(shí)時性強(qiáng),工作效率高。3839圖10-11 采用線
21、反轉(zhuǎn)法的矩陣式鍵盤非編碼矩陣式鍵盤所完成的工作分為3個層次。(1)單片機(jī)如何來監(jiān)視鍵盤的輸入,體現(xiàn)在鍵盤的工作方式上就是:編程掃描;定時掃描;中斷掃描。(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ì)方案。4010.3.1 利用AT89S51串行口實(shí)現(xiàn)的鍵盤/顯示器接口當(dāng)AT89S51單片機(jī)的串行口未作它用時,可使用AT89S51的串行口的方式0的
22、輸出方式,構(gòu)成鍵盤/顯示器接口,如圖10-12所示。8個74LS164:74LS164(0)74LS164(7)作為8位LED數(shù)碼管的段碼輸出口,AT89S51的P3.4、P3.5作為兩行鍵的行狀態(tài)輸入線,P3.3作為TXD引腳同步移位脈沖輸出控制線,P3.3=0時,與門封死,禁止同步移位脈沖輸出。這種方案主程序可不必掃描顯示器,軟件設(shè)計(jì)簡單,使單片機(jī)有更多的時間處理其他事務(wù)。下面列出顯示子程序和鍵盤掃描子程序。41 圖10-12 用AT89S51串行口擴(kuò)展鍵盤/顯示器42顯示子程序:DIR: SETBP3.3; P3.3=1,允許TXD腳同步移位脈沖輸出 MOVR7,08H; 送出的段碼個數(shù)
23、 MOVR0,7FH; 7FH78H為顯示數(shù)據(jù)緩沖區(qū)DL0: MOV A,R0; 取出要顯示的數(shù)送A ADD A,0DH; 加上偏移量 MOVC A,APC; 查段碼表SEGTAB, 取出段碼 MOV SBUF ,A; 將段碼送串行口的SBUFDL1: JNB TI,DL1; 查詢1個字節(jié)的段碼輸出完否?CLRTI; 1字節(jié)的段碼輸出完,清TI標(biāo)志 DECR0; 指向下一個顯示數(shù)據(jù)單元43DJNZR7,DL0;段碼個數(shù)計(jì)數(shù)器R7是否為0,如不;為0,繼續(xù)送段碼 CLR P3.3; 8個段碼輸出完畢,關(guān)閉顯示器輸出 RET ; 返回SEGTAB:DB 0C0H,0F9H,0A4H,0B0H,99
24、H;共陽極段 ; 碼表 DB92H,82H,0F8H,90H; DB88H,83H,0C6H,0A1H,86H; DB8FH,0BFH,8CH,0FFH,0FFH;44鍵盤掃描子程序:KEYI:MOV A,00H; 判斷有無鍵按下, 使所有列線為0 MOV SBUF,A; 掃描鍵盤的(8)號74LS164輸出為;00H, 使所有列線為0KL0: JNB TI,KL0; 串行輸出完否? CLR TI; 串行輸出完畢,清TIKL1:JNBP3.4,PK1; 第1行有閉合鍵嗎?如有,跳PK1;進(jìn)行處理 JB P3.5,KL1 ; 在第2行鍵中有閉合鍵嗎?無閉;合鍵跳KL145PK1: ACALL D
25、L10; 調(diào)用延時10ms子程,軟件消抖動 JNB P3.4,PK2; 判斷是否由抖動引起? JB P3.5,KL1PK2: MOV R7,08H; 不是抖動引起的 MOV R6,0FEH;判別是哪一個鍵按下,F(xiàn)EH為最左;1列為低 MOV R3,00H; R3為列號寄存器 MOV A,R6KL5: MOV SBUF,A; 列掃描,列掃描碼從串行口輸出46KL2: JNB TI,KL2; 等待串行口發(fā)送完 CLR TI; 串行口發(fā)送完畢,清TI標(biāo)志 JNB P3.4,PKONE; 讀第1行線狀態(tài),第1行有鍵;閉合,跳PKONE JB P3.5,NEXT; 讀第2行狀態(tài),2行某鍵否? MOV R
26、4,08H; 2行中有鍵被按下,行首鍵;號08H送R4 AJMP PK3PKONE:MOV R4,00H; 1行鍵中有鍵按下,行首鍵;號00H送R4PK3: MOV SBUF,00H; 等待鍵釋放,發(fā)送00H使所;有列線為低47KL3: JNB TI,KL3; 判1個字節(jié)是否發(fā)送完畢 CLR TI; 發(fā)送完畢,清標(biāo)志KL4: JNB P3.4,KL4; 判行線狀態(tài) JNB P3.5 MOV A,R4; 兩行線均為高,說明鍵已釋放 ADD A,R3; 計(jì)算得鍵碼A RETNEXT: MOV A,R6;列掃描碼左移一位,判下一列鍵 RL A MOV R6,A; 記住列掃描碼于R6中 48INC R
27、3; 列號增1 DJNZ R7,KL5; 列計(jì)數(shù)器R7減1,8列;鍵都檢查完否? AJMP KEYI; 8列掃描完,開始下一個鍵盤掃描周期DL10: MOV R7,0AH; 延時10ms子程序DL: MOV R6,0FFHDL6: DJNZ R6,DL6 DJNZ R7,DL RET本例中,如只需LED數(shù)碼管顯示部分,可把鍵盤部分的電路去掉即可;如只需鍵盤,可把LED數(shù)碼管部分的電路去掉。4910.3.2 各種專用的鍵盤/顯示器接口芯片簡介用專用芯片,可省去編寫鍵盤/顯示器動態(tài)掃描程序以及鍵盤去抖動程序編寫的繁瑣工作。目前各種專用接口芯片種類繁多,各有特點(diǎn),總體趨勢是并行接口芯片逐漸退出,串行
28、接口芯片越來越多的得到應(yīng)用。早期的較為流行的鍵盤/顯示器芯片8279,目前流行的鍵盤/顯示器接口芯片均采用串行通信方式,占用口線少。常見的芯片有:周立功公司的ZLG7289A、ZLG7290B、MAX7219、南京沁恒公司的CH451、HD7279和BC7281等。50這些芯片全采用動態(tài)掃描方式,且控制的鍵盤均為編碼鍵盤。1. 專用鍵盤/顯示器接口芯片8279可編程的并行鍵盤/顯示器接口芯片。內(nèi)部有鍵盤FIFO(先進(jìn)先出堆棧)/傳感器雙重功能的88=64字節(jié)RAM,鍵盤控制部分可控制88的鍵盤矩陣,能自動獲得按下鍵的鍵號。自動去鍵盤抖動并具有雙鍵鎖定保護(hù)功能。顯示RAM的容量為168位,最多可
29、控制16個LED數(shù)碼管顯示。8279已經(jīng)逐漸淡出市場。512. 專用鍵盤/顯示器芯片ZLG7290B 采用I2C串行口總線結(jié)構(gòu),可實(shí)現(xiàn)8位LED顯示和64鍵的鍵盤管理,需外接晶振,使用按鍵功能時要接8個二極管,電路稍顯復(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ù)碼管,沒有鍵盤管理功能。524. 專用顯示器芯片BC7281可驅(qū)動16位L
30、ED數(shù)碼管顯示和實(shí)現(xiàn)64鍵的鍵盤管理,可實(shí)現(xiàn)閃爍、段點(diǎn)亮、段熄滅等功能。最大特點(diǎn)是通過外接移位寄存器驅(qū)動16位LED數(shù)碼管。但所需外圍電路較多,占PCB空間較大,且在驅(qū)動16位LED數(shù)碼管時,由于采用動態(tài)掃描方式工作,電流噪聲過大。5專用鍵盤/顯示器芯片HD7279與單片機(jī)間采用串行通信,可控制并驅(qū)動8位LED數(shù)碼管和實(shí)現(xiàn)64(88)鍵的鍵盤管理。外圍電路簡單,價格低廉。由于具有上述優(yōu)點(diǎn),目前得到較為廣泛的應(yīng)用。536專用鍵盤/顯示器芯片CH451可動態(tài)驅(qū)動8位LED數(shù)碼管顯示,具有BCD碼譯碼、閃爍、移位等功能。內(nèi)置大電流驅(qū)動級,段電流不小于30mA,位電流不小于160mA。內(nèi)置64(88)
31、鍵鍵盤控制器,可對88矩陣鍵盤自動掃描,且有去抖動電路,并提供鍵盤中斷和按鍵釋放標(biāo)志位,可供查詢按鍵按下與釋放狀態(tài)。片內(nèi)內(nèi)置上電復(fù)位和看門狗定時器。芯片性價比較高,是目前使用較為廣泛的專用的鍵盤/顯示器接口芯片之一。但抗干擾能力不是很強(qiáng),不支持組合鍵識別。上述各種芯片,CH451和HD7279使用較多。從性價比,首推CH451,主要對LED數(shù)碼管的驅(qū)動功能較完善。5410.3.3 專用接口芯片CH451實(shí)現(xiàn)的鍵盤/顯示器控制介紹專用鍵盤/顯示器接口芯片CH451(南京沁恒公司)1. 基本功能與引腳介紹內(nèi)部集成數(shù)碼管顯示驅(qū)動和鍵盤掃描控制的專用鍵盤/顯示器接口芯片。內(nèi)置RC振蕩電路,可以直接動態(tài)
32、驅(qū)動8位LED數(shù)碼管(或者64只LED),可實(shí)現(xiàn)顯示數(shù)字左移、右移、左循環(huán)、右循環(huán)、各位顯示數(shù)字獨(dú)立閃爍等功能。內(nèi)置大電流驅(qū)動級,段電流不小于30mA,字電流不小于160mA,并有16級亮度控制功能;55在鍵盤控制方面,該芯片內(nèi)有64鍵鍵盤控制器,可實(shí)現(xiàn)88矩陣編碼鍵盤的掃描,并內(nèi)置自動去抖動電路,可提供按鍵中斷與按鍵釋放標(biāo)志位等功能。與單片機(jī)的接口,可選用1線串行接口或高速4線串行接口,片內(nèi)有上電復(fù)位電路,同時可提供高電平有效復(fù)位和低電平有效復(fù)位兩種輸出,同時片內(nèi)提供看門狗WatchDog。56兩種封裝形式:28腳的表貼型封裝(SOP型)以及24腳的雙列直插 (DIP)封裝,如圖10-13所
33、示。 圖10-13 CH451的封裝與引腳575828腳與24腳在功能上稍有差別,引腳定義見表10-3。. CH451的操作命令 命令均為12位,其中高4位為標(biāo)識碼,低8位為參數(shù),(1)空操作命令編碼:0000。對CH451無任何影響??蓱?yīng)用在多個CH451的級聯(lián)中,透過前級CH451向后級CH451發(fā)送操作命令而不影響前級CH451的狀態(tài)。例如,要將操作命令001000000001B發(fā)送給兩級級聯(lián)電路中的后級CH451(后級CH451的DIN引腳連接到前級CH451的DOUT引腳),只要在該操作命令后添加空操作59命令000000000000B再發(fā)送,該操作命令將經(jīng)過前級CH451到達(dá)后級C
34、H451,而空操作命令留給了前級CH451。另外,為在不影響CH451的前提下, 使DCLK變化以清除看門狗計(jì)時器,也可以發(fā)送空操作命令。在非級聯(lián)的應(yīng)用中,空操作命令可只發(fā)送高4位。(2)芯片內(nèi)部復(fù)位命令編碼:001000000001B??蓪H451的各個寄存器和各種參數(shù)復(fù)位到默認(rèn)的狀態(tài)。芯片上電時,CH451均被復(fù)位,此時各個寄存器均復(fù)位為0,各種參數(shù)均恢復(fù)為默認(rèn)值。60(3)字?jǐn)?shù)據(jù)移位命令編碼:0011000000D1D0B。命令共有個:開環(huán)左移、右移,閉環(huán)左移、右移。D0=0時為開環(huán),D0=時為閉環(huán);D1=0時左移,D1=1時為右移。開環(huán)左移時,DIG引腳對應(yīng)的單元補(bǔ)00,此時不譯碼方
35、式顯示為空格,BCD譯碼方式時顯示為0;開環(huán)右移時,DIG7引腳對應(yīng)的單元補(bǔ)00;而在閉環(huán)時 DIG0與DIG7頭尾相接,閉環(huán)移位。61(4)設(shè)定系統(tǒng)參數(shù)命令編碼:010000000WDOGKEYBDISPB。用于設(shè)定CH451的系統(tǒng)級參數(shù),如看門狗WDOG使能、鍵盤掃描使能KEYB、顯示驅(qū)動使能DISP等。各個參數(shù)均可通過命令中的位數(shù)據(jù)來進(jìn)行控制,將相應(yīng)數(shù)據(jù)位置為可啟用該功能,否則關(guān)閉該功能(默認(rèn)值)。(5)設(shè)定顯示參數(shù)命令編碼:0101MODE(1位)LIMIT(3位)INTENSITY(4位)B。設(shè)定CH451的顯示參數(shù),其中譯碼方式MODE(1位)、掃描極限LIMIT(3位)、顯示亮度
36、INTENSITY(4位)。62譯碼方式MODE=1,為BCD譯碼方式,MODE=時為不譯碼方式。CH451默認(rèn)不譯碼方式,此時8個數(shù)據(jù)寄存器中字節(jié)數(shù)據(jù)的位7位0分別對應(yīng)8個數(shù)碼管的小數(shù)點(diǎn)和段a段g,當(dāng)某段數(shù)據(jù)位為1時,對應(yīng)的段點(diǎn)亮;當(dāng)某段數(shù)據(jù)位為0時熄滅。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ū)動引腳SEG6SEG0的輸出,它們對應(yīng)于數(shù)碼管的段g段a,同時可用字節(jié)63數(shù)據(jù)的位7來控制SEG7段對應(yīng)的LED數(shù)
37、碼管的小數(shù)點(diǎn),字節(jié)數(shù)據(jù)的位和位不影響B(tài)CD譯碼的輸出,它們可以是任意值。將位4位0進(jìn)行BCD譯碼可顯示以下28個字符,其中00000B01111B分別對應(yīng)于顯示字符“0F”,10000B11010B分別對應(yīng)于顯示“空格”、“+”、“-”、“=”、“”、“”、“_”、“H” 、“L”、“P”、“”,其余值為空格。掃描極限LIMIT控制位001B111和000B(默認(rèn)值)可分別設(shè)定掃描極限17和8。64顯示亮度INTENSITY控制位(4位) 可實(shí)現(xiàn)16級顯示亮度控制。00011111和0000(默認(rèn)值)則用于分別設(shè)定顯示驅(qū)動占空比1161516和1616,(6)設(shè)定閃爍控制命令編碼:D7SD6S
38、D5SD4SD3SD2SD1SD0SB用于設(shè)定CH451的閃爍顯示屬性,其中D7SD0S位分別對應(yīng)于8個數(shù)碼管的字驅(qū)動DIG7DIG0,并控制DIG7DIG0的屬性,將相應(yīng)的數(shù)據(jù)位置為1則閃爍顯示,否則為不閃爍的正常顯示(默認(rèn)值)。(7)加載顯示數(shù)據(jù)命令編碼:DIG_ADDR DIG_DATAB。65用于將顯示字節(jié)數(shù)據(jù)DIG_DATA(8位)寫入DIG_ADDR(3位)指定的數(shù)據(jù)寄存器中。DIG_ADDR的000B111B分別用于指定顯示寄存器的地址07,并分別對應(yīng)于DIG0DIG7引腳驅(qū)動的8個LED數(shù)碼管。DIG_DATA為待寫入的顯示字節(jié)數(shù)據(jù)。(8)讀取按鍵代碼命令編碼:0111B。用于
39、獲得CH451最近檢測到的有效按鍵的代碼。CH451通常從DOUT引腳向單片機(jī)輸出按鍵代碼,按鍵代碼是7位數(shù)據(jù),最高位是狀態(tài)碼,位5位0是掃描碼。讀取按鍵代碼命令的位7位0可以是任意值,可將該命令縮短為位,即位11位8。66例如,CH451檢測到有效按鍵并向單片機(jī)發(fā)出中斷請求時,假如按鍵代碼是5EH,則單片機(jī)先向CH451發(fā)出讀取按鍵代碼命令0111B,然后再從DOUT獲得按鍵代碼5EH。CH451所提供的按鍵代碼為位,位2位0是列掃描碼,位5位3是行掃描碼,位6是按鍵的狀態(tài)碼(鍵按下為,鍵釋放為)。對88鍵盤,即連接在DIG7DIG0與SEG7SEG0之間的鍵按下時,CH451所提供的按鍵代
40、碼是固定的,如圖10-14所示。如果需要鍵被釋放時的按鍵代碼,可將圖10-14所示的按鍵代碼的位6 置0,也可將按鍵代碼減去40H。67例如,連接DIG3與SEG4的鍵被按下時,按鍵代碼為63H,鍵被釋放后,按鍵代碼是23H。單片機(jī)可在任何時候讀取有效按鍵的代碼,但一般在CH451檢測到有效按鍵并向發(fā)出鍵盤中斷請求時,進(jìn)入中斷服務(wù)程序讀取按鍵代碼,此時按鍵代碼的位6總是1。另外,如需了解按鍵何時釋放,可通過查詢方式定期讀取按鍵代碼,直到按鍵代碼的位6為0。注意:CH451不支持組合鍵。如需要組合鍵功能,則可利用兩片CH451來實(shí)現(xiàn)。具體的實(shí)現(xiàn),請見相關(guān)資料。683. CH451與AT89S51
41、單片機(jī)的接口接口電路如圖10-14所示,使用線串行接口。其中DOUT腳連到外部中斷輸入 腳,用中斷方式響應(yīng)有效按鍵。也可用查詢方式確定CH451是否檢測到有效按鍵,同時還可向單片機(jī)提供復(fù)位信號RESET,并帶有WatchDog功能。CH451的段驅(qū)動腳串200電阻用于限制和均衡段驅(qū)動電流。在5V下,串接200電阻對應(yīng)的段電流為13mA。CH451具有64鍵的鍵盤掃描功能,為防止鍵按下后在SEG信號線與DIG信號線之間形成短路而影響數(shù)碼管顯示,一般應(yīng)在CH451的DIGDIG腳與鍵盤矩陣之間串接限流電阻,阻值1k10k。69圖10-14 CH451與AT89S51單片機(jī)的接口電路70將P1.0與
42、DIN連接可用于輸入串行數(shù)據(jù),串行數(shù)據(jù)輸入的順序是低位在前,高位在后。另外,在上電復(fù)位后,CH451 默認(rèn)選擇線串行接口,如需選擇線串行接口,則應(yīng)在DCLK輸出串行時鐘之前,先在DIN上輸出一個低電平脈沖,以通知CH451為4線串行接口。將P1.1與DCLK連接可提供串行時鐘,以使CH451在其上升沿從DIN輸入數(shù)據(jù),并在其下降沿從DOUT輸出數(shù)據(jù)。71LOAD用于加載串行數(shù)據(jù),CH451一般在其上升沿加載移位寄存器中的12位數(shù)據(jù)以作為操作命令進(jìn)行分析并處理。也就是說,LOAD的上升沿是串行數(shù)據(jù)幀的幀完成標(biāo)志,此時無論移位寄存器中的12位數(shù)據(jù)是否有效,CH451都會將其當(dāng)作操作命令來處理。應(yīng)注
43、意,在級聯(lián)電路中,單片機(jī)每次輸出的串行數(shù)據(jù)必須是單個CH451的串行數(shù)據(jù)的位數(shù)乘以級聯(lián)的級數(shù)。下面介紹該接口電路的驅(qū)動程序:72CH451初始化子程序:INIT:CLR P1.0 ;DIN腳先置低,當(dāng)有上跳沿時;選擇CH451為線串行接口SETB P1.1;置DCLK為默認(rèn)的高電平SETB P1.0;置DIN為高電平,產(chǎn)生上跳;沿,選線串行接口SETB P1.2;置LOAD腳為高電平SETB P3.2 ;置 (P3.2)為輸入MOVB,#04H ;設(shè)置系統(tǒng)參數(shù)命令MOV,#07H ;WatchDog使能,開鍵盤、顯示功能LCALL WRITE;調(diào)用寫命令子程序WRITEMOV B,#03H ;
44、設(shè)置移位命令73MOV A,#00H ;開環(huán)左移LCALL WRITE;調(diào)用寫命令子程序WRITEMOVB,#05H;設(shè)置顯示參數(shù)MOVA,#00H ;不譯碼,位顯示,最高亮度LCALL WRITE;調(diào)用寫命令子程序WRITEMOVB,#06H ;設(shè)置閃爍控制MOVA,#00H ;不閃爍LCALL WRITE;調(diào)用寫命令子程序WRITECLR IT0 ;置外中斷請求信號為低電平觸發(fā)CLR IE0 ;清外中斷的中斷請求標(biāo)志SETB EX0 ;允許鍵盤中斷SETB EA;總中斷允許RET;子程序返回74寫入命令子程序:入口:B、Acc中裝入待寫的12位命令數(shù)據(jù),低位在Acc中,高位在B的低位中WR
45、ITE:CLR EX0;禁止鍵盤中斷CLR P1.2 ;置LOAD腳為低,命令開始MOV R7,#08H ;將Acc中位送出WRIT_8: RRC A ;低位在前,高位在后CLRP1.1;置DCLK腳為低電平MOV P1.0,C ;送出1位數(shù)據(jù)SETB P1.1 ;時鐘上升沿,通知CH451輸入位數(shù)據(jù)DJNZ R7,WRIT_8 ;8位數(shù)據(jù)未送完,繼續(xù)75MOV A,BMOV R7,#04H ;將B中位送出WRIT_4:RRC A ;低位在前 高位在后CLR P1.1;置DCLK腳為低電平MOVP1.0,C;送出1位數(shù)據(jù)SETBP1.1;產(chǎn)生時鐘上升沿,通知;CH451輸入位數(shù)據(jù)DJNZ R7
46、,WRIT_4;4位數(shù)據(jù)未送完,繼續(xù)SETB P1.2 ;產(chǎn)生加載上跳沿,通知;CH451處理命令數(shù)據(jù)SETB EX0 ;允許鍵盤中斷RET76讀入鍵值子程序: 出口:鍵值數(shù)據(jù)在Acc中。READ:CLR EXO ;禁止鍵盤中斷CLR P1.2 ;命令開始MOV A,#07H ;讀取鍵值命令的高位0111BMOV R7,#04H ;忽略12位命令的低位READ_4 READ_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 ;加載上
47、跳沿,通知CH451處理命令數(shù)據(jù)MOVA ;先清除鍵值單元以便移位77MOVR7,#07 ;讀入位鍵值 READ_7:MOV C,P3.2 ;讀入1位數(shù)據(jù)CLRP1.1 ;置DCLK腳低電平,產(chǎn)生下跳;沿,通知CH451輸出下一位RLCA ;數(shù)據(jù)移入Acc,高位前,低位后SETB P1.1;置DCLK腳為高電平DJNZ R7,READ_7 ;7位數(shù)據(jù)未完繼續(xù)MOV IE0 ;清中斷標(biāo)志,讀操作過程中;有低電平脈沖SETB EX0 ;允許鍵盤中斷RET78使用CH451擴(kuò)展鍵盤顯示接口,具有接口簡單、占用CPU資源少、外圍器件簡單、性能價格比高等優(yōu)點(diǎn),在各種單片機(jī)系統(tǒng)中得以廣泛的應(yīng)用。7910.
48、3.4 專用接口芯片HD7279實(shí)現(xiàn)的鍵盤/顯示器控制HD7279是目前使用較廣泛的另一種專用接口芯片。1 HD7279A簡介能同時驅(qū)動8個共陰極LED數(shù)碼管(或64個獨(dú)立的LED發(fā)光二極管)和64(88)鍵的編碼鍵盤矩陣。控制LED數(shù)碼管采用動態(tài)掃描的循環(huán)顯示方式。具有如下特性:與單片機(jī)采用串口方式,僅占4條口線,接口簡單;內(nèi)部有譯碼器,可直接接收BCD碼或十六進(jìn)制碼,同時具有兩種譯碼方式,實(shí)現(xiàn)LED數(shù)碼管位尋址和段尋址,可方便地控制每位LED數(shù)碼管中任意一段是否發(fā)光;80內(nèi)部有驅(qū)動器,可直接驅(qū)動不超過25.4mm的LED數(shù)碼管。片選信號輸入,易實(shí)現(xiàn)多于8位顯示器或多于64鍵的鍵盤控制。具有
49、自動消除鍵抖動并識別有效鍵值的功能。HD7279A芯片占用口線少,外圍電路簡單,具有較高性價比,已在鍵盤/顯示器接口的設(shè)計(jì)中獲得廣泛應(yīng)用。(1)引腳說明與電氣特性為28腳標(biāo)準(zhǔn)雙列直插式封裝(DIP),單一+5V供電。其引腳如圖10-15所示,引腳功能見表10-4。81 圖10-15 HD7279A的引腳8283位驅(qū)動輸出端DIG0DIG7連接8只LED數(shù)碼管的共陰極;段驅(qū)動輸出端SASG分別連接至LED數(shù)碼管的ag段的陽極,而DP腳連至小數(shù)點(diǎn)dp的陽極。DIG0DIG7和DP以及SASG還分別是64鍵的鍵盤的列線和行線,完成對鍵盤的譯碼和鍵值識別。88矩陣陣列中的每個鍵值(見圖10-19)可用
50、讀鍵盤命令讀出,鍵值范圍是00H3FH。與單片機(jī)連接僅需4條口線: 、DATA、CLK和KEY。84 : 當(dāng)單片機(jī)訪問HD7279A芯片(寫入命令、顯示數(shù)據(jù)、位地址、段地址或讀出鍵值等)時,應(yīng)將其置為低電平。DATA:串行數(shù)據(jù)端,當(dāng)單片機(jī)向HD7279A芯片發(fā)送數(shù)據(jù)時,DATA為輸入端;當(dāng)單片機(jī)從HD7279A芯片讀入鍵值時,DATA為輸出端。CLK:數(shù)據(jù)串行傳送的同步時鐘輸入端,時鐘的上升沿將數(shù)據(jù)寫入HD7279A中或從HD7279A中讀出數(shù)據(jù)。85KEY:為按鍵信號輸出端,在無鍵按下時為高電平,在有鍵按下時變?yōu)榈碗娖剑⑶乙恢北3值皆摪聪骆I至釋放為止。 :為復(fù)位端,由低電平變?yōu)楦唠娖?,并?jīng)
51、過1825ms復(fù)位結(jié)束。通常,該端接+5V即可。若對可靠性要求較高,則可外接復(fù)位電路,或直接由單片機(jī)控制。RC:用于外接振蕩元件,其典型值為R=1.5k,C=15pF。NC:懸空。HD7279A的電氣特性如表10-5所示。8687(2)控制命令介紹 6條純命令、7條帶數(shù)據(jù)命令和1條讀鍵盤命令組成。 純命令(6條)。所有純命令都是單字節(jié),見表10-6。88 帶數(shù)據(jù)命令(7條)。均由雙字節(jié)組成,第一字節(jié)為命令標(biāo)志碼(有的還有位地址),第二字節(jié)為顯示內(nèi)容。a按方式0譯碼顯示命令命令中的a2、a1、a0表示LED數(shù)碼管的位地址,表示顯示數(shù)據(jù)是送給哪一位LED的,L1表示LED最低位,L8表示LED最高
52、位,具體位地址的譯碼見表10-7。89命令中的d3、d2、d1、d0為顯示數(shù)據(jù),收到這些數(shù)據(jù)后,HD7279A按表10-8所示的規(guī)則譯碼和顯示。dp為小數(shù)點(diǎn)顯示控制位,dp=1時,小數(shù)點(diǎn)顯示,dp=0時,小數(shù)點(diǎn)不顯示。命令中的為無影響位。90例如,命令第一字節(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譯碼顯示命令91 該命令和按方式0譯碼顯示的含義基本相同,不同的是譯碼方式為1,LED顯示的內(nèi)容與十六進(jìn)制相對應(yīng),如表10-9所示。a2、a1、a0位地址譯碼表如表10-9所
53、示 表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)亮。92d3d0(十六進(jìn)制)LED顯示d3d0(十六進(jìn)制)LED顯示0H08H81H19H92H2AHA3H3BHB4H4CHC5H5DHD6H6EHE7H7FHFc不譯碼顯示命令命令中的a2、a1、a0仍為位地址,譯碼表如表10-8所示。第2字節(jié)仍為LED顯示內(nèi)容,其中dp和AG分別代表LED的小數(shù)點(diǎn)和對應(yīng)的段,當(dāng)取值為1時,該段點(diǎn)亮;取值為0時,該段熄滅,見表10-10。93可在指定位上顯示字
54、符。例如,若命令第一字節(jié)為95H,第二字節(jié)為3EH,則在L6位LED上顯示字符U,小數(shù)點(diǎn)dp 熄滅。d閃爍控制命令94 命令規(guī)定了每個數(shù)碼管的閃爍屬性。d8d1分別對應(yīng)L8L1位數(shù)碼管,其值為1時,LED不閃爍;其值為0時,LED閃爍。如表10-11所示,該命令默認(rèn)所有數(shù)碼管均不閃爍。例如,命令第一字節(jié)為88H,第二字節(jié)為97H,則L7、L6、L4位LED閃爍。e消隱控制命令95該命令規(guī)定了每個數(shù)碼管的消隱屬性。d8d1分別對應(yīng)L8L1位數(shù)碼管,其值為1時,LED顯示;值為0時,消隱,如表10-12所示。應(yīng)注意至少要有一個LED數(shù)碼管保持顯示,如全部消隱,該命令無效。96例如,命令第一字節(jié)為9
55、8H,第二字節(jié)為81H,則L7、L6、L5、L4、L3、L2位LED消隱。f段點(diǎn)亮命令點(diǎn)亮某個LED數(shù)碼管中的某一段或獨(dú)立的64個LED發(fā)光二極管中的某一個。d5d0取值為00H3FH,點(diǎn)亮段見表10-13。例如,命令第一字節(jié)為E0H,第二字節(jié)為00H,則點(diǎn)亮L1位LED的g段;第二字節(jié)為10H,則點(diǎn)亮L3位LED的g段。9798g段關(guān)閉命令關(guān)閉某個數(shù)碼管中的某一段。d5d0的取值為00H3FH,所對應(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段。99 讀取鍵盤命令從HD7279
56、A讀出當(dāng)前按鍵值。命令第一字節(jié)為15H,表示單片機(jī)寫到HD7279A是讀鍵命令,而第二字節(jié)d7d0為從HD7279A中讀的按鍵值,其范圍為00H3FH。當(dāng)按鍵按下時,KEY引腳從高電平變?yōu)榈碗娖?,并保持到按鍵釋放為止。在此期間,若HD7279A收到來自單片機(jī)的讀鍵盤命令15H,則HD7279A向單片機(jī)輸出當(dāng)前的按鍵代碼。100注意,HD7279A只能給出其中一個按下鍵的代碼,不適合需要兩個或兩個以上鍵同時按下的場合。如果確實(shí)需要雙鍵組合使用,可在單片機(jī)某位I/O引腳接一鍵,HD7279A所連鍵盤共同組成雙鍵功能。 時序HD7279A采用串行方式與單片機(jī)通信,串行數(shù)據(jù)從DATA引腳送入或輸出,并
57、與CLK端同步。當(dāng)片選信號 變?yōu)榈碗娖胶?,DATA引腳上的數(shù)據(jù)在CLK脈沖上升沿作用下寫入或讀出HD7279A的數(shù)據(jù)緩沖器。101(3)命令時序a純命令時序單片機(jī)發(fā)出8個CLK脈沖,向HD7279A發(fā)出8位命令,DATA引腳最后為高阻態(tài),如圖10-16所示。 圖10-16 純命令時序102b帶數(shù)據(jù)命令時序單片機(jī)發(fā)出16個CLK脈沖,前8個向HD7279A發(fā)送8位命令;后8個向HD7279A傳送8位顯示數(shù)據(jù),DATA引腳最后為高阻態(tài),如圖10-17所示。 圖10-17 帶數(shù)據(jù)命令時序103c讀鍵盤命令時序單片機(jī)發(fā)出16個CLK脈沖,前8個向HD7279A發(fā)送8位命令;發(fā)送完之后DATA引腳為高阻
58、態(tài);后8個CLK由HD7279A向單片機(jī)返回8位按鍵值,DATA引腳為輸出狀態(tài)。最后一個CLK脈沖的下降沿將DATA引腳恢復(fù)為高阻態(tài),如圖10-18所示。 圖10-18 讀鍵盤命令時序104保證正確的時序是HD7279A正常工作的前提條件。當(dāng)選定HD7279A的振蕩元件RC和單片機(jī)的晶振之后,應(yīng)調(diào)節(jié)延時時間,使時序中的T1T8滿足表10-14要求。應(yīng)仔細(xì)調(diào)整HD7279A時序,使其運(yùn)行時間接近最短。1052AT89S51單片機(jī)與HD7279A接口設(shè)計(jì)(1)硬件接口電路圖10-19為單片機(jī)與HD7279A的接口電路,外接振蕩元件為典型值,晶振頻率為12MHz。上電后,HD7279A大約經(jīng)過151
59、8ms的時間才進(jìn)入工作狀態(tài)。單片機(jī)判斷鍵盤矩陣中是否有按鍵按下,是通過KEY腳電平來判斷的。使用中斷方式時,可將KEY腳接至單片機(jī)的外部中斷輸入端,并設(shè)置成跳沿觸發(fā)。HD7279A控制顯示器時,應(yīng)連接共陰極顯示器。對于不使用的按鍵和顯示器,可以不連接。省去的顯示器或?qū)?06顯示器設(shè)置的消隱、閃爍屬性,均不影響鍵盤的使用。除非不用顯示器,否則串聯(lián)在DP及SASG引線上的200電阻不可省去。如果不使用鍵盤,圖10-19所示的與鍵盤連接的10k電阻和100k電阻便可省去。如果使用鍵盤,電路中的100k下拉電阻則不可省去。HD7279A采用動態(tài)循環(huán)掃描方式,如果采用普通的LED數(shù)碼管亮度不夠,則可采用
60、高亮度或超高亮度型號的LED數(shù)碼管。圖10-19所示的3、5、26引腳懸空。107108圖10-19 AT89S51單片機(jī)與HD7279A的接口電路(2)驅(qū)動程序設(shè)計(jì)根據(jù)圖10-19,編程實(shí)現(xiàn)當(dāng)有按鍵按下時,單片機(jī)讀取該按鍵的代碼并將其顯示在LED數(shù)碼管上。程序中使用單片機(jī)內(nèi)RAM的29H和28H兩個單元。29H單元位地址為48H4FH;28H單元位地址為40H47H。 發(fā)送29H單元中的數(shù)據(jù)到HD7279A,高位在前。程序入口條件為 =1,CLK=0。 SETBP1.0; =1 CLR P1.1;CLK=0SEND: MOVR2,#08H;發(fā)送8位數(shù)據(jù) CLRP1.0; =0 109LCAL
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版房地產(chǎn)反擔(dān)保抵押合同附件十3篇
- 二零二五年度綠色物流鋼材運(yùn)輸服務(wù)合同2篇
- 二零二五年度車輛租賃與車輛銷售服務(wù)合同2篇
- 二零二五年度高端商務(wù)汽車租賃服務(wù)合同協(xié)議2篇
- 二零二五版冷鏈物流訂餐服務(wù)合同范本與質(zhì)量保證2篇
- 二零二五年擔(dān)保合同范本修訂要點(diǎn)與執(zhí)行建議6篇
- 二零二五版房產(chǎn)抵押投資合作合同范本3篇
- 二零二五版物流運(yùn)輸企業(yè)勞動合同范本與司機(jī)權(quán)益保障服務(wù)合同3篇
- 二零二五年度房地產(chǎn)經(jīng)紀(jì)服務(wù)合同補(bǔ)充協(xié)議2篇
- 二零二五版12333職業(yè)培訓(xùn)補(bǔ)貼政策合同3篇
- 上海紐約大學(xué)自主招生面試試題綜合素質(zhì)答案技巧
- 辦公家具項(xiàng)目實(shí)施方案、供貨方案
- 2022年物流服務(wù)師職業(yè)技能競賽理論題庫(含答案)
- ?;钒踩僮饕?guī)程
- 連鎖遺傳和遺傳作圖
- DB63∕T 1885-2020 青海省城鎮(zhèn)老舊小區(qū)綜合改造技術(shù)規(guī)程
- 高邊坡施工危險(xiǎn)源辨識及分析
- 中海地產(chǎn)設(shè)計(jì)管理程序
- 簡譜視唱15942
- 《城鎮(zhèn)燃?xì)庠O(shè)施運(yùn)行、維護(hù)和搶修安全技術(shù)規(guī)程》(CJJ51-2006)
- 項(xiàng)目付款審核流程(visio流程圖)
評論
0/150
提交評論