微機(jī)接口第九章8255A課件_第1頁
微機(jī)接口第九章8255A課件_第2頁
微機(jī)接口第九章8255A課件_第3頁
微機(jī)接口第九章8255A課件_第4頁
微機(jī)接口第九章8255A課件_第5頁
已閱讀5頁,還剩110頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

I/O接口概述本章內(nèi)容并行接口——8255A

微機(jī)系統(tǒng)的信息交換有并行通信和串行通信兩種方式。

并行通信是以微機(jī)的字長為傳輸單位;適合于外部設(shè)備與微機(jī)之間進(jìn)行近距離、大量和快速的信息交換。

實(shí)現(xiàn)并行通信的接口稱之為并行接口。概述8255A是Intel86系列微處理機(jī)的配套并行接口芯片,它可為86系列CPU與外部設(shè)備之間提供并行輸入/輸出通道。一、8255A的內(nèi)部結(jié)構(gòu)和引腳信號1.8255A內(nèi)部結(jié)構(gòu)8255A可編程外圍設(shè)備接口(ProgrammablePeripheralInterface,簡寫為PPI),其內(nèi)部結(jié)構(gòu)如圖所示。11.1可編程并行接口芯片8255A8255A包括四大部分:數(shù)據(jù)總線緩沖器、讀寫控制部件、A組和B組控制部件、端口A、B、C。(1)并行輸入/輸出端口A、B、C端口A:包含一個(gè)8位數(shù)據(jù)輸出鎖存器/緩沖器和一個(gè)8位數(shù)據(jù)輸入鎖存器,輸入輸出數(shù)據(jù)均受到鎖存。端口B和C:

都包含一個(gè)8位數(shù)據(jù)輸入緩沖器和一個(gè)8位的數(shù)據(jù)輸出鎖存器/緩沖器,輸出數(shù)據(jù)能鎖存,輸入數(shù)據(jù)不鎖存。端口C:可分成兩個(gè)4位端口,分別定義為輸入或輸出端口,還可定義為控制、狀態(tài)端口,配合端口A和端口B工作。(2)A組和B組控制部件A組A口:PA0~PA7C口的高4位:PC4~PC7B組B口:PB0~PB7C口的低4位:PC0~PC3(3)數(shù)據(jù)總線緩沖器三態(tài)雙向8位緩沖器,是8255A與CPU之間的數(shù)據(jù)接口。傳送輸入數(shù)據(jù)、輸出數(shù)據(jù)、控制命令字。(4)讀/寫控制部件接收來自CPU地址總線信號和控制信號,并發(fā)出命令到兩個(gè)控制組(A組和B組)。CS:片選信號,接CPU高位地址的譯碼輸出WR:寫信號,WR有效,CPU向8255A寫入控制或數(shù)據(jù)信息。RD:讀信號,RD有效,CPU讀8255A的數(shù)據(jù)或狀態(tài);RESET:復(fù)位信號。RESET有效時(shí),清 8255A所有控制寄存器內(nèi)容, 并將各端口置成輸入方式。*

PA7~PA0:A端口數(shù)據(jù)信號引腳*PB7~PB0:B端口數(shù)據(jù)信號引腳*

PC7~PC0:C端口數(shù)據(jù)信號引腳*D7~D0:8255A的8位數(shù)據(jù)線*A1~A0:端口選擇信號當(dāng)A1A0=00時(shí)選擇端口A當(dāng)A1A0=01時(shí)選擇端口B當(dāng)A1A0=10時(shí)選擇端口C當(dāng)A1A0=11時(shí)選擇控制端口表11.18255A的讀寫操作控制

D7D6D5D4D3D2D1D0B組

端口C(PC3~PC0)

1=輸入,0=輸出

端口B

1=輸入,0=輸出

方式選擇

0=方式0,1=方式1A組

端口C(PC7~PC4)

1=輸入,0=輸出

端口A

1=輸入,0=輸出

方式選擇

00=端口A方式0,01=端口A方式1,1=端口A方式2方式設(shè)置標(biāo)志

