單片機(jī)并行存儲(chǔ)器擴(kuò)展-第7章_第1頁(yè)
單片機(jī)并行存儲(chǔ)器擴(kuò)展-第7章_第2頁(yè)
單片機(jī)并行存儲(chǔ)器擴(kuò)展-第7章_第3頁(yè)
單片機(jī)并行存儲(chǔ)器擴(kuò)展-第7章_第4頁(yè)
單片機(jī)并行存儲(chǔ)器擴(kuò)展-第7章_第5頁(yè)
已閱讀5頁(yè),還剩59頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第7章單片機(jī)并行I/O擴(kuò)展7.1單片機(jī)I/O擴(kuò)展基礎(chǔ)知識(shí)7.2可編程并行接口芯片82557.3鍵盤接口技術(shù)7.4LED顯示器接口技術(shù)7.5打印機(jī)接口技術(shù)7.1單片機(jī)I/O擴(kuò)展基礎(chǔ)知識(shí)7.1.1I/O接口電路的功能外部設(shè)備的速度十分復(fù)雜,必須通過(guò)I/O接口電路實(shí)現(xiàn)。1.速度協(xié)調(diào)面對(duì)各種設(shè)備的速度差異,單片機(jī)無(wú)法按固定的時(shí)序以同步方式進(jìn)行I/O操作,只能以異步方式進(jìn)行,也就是只有在確認(rèn)設(shè)備已為數(shù)據(jù)傳送做好準(zhǔn)備的前提下才能進(jìn)行I/O操作。為此需要接口電路產(chǎn)生狀態(tài)信號(hào)或中斷請(qǐng)求信號(hào),表明設(shè)備是否做好準(zhǔn)備。即通過(guò)接口電路來(lái)進(jìn)行單片機(jī)與外部設(shè)備之間的速度協(xié)調(diào)。2.輸出數(shù)據(jù)鎖存由于CPU與外設(shè)速度的不一致,需要有接口電路把輸出數(shù)據(jù)先鎖存起來(lái),待輸出設(shè)備為接收數(shù)據(jù)做好準(zhǔn)備后,再傳送數(shù)據(jù)。這就是接口電路的數(shù)據(jù)鎖存功能。3.數(shù)據(jù)總線隔離線上可能連接著多個(gè)數(shù)據(jù)源(輸入設(shè)備)和多個(gè)數(shù)據(jù)負(fù)載(輸出設(shè)備)。一對(duì)源和負(fù)載的數(shù)據(jù)傳送正在進(jìn)行時(shí),所有其他不參與的設(shè)備在電性能上必須與總線隔開(kāi)。這就是接口電路的總線隔離功能。為了實(shí)現(xiàn)總線隔離,需要有接口電路提供具有三態(tài)緩沖功能的三態(tài)緩沖電路。4.數(shù)據(jù)轉(zhuǎn)換外部設(shè)備種類繁多,不同設(shè)備之間的性能差異很大,信號(hào)形式也多種多樣。單片機(jī)只能使用數(shù)字信號(hào),如果外部設(shè)備所提供或需要的不是電壓形式的數(shù)字信號(hào),就需要有接口電路進(jìn)行轉(zhuǎn)換,其中包括模/數(shù)轉(zhuǎn)換和數(shù)/模轉(zhuǎn)換等。5.增強(qiáng)驅(qū)動(dòng)能力通過(guò)接口電路為輸出數(shù)據(jù)提供足夠的驅(qū)動(dòng)功率,以保證外部設(shè)備能正常、平穩(wěn)地工作。7.1.2關(guān)于接口電路的更多說(shuō)明1.接口與接口電路“接口”(Interface),具有界面、相互聯(lián)系等含義,通過(guò)接口能使兩個(gè)被連接的器件協(xié)同工作。單片機(jī)接口,則是研究單片機(jī)與外部設(shè)備之間的連接問(wèn)題。單片機(jī)與外部設(shè)備之間接口界面的硬件電路稱為接口電路,或稱為I/O接口電路。2.口或端口為了實(shí)現(xiàn)I/O接口電路的界面功能,在接口電路中應(yīng)包含一些寄存器,通常把接口電路中這些已編址并能進(jìn)行讀或(和)寫操作的寄存器稱為端口或簡(jiǎn)稱口(Port)。完整的接口功能是靠軟硬件相結(jié)合實(shí)現(xiàn)的,而口則是供用戶使用的硬件內(nèi)容,用戶在進(jìn)行擴(kuò)展連接和編寫相關(guān)程序時(shí),要用到接口電路中的各個(gè)口,為此就需要知道這些口的設(shè)置和編址情況。3.I/O接口的特點(diǎn)外部設(shè)備和I/O操作的復(fù)雜性,使接口電路成為單片機(jī)與外部設(shè)備之間必不可少的界面,通過(guò)接口電路居中協(xié)調(diào)和控制,保證外部設(shè)備的正常工作。有關(guān)I/O接口的特點(diǎn)可歸結(jié)為如下3點(diǎn):①異步性。平時(shí)單片機(jī)與外部設(shè)備按各自的時(shí)序并行工作,只有在需要時(shí)外部設(shè)備才通過(guò)接口電路接受單片機(jī)的控制。②實(shí)時(shí)性。單片機(jī)對(duì)外部設(shè)備的控制以查詢或中斷方式進(jìn)行,以便最大限度地實(shí)現(xiàn)控制的實(shí)時(shí)化。③與設(shè)備無(wú)關(guān)性。接口芯片不一定是專用的,同一個(gè)接口芯片通過(guò)軟件設(shè)置可為多種設(shè)備實(shí)現(xiàn)接口。4.并行接口與串行接口按數(shù)據(jù)傳輸方式的不同,接口有并行與串行之分,即并行接口與串行接口。本章重點(diǎn)是并行接口。7.1.3I/O編址技術(shù)為了對(duì)I/O接口電路中的寄存器(端口)進(jìn)行讀/寫操作,就需要對(duì)它們進(jìn)行編址,所以就出現(xiàn)了I/O編址問(wèn)題。有兩種I/O編址方式:統(tǒng)一編址方式和獨(dú)立編址方式。在80C51單片機(jī)系統(tǒng)中,采用統(tǒng)一編址方式。所謂統(tǒng)一編址方式,就是把I/O接口中的寄存器與外擴(kuò)展的數(shù)據(jù)存儲(chǔ)器中的存儲(chǔ)單元同等對(duì)待,合在一起使用同一個(gè)64KB的外擴(kuò)展地址空間。I/O和存儲(chǔ)器的統(tǒng)一編址,使得I/O口也采用16位地址編址,并使用數(shù)據(jù)存儲(chǔ)器讀/寫指令進(jìn)行I/O操作,而不需要專門的I/O指令.所謂獨(dú)立編址方式,就是把I/O與存儲(chǔ)器分開(kāi)進(jìn)行編址。這樣,在一個(gè)單片機(jī)系統(tǒng)中就形成了兩個(gè)獨(dú)立的地址空間:存儲(chǔ)器地址空間和I/O地址空間。獨(dú)立編址方式的優(yōu)點(diǎn)是兩個(gè)地址空間相互獨(dú)立界限分明,但同時(shí)也存在許多麻煩并增加系統(tǒng)開(kāi)銷,所以獨(dú)立編址方式在單片機(jī)中較少采用。7.1.4單片機(jī)I/O控制方式1.無(wú)條件方式無(wú)條件傳送也稱為同步程序傳送。只有那些能一直為I/O操作作好準(zhǔn)備的設(shè)備,才能使用無(wú)條件傳送方式。在進(jìn)行無(wú)條件I/O操作時(shí),無(wú)需測(cè)試設(shè)備的狀態(tài),可以根據(jù)需要隨時(shí)進(jìn)行I/O操作。