1=有效圖11.38255A工作方式控制字格式(2)端口C的置位/復(fù)位控制字控制字的格式如圖所示。圖11.48255A置位/復(fù)位控制字格式D7D6D5D4D3D2D1D0位的置位/復(fù)位

1=置位,0=復(fù)位位選擇

D3D2D1通道C位按位置位/復(fù)位控制

標(biāo)志0=有效000PC0001PC1010PC2011PC3100PC4101PC5110PC6111PC7不使用

設(shè)置為000關(guān)于控制字要說明幾點(diǎn):(1)設(shè)置方式控制字時(shí),A口、B口作為整體設(shè)置,而C口要分成上、下兩部分分別設(shè)置。三個(gè)端口的工作方式由一個(gè)控制字規(guī)定。(2)C口按位置位/復(fù)位控制字不是送到C口地址,而是送到控制寄存器地址;且一個(gè)控制字只能使C口一位置位或復(fù)位。(1)方式0——基本輸入/輸出方式方式0是一種基本輸入輸出工作方式,它的24條I/O線可以全部都用作傳送數(shù)據(jù),不設(shè)置應(yīng)答信號線,常用于無條件傳送,輸出有鎖存,輸入只有緩沖能力而無鎖存功能。方式0控制字具體格式如圖11.5所示2.工作方式圖11.58255A工作方式0控制字格式(2)工作方式1——選通式輸入/輸出方式①方式1選通輸入方式1操作使端口A或端口B作為鎖存輸入設(shè)備工作。端口C也可按方式1操作使用——但不是對數(shù)據(jù),而是對控制信號,或當(dāng)端口A或端口B為選通輸入端口時(shí)的握手信號。下圖示出8255A方式1選通輸入時(shí)的內(nèi)部結(jié)構(gòu)圖。圖11.6工作方式1輸入控制字格式(a)端口A方式1輸入(b)端口B方式1輸入圖11.7方式1輸入端口狀態(tài)IBF:輸入緩沖器滿信號,向外設(shè)輸出,高電平有效。STB:選通信號。由外設(shè)輸入,低電平有效。INTR:中斷請求信號,高電平有效。INTE:中斷允許信號,它是通過端口PC4(端口A)或PC2(端口B)的位來編程的內(nèi)部位。②方式1選通輸出當(dāng)端口A或端口B為方式1輸出時(shí),各指定PC的3條線作為8255A與外設(shè)及CPU之間應(yīng)答信號。下圖為方式1選通輸出操作的內(nèi)部結(jié)構(gòu)圖。

圖11.8方式1輸出控制字格式圖11.9方式1輸出端口狀態(tài)INTRAPC3PC6PC7PA7~0方式1輸出端口APC4,5I/OINTEA2WR方式1輸出端口BINTRBPC0PC2PC1INTEBPB7~0WR(a)端口A方式1輸出(b)端口B方式1輸出OBF:輸出緩沖器滿信號。向外設(shè)輸出,低電平有效。ACK:外設(shè)應(yīng)答信號。由外設(shè)輸入, 低電平有效。INTE:中斷允許信號。INTR:中斷請求信號。高電平有效。(3)工作方式2——雙向選通輸入/輸出方式方式2只允許A組采用,此時(shí)端口A變?yōu)殡p向,允許數(shù)據(jù)在同一組8條線上發(fā)送和接收。下圖示出方式2操作內(nèi)部結(jié)構(gòu)圖。圖11.10端口A方式2控制字

圖11.11端口A工作在方式2的端口狀態(tài)OBFA:輸出緩沖器滿信號,向外設(shè)輸出,低電平有效。ACKA:應(yīng)答信號,由外設(shè)輸入,低電平有效。STBA:數(shù)據(jù)選通輸入信號。由外設(shè)輸入, 低電平有效。IBFA:輸入緩沖器滿信號,向外設(shè)輸出,高電平有效。INTE:中斷允許信號(INTE1和INTE2)。高電平有效。INTRA:中斷請求信號,高電平有效。