無(wú)條件傳送適用于兩類設(shè)備的I/O操作。一類是具有常駐的或變化緩慢的數(shù)據(jù)信號(hào)的設(shè)備。例如,機(jī)械開(kāi)關(guān)、指示燈、發(fā)光二極管、數(shù)碼管等,另一類則是工作速度非常快,足以和單片機(jī)同步工作的設(shè)備,例如數(shù)/模轉(zhuǎn)換器(DAC)。2.查詢方式查詢方式又稱有條件傳送方式,在I/O操作前,要檢測(cè)設(shè)備的狀態(tài),只有在確認(rèn)設(shè)備已“準(zhǔn)備好”的情況下,單片機(jī)才能執(zhí)行I/O操作。檢測(cè)也稱為“查詢”,所以就把這種有條件的I/O控制方式稱為查詢方式。為實(shí)現(xiàn)查詢方式的I/O控制,需要由接口電路提供設(shè)備狀態(tài),接口電路中的狀態(tài)寄存器或狀態(tài)位就是為此而準(zhǔn)備的。查詢方式只適用于規(guī)模比較小的單片機(jī)系統(tǒng)。3.中斷方式

中斷方式與查詢方式的主要區(qū)別在于如何知道外部設(shè)備是否為I/O操作做好準(zhǔn)備。采用中斷方式進(jìn)行I/O控制時(shí),當(dāng)設(shè)備做好準(zhǔn)備之后,就向單片機(jī)發(fā)出中斷請(qǐng)求。單片機(jī)接收到中斷請(qǐng)求之后作出響應(yīng),暫停正在執(zhí)行的原程序,而轉(zhuǎn)去執(zhí)行中斷服務(wù)程序,通過(guò)執(zhí)行中斷服務(wù)程序完成一次I/O操作,然后程序返回,單片機(jī)再繼續(xù)執(zhí)行被中斷的原程序。中斷方式效率較高,所以在單片機(jī)系統(tǒng)中被廣泛采用。但中斷請(qǐng)求是一種不可預(yù)知的隨機(jī)事件,所以實(shí)現(xiàn)起來(lái)對(duì)單片機(jī)系統(tǒng)的硬件和軟件都有較高的要求。前提:接口電路能發(fā)出中斷請(qǐng)求電路。7.2可編程并行接口芯片82558255是Intel公司產(chǎn)品,因其工作方式和操作功能等可通過(guò)程序進(jìn)行設(shè)置和改變,稱為可編程接口芯片。7.2.18255硬件邏輯結(jié)構(gòu)8255的全稱是“可編程并行輸入/輸出接口芯片”,具有通用性強(qiáng)且使用靈活等優(yōu)點(diǎn),可用于實(shí)現(xiàn)80C51系列單片機(jī)的并行I/O口擴(kuò)展。7.28255可編程通用并行接口芯片