8255A中端口A工作在方式2時(shí),允許端口B工作于方式0或方式1,完成輸入/輸出功能。4種組合狀態(tài)及其工作方式控制字格式如表11.3。表11.3方式2的組合狀態(tài)與控制字格式3.8255A的工作方式初始化(初始化)

①根據(jù)8255A與CPU接口硬件電路圖確定8255A四個(gè)端口地址。②根據(jù)8255A的具體應(yīng)用,確定8255A工作方式控制字內(nèi)容。③利用輸出指令,將工作方式控制字送至控制命令寄存器中。

4.8255A中PC口置位/復(fù)位操作

①根據(jù)8255A與CPU接口硬件電路確定8255A四個(gè)端口的端口地址。②根據(jù)對PC口具體哪一位操作,確定8255A的按位置位/復(fù)位控制字內(nèi)容。

③利用輸出指令,將按位置位/復(fù)位控制字送至8255A控制命令寄存器中。

目前打印機(jī)一般采用并行接口Centronics標(biāo)準(zhǔn),其主要信號與傳送時(shí)序如圖11.12。打印機(jī)接收主機(jī)傳送數(shù)據(jù)的過程是這樣的:11.28255A的應(yīng)用實(shí)例一、8255A與打印機(jī)接口1、用方式0與打印機(jī)接口

當(dāng)主機(jī)準(zhǔn)備好輸出打印的一個(gè)數(shù)據(jù)時(shí),通過8255A把數(shù)據(jù)送給打印機(jī)接口的數(shù)據(jù)引腳DATA0~DATA7,同時(shí)送出一個(gè)數(shù)據(jù)選通信號STROBE給打印機(jī)。打印機(jī)收到該信號后,把數(shù)據(jù)鎖存到內(nèi)部緩沖區(qū),同時(shí)在BUSY信號線上發(fā)出忙信號。待打印機(jī)處理好輸入數(shù)據(jù)時(shí),打印機(jī)撤消忙信號,同時(shí)向主機(jī)送出一個(gè)響應(yīng)信號ACK。主機(jī)根據(jù)信號BUSY或信號ACK決定是否輸出下一個(gè)數(shù)據(jù)。圖11.12方式0的打印機(jī)接口

本例中,CPU與8255A采用查詢方式輸出數(shù)據(jù)。端口A設(shè)置為方式0,輸出打印數(shù)據(jù),端口C的PC7產(chǎn)生負(fù)脈沖選通信號,PC2連接打印機(jī)的BUSY信號查詢其狀態(tài),PC0連接打印機(jī)的ACK信號。

假設(shè)8255A的A、B、C口的I/O地址為FFF8H、FFFAH和FFFCH,控制端口地址為FFFEH。

;初始化程序段MOVDX,0FFFEHMOVAL,81H;A口方式0輸出,C口上半部輸出,;下半部輸入OUTDX,AL;輸出工作方式字MOVAL,0FH;C口的置位/復(fù)位控制字,

;使PC7=1,即置STROBE=1OUTDX,ALPUSHAX;輸出打印數(shù)據(jù)子程序,打印數(shù)據(jù);在AH中PUSHDXPM:MOVDX,0FFFCHINAL,DX;查詢PC2ANDAL,04H;BUSY=0?JNZPM;忙,則等待,D2=1表示忙MOVDX,0FFF8H;不忙,則輸出數(shù)據(jù)MOVAL,AHOUTDX,ALMOVDX,0FFFEHMOVAL,0EH;使PC7=0,即置=0OUTDX,ALSTROBENOP;適當(dāng)延時(shí),產(chǎn)生一定寬度的低電平NOPMOVAL,0FH;使PC7=1,置=1OUTDX,ALPOPDXPOPAXRETSTROBE2、用方式1與打印機(jī)接口

8255A的端口A工作于選通輸出方式,PC7作為OBFA輸出信號,PC6作為ACKA輸入信號,而PC3作為INTRA輸出信號;另外,可用程序控制INTEA(PC6),決定是否采用中斷方式。 打印機(jī)接口的時(shí)序與8255A的選通輸出方式的時(shí)序類似,但略有差別,用單穩(wěn)電路74LS123即可滿足雙方的時(shí)序要求,見圖11.13。圖11.13方式1的打印機(jī)接口

假設(shè)8255A的A、B、C口的I/O地址為FFF8H、FFFAH和FFFCH??刂贫丝诘牡刂窞镕FFEH。以下為采用選通方式輸出緩沖區(qū)BUF中的打印字符的子程序,輸出的字節(jié)數(shù)為M。PRINTPROC

PUSHAX;保護(hù)寄存器PUSHBXPUSHCXPUSHDXMOVDX,0FFFEH;設(shè)定A口為選通輸出方式MOVAL,0A0HOUTDX,ALMOVAL,0CH;使INTEA(PC6)為0,禁止 中斷OUTDX,ALMOVCX,M;打印字節(jié)數(shù)送CXMOVBX,OFFSETBUF;取緩沖區(qū)首址 送BXPRINT1:MOVAL,[BX];取一個(gè)數(shù)據(jù)MOVDX,0FFF8HOUTDX,AL;從A口輸出MOVDX,0FFFCHPRINT2:INAL,DX;讀C口TESTAL,80H;檢測OBFA(PC7) ;是否為1?

JZPRINT2;為0,則繼續(xù)檢測INCBX;為1,說明數(shù)據(jù)已輸出LOOPPRINT1;準(zhǔn)備取下一個(gè)數(shù)據(jù)輸出POPDX;打印結(jié)束,恢復(fù)寄存器POPCXPOPBXPOPAXRET;返回PRINTENDP

本例與上例的主要區(qū)別是:在上例中,由軟件對PC7復(fù)位和置位來產(chǎn)生打印機(jī)的選通信號,而本例中,8255A工作在選通方式,當(dāng)執(zhí)行輸出指令時(shí),自動(dòng)由硬件從PC7(OBFA)輸出負(fù)脈沖選通信號。當(dāng)打印機(jī)ACK變?yōu)橛行r(shí),自動(dòng)將PC7置為高電平。

最簡單的鍵盤如圖11.14(a)所示,其中每個(gè)鍵對應(yīng)I/O端口的一位。沒有鍵閉合時(shí),各位均處于高電平;當(dāng)有一個(gè)鍵按下時(shí),就使對應(yīng)位接地而成為低電平,而其它位仍為高電平。這樣,CPU只要檢測到某一位為0,便可判別出對應(yīng)鍵已按下。二、8255A與鍵盤接口1、鍵盤的工作原理圖11.14鍵盤的結(jié)構(gòu)用圖11.14(a)的結(jié)構(gòu)設(shè)計(jì)鍵盤有一個(gè)很大的缺點(diǎn):占用的I/O端口也太多。所以,這種簡單結(jié)構(gòu)只用在只有幾個(gè)鍵的小鍵盤中。通常使用的鍵盤是矩陣結(jié)構(gòu)的。以3×3=9個(gè)鍵為例,如圖11.14(b),這個(gè)矩陣分為3行3列,如果鍵5按下,則第1行和第2列線接通而形成通路。如果第1行線接低電平,則鍵5的閉合,會(huì)使第2列線也輸出低電平。2、鍵的識別(1)行掃描法圖11.15是一個(gè)8行8列組成的鍵盤。行掃描法識別按鍵的原理如下:先使第0行接低電平,其余行為高電平,然后看第0行是否有鍵閉合。這是通過檢查列線電位來實(shí)現(xiàn)的,即在第0行接低電平時(shí),看是否有哪條列線變成低電平。

圖11.15鍵盤接口電路如果沒有任何一條列線為低電平,則說明第0行沒有任何鍵被按下。此后,再將第1行接低電平,檢測是否有變?yōu)榈碗娖降牧芯€。如此重復(fù)地掃描,直到最后一行。在掃描過程中,當(dāng)發(fā)現(xiàn)某一行有鍵閉合時(shí),便退出掃描,通過組合行線和列線即可識別此刻按下的是哪一鍵。

實(shí)際應(yīng)用中,一般先快速檢查鍵盤中是否有鍵按下,然后再確定按鍵的具體位置。為此,先使所有行線為低,然后檢查列線。這時(shí)如果列線有一位為0,則說明必有鍵被按下,采用掃描法可進(jìn)一步確定按鍵的具體位置。