7.2.18255的外部引腳和內(nèi)部結(jié)構(gòu)1.外部引腳8255的外部引腳如圖7.1所示,其中::A口的輸入輸出信號(hào)線。該口是輸入還是輸出或雙向,由軟件決定。:B口的輸入輸出信號(hào)線。該口是輸入還是輸出,由軟件決定。:C口信號(hào)線。該口可作輸入、輸出、控制和狀態(tài)線使用,由軟件決定。:雙向數(shù)據(jù)信號(hào)線,用來(lái)傳送數(shù)據(jù)、控制字和狀態(tài)信息。:讀信號(hào)線。:寫信號(hào)線。

8255是一個(gè)40引腳的雙列直插式集成電路芯片,其引腳排列如下圖。8255芯片引腳圖

:片選信號(hào)線,低電平(有效)時(shí),才選中該芯片,才能對(duì)8255進(jìn)行操作。RESET:復(fù)位輸入信號(hào),高電平有效時(shí),復(fù)位8255。復(fù)位后8255的A口、B口和C口均被定為輸入。:口地址選擇信號(hào)線。8255內(nèi)部共有三個(gè)口,A口、B口、C口和一個(gè)控制寄存器供用戶編程。的不同編碼可分別選擇上述三個(gè)口和一個(gè)控制寄存器。地址編碼如下表所示。

端口00A口01B口10C口11控制寄存器地址編碼

按功能可把8255的內(nèi)部結(jié)構(gòu)分為3個(gè)邏輯電路部分,分別為:口電路、總線接口電路和控制邏輯電路,如下圖所示。2.內(nèi)部結(jié)構(gòu)從圖可以看到,左邊的信號(hào)與系統(tǒng)總線相連。而右邊是與外設(shè)相連接的三個(gè)口。三個(gè)口均為8位。其中A口輸出有鎖存能力,輸入亦有鎖存能力。B口輸入輸出均有鎖存能力。C口輸出有鎖存能力,輸入沒(méi)有鎖存能力,在使用上要注意到這一點(diǎn)。為了控制方便,將8255的三個(gè)口分成A,B兩組。其中A組包括A口的8條口線和C口的高四位。B組包括B口的8條口線和C口的低四位。A組和B組分別由軟件編程來(lái)加以控制。3、8255的擴(kuò)展邏輯電路

80C51單片機(jī)可以和8255直接連接,下圖給出了一種擴(kuò)展電路。

圖8255的擴(kuò)展邏輯電路

7.2.28255的工作方式8255共有三種工作方式,這些工作方式可用軟件編程來(lái)指定。工作方式0,又稱基本輸入輸出方式工作方式1,又稱選通輸入輸出方式工作方式2,又稱雙向數(shù)據(jù)傳送方式

1.方式0(基本輸入/輸出方式)方式0適用于無(wú)條件數(shù)據(jù)傳送。兩個(gè)8位口(A口和B口)和兩個(gè)4位口(C口高位部分和C口低位部分)都可以分別或同時(shí)設(shè)置為方式0。2.方式1(選通輸入/輸出方式)方式1是選通輸入/輸出方式。8255的“選通”是通過(guò)信號(hào)的“問(wèn)”與“答”,以聯(lián)絡(luò)方式(或稱握手方式)實(shí)現(xiàn)的。所以這種數(shù)據(jù)傳送方式是有條件的,適用于以查詢或中斷方式進(jìn)行控制。在方式1下,A口和B口是數(shù)據(jù)口,C口是控制口,用于傳送和保存數(shù)據(jù)口所需要的聯(lián)絡(luò)信號(hào),都有具體的定義。圖A口和B口作輸出口時(shí),C口提供的控制引線

(1)方式1下,A口和B口均為輸出

:輸出緩沖器滿信號(hào),低電平有效。用來(lái)告訴外設(shè),在規(guī)定的接口上CPU已輸出一個(gè)有效的數(shù)據(jù),外設(shè)可以從該口取走此數(shù)據(jù)。:外設(shè)響應(yīng)信號(hào),低電平有效。用來(lái)通知接口,外設(shè)已經(jīng)將數(shù)據(jù)接收,并使。

INTR:中斷請(qǐng)求信號(hào),高電平有效。當(dāng)外設(shè)已從接口取走數(shù)據(jù),口的緩沖器變空,且接口允許中斷時(shí),INTR有效。即,且允許中斷,則INTR=1。

(2)方式1下,A口和B口均為輸入

這種情況和兩口均為輸出類似。

圖A口和B口作輸出口時(shí),C口提供的控制引線

圖A口和B口作輸入口時(shí),C口提供的控制引線

各控制信號(hào)的含義如下::輸入選通信號(hào),低電平有效。它由外設(shè)提供,利用該信號(hào)可以將外設(shè)數(shù)據(jù)鎖存于8255的口鎖存器中。

IBF:輸入緩沖器滿信號(hào),高電平有效。當(dāng)它有效時(shí),表示已有一個(gè)有效的外設(shè)數(shù)據(jù)鎖存于8255的口鎖存器中。可用此信號(hào)通知外設(shè)數(shù)據(jù)已鎖存于接口中,尚未被CPU讀走,暫不能向接口輸入數(shù)據(jù)。

INTR:中斷請(qǐng)求信號(hào),高電平有效。當(dāng)外設(shè)將數(shù)據(jù)鎖存于接口之中,且又允許中斷請(qǐng)求發(fā)生時(shí),就會(huì)產(chǎn)生中斷請(qǐng)求。3.工作方式2,又稱雙向數(shù)據(jù)傳送方式

只有A口才能工作在方式2。A口工作方式2時(shí)要利用C口的5條線才能實(shí)現(xiàn)。此時(shí),B口只能工作在方式0或者方式1下,而C口剩余的3條線可作為輸入線、輸出線或B口方式1之下的控制線。C口提供的控制線如圖所示。圖

工作方式2時(shí),C口提供的控制線C口聯(lián)絡(luò)信號(hào)定義C口位線方式1方式2輸入輸出輸入輸出PC7/OBFA/OBFAPC6/ACKA/ACKAPC5IBFAIBFAPC4/STBA/STBAPC3INTRAINTRAINTRAINTRAPC2/STBB/ACKBPC1IBFB/OBFBPC0INTRBINTRB7.2.38255的編程內(nèi)容8255是可編程接口芯片,主要編程內(nèi)容是兩條控制命令,即工作方式命令和C口位置位/復(fù)位命令。1.工作方式命令工作方式命令用于設(shè)定各數(shù)據(jù)口的工作方式及數(shù)據(jù)傳送方向。命令的最高位(D7)是標(biāo)志位,其狀態(tài)固定為1。命令格式如下圖所示。對(duì)工作方式命令有如下兩點(diǎn)說(shuō)明:A口有3種工作方式,而B(niǎo)口只有兩種工作方式;在方式1和方式2下,對(duì)C口的定義(輸入或輸出)不影響作為聯(lián)絡(luò)信號(hào)使用的C口各位的功能。8255工作方式命令格式2.C口位置位/復(fù)位命令在方式1和方式2下,C口用于定義控制信號(hào)和狀態(tài)信號(hào),因此,C口的每一位都可以進(jìn)行置位或復(fù)位。對(duì)C口各位的置位或復(fù)位是由位置位/復(fù)位命令進(jìn)行的。8255的位置位/復(fù)位命令格式如下圖。3.初始化編程8255初始化的內(nèi)容就是向控制字寄存器寫入命令。

例如,若對(duì)8255各口作如下設(shè)置:A口方式0輸入,B口方式1輸出,C口高位部分為輸出,低位部分為輸入。設(shè)控制寄存器地址為0003H。按各口的設(shè)置要求,工作方式命令字為10010101,即95H。則初始化程序段應(yīng)為:

MOVR0,#03H MOVA,#95H MOVX@R0,AMOVDPTR,#0003H MOVA,#95H MOVX@DPTR,A7.2.48255接口應(yīng)用1.8255的I/O控制方式(1)無(wú)條件方式以方式0進(jìn)行數(shù)據(jù)輸入/輸出,就是無(wú)條件傳送方式。(2)查詢方式在方式1和方式2下,都可以使用查詢方式進(jìn)行數(shù)據(jù)傳送。數(shù)據(jù)輸入時(shí),供查詢的狀態(tài)信號(hào)是IBF(對(duì)應(yīng)A口為IBFA,B口為IBFB),因?yàn)閭魉瓦@些信號(hào)的口線分別為PC5和PC1,所以查詢時(shí)就是對(duì)輸入這些口線的狀態(tài)進(jìn)行測(cè)試。數(shù)據(jù)輸出時(shí),供查詢的狀態(tài)信號(hào)是OBF(對(duì)應(yīng)A口為OBFA,B口為OBFB),被測(cè)試的口線為PC7和PC1。