圖11.15中將行線與8255A端口B相連,端口B設(shè)置為輸出。CPU使端口B的某一位為0,便相當(dāng)于將該行線接低電平;某位為1,則該行線接高電平。將列線與端口A相連,端口A設(shè)置為輸入。CPU只要讀取端口A的數(shù)據(jù),就可以判別是否有鍵被按下及是第幾列的鍵被按下。

從上面的原理可知,鍵盤掃描程序的第一步應(yīng)該判斷是否有鍵被按下。為此,使輸出端口各位全為0,即相當(dāng)于將所有行線接低電平。然后,從輸入端口讀取數(shù)據(jù),如果讀得的數(shù)據(jù)不是FFH,則說明必有列線處于低電平,從而可斷定必有鍵被按下。此時(shí),為了消除鍵的抖動(dòng),調(diào)用延遲程序。如果讀得的數(shù)據(jù)是FFH,則程序在循環(huán)中等待。這段程序如下:KEY1:MOVAL,00HMOVDX,ROWPORT;ROWPORT為行線 ;端口地址OUTDX,AL;使所有行線為低MOVDX,COLPORT;COLPORT為列線 ;端口地址INAL,DX;讀取列值CMPAL,0FFH;判定是否有列線為低電平JZKEY1;沒有,無閉合鍵,則循環(huán)等待CALLDELAY;有,則延遲20ms清除抖動(dòng)

鍵盤掃描程序的第二步是逐行掃描以判斷哪一個(gè)鍵被按下了。開始時(shí),將計(jì)數(shù)值設(shè)置為行數(shù)。掃描初值11111110使第0行為低電平,其它行為高。輸出掃描初值后,馬上讀取列線的值,看是否有列線處于低電平。若無,則將掃描初值循環(huán)左移一位,變?yōu)?1111101,同時(shí),計(jì)數(shù)值減1,如此下去,直到計(jì)數(shù)值為0,或找到按鍵所在行時(shí)止,程序段如下:MOVAH,0FEH;掃描初值送AHMOVCX,8;行數(shù)送CXKEY2:MOVAL,AHMOVDX,ROWPORTOUTDX,AL;輸出行值(掃描值)MOVDX,COLPORTINAL,DX;讀進(jìn)列值

CMPAL,0FFH;判斷有無鍵按下JNZKEY3;有,則轉(zhuǎn)下一步處理ROLAH,1;無,則修改掃描值,;準(zhǔn)備下一行掃描LOOPKEY2;計(jì)數(shù)一次,未掃完8行,則 繼續(xù)循環(huán)JMPKEY1;所有行都沒有鍵按下,則 返回繼續(xù)檢測KEY3:…;進(jìn)行后續(xù),處理此時(shí)AL=列值, AH=行值;將行線接一個(gè)數(shù)據(jù)端口,先讓它工作在輸出方式;將列線也接到一個(gè)數(shù)據(jù)端口,先讓它工作在輸入方式。程序使CPU通過輸出端口往各行線上送低電平,然后讀入列線值。如果此時(shí)有某鍵被按下,則程序再對兩個(gè)端口進(jìn)行方式設(shè)置,使接行線的端口改為輸入方式,接列線的端口改為輸出方式。并將剛才讀得的列值從列線所接端口輸出,再讀取行線的輸入值,那么,閉合鍵所在的行線值必定為0。(2)行反轉(zhuǎn)法這樣,當(dāng)一個(gè)鍵被按下時(shí),必定可以讀得一對唯一的行值和列值。但是,要實(shí)現(xiàn)上述行反轉(zhuǎn)法,行、列線所接的數(shù)據(jù)端口應(yīng)能夠改變輸入、輸出方式,而8255A的3個(gè)端口正好具有這個(gè)功能。