(3)中斷方式在方式1和方式2下,都可以使用中斷方式進(jìn)行數(shù)據(jù)傳送。中斷請(qǐng)求信號(hào)是INTR(對(duì)應(yīng)A口為INTRA,B口為INTRB),傳送中斷請(qǐng)求信號(hào)的口線分別為PC3和PC0。2.端口選擇及讀/寫控制8255共有4個(gè)可尋址端口:A口、B口、C口和控制寄存器,由CS和地址A0、A1的狀態(tài)組合進(jìn)行選擇,由讀/寫信號(hào)RD和WR進(jìn)行端口操作控制,具體設(shè)置見(jiàn)下表。8255端口選擇及讀/寫控制表/CSA1A0/RD/WR選擇端口端口操作00001A口讀端口A00101B口讀端口B01001C口讀端口C00010A口寫端口A00110B口寫端口B01010C口寫端口C01110控制寄存器寫控制命令1××××---數(shù)據(jù)總線緩沖器輸出端呈高阻抗鍵盤是單片機(jī)不可缺少的人機(jī)交互設(shè)備。7.3.1鍵掃描和鍵碼生成

1.鍵盤舉例為說(shuō)明鍵盤的工作原理,以一個(gè)8行×4列的矩陣鍵盤為例,如下圖所示。鍵盤上有行線和列線之分,本鍵盤共有8條行線4條列線。在行線和列線的交點(diǎn)處有一個(gè)鍵,由于行線與列線分別與鍵的不同端相連,平時(shí)鍵處于斷開(kāi)狀態(tài),所以行線和列線互不相通。接口時(shí),行線一端接輸出口,另一端懸空;而列線一端經(jīng)電阻接+5V電源,另一端接輸入口。由于列線通過(guò)電阻與+5V電源相連,所以列線的初始狀態(tài)為高電平。7.3鍵盤接口技術(shù)

鍵盤掃描示意圖鍵碼表2.鍵碼鍵盤上的每個(gè)鍵都擔(dān)負(fù)一項(xiàng)處理功能,而處理功能是通過(guò)軟件實(shí)現(xiàn)的,所以鍵盤接口必須有軟件配合。為此,鍵盤上每個(gè)鍵都對(duì)應(yīng)有一個(gè)處理程序段,鍵的功能是通過(guò)運(yùn)行這個(gè)程序段實(shí)現(xiàn)的。為了在程序中能順利地分支到鍵處理程序段,就需要對(duì)鍵進(jìn)行編碼,稱為鍵碼,以便能按鍵碼進(jìn)行程序分支。鍵的編碼沒(méi)有統(tǒng)一標(biāo)準(zhǔn),存在多種多樣的鍵編碼方法。最常用的編碼方法是以鍵在鍵盤矩陣中的位置,從0開(kāi)始按自然數(shù)順序進(jìn)行編碼,鍵碼以十六進(jìn)制數(shù)表示。

鍵碼表7FH1FH17H0FH07HBFH1EH16H0EH06HDFH1DH15H0DH05HEFH1CH14H0CH04HF7H1BH13H0BH03HFBH1AH12H0AH02HFDH19H11H09H01HFEH18H10H08H00HF7HFBHFDHFEH各行的掃描碼對(duì)應(yīng)列有閉合鍵時(shí)的狀態(tài)碼(或稱返回碼)鍵盤掃描程序例如上圖所示的鍵號(hào)是按從下到上、從右向左的順序編排的。這樣安排,使鍵碼既可根據(jù)行號(hào)列號(hào)以查表求得,也可通過(guò)計(jì)算得到。上圖所示的鍵碼編排規(guī)律,各列首號(hào)依次是00H、08H、10H、18H,如行號(hào)按0~7順序,則鍵碼的計(jì)算公式為:

鍵碼=列首號(hào)+行號(hào)等待鍵釋放計(jì)算鍵碼后,再以延時(shí)后進(jìn)行行掃描的方法等待鍵釋放。等待釋放是為了保證鍵的一次閉合僅進(jìn)行一次處理。3.鍵盤掃描通常把鍵盤上被按下的鍵稱為閉合鍵。為了識(shí)別閉合鍵,有行掃描法和線反轉(zhuǎn)法兩種方法可供選用,在單片機(jī)中常用的是行掃描法,簡(jiǎn)稱掃描法。這里介紹的鍵盤掃描是由軟件實(shí)現(xiàn)的。軟件方法鍵盤掃描是在掃描程序驅(qū)動(dòng)下進(jìn)行的,所以掃描過(guò)程也就是掃描程序的執(zhí)行過(guò)程。

開(kāi)始前,通過(guò)程序反復(fù)不斷地進(jìn)行閉合鍵查找,即看看鍵盤中是否有閉合鍵,為此,應(yīng)先使行線輸出口輸出全0,再讀回列線狀態(tài),若列線狀態(tài)為全1,則表明沒(méi)有鍵被按下;若不為全1,則表明有鍵被按下。因?yàn)楫?dāng)有鍵被按下時(shí),由于行線與列線在閉合鍵交點(diǎn)處接通,使穿過(guò)閉合鍵的那條列線變?yōu)榈碗娖?。發(fā)現(xiàn)閉合鍵后才接著進(jìn)行鍵盤掃描,判定閉合的是哪個(gè)鍵;若無(wú)閉合鍵,就返回去重復(fù)進(jìn)行閉合鍵的查找。

鍵盤掃描過(guò)程是依次使行線中的每一條輸出低電平,接著輸入列線狀態(tài)進(jìn)行有無(wú)閉合鍵的判定。發(fā)現(xiàn)閉合鍵后,掃描并未結(jié)束。因?yàn)檫€要判定是否還有其他鍵被同時(shí)按下,所以掃描還應(yīng)繼續(xù)下去,直至最后在行線上輸出7FH為止。例如:4.鍵盤掃描程序流程5.去抖動(dòng)每當(dāng)確認(rèn)有鍵被按下后,都應(yīng)當(dāng)進(jìn)行去抖動(dòng)處理。因?yàn)殒I在被按下時(shí),由于機(jī)械觸點(diǎn)的彈性以及電壓突跳等原因,在觸點(diǎn)閉合及釋放的瞬間將出現(xiàn)電壓抖動(dòng),如下圖。鍵閉合和斷開(kāi)時(shí)的電壓抖動(dòng)去抖動(dòng)處理有軟件和硬件兩種方法。軟件去抖動(dòng)方法是采用時(shí)間延遲以躲過(guò)抖動(dòng)(延時(shí)時(shí)間為10~20ms即可);硬件方法是在鍵盤中附加去抖動(dòng)電路,以抑制抖動(dòng)的產(chǎn)生,具體可使用雙穩(wěn)態(tài)電路或?yàn)V波電路等,但硬件去抖動(dòng)需增加成本。7.3.2用8255實(shí)現(xiàn)鍵盤接口1.接口電路邏輯圖以8255作8×4鍵盤的接口為例。A口為輸出口,接鍵盤行線。C口為輸入口,以PC3~PC0接鍵盤的4條列線。如下圖。假定A口地址為8000H,則B口地址為8001H,C口地址為8002H,控制寄存器地址為8003H。2.判斷有無(wú)閉合鍵的子程序判斷有無(wú)閉合鍵的子程序?yàn)镵S,以供在鍵盤掃描程序中調(diào)用。執(zhí)行KS子程序的結(jié)果是:有閉合鍵,則(A)≠0;無(wú)閉合鍵,則(A)=0。程序如下:

KS: MOVDPTR,#8000H MOVA,#00H ;A口送00H MOVX@DPTR,A INCDPTR INCDPTR ;建立C口地址

MOVXA,@DPTR ;讀C口

CPLA ;A取反,若無(wú)鍵按下,則全為0 ANLA,#0FH ;屏蔽A高半字節(jié)

RET3.鍵盤掃描程序在單片機(jī)應(yīng)用系統(tǒng)中常常是鍵盤和顯示器同時(shí)存在,因此,可以把鍵盤程序和顯示程序配合起來(lái)使用,即把顯示程序作為鍵盤程序中的一個(gè)延時(shí)子程序使用。這樣既不耽誤顯示驅(qū)動(dòng),又可以起到鍵盤定時(shí)掃描的作用。假定本系統(tǒng)中顯示器驅(qū)動(dòng)程序?yàn)镈IR,執(zhí)行時(shí)間約為6ms。鍵盤掃描程序如下,程序中R2為掃描碼寄存器,R4為行計(jì)數(shù)器。KEY:ACALLKS;檢查是否有鍵閉合

JNZLK1;A非0,則轉(zhuǎn)移

ACALLDIR;驅(qū)動(dòng)顯示器(延時(shí)6ms)

AJMPKEYLK1:ACALLDIR;有鍵閉合2次驅(qū)動(dòng)顯示器

ACALLDIR;延時(shí)12ms進(jìn)行去抖動(dòng)

ACALLKS;再檢查是否有鍵閉合