為了查找鍵代碼,鍵盤程序設(shè)計(jì)時(shí),可將各個(gè)鍵對應(yīng)的行、列值放在一個(gè)表中,程序通過查表來確定哪一個(gè)鍵被按下,進(jìn)而在另一個(gè)表中找到這個(gè)鍵的代碼。如果遇到多個(gè)鍵同時(shí)閉合的情況,則輸入的行值或者列值中一定有一個(gè)以上的0,而由程序預(yù)先建立的鍵值表中不會(huì)有此值,因而可以判為重鍵而重新查找。用這種方法可以方便地解決重鍵問題。KEY1:…;設(shè)置行線接輸出端口ROWPORT,;列線接輸入端口COLPORT,并 ;判斷是否有鍵按下KEY2:MOVAL,00HMOVDX,ROWPORTOUTDX,AL;行線全為低MOVDX,COLPORTINAL,DX;讀取列值CMPAL,0FFHJZKEY2;無閉合鍵,循環(huán)等待PUSHAX;有閉合鍵,保存列值PUSHAX…;設(shè)置行線接輸入端口ROWPORT,;列線接輸出端口COLPORT,MOVDX,COLPORTPOPAXOUTDX,AL;輸出列值MOVDX,ROWPORTINAL,DX;讀取行值POPBX;結(jié)合行列值,此時(shí)MOVAH,BL;AL=行值,AH=列值

;查找鍵代碼MOVSI,OFFSETTABLE;TABLE為鍵值表MOVDI,OFFSETCHAR;CHAR為鍵對應(yīng)的代碼表 MOVCX,64;鍵的個(gè)數(shù)KEY3:CMPAX,[SI];與鍵值比較JZKEY4;相同,說明查到INCSI;不相同,繼續(xù)比較INCSIINCDILOOPKEY3JMPKEY1;全部比較完,仍無相同,說明是重鍵KEY4:MOVAL,[DI];獲取鍵代碼送AL…;判斷按鍵是否釋放,沒有則等待CALLDELAY;按鍵釋放,延時(shí)消除抖動(dòng)…;后續(xù)處理TABLEDW0FEFEH;鍵0的行列值(鍵值)DW0FDFEH;鍵1的行列值DW0FBFEH;鍵2的行列值…;全部鍵的行列值CHARDB…;鍵0的代碼DB…;鍵1的代碼…;全部鍵的代碼

當(dāng)用手按下一個(gè)鍵時(shí),往往會(huì)出現(xiàn)按鍵在閉合和斷開位置之間跳幾下才穩(wěn)定到閉合狀態(tài)的情況;在釋放一個(gè)鍵時(shí),也會(huì)出現(xiàn)類似的情況,這就是抖動(dòng)。抖動(dòng)持續(xù)時(shí)間隨操作員而異,一般不大于10ms。抖動(dòng)問題不解決就會(huì)引起對閉合鍵的錯(cuò)誤識別。

利用硬件很容易消除抖動(dòng),如圖11.16的硬件

消抖電路所示。3、抖動(dòng)和重鍵問題圖11.16抖動(dòng)和硬件消抖電路

所謂重鍵就是指兩個(gè)或多個(gè)鍵同時(shí)閉合。出現(xiàn)重鍵時(shí),讀取的鍵值必然出現(xiàn)有一個(gè)以上的0。于是就產(chǎn)生了到底識別哪一個(gè)鍵的問題。對重鍵問題的處理,簡單的情況下,可以不予識別,即認(rèn)為重鍵是一個(gè)錯(cuò)誤的按鍵。

通常情況,則是只承認(rèn)先識別出來的鍵,對此時(shí)同時(shí)按下的其它鍵均不作識別,直到所有鍵都釋放以后,才讀入下一個(gè)鍵,稱為連鎖法。另外還有一種巡回法,它的基本思想是:等被識別的鍵釋放以后,就可以對其它閉合鍵作識別,而不必等待全部鍵釋放。顯然巡回法比較適合于快速鍵入操作。

LED數(shù)碼管的主要部分是七段發(fā)光二極管,如圖11.17(a)所示。這七段發(fā)光二極管分別稱為a、b、c、d、e、f、g,有的產(chǎn)品還附帶有一個(gè)小數(shù)點(diǎn)h,通過7個(gè)發(fā)光段的不同組合,可以顯示0~9和A~F共16個(gè)字母數(shù)字或其它異形字符。三、8255A與LED數(shù)碼管接口1、LED數(shù)碼管的工作原理

LED數(shù)碼管有共陽極、共陰極兩種結(jié)構(gòu),如圖11.17(b)和(c)所示。表11.4表示了共陰極與共陽極結(jié)構(gòu)字符0~F的編碼表。編碼的低位為a,高位為g。由于發(fā)光二極管發(fā)光時(shí),通過的平均電流為10mA~20mA,而通常的輸出鎖存器不能提供這么大的電流,所以LED各段必須接驅(qū)動(dòng)電路,如圖11.17(d)所示。(a)數(shù)碼管外型

圖11.17LED數(shù)碼管(b)共陽極結(jié)構(gòu)(d)與8255A的連接

(c)共陰極結(jié)構(gòu)

圖11.17LED數(shù)碼管顯示數(shù)字編碼共陰極共陽極03FHC0H106HF9H25BHA4H34FHB0H466H99H56DH92H67DH82H707HF8H87FH80H967H98HA77H88HB7CH83HC39HC6HD5EHA1HE79H86HF71H8EH.80H7FH表11.4七段LED編碼表

為了將一位十六進(jìn)制數(shù)在一個(gè)LED上顯示出來,就需要將十六進(jìn)制數(shù)譯為LED的7位顯示代碼。硬件譯碼:采用專用的帶驅(qū)動(dòng)的LED段譯碼器。

軟件譯碼:在程序設(shè)計(jì)時(shí),將0~F這16個(gè)數(shù)字(也可為0~9)對應(yīng)的顯示代碼組成一個(gè)表。比如,用共陰極數(shù)碼管如圖11.17(d)所示連接,則0的顯示代碼為3FH,1的顯示代碼為06H,…,并在表中按順序排列,則要顯示的數(shù)字可以很方便地通過8086的換碼指令譯碼為該數(shù)字對應(yīng)的顯示代碼。1位數(shù)字的LED顯示程序如下:

MOVBX,OFFSETBUFDATA;BUFDATA區(qū)存放 待顯示的數(shù)字MOVAL,[BX];取出要顯示的數(shù)字MOVBX,OFFSETTABLE;取顯示代碼表首地址XLAT;換碼為顯示代碼MOVDX,PORT;PORT為與數(shù)碼管;相接的端口地址OUTDX,AL;輸出顯示……TABLEDB3FH,06H,5BH,…;顯示代碼表

實(shí)際使用時(shí),往往要用幾個(gè)數(shù)碼管實(shí)現(xiàn)多位顯示。如果每一個(gè)數(shù)碼管占用一個(gè)獨(dú)立的輸出端口,將占用太多的通道,驅(qū)動(dòng)電路的數(shù)目也很多。圖11.18是多位顯示的接口電路示意圖,這是一種常用的方案。在這種方案中,硬件上用公共的驅(qū)動(dòng)電路來驅(qū)動(dòng)各數(shù)碼管;軟件上用掃描方法實(shí)現(xiàn)數(shù)字顯示。2、多位顯示反相驅(qū)動(dòng)器位控制端口同相驅(qū)動(dòng)器段控制端口圖11.18多位數(shù)碼管顯示接口示意圖從圖中可以看到,用2個(gè)8位輸出端口就可以實(shí)現(xiàn)8個(gè)數(shù)碼管的顯示控制。其中,一個(gè)端口用作位控制,即控制哪個(gè)(位)數(shù)碼管顯示。對于圖11.18的共陽極數(shù)碼管,當(dāng)位控制端口的控制碼某位為低電平時(shí),經(jīng)反相驅(qū)動(dòng),便在相應(yīng)的數(shù)碼管的陽極加上了高電平,這個(gè)數(shù)碼管就可以顯示數(shù)據(jù)。但具體顯示什么數(shù)碼,則由另一個(gè)端口,即段控制端口決定。段控制端口通過段驅(qū)動(dòng)電路送出顯示代碼到數(shù)碼管響應(yīng)段。此端口由8個(gè)數(shù)碼管共用,因此當(dāng)CPU送出一個(gè)顯示代碼時(shí),各數(shù)碼管的陰極都收到了此代碼。但是,只有位控制碼中為低的位所對應(yīng)的數(shù)碼管才顯示數(shù)字,其它管子并不發(fā)光。