JNZLK2;有鍵閉合,轉(zhuǎn)LK2 ACALLDIR AJMPKEY;無(wú)鍵閉合,延時(shí)6ms后轉(zhuǎn)KEYLK2:MOVR2,#FEH;掃描初值送R2 MOVR4,#00H;掃描行號(hào)送R4LK4:MOVDPTR,#8000H;建立A口地址MOVA,R2MOVX@DPTR,A;掃描初值送A口,掃描開(kāi)始INCDPTRINCDPTR;指向C口MOVXA,@DPTR;讀C口JBACC.0,LONE;ACC.0=1,第0列無(wú)鍵閉合,轉(zhuǎn)LONEMOVA,#00H;裝第0列狀態(tài)碼起始值A(chǔ)JMPLKPLONE:JBACC.1,LTWO;ACC.1=1,第1列無(wú)鍵閉合,轉(zhuǎn)LTWO MOVA,#08H;裝第1列狀態(tài)碼起始值

AJMPLKPLTWO:JBACC.2,LTHR;ACC.2=1,第2列無(wú)閉合,轉(zhuǎn)LTHR MOVA,#10H;裝第2列狀態(tài)碼起始值

AJMPLKPLTHR:JBACC.3,NEXT;ACC.3=1,第3列無(wú)鍵閉合,則轉(zhuǎn)NEXT MOVA,#18H;裝第3列狀態(tài)碼起始值LKP:ADDA,R4;計(jì)算鍵碼

PUSHACC;保護(hù)鍵碼LK3:ACALLDIR;延時(shí)6ms ACALLKS;查鍵是否繼續(xù)閉合,若閉合再延時(shí)

JNZLK3 POPACC;若鍵起,則鍵碼送A RETNEXT:INCR4;掃描行號(hào)加1 MOVA,R2 JNBACC.7,KND;第7位為0,已掃完最后一行,則轉(zhuǎn)KND RLA;掃描碼循環(huán)左移一位

MOVR2,AJMPLK4;進(jìn)行上一行掃描KND:AJMPKEY;一輪掃描完畢,開(kāi)始新的一輪掃描7.4LED顯示器接口技術(shù)在單片機(jī)應(yīng)用系統(tǒng)中,最簡(jiǎn)單、最常見(jiàn)的顯示器件是LED顯示器。7.4.1LED顯示器概述

LED是LightEmitingDiode(發(fā)光二極管)的縮寫,發(fā)光二極管是能將電信號(hào)轉(zhuǎn)換為光信號(hào)的電致發(fā)光器件。數(shù)碼管有7段數(shù)碼管和8段數(shù)碼管之分。7段數(shù)碼管由7個(gè)發(fā)光二極管組成,而8段數(shù)碼管則是在7段發(fā)光二極管的基礎(chǔ)上再加一個(gè)圓點(diǎn)型發(fā)光二極管(在圖中以dp表示),用于顯示小數(shù)點(diǎn)。8段數(shù)碼管中發(fā)光二極管的排列形狀如下圖(a)所示。

8段LED顯示器返回8段LED顯示器數(shù)碼管能夠被廣泛使用,與其具有的許多特點(diǎn)是分不開(kāi)的,其中包括:①發(fā)光響應(yīng)快,亮度強(qiáng),高頻特性好;而且隨著材料的不同,數(shù)碼管還能發(fā)出紅、黃、綠、藍(lán)、橙等多種顏色的光。②機(jī)械性能好,體積小,重量輕,價(jià)格低廉;能與CMOS和TTL電路配合使用;使用壽命長(zhǎng),可達(dá)105~106h。③工作電壓低,驅(qū)動(dòng)電流適中。每段工作電流為5~10mA,一只數(shù)碼管的7段LED全亮需要電流為35~70mA。這樣大的電流需要由驅(qū)動(dòng)電路提供,因此,使用時(shí)要注意數(shù)碼管的驅(qū)動(dòng)問(wèn)題。在使用中,為了給發(fā)光二極管加驅(qū)動(dòng)電壓,它們應(yīng)有一個(gè)公共引腳,公共引腳共有如下兩種連接方法:①共陰極接法。把發(fā)光二極管的陰極連在一起構(gòu)成陰極公共引腳,如上圖(b)所示。使用時(shí)陰極公共引腳接地,這樣陽(yáng)極引腳上加高電平的發(fā)光二極管就導(dǎo)通點(diǎn)亮,而加低電平的則不點(diǎn)亮。②共陽(yáng)極接法。把發(fā)光二極管的陽(yáng)極連在一起作為陽(yáng)極公共引腳,如上圖(c)所示。使用時(shí)陽(yáng)極公共引腳接+5V。這樣陰極引腳上加低電平的發(fā)光二極管即可導(dǎo)通點(diǎn)亮,而加高電平的則不點(diǎn)亮。7.4.2LED顯示器顯示原理1.段碼