綜上所述,只要CPU通過段控制端口送出段代碼,然后通過位控制端口送出位代碼,指定的數(shù)碼管便顯示相應(yīng)的數(shù)字。如果CPU順序地輸出段碼和位碼,依次讓每個(gè)數(shù)碼管顯示數(shù)字,并不斷地重復(fù),當(dāng)重復(fù)頻率達(dá)到一定程度,利用人眼的視覺暫留特性,從數(shù)碼管上便可見到相當(dāng)穩(wěn)定的數(shù)字顯示。

程序設(shè)計(jì)時(shí)可以開辟一個(gè)BUFDATA緩沖區(qū),依次存放要顯示的數(shù)字。還需要建立一個(gè)顯示代碼表TABLE,依次存放0~F對應(yīng)的七段顯示代碼。顯示代碼是和硬件連接有關(guān)的,在圖11.18的接口電路中,數(shù)字0的顯示代碼為C0H,1的顯示代碼為F9H,…。下面是一段將8位數(shù)碼管依次顯示一遍的子程序。MOVDI,OFFSETBUFDATA;指向數(shù)字緩沖區(qū)MOVCL,0FEH;指向最右邊數(shù)碼管DISP:MOVAL,[DI];取出數(shù)字MOVBX,OFFSETTABLE;指向顯示代碼表XLAT;得到顯示代碼MOVDX,SEGPORT ;SEGPORT為段控制 端口OUTDX,AL;送出段碼MOVAL,CL;取出位顯示代碼MOVDX,BITPORT;BITPORT為位控制端口OUTDX,AL;送出位碼CALLDELAY;延時(shí)1ms,讓數(shù)碼管有充分的點(diǎn) 亮?xí)r間INCDI;指向下一個(gè)數(shù)字ROLCL,1;指向下一個(gè)數(shù)碼管CMPCL,0FEH;是否指向最右邊的數(shù)碼管JNZDISP;沒有,顯示下一個(gè)數(shù)字RET;8位數(shù)碼管都顯示一遍,返回TABLEDB0C0H,0F9H,0A4H,0B0H;顯示代碼表DB99H,92H,82H,0F8HDB80H,98H,88H,83HDB0C6H,0A1H,86H,8EHBUFDATADB8DUP(0);數(shù)字緩沖區(qū)例:設(shè)8255A的端口地址為344H~347H。由16個(gè)按鍵組成44矩陣式鍵盤,編寫程序讀取按鍵(定義鍵值為0~F)將鍵值寫入輸出口,在數(shù)碼管上顯示,以觀察輸入的鍵位。電路圖如圖所示。四、8255A與鍵盤/LED接口8255A與鍵盤和LED連接電路8255APB0PB1PB2PB3PB4PB5PB6PB7PC7PC6PC5PC4PC3PC2PC1PC0LED3LED2LED1LED0+5VD0~D7D0~D7RDWRA0A1RSTCSIORIOWA0A1ResetY1程序流程如下:開始在CRT上顯示提示信息寫8255A控制字80H字型碼送B口延時(shí)且關(guān)指示燈寫8255A控制字88H有鍵按下行掃描鍵盤列掃描鍵盤延時(shí)消抖等待釋放S1~S4按下否退出YNNY流程圖相應(yīng)程序如下:DATASEGMENT

discDB0BBH,0A0H,097H,0B5H,0ACH,3DH

DB3FH,0A1H,0BFH,0BDH,0AFH,3EH,0B6H

DB1FH,0FH ;0~f顯示段碼表

DISODBPressanyofthekeystoquit!.24H

;提示信息

DQQDB0

DATAEndsCODESEGMENT

MAINPROCFAR

ASSUMECS:CODE

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(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

提交評論