所謂段碼就是為數(shù)碼管顯示提供的各段狀態(tài)組合,字形代碼。7段數(shù)碼管的段碼為7位,8段數(shù)碼管的段碼為8位,用一個(gè)字節(jié)即可表示。在段碼字節(jié)中代碼位與各段發(fā)光二極管的對(duì)應(yīng)關(guān)系如下:段碼D7D6D5D4D3D2D1D0段名dpgfedcba段碼的值與數(shù)碼管公共引腳的接法(共陽(yáng)極和共陰極)有關(guān)。以8段數(shù)碼管為例,顯示十六進(jìn)制數(shù)的段碼值在下表中。數(shù)字共陽(yáng)極段碼共陰極段碼數(shù)字共陽(yáng)極段碼共陰極段碼0C0H3FH990H6FH1F9H06HA88H77H2A4H5BHB83H7CH3B0H4FHCC6H39H499H66HDA1H5EH592H6DHE86H79H682H7DHF8EH71H7F8H07H滅FFH00H880H7FH2.LED顯示器動(dòng)態(tài)顯示方式LED顯示器多采用動(dòng)態(tài)顯示方式,全部數(shù)碼管共用一套段碼驅(qū)動(dòng)電路。顯示時(shí)通過(guò)位控信號(hào)采用掃描的方法逐位地循環(huán)點(diǎn)亮各位數(shù)碼管。動(dòng)態(tài)顯示雖然在任一時(shí)刻只有一位數(shù)碼管被點(diǎn)亮,但是由于人眼具有的視覺(jué)暫留效應(yīng),看起來(lái)與全部數(shù)碼管持續(xù)點(diǎn)亮的效果完全一樣。LED顯示器動(dòng)態(tài)顯示需要為各位提供段碼以及相應(yīng)的位控制,此即通常所說(shuō)的段控和位控。

4位數(shù)碼管動(dòng)態(tài)顯示示意圖通過(guò)并行口輸出相互獨(dú)立的位碼,用于選擇顯示位段碼輸出到公共信號(hào)線上,就是段控信號(hào)7.4.3LED顯示器接口1.8255實(shí)現(xiàn)LED顯示器接口下圖使用8255作6位LED顯示器接口的接口電路。其中PC口為位碼輸出口,以PC5~PC0輸出位控線。由于驅(qū)動(dòng)電流較大,輸出加接74LS06進(jìn)行反相并提高驅(qū)動(dòng)能力。PA口為段碼輸出口,各段碼線的負(fù)載電流約為8mA,為提高顯示亮度,加接74LS244進(jìn)行段控輸出驅(qū)動(dòng)。使用8255作LED顯示器接口,8255只能輸出顯示段碼而不具有控制功能,動(dòng)態(tài)控制要靠程序?qū)崿F(xiàn)。對(duì)此有以下兩點(diǎn)說(shuō)明。7.4.3LED顯示器接口①為了存放段碼,通常要在80C51的內(nèi)部RAM中設(shè)置一個(gè)顯示緩沖區(qū),存儲(chǔ)單元個(gè)數(shù)與LED顯示器的位數(shù)相同,一個(gè)單元對(duì)應(yīng)一個(gè)顯示位。②為了保證顯示亮度,在掃描過(guò)程中,應(yīng)在每一位數(shù)碼管上都駐留一段時(shí)間(約1ms),以使數(shù)碼管穩(wěn)定地點(diǎn)亮一段時(shí)間,以保證其顯示亮度。為此在掃描過(guò)程中,位與位之間要加進(jìn)一段時(shí)間延遲。LED5LED4LED3LED2LED1LED07EH7DH7CH7BH7AH79H自右向左動(dòng)態(tài)顯示8255作6位LED顯示器接口電路2.LED顯示驅(qū)動(dòng)程序DIR:MOVR0,#79H;建立顯示緩沖區(qū)首址

MOVR3,#01H;從右邊開(kāi)始顯示

MOVA,R3;位控碼初值LD0:MOVDPTR,#8002H;位控口地址

MOVX@DPTR,A;輸出位控碼

MOVDPTR,#8000H;段控口地址

MOVA,@R0;取出顯示數(shù)據(jù)DIR0:ADDA,#0DH MOVCA,@A+PC;查表取字形代碼DIR1:MOVX@DPTR,A;輸出段控碼

ACALLDL;延時(shí)

INCR0;轉(zhuǎn)向下一緩沖單元

MOVA,R3 JBACC.5,LD1;判斷是否到最高位,到,則返回

RLA;不到,向顯示器高位移位

MOVR3,A;位控碼送R3保存

AJMPLD0;繼續(xù)掃描LD1:RETDSEG:DB3FH,06H,5BH……;共陰極字形代碼表

假定A口地址為8000H,B口地址為8001H,則C口地址為8002H,控制寄存器地址為8003H。則LED顯

溫馨提示

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

評(píng)論

0/150

提交評(píng)論