




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第6章數(shù)字信號(hào)輸入/輸出接口電路6.1開(kāi)關(guān)信號(hào)的輸入/輸出方式6.2I/O資源及擴(kuò)展6.3簡(jiǎn)單顯示驅(qū)動(dòng)電路6.4LED數(shù)碼管及其顯示驅(qū)動(dòng)電路6.5LCD顯示器件及其驅(qū)動(dòng)電路6.6鍵盤電路6.7并行接口及應(yīng)用實(shí)例6.8光電耦合器件接口電路6.9單片機(jī)與繼電器接口電路6.10電平轉(zhuǎn)換電路輸入/輸出接口電路是單片機(jī)應(yīng)用系統(tǒng)中必不可少的單元電路之一,它涉及數(shù)據(jù)輸入電路以及經(jīng)過(guò)單片機(jī)處理后的數(shù)據(jù)輸出電路。單片機(jī)應(yīng)用系統(tǒng)總是要對(duì)輸入信號(hào)進(jìn)行比較、判斷或運(yùn)算處理后,輸出適當(dāng)?shù)目刂菩盘?hào)去控制特定設(shè)備。
輸入/輸出量可以是模擬信號(hào),也可以是開(kāi)關(guān)信號(hào)。對(duì)于模擬信號(hào),經(jīng)放大、限幅、低通濾波電路,再經(jīng)A/D轉(zhuǎn)換電路轉(zhuǎn)換為數(shù)字信號(hào)后,單片機(jī)才能處理;單片機(jī)處理結(jié)果也需要經(jīng)過(guò)D/A轉(zhuǎn)換、平滑濾波后,才能得到模擬量。本章主要介紹數(shù)字信號(hào)的輸入/輸出(I/O)接口電路。
開(kāi)關(guān)信號(hào)包括脈沖信號(hào)、電平信號(hào)兩類。在單片機(jī)控制系統(tǒng)中,常采用如下方式實(shí)現(xiàn)開(kāi)關(guān)信號(hào)的輸入和輸出。6.1開(kāi)關(guān)信號(hào)的輸入/輸出方式
1.直接解碼輸入/輸出方式
在這種方式中,直接利用CPUI/O引腳輸入/輸出開(kāi)關(guān)信號(hào),如圖6-1(a)所示,其中P1.0、P1.1作為輸入引腳,當(dāng)S1、S2斷開(kāi)時(shí),P1.0、P1.1引腳為高電平;當(dāng)S1、S2被按下時(shí),相應(yīng)引腳為低電平。對(duì)于內(nèi)置了上拉電阻的I/O口,如MCS-51系列CPU的P1口,無(wú)須外接上拉電阻R1、R2。對(duì)于CMOS輸入結(jié)構(gòu)的I/O口,輸入時(shí)I/O引腳處于懸空狀態(tài),如PIC16C系列CPU的I/O端口,這類I/O引腳作輸入引腳使用時(shí),必須外接上拉電阻,使S1、S2不按下時(shí),輸入引腳為高電平。在圖6-1(a)中,P1.2作為輸出引腳,驅(qū)動(dòng)LED發(fā)光二極管。如果CPUI/O引腳驅(qū)動(dòng)電流有限,則必須外接驅(qū)動(dòng)器,如集電極開(kāi)路輸出的7407或7406等。
在直接編碼輸入/輸出方式中,每一I/O引腳僅能輸入或輸出一個(gè)開(kāi)關(guān)信號(hào),各引腳相互獨(dú)立,沒(méi)有編碼關(guān)系。顯然,I/O引腳利用率低,只適用于僅需要輸入或輸出少量開(kāi)關(guān)信號(hào)的場(chǎng)合。
2.編碼輸入/輸出方式
在這種方式中,將若干條用途相同(均為輸入或輸出)的I/O引腳組合在一起,按二進(jìn)制編碼后輸入或輸出。例如,對(duì)于n條輸出引腳,經(jīng)二進(jìn)制譯碼器譯碼后,可以控制2n個(gè)設(shè)備;對(duì)于2n個(gè)不同時(shí)有效的輸入量,經(jīng)過(guò)編碼器與CPU連接時(shí),也只需要n個(gè)引腳,如圖6-1(b)所示。
顯然,采用編碼輸入/輸出時(shí),CPUI/O引腳利用率最高,但硬件開(kāi)銷大,在單片機(jī)控制系統(tǒng)中很少采用。
3.矩陣輸入/輸出方式
將CPUI/O引腳分成兩組,用n條引腳構(gòu)成行線,m條引腳構(gòu)成列線,行、列交叉點(diǎn)就構(gòu)成了所需的n
×
m個(gè)檢測(cè)點(diǎn)。顯然,所需的I/O引腳數(shù)目為n
+
m,而檢測(cè)點(diǎn)總數(shù)達(dá)到了n
×
m個(gè),如圖6-1(c)所示。可見(jiàn),I/O引腳的利用率較高,硬件開(kāi)銷少,因此得到了廣泛應(yīng)用。
圖6-1輸入/輸出方式
(a)直接解碼輸入/輸出方式;(b)矩陣輸入/輸出方式;(c)編碼輸入/輸出方式在矩陣編碼方式中,如果行線、列線均定義為輸出狀態(tài),就可輸出n
×
m個(gè)開(kāi)關(guān)量;當(dāng)行、列線中有一組為輸出線,另一組為輸入線時(shí)就構(gòu)成了n
×
m個(gè)輸入檢測(cè)點(diǎn),如矩陣鍵盤電路。
通過(guò)單片機(jī)芯片實(shí)現(xiàn)數(shù)字信號(hào)的輸入處理和輸出控制時(shí),必須了解以下問(wèn)題:
(1)準(zhǔn)確理解CPU各引腳的功能,確定可利用的I/O資源,并做出相對(duì)合理的使用規(guī)劃。
例如在MCS-51系列單片機(jī)中,理論上可以使用的I/O端口數(shù)目為四個(gè)8位口,共計(jì)32根I/O線。6.2I/O資源及擴(kuò)展但當(dāng)系統(tǒng)中含有外部ROM或外部RAM存儲(chǔ)器時(shí),P0口將作為地址/數(shù)據(jù)總線使用,即在取指期間,P0口輸出指令碼所在存儲(chǔ)單元(外部程序存儲(chǔ)器)的低8位地址,讀出的指令碼也從P0口輸入,即又作數(shù)據(jù)總線使用;P2口輸出外部程序存儲(chǔ)器、外部數(shù)據(jù)存儲(chǔ)器高8位地址。因此,在含有外部存儲(chǔ)器的MCS-51單片機(jī)應(yīng)用系統(tǒng)中,P0、P2口不能再作為通常意義上的I/O總線使用。
內(nèi)含OTPROM、FlashROM程序存儲(chǔ)器的MCS-51及兼容芯片,如87C51/52/54/58、89C51/52/54/58、87C51×2/52
×2/54×2/58×2、89C51×2/52×2/54×2/58X2、AT89S51
/52/53已成為主流芯片,這類芯片無(wú)須擴(kuò)展外部程序存儲(chǔ)器,一般只需擴(kuò)展外部數(shù)據(jù)存儲(chǔ)器和I/O端口。但在MCS-51系統(tǒng)中,沒(méi)有獨(dú)立的I/O端口地址空間,即I/O地址空間是外部數(shù)據(jù)存儲(chǔ)器空間的一部分,因此,只要系統(tǒng)中使用了可尋址的I/O接口芯片,如8155、8255等,也不能將P0口作為一般意義上的I/O引腳使用,P2口也不能作為一般意義上I/O引腳使用,除非擴(kuò)展外部RAM和I/O端口地址小于256字節(jié),P2口才可作為一般意義上的I/O引腳使用(通過(guò)“MOVX@Ri,A”和“MOVXA,@Ri”訪問(wèn))。
P3口是多功能復(fù)用端口,只有當(dāng)不使用其中的第二輸入/輸出功能時(shí),才可作為一般I/O口使用。例如,P3.6、P3.7引腳分別是外部數(shù)據(jù)存儲(chǔ)器讀寫控制信號(hào),因此在含有外部RAM、可尋址I/O芯片的控制系統(tǒng)中,不能再將這兩個(gè)引腳挪做他用。又如,當(dāng)使用作為電源掉電中斷輸入端時(shí),P3.2引腳同樣不能作為一般I/O引腳使用。
可見(jiàn),在MCS-51系列CPU中,只有P1口和P3口中未用的引腳可作為一般I/O引腳使用,即能夠使用的I/O線數(shù)目在8~16之間;在使用片內(nèi)程序存儲(chǔ)器芯片的MCS-51系統(tǒng)中,如果所需外部RAM、I/O端口空間小于256字節(jié)時(shí),P1口、P2口和P3口中未用的引腳可作為一般I/O引腳使用,即能夠使用的I/O線數(shù)目在16~24之間。因此,在MCS-51單片機(jī)應(yīng)用系統(tǒng)中常需要通過(guò)觸發(fā)器或I/O擴(kuò)展芯片擴(kuò)展I/O引腳。
(2)作輸出控制信號(hào)線時(shí),必須了解CPU復(fù)位期間和復(fù)位后該引腳的狀態(tài)。MCS-51系列CPU在復(fù)位期間和復(fù)位后各I/O端口的狀態(tài)可參閱第2章有關(guān)內(nèi)容。
(3)只有了解了CPUI/O端口輸出級(jí)電路結(jié)構(gòu)和負(fù)載能力,才可能設(shè)計(jì)出原理正確、工作可靠的I/O接口電路。
對(duì)于輸出口,當(dāng)輸出高電平時(shí),能給負(fù)載提供的最大驅(qū)動(dòng)電流就是該輸出口高電平驅(qū)動(dòng)能力,當(dāng)輸出電流大于最大驅(qū)動(dòng)電流時(shí),上拉MOS管內(nèi)阻上的壓降將增加,VOH會(huì)下降。當(dāng)VOH小于某一數(shù)值后,后級(jí)電路會(huì)誤認(rèn)為輸入為低電平,產(chǎn)生邏輯錯(cuò)誤。因此,要注意輸出高電平時(shí)的負(fù)載能力。而當(dāng)輸出低電平時(shí),輸出級(jí)飽和,負(fù)載電流倒灌。同樣,倒灌的電流也不能太大,否則會(huì)使輸出級(jí)因過(guò)流而損壞,即使沒(méi)有損壞,也會(huì)因灌電流太大,造成輸出低電平VOL上升。當(dāng)VOL大于某一數(shù)值后,后級(jí)電路同樣會(huì)誤以為輸入為高電平,產(chǎn)生邏輯錯(cuò)誤。
負(fù)載能力通常以能驅(qū)動(dòng)多少個(gè)TTL門電路作為計(jì)量單位。MCS-51系列CPU各I/O端口內(nèi)部電路結(jié)構(gòu)已在第2章介紹過(guò),這里不再詳細(xì)介紹。至于I/O端口負(fù)載能力可從CPU芯片技術(shù)手冊(cè)中查到。
(4)了解I/O端口輸出電平范圍。
(5)了解輸入及OD輸出狀態(tài)下,I/O端口最大耐壓。6.2.1通過(guò)鎖存器、觸發(fā)器擴(kuò)展I/O口
當(dāng)僅需要擴(kuò)展少量的I/O引腳時(shí),可使用鎖存器、觸發(fā)器或三態(tài)門電路實(shí)現(xiàn)。
1.輸出口
圖6-2使用74HC273擴(kuò)展輸出口
MOVDPTR,#9800H ;輸出口地址送數(shù)據(jù)指針
MOVX@DPTR,A ;累加器Acc內(nèi)容鎖存到74HC273的輸出端
顯然,擴(kuò)展輸出口的狀態(tài)不能讀出,當(dāng)僅需要修改輸出口中個(gè)別位狀態(tài)時(shí),可使用具有位尋址功能的內(nèi)部RAM單元作為擴(kuò)展輸出口的映像地址,采用間接方式訪問(wèn),即先對(duì)映像地址單元進(jìn)行“讀—改—寫”操作,再將映像地址單元內(nèi)容送外部端口。例如通過(guò)如下指令即可將9800H口的b0位取反:
PORTP6DATA28H ;使用28H單元作為9800H端口的映像地址
MOVA,PORTP6 ;Acc←9800H端口映像地址
CPLACC.0 ;對(duì)b0位取反
MOVPORTP6,A ;回寫映像地址單元
MOVDPTR,#9800H ;DPTR←端口地址
MOVX@DPTR,A ;端口映像內(nèi)容b0位取反后送74HC273輸出端
對(duì)于確實(shí)需要將數(shù)據(jù)寫入這類“高電平送數(shù),下降沿鎖存”的器件,如某些LCD顯示模塊I/O口時(shí),可將這類器件的數(shù)據(jù)輸入端、數(shù)據(jù)鎖存使能端LE與CPU的I/O引腳(如P1.X)或具有輸出鎖存功能的I/O擴(kuò)展芯片,如8255、8155的輸出口相連,如圖6-8所示。
2.輸入口
對(duì)輸入口來(lái)說(shuō),一般無(wú)須鎖存,原則上三態(tài)門電路、具有三態(tài)輸出的總線緩沖器、驅(qū)動(dòng)器、D型觸發(fā)器(如74HC374)以及電平觸發(fā)的鎖存器(如74HC373)等均可以作為輸入口擴(kuò)展芯片,如圖6-3所示。
在圖6-3中分別使用了兩片74HC373、一片74HC125構(gòu)成了三個(gè)輸入口,共擴(kuò)展了20條輸入線,其中U1的輸出允許端接U4的譯碼輸出引腳。圖6-3擴(kuò)展輸入口當(dāng)A15、A14、A13、A12、A11為10000,且為低電平時(shí),輸出低電平,即讀8000H端口時(shí),引腳將出現(xiàn)負(fù)脈沖(由于輸入口無(wú)須鎖存,因此將74HC373的鎖存輸入端LE通過(guò)2.2kΩ電阻與電源VCC相連),使數(shù)據(jù)輸入端與CPU數(shù)據(jù)總線相連。不難看出,由U2構(gòu)成的第二個(gè)輸入端口地址為8800H,其中鎖存脈沖由外部輸入設(shè)備提供;由U3構(gòu)成的第三個(gè)輸入端口地址為9000H。
圖6-4是一個(gè)實(shí)用的輸入/輸出口擴(kuò)展電路,其中74HC273構(gòu)成8位輸出口,74HC373構(gòu)成8位輸入口。
圖6-4擴(kuò)展輸入/輸出口在圖6-4所示I/O擴(kuò)展電路中,由于I/O端口數(shù)不多,沒(méi)有用P2口(即高8位地址A15~A8)引腳,在應(yīng)用程序中不用“MOVXA,@DPTR”與“MOVX@DPTR,A”指令,而用“MOVXA,@Ri”與“MOVX@Ri,A”指令讀寫I/O端口時(shí),P2口全部引腳可作為一般I/O引腳使用。6.2.2利用串入并出及并入串出芯片擴(kuò)展I/O口
在速度要求不高的情況下,可利用74HC164、74HC594、74HC595等“串入并出”芯片擴(kuò)展輸出口;利用74HC165、74HC597等“并入串出”芯片擴(kuò)展輸入口,也是一種簡(jiǎn)單、實(shí)用的I/O口擴(kuò)展方式。當(dāng)串行口未用時(shí),可通過(guò)串行口方式0完成串行數(shù)據(jù)的輸入或輸出(參閱第4章);而當(dāng)串行口已作它用時(shí),可根據(jù)串行輸入/輸出芯片的操作時(shí)序,使用I/O引腳模擬串行移位脈沖,完成數(shù)據(jù)的輸入/輸出,例如在圖6-5中使用89C5×芯片三根I/O線,借助兩片74HC595即可將3根I/O引腳通過(guò)串行移位方式擴(kuò)展為16根輸出線。
圖6-5通過(guò)“串入并出”芯片擴(kuò)展輸出引腳假設(shè)擴(kuò)展輸出引腳ED7~ED0輸出信息在內(nèi)存中的映像地址為EDATA1;ED15~ED8輸出信息在內(nèi)存中的映像地址為EDATA1+1,則可通過(guò)如下程序段將數(shù)據(jù)串行輸出到ED15~ED0引腳。
EDATA1 DATA 38H ;假設(shè)輸出數(shù)據(jù)存放在38H、39H單元中
SDI BITP1.0 ;串行數(shù)據(jù)輸入接P1.0引腳
SRCLK
BIT P1.1 ;串行移位脈沖接P1.1引腳
RCLK BIT P1.2 ;并行輸出鎖存脈沖接P1.2引腳
;----------串行數(shù)據(jù)輸出程序段---------
CLRRCLK ;并行鎖存脈沖置為低電平
MOVR0,#EDATA1
MOVR2,#2 ;共需要串行輸出兩個(gè)字節(jié)
LOOP1:
MOVA,@R0 ;取輸出數(shù)據(jù)
MOVR3,#8 ;右移8次
LOOP2:
CLRSRCLK ;串行移位脈沖置為低電平
RRCA ;帶進(jìn)位Cy循環(huán)右移
MOVSDI,C ;串行數(shù)據(jù)送SDI
NOP ;插入NOP指令適當(dāng)延遲(是否延遲由CPU指令周期決定)
SETBSRCLK ;串行移位脈沖置為高電平,形成上升沿
DJNZR3,LOOP2
INCR0 ;R0加1,指向高8位
DJNZR2,LOOP1 ;循環(huán),輸出高8位
SETBRCLK ;并行輸出鎖存脈沖置為高電平,形成上升沿6.2.3用8255可編程I/O芯片擴(kuò)展MCS-51并行I/O口
Intel公司8255芯片是一塊通用的可編程并行接口(PPI)芯片,除地址線A1、A0外,可直接與Intel公司8位微處理器,如MCS-51芯片相應(yīng)總線直接相連,是MCS-51單片機(jī)應(yīng)用系統(tǒng)中較常見(jiàn)的并行I/O擴(kuò)展芯片之一。
此外8155/8156也曾經(jīng)是MCS-51單片機(jī)系統(tǒng)常用的可編程并行I/O擴(kuò)展芯片之一,與MCS-51接口方便。8155/8156采用DIP40、LCC44或QFP44封裝形式,單一
+5V工作電源。8155/8156可編程I/O擴(kuò)展芯片除了可提供三個(gè)可編程的I/O口(A、B均為8位I/O口,C口為6位I/O端口)外,還具有256字節(jié)的SRAM存儲(chǔ)單元和一個(gè)14位的可編程定時(shí)/計(jì)數(shù)器,并內(nèi)置了地址鎖存器,地址線可直接與MCS-51單片機(jī)的P0口相連,無(wú)須使用74HC373鎖存低8位地址信號(hào)。當(dāng)系統(tǒng)所需外部數(shù)據(jù)存儲(chǔ)器容量不大時(shí),由1片CPU(如8751、8752、87C51/52/54/58、89C51/52/54/58、87C51×2/52×2/54×2/58×2、89C51×2/52×2/54×2/58×2等)和1片8155即可構(gòu)成I/O端口較多、具有256字節(jié)外部RAM的單片機(jī)應(yīng)用系統(tǒng)。但隨著內(nèi)置256~1792B片內(nèi)擴(kuò)展RAM的MCS-51內(nèi)核兼容芯片,如SST系列、STC系列、89C51RX等系列普及,在MCS-51單片機(jī)應(yīng)用系統(tǒng)中,已不再采用8155/8156PIO芯片擴(kuò)展并行I/O口。
1.?8255的結(jié)構(gòu)及引腳功能
8255采用DIP40、LCC44或QFP44封裝形式,引腳功能及排列如圖6-6所示,其中:
D7~D0—數(shù)據(jù)總線,雙向,三態(tài),可直接與CPU數(shù)據(jù)總線相連。
A1、A0—地址線,輸入。8255含有A、B、C三個(gè)8位輸入/輸出口和一個(gè)控制/狀態(tài)寄存器,即4個(gè)可尋址的I/O端口。A1、A0地址線狀態(tài)編碼與這四個(gè)I/O端口的對(duì)應(yīng)關(guān)系如表6-1所示。
圖6-68255A引腳
(a)引腳功能;(b)引腳排列
表6-1地址線與對(duì)應(yīng)端口的關(guān)系
表6-28255的工作狀態(tài)PA7~PA0—A口數(shù)據(jù)輸入/輸出引腳。
PB7~PB0—B口數(shù)據(jù)輸入/輸出引腳。
PC7~PC0—C口數(shù)據(jù)輸入/輸出引腳。當(dāng)A、B口工作在選通方式時(shí),C口部分引腳作為A、B口的通信聯(lián)絡(luò)信號(hào)。
8255內(nèi)部由A、B、C三個(gè)并行口和一個(gè)控制/狀態(tài)寄存器組成。其中控制寄存器主要用于選擇A、B、C三個(gè)并行口的工作狀態(tài)——包括工作方式,輸入還是輸出。
A口:作輸出口時(shí),是一個(gè)8位的數(shù)據(jù)輸出鎖存和緩沖器;作輸入口時(shí),是一個(gè)8位數(shù)據(jù)輸入鎖存器。
B口:作輸出口時(shí),是一個(gè)8位的數(shù)據(jù)輸出鎖存和緩沖器;作輸入口時(shí),是一個(gè)8位數(shù)據(jù)輸入緩沖器。
C口:作輸出口時(shí),是一個(gè)8位的數(shù)據(jù)輸出鎖存和緩沖器;作輸入口時(shí),是一個(gè)8位數(shù)據(jù)輸入緩沖器(即C口對(duì)輸入數(shù)據(jù)不具備鎖存功能)。
2.?8255工作方式
8255屬于可編程的I/O擴(kuò)展芯片,其工作方式由寫入工作方式控制寄存器的工作方式控制字決定,如表6-3所示。
表6-38255工作方式控制字各位的含義8255I/O口有三種工作方式:
方式0,基本輸入/輸出方式。特點(diǎn)是對(duì)輸出信號(hào)具有鎖存功能,對(duì)輸入信號(hào)沒(méi)有鎖存功能。
方式1,選通輸入/輸出方式。特點(diǎn)是使用C口部分引腳作為A、B通信聯(lián)絡(luò)信號(hào),對(duì)輸入、輸出數(shù)據(jù)均具有鎖存功能。
方式2,雙向傳輸方式。只有A口可以工作于方式2,使用C口部分引腳作為雙向傳輸聯(lián)絡(luò)信號(hào),對(duì)輸入、輸出數(shù)據(jù)均具有鎖存功能??梢?jiàn)8255三個(gè)I/O口的地位不完全相同,其中A口有三種工作方式,B口有兩種工作方式;C口較特殊,被分成A(PC7~PC4)、B(PC3~PC0)兩組,只有當(dāng)A、B口工作在方式0時(shí),C口全部引腳可作為輸入/輸出引腳使用(PC7~PC4、PC3~PC0處于輸入還是輸出狀態(tài),分別由工作方式控制字的b3、b0位決定),而當(dāng)A、B口工作在方式1或方式2時(shí),C口部分引腳作為A、B口通信聯(lián)絡(luò)信號(hào)(這時(shí)未用的C口引腳仍可作為輸入/輸出引腳使用,由控制寄存器的b3、b0位選擇),具體情況如表6-4所示。
表6-4A、B口工作在方式1或方式2時(shí)C口引腳的含義需要注意的是:8255I/O引腳采用互補(bǔ)推挽輸出電路結(jié)構(gòu),當(dāng)I/O引腳被定義為輸入方式時(shí),相當(dāng)于懸空,因此需要外接上拉電阻。
其中:
圖6-7選通輸入/輸出連接示意圖
(a)
A口工作在選通輸入方式下信號(hào)連接方式及時(shí)序;
(b)
A口工作在選通輸出方式下信號(hào)連接方式及時(shí)序
(3)在雙向傳輸方式(A口方式2)下,使用了PC7~PC3作為聯(lián)絡(luò)信號(hào)。
可見(jiàn),當(dāng)A或B工作在方式1或方式2時(shí),C口部分引腳作通信聯(lián)絡(luò)信號(hào)使用,不能再作為一般的I/O引腳使用(但未用的C口引腳仍可作為一般I/O引腳使用)。
例如,當(dāng)A口工作在方式0(基本輸入/輸出方式),B口工作在方式1時(shí),除PC7~PC4可作為一般I/O引腳使用(輸入還是輸出由工作方式控制字的b3位決定)外,PC3也可作為一般I/O引腳使用(輸入還是輸出由工作方式控制字的b0位決定)。
又如,當(dāng)A、B口均工作在選通輸入方式時(shí),PC7~PC6仍可作為一般I/O引腳使用(輸入還是輸出由工作方式控制字的b3位決定)。
3.?C口復(fù)位/位置控制字
當(dāng)C口處于輸出狀態(tài)時(shí),具有位控制功能,把“復(fù)位/位置控制字”寫入控制寄存器后,即可使C口相應(yīng)位置1或清0,C口復(fù)位/位置控制字格式如下:例如,當(dāng)PC7~PC4處于輸出狀態(tài)時(shí),把控制字00001010B(即0AH)寫入控制寄存器,即可使PC5引腳輸出0電平。
4.?8255芯片與MCS-51接口應(yīng)用舉例
圖6-8MCS-51與8255芯片的連接圖6-98255與8×C5×接口電路
例6.1
在某單片機(jī)應(yīng)用系統(tǒng)中,需要4
×
5(共20)個(gè)按鍵的矩陣鍵盤電路,以及驅(qū)動(dòng)FM19264點(diǎn)陣式LCD顯示器,其中LCD顯示器引腳信號(hào)功能如表6-5所示。
表6-5例6.1LCD顯示器引腳功能試通過(guò)8255芯片形成LCD顯示器和鍵盤接口電路。
分析:由于該LCD顯示模塊的使能信號(hào)E采用“高電平送數(shù),下降沿鎖存”,不能直接與單片機(jī)連接,且所需I/O引腳較多,可通過(guò)8255與CPU連接,具體線路如圖6-9所示。
A、B口工作在方式0,其中A口與LCD的數(shù)據(jù)總線DB7~DB0相連,對(duì)LCD進(jìn)行寫入操作時(shí),PA是輸出引腳;對(duì)LCD進(jìn)行讀操作時(shí),PA口是輸入引腳。
B口輸出,其中PB5~PB0作為矩陣鍵盤列掃描線;PB7接LCD的(讀/寫)控制端,PB6接LCD的(數(shù)據(jù)/命令選擇段)。
C口A組(即PC7~PC4)輸出,分別接LCD的使能輸入端E和片選信號(hào)CS3~CS1;C口的B組(即PC3~PC0)接矩陣鍵盤的行線,輸入。因此,8255的工作方式控制字為81H(對(duì)LCD進(jìn)行寫操作時(shí))和91H(對(duì)LCD進(jìn)行讀操作時(shí))。
而8255的片選信號(hào)接U4的譯碼輸出(當(dāng)然,如果系統(tǒng)中沒(méi)有其他I/O芯片,也可以用線選法,直接將8255的片選信號(hào)與未用高位地線相連),根據(jù)138譯碼條件,可知:
8255A口地址為8400H;
8255B口地址為8401H;
8255C口地址為8402H;
8255控制寄存器口地址為8403H。
可通過(guò)如下指令對(duì)8255進(jìn)行初始化:
MOVDPTR,#8403H ;8255控制口地址送DPTR
MOVA,#81H ;工作方式控制字送累加器A
MOVX@DPTR,A ;工作方式控制字送8255控制口
通過(guò)如下命令將存放在累加器A的數(shù)據(jù)信息寫入LCD:
MOVDPTR,#8400H ;將LCD顯示器數(shù)據(jù)口地址送DPTR
MOVX@DPTR,A ;寫入數(shù)據(jù)信息送A口
INCDPTR ;指向B口
MOVA,#01000000B ;送讀寫、數(shù)據(jù)/命令標(biāo)志(B口低6位與LCD讀寫操作無(wú)關(guān),可設(shè)
;為0)
MOVX@DPTR,A ;使引腳為低電平;引腳為高電平
INCDPTR ;指向C口
MOVA,#11110000B
MOVX@DPTR,A ;即E為高,同時(shí)選中CS3-CS1
CLRAcc.7 ;使E信號(hào)為低電平,以便LCD將數(shù)據(jù)鎖存到其內(nèi)部的數(shù)據(jù)鎖存
;器中
MOVX@DPTR,A表6-6LED正向壓降與材料的關(guān)系6.2.4利用MCU擴(kuò)展I/O
當(dāng)I/O引腳資源不夠時(shí),在特定應(yīng)用系統(tǒng)中用另一塊MCU來(lái)擴(kuò)展I/O端口比用三態(tài)門、觸發(fā)器、專用I/O擴(kuò)展芯片如8255、8155等擴(kuò)展I/O引腳可能更實(shí)用。一方面,不僅擴(kuò)展了I/O引腳,也擴(kuò)展了其他硬件資源(如定時(shí)/計(jì)數(shù)器、中斷輸入端等);另一方面,部分工作可由擴(kuò)展MCU完成,減輕了主MCU的負(fù)擔(dān);再者,MCUI/O口電平狀態(tài)可編程設(shè)置,從而省去承擔(dān)邏輯轉(zhuǎn)換的與非門電路芯片;當(dāng)使用I/O口輸出級(jí)電路結(jié)構(gòu)可編程選擇的MCU,如P89PLC900系列、STC12C54××系列芯片擴(kuò)展I/O引腳時(shí),除了具有上述便利條件外,還能簡(jiǎn)化I/O接口電路,如電平轉(zhuǎn)換電路的設(shè)計(jì)。因此,強(qiáng)烈推薦考慮通過(guò)MCU擴(kuò)展I/O口。
利用MCU擴(kuò)展I/O資源時(shí),可使用UART、I2C異步通信方式、類似SPI接口同步串行通信方式或并行通信方式實(shí)現(xiàn)兩MCU之間的信息交換。
6.3.1發(fā)光二極管
發(fā)光二極管LED具有體積小,抗沖擊、震動(dòng)性能好,可靠性高,壽命長(zhǎng),工作電壓低,功耗小,響應(yīng)速度快等優(yōu)點(diǎn),常用于顯示系統(tǒng)的狀態(tài)或用于系統(tǒng)中某一功能電路,甚至某一輸出引腳的電平狀態(tài)顯示,如電源指示、停機(jī)指示、錯(cuò)誤指示等,使人一目了然。6.3簡(jiǎn)單顯示驅(qū)動(dòng)電路此外,將多個(gè)LED管芯組合在一起,就構(gòu)成了特定字符(文字或數(shù)碼)的顯示器件,如七段、八段LED數(shù)碼管和點(diǎn)陣式LED顯示器,將發(fā)光二極管和光敏三極管組合在一起,就構(gòu)成了光電耦合器件以及由此衍生出來(lái)的固態(tài)繼電器。因此,了解LED發(fā)光二極管性能、使用方法,對(duì)單片機(jī)控制系統(tǒng)的設(shè)計(jì)非常必要。
發(fā)光二極管在本質(zhì)上與普通二極管差別不大,也是一個(gè)PN結(jié),同樣具有正向?qū)ǎ聪蚪刂沟奶匦?。發(fā)光二極管的伏安特性曲線與普通二極管相似,如圖6-10所示(為了便于比較,圖中用虛線表示普通二極管的伏安特性曲線)。由圖6-10看出:
(1)當(dāng)外加正向電壓小于0.9~1.1V時(shí),
LED不導(dǎo)通;當(dāng)外加電壓大于正向閾值電壓時(shí),LED導(dǎo)通,同時(shí)發(fā)光。顯然,LED二極管的正向?qū)妷罕绕胀ǘO管大,具體數(shù)值與LED材料有關(guān),如表6-6所示。
圖6-10LED二極管伏安特性曲線
(2)
LED導(dǎo)通后,伏安特性曲線更陡,即LED導(dǎo)通后,內(nèi)阻更小(因此也可作為降壓元件使用,如將+5V電源降為3V電源)。
(3)
LED二極管反向擊穿電壓比普通二極管低,一般在5~10V之間。
LED二極管的亮度與LED材料、結(jié)構(gòu)以及工作電流有關(guān)。一般說(shuō)來(lái),工作電流越大,亮度也越大,但亮度與工作電流的關(guān)系,因材料而異,例如GaP發(fā)光二極管,當(dāng)工作電流增加到一定數(shù)值后,電流增加,LED亮度不再增大,即出現(xiàn)亮度飽和現(xiàn)象;而GaAsP發(fā)光二極管的亮度隨電流的增大而增大,在器件因功耗增加而損壞前觀察不到亮度飽和現(xiàn)象。
LED發(fā)光二極管工作電流一般控制在3~20mA之間,最大不超過(guò)50mA,否則會(huì)損壞。為了獲得良好的發(fā)光效果,LED平均工作電流控制在10~15mA范圍內(nèi)。6.3.2驅(qū)動(dòng)電路
LED工作電流較大,而MCS-51系列CPUP1~P3口I/O引腳負(fù)載能力僅為四個(gè)TTL門電路,一般不能直接驅(qū)動(dòng)LED發(fā)光二極管,可使用三極管或驅(qū)動(dòng)IC芯片驅(qū)動(dòng),如圖6-11所示。
圖6-11CPU與LED接口電路
(a)、(b)、(d)低電平有效;(c)高電平有效其中圖(a)采用PNP三極管驅(qū)動(dòng),當(dāng)P1.X引腳輸出低電平時(shí),三極管飽和導(dǎo)通,限流電阻R與LED內(nèi)阻(幾歐姆~幾十歐姆)構(gòu)成了集電極等效電阻Rc。限流電阻R的大小由LED二極管工作電流IF決定,即IC
=
IF
=
(VCC
-
VF
-
VCES)/R。其中IC為集電極電流;IF為L(zhǎng)ED工作電流;VCC為電源電壓;VCES為三極管飽和壓降,一般在0.1~0.2V之間;VF為L(zhǎng)ED導(dǎo)通電壓,一般在1.2~2.5V之間。
當(dāng)VCC為5V,VF取2.0V,VCES取0.2V,IF取15mA時(shí),限流電阻R大致為200Ω。
當(dāng)P1.X引腳輸出高電平時(shí),三極管截止,LED不亮。值得注意的是:為使LED發(fā)光時(shí),驅(qū)動(dòng)管處于飽和狀態(tài),發(fā)光二極管LED不宜串在發(fā)射極。
圖(b)、圖(c)采用集電極開(kāi)路輸出(OC門)的集成驅(qū)動(dòng)器,如7407(同相驅(qū)動(dòng))、7406(反相驅(qū)動(dòng)),限流電阻R與LED導(dǎo)通時(shí)內(nèi)阻構(gòu)成了輸出級(jí)集電極等效電阻Rc。限流電阻R的計(jì)算方法與圖(a)相同。在圖(b)中,當(dāng)P1.X引腳輸出低電平時(shí),7407驅(qū)動(dòng)器輸出低電平,LED亮。而在圖(c)中,當(dāng)P1.X引腳輸出高電平時(shí),7406反相器輸出低電平,LED亮,該電路不足之處是CPU復(fù)位期間LED亮。對(duì)于漏極開(kāi)路輸出的I/O口,如增強(qiáng)型MCS-51的P0口,可直接驅(qū)動(dòng)1~3只工作電流不大的小功率LED發(fā)光二極管,如圖(d)所示(但必須注意I/O引腳電流總和不能大于器件允許值)。6.3.3LED發(fā)光二極管顯示狀態(tài)及同步
一般說(shuō)來(lái),單個(gè)LED有“亮”、“滅”兩種狀態(tài),但在單片機(jī)應(yīng)用系統(tǒng)中,由于I/O引腳數(shù)量、成本等因素限制,要求一只LED發(fā)光二極管顯示出更多的狀態(tài)。例如電源監(jiān)控設(shè)備中的電源指示燈就可能用“滅”、“常亮”、“快閃”、“慢閃”四種狀態(tài)分別表示“無(wú)交流”、“交流正常”、“過(guò)壓”、“欠壓”四種狀態(tài);又如,帶有后備電池設(shè)備的電源指示燈也可用“滅”、“常亮”、“快閃”、“慢閃”分別表示“無(wú)交流/電池電壓正常”、“交流正常/電池電壓正常”、“交流正常/電池低壓”、“無(wú)交流/電池低壓”四種狀態(tài)。在這種情況下,一般用兩位記錄每一只LED發(fā)光二極管的狀態(tài),如00表示滅;01表示慢閃;10表示快閃;11表示常亮,這樣一字節(jié)的內(nèi)部RAM單元可記錄4個(gè)LED指示燈的狀態(tài)。
當(dāng)系統(tǒng)中存在兩個(gè)或兩個(gè)以上LED發(fā)光二極管以閃爍方式表示不同的狀態(tài)時(shí),就遇到LED顯示同步問(wèn)題,否則可能出現(xiàn)甲燈亮?xí)r,乙燈滅——呈現(xiàn)類似霓虹燈的走動(dòng)顯示效應(yīng)。
解決方法:快閃、慢閃時(shí)間呈倍數(shù)關(guān)系,如快閃切換時(shí)間為0.15~0.25s,則慢閃切換時(shí)間可設(shè)為0.45~0.75s(2~3倍);然后在定時(shí)中斷服務(wù)程序中設(shè)置快、慢閃切換標(biāo)志,并根據(jù)LED狀態(tài)關(guān)閉或打開(kāi)LED指示燈即可。
例6.2
假設(shè)某系統(tǒng)存在3個(gè)具有快慢閃狀態(tài)的發(fā)光二極管指示燈LED1、LED2、LED3,通過(guò)P1.2~P1.0引腳經(jīng)7407驅(qū)動(dòng)與LED3~LED1相連,試寫出顯示驅(qū)動(dòng)程序。
分析:可用LEDSTUD單元記錄3個(gè)LED發(fā)光二極管的狀態(tài),其中b1/b0記錄LED1的狀態(tài);b3/b2記錄LED2的狀態(tài);b5/b4記錄LED3的狀態(tài)。如果定時(shí)器T0每10ms中斷一次,則定時(shí)器T0中斷服務(wù)程序中與LED發(fā)光二極管顯示有關(guān)的程序片段如下:
LEDSTU DATA 28H ;LED狀態(tài)寄存器
LEDTIME DATA 30H ;LED顯示記時(shí)器
LEDTB1 BIT 00H ;快閃切換時(shí)間(0.16s)到標(biāo)志
LEDTB2 BIT 01H ;慢閃切換時(shí)間(0.48s)到標(biāo)志
;定時(shí)器T0中斷服務(wù)程序
PROCCTC0
CTC0:
…… ;現(xiàn)場(chǎng)及工作區(qū)切換略
;****LED顯示程序段*****
INCLEDTIME ;顯示時(shí)間計(jì)時(shí)器+1
MOVA,LEDTIME
CJNEA,#48,NEXT1
NEXT1:
JCNEXT2
MOVLEDTIME,#0 ;計(jì)時(shí)器已達(dá)到48,從0開(kāi)始計(jì)數(shù)
CPLLEDTB2 ;慢閃切換時(shí)間到標(biāo)志取反
SJMPNEXT3 ;快、慢閃切換時(shí)間到標(biāo)志同時(shí)有效
NEXT2:
ANLA,#0FH ;僅保留b3~b0
JZNEXT3 ;低4位b3~b0為0,即顯示時(shí)間被除16整數(shù)不是0,說(shuō)明不
;是16的倍數(shù)
LJMPLEDEND ;既不是48(即0.48s),也不是16的倍數(shù),說(shuō)明時(shí)間未到
NEXT3:
CPLLEDTB1 ;快閃切換時(shí)間到標(biāo)志取反
;--------LED1顯示設(shè)置-------
MOVA,LEDSTU
ANLA,#03H ;保留LED1的顯示狀態(tài)
CJNEA,#0,NEXT11
SETBP1.0 ;關(guān)閉LED1
SJMPLED1END
NEXT11:
CJNEA,#1,NEXT12
MOVC,LEDTB2 ;把慢閃切換標(biāo)志送P1.0
MOVP1.0,C
SJMPLED1END
NEXT12:
CJNEA,#2,NEXT13
MOVC,LEDTB1 ;把快閃切換標(biāo)志送P1.0
MOVP1.0,C
SJMPLED1END
NEXT13:
CLRP1.0 ;等于11,常亮,開(kāi)LED1
LED1END:
;--------LED2顯示設(shè)置-------
MOVA,LEDSTU
ANLA,#0CH ;保留LED2的顯示狀態(tài)
CJNEA,#0H,NEXT21
SETBP1.1 ;關(guān)閉LED2
SJMPLED2END
NEXT21:
CJNEA,#4H,NEXT22
MOVC,LEDTB2 ;把慢閃切換標(biāo)志送P1.1
MOVP1.1,C
SJMPLED2END
NEXT22:
CJNEA,#8H,NEXT23
MOVC,LEDTB1 ;把快閃切換標(biāo)志送P1.1
MOVP1.1,C
SJMPLED2END
NEXT23:
CLRP1.1 ;等于11,常亮,開(kāi)LED2
LED2END:
;--------LED3顯示設(shè)置-------
MOVA,LEDSTU
ANLA,#30H ;保留LED3的顯示狀態(tài)
CJNEA,#0H,NEXT31
SETBP1.2 ;關(guān)閉LED3
SJMPLEDEND
NEXT31:
CJNEA,#10H,NEXT32
MOVC,LEDTB2 ;把慢閃切換標(biāo)志送P1.2
MOVP1.2,C
SJMPLEDEND
NEXT32:
CJNEA,#20H,NEXT33
MOVC,LEDTB1 ;把快閃切換標(biāo)志送P1.2
MOVP1.2,C
SJMPLEDEND
NEXT33:
CLRP1.2 ;等于11,常亮,開(kāi)LED3
LEDEND:
…… ;恢復(fù)現(xiàn)場(chǎng)(略)
RETI
END
LED數(shù)碼管是單片機(jī)控制系統(tǒng)中最常用的顯示器件之一,LED數(shù)碼管在單片機(jī)應(yīng)用系統(tǒng)中的地位類似于CRT(陰極射線管)、LCD(液晶)顯示器在臺(tái)式微機(jī)系統(tǒng)中的地位。在單片機(jī)系統(tǒng)中,常用一只到數(shù)只,甚至十幾只LED數(shù)碼管顯示CPU的處理結(jié)果、輸入/輸出信號(hào)的狀態(tài)或大小。6.4LED數(shù)碼管及其顯示驅(qū)動(dòng)電路6.4.1LED數(shù)碼管
LED數(shù)碼管的外觀如圖6-12(a)所示,筆段及其對(duì)應(yīng)引腳排列如圖6-12(b)所示,其中
a~g段用于顯示數(shù)字或字符的筆畫,dp顯示小數(shù)點(diǎn),而3、8引腳連通,作為公共端。一英寸以下的LED數(shù)碼管內(nèi),每一筆段含有1只LED發(fā)光二極管,導(dǎo)通壓降為1.2~2.5V;而一英寸及以上LED數(shù)碼管的每一筆段由多只LED發(fā)光二極管以串、并聯(lián)方式連接而成,筆段導(dǎo)通電壓與筆段內(nèi)包含的LED發(fā)光二極管的數(shù)目、連接方式有關(guān)。在串聯(lián)方式中,確定電源電壓VCC時(shí),每只LED工作電壓通常以2.0V計(jì)算,例如4英寸七段LED數(shù)碼顯示器LC4141的每一筆段由四只LED發(fā)光二極管按串聯(lián)方式連接而成,因此導(dǎo)通電壓應(yīng)在
7~8V之間,電源電壓VCC必須取9V以上。
圖6-12LED數(shù)碼管根據(jù)LED數(shù)碼管內(nèi)各筆段LED發(fā)光二極管的連接方式,可以將LED數(shù)碼管分為共陰和共陽(yáng)兩大類。在共陰LED數(shù)碼管中,所有筆段的LED發(fā)光二極管的負(fù)極連在一起,如圖6-12(c)所示;而在共陽(yáng)LED數(shù)碼管中,所有筆段的LED發(fā)光二極管的正極連在一起,如圖6-12(d)所示。由于共陽(yáng)LED數(shù)碼管與OC、OD門驅(qū)動(dòng)器連接方便,因此在單片機(jī)控制系統(tǒng)中,多用共陽(yáng)LED數(shù)碼管。
LED數(shù)碼管有單體、雙體、三體等多種封裝形式,對(duì)于雙體、三體封裝形式LED數(shù)碼管,其引腳排列與筆段對(duì)應(yīng)關(guān)系可能因生產(chǎn)廠家的不同而不同,通過(guò)數(shù)字萬(wàn)用表或指針式萬(wàn)用表歐姆擋即可判別出連接方式(共陰還是共陽(yáng))及其公共端后,即可借助外部電源與一只阻值為1kΩ的限流電阻識(shí)別出引腳排列方式。6.4.2LED數(shù)碼顯示器接口電路
從LED數(shù)碼管結(jié)構(gòu)可以看出,點(diǎn)亮不同筆段就可以顯示出不同的字符,例如筆段a、b、c、d、e、f被點(diǎn)亮?xí)r,就可以顯示數(shù)字“0”;又如筆段a、b、c、d、g被點(diǎn)亮?xí)r就顯示數(shù)字“3”。理論上,七個(gè)筆段可以顯示128種不同的字符,扣除其中沒(méi)有意義的狀態(tài)組合后,七段LED數(shù)碼管可以顯示的字符如表6-7所示。
表6-7七段LED數(shù)碼管可以顯示的字符
依據(jù)顯示驅(qū)動(dòng)方式的不同,可將LED數(shù)碼顯示驅(qū)動(dòng)電路分為靜態(tài)顯示方式和動(dòng)態(tài)顯示方式。
1.?LED靜態(tài)顯示接口電路
LED靜態(tài)顯示接口電路由筆段代碼鎖存器、筆段譯碼器(采用軟件譯碼的LED靜態(tài)顯示驅(qū)動(dòng)電路無(wú)須筆段譯碼器)、驅(qū)動(dòng)器等部分組成。在單片機(jī)應(yīng)用系統(tǒng)中,一般不用七段譯碼器芯片,如74249、CD4511等構(gòu)成筆段譯碼,而是采用軟件方式譯碼,原因是軟件譯碼靈活、方便。下面是單片機(jī)系統(tǒng)中常用的LED靜態(tài)顯示接口電路形式。
(1)圖6-13(a)是一位的共陽(yáng)LED靜態(tài)顯示驅(qū)動(dòng)電路,P1口輸出筆段代碼,通過(guò)7407驅(qū)動(dòng)LED數(shù)碼管。該電路優(yōu)點(diǎn)是結(jié)構(gòu)簡(jiǎn)單,直接利用P1口鎖存器作筆段代碼鎖存器,缺點(diǎn)是占有了P1.0~P1.6七根I/O線。
驅(qū)動(dòng)程序如下:
MOVDPTR,#LEDTAB ;筆段碼表首地址送DPTR
MOVCA,@A+DPTR ;取數(shù)字對(duì)應(yīng)的筆段碼,待顯示的數(shù)字存放在A累加器中
MOVP1,A ;取出的筆段碼送P1口顯示
LEDTAB: ;筆段碼表首地址
DBC0H,0F9H,0A4H,... ;筆段代碼表
例如,顯示數(shù)字“0”時(shí),要求a、b、c、d、e、f筆段亮,即P1.0~P1.5輸出低電平,P1.6輸出高電平,P1.7與筆段無(wú)關(guān),規(guī)定輸出高電平,因此數(shù)字“0”的筆段代碼為C0H。同理,可以推算出其他數(shù)字或字符的筆段代碼。
(2)在圖6-13(b)中,通過(guò)八上升沿D型觸發(fā)器74HC273擴(kuò)展輸出口,分別作為L(zhǎng)ED1、LED2的筆段代碼鎖存器。
根據(jù)74HC138譯碼條件,U3鎖存脈沖接U2的1腳,因此LED1筆段碼鎖存器地址(也就是LED1數(shù)碼管I/O口地址)為8000H;U4鎖存脈沖接U2的4腳,因此LED2筆段碼鎖存器地址為8400H。顯示驅(qū)動(dòng)程序如下:
MOVDPTR,#LEDTAB ;筆段碼表首地址送DPTR
MOVCA,@A+DPTR ;取相應(yīng)數(shù)字的筆段代碼,待顯示的數(shù)字存放在A累加器中
MOVDPTR,#80000H ;LED1筆段碼鎖存器地址送DPTR
MOVX@DPTR,A ;輸出筆段碼
(3)如果LED數(shù)碼管工作電流小于10mA,使用74HC273芯片后,可省去驅(qū)動(dòng)芯片7407,如圖6-13(c)所示。
(4)當(dāng)系統(tǒng)中I/O引腳資源不緊張時(shí),可使用I/O引腳作D型觸發(fā)器的鎖存脈沖,如圖6-13(d)所示。
驅(qū)動(dòng)程序如下:
MOVDPTR,#LEDTAB ;筆段碼表首地址送DPTR
MOVCA,@A+DPTR ;取相應(yīng)數(shù)字的筆段代碼,待顯示的數(shù)字存放在A累加器中
MOVP0,A ;筆段碼送P0口
CLRP2.6
SETBP2.6 ;形成LED1鎖存脈沖上升沿,將出現(xiàn)在P0口的筆段碼鎖存
當(dāng)然,也可以使用并行I/O擴(kuò)展芯片鎖存LED顯示位的筆段碼。
圖6-13LED靜態(tài)顯示接口電路(1)圖6-13LED靜態(tài)顯示接口電路(1)
圖6-13LED靜態(tài)顯示接口電路(2)圖6-13LED靜態(tài)顯示接口電路(2)
2.動(dòng)態(tài)顯示方式LED顯示器
在靜態(tài)顯示方式中,顯示驅(qū)動(dòng)程序簡(jiǎn)單,CPU占用率低,但每一位LED數(shù)碼管需要一個(gè)8位鎖存器來(lái)鎖存筆段碼,硬件開(kāi)銷大(元件數(shù)目多,印制板面積也會(huì)隨之增加),僅適用于顯示位數(shù)較少(4位以下)的場(chǎng)合。當(dāng)需要顯示的位數(shù)在4~12時(shí),多采用按位掃描軟件譯碼(在單片機(jī)系統(tǒng)中一般不用硬件譯碼)的動(dòng)態(tài)顯示方式或按筆段掃描的動(dòng)態(tài)顯示方式,如圖6-14所示。在按位掃描的動(dòng)態(tài)顯示方式中,各位筆段引腳a~dp并聯(lián)在一起,共用一個(gè)筆段代碼鎖存器(由于單片機(jī)I/O口、I/O擴(kuò)展電路,如8155、8255等大多具有輸出鎖存功能,因此往往不再需要筆段代碼鎖存器)、譯碼器(采用軟件譯碼時(shí),不用譯碼器)及驅(qū)動(dòng)器;為了控制各LED數(shù)碼管輪流工作,各顯示位的公共端與位譯碼(采用軟件譯碼時(shí)不用)、鎖存、驅(qū)動(dòng)電路相連。這樣即可依次輸出每一顯示位的筆段代碼和位掃描碼,輪流點(diǎn)亮各LED數(shù)碼顯示管,實(shí)現(xiàn)按位動(dòng)態(tài)顯示??梢?jiàn),在動(dòng)態(tài)顯示方式中,僅需要一套筆段代碼鎖存、譯碼(軟件譯碼除外)、驅(qū)動(dòng)器和一個(gè)位掃描碼鎖存、驅(qū)動(dòng)器,硬件開(kāi)銷少。圖6-14由P0、P2口構(gòu)成的8位LED動(dòng)態(tài)顯示驅(qū)動(dòng)電路在動(dòng)態(tài)顯示方式中,各LED數(shù)碼管輪流工作,為了防止出現(xiàn)閃爍現(xiàn)象,LED數(shù)碼管刷新頻率必須大于25Hz,即同一LED數(shù)碼管相臨兩次點(diǎn)亮?xí)r間間隔要小于40ms。對(duì)于具有N個(gè)LED數(shù)碼管的動(dòng)態(tài)顯示電路來(lái)說(shuō),如果LED顯示器刷新頻率為f,那么刷新周期為1/f,則每一位的顯示時(shí)間為1/(f
×
N)秒。顯然,位數(shù)越多,每一位的顯示時(shí)間就越短,在驅(qū)動(dòng)電流一定的情況下,亮度就越低(正因如此,在動(dòng)態(tài)LED顯示電路中,需適當(dāng)增大驅(qū)動(dòng)電流,對(duì)高亮度LED來(lái)說(shuō),一般取10~20mA;對(duì)普通亮度LED來(lái)說(shuō),一般取20~30mA,以抵消因顯示時(shí)間短引起的亮度下降)。為保證一定的亮度,實(shí)驗(yàn)表明:對(duì)于普通亮度LED來(lái)說(shuō),在驅(qū)動(dòng)電流取30mA的情況下,每位顯示時(shí)間不能小于1ms。在圖6-14中,使用P2口作為筆段碼鎖存器,7407作筆段碼驅(qū)動(dòng)器(由于在LED動(dòng)態(tài)顯示電路中,為獲得足夠亮度,限流電阻小,LED瞬態(tài)電流大,一般不能省去筆段碼驅(qū)動(dòng)器);P0口作位掃描碼鎖存器,用中功率PNP管作位驅(qū)動(dòng)器。顯然,筆段、位掃描均采用軟件譯碼方式。
顯示時(shí),依次將各位筆段碼送P2口,位掃描碼送P0口,即可分時(shí)顯示所有位。就微觀來(lái)說(shuō),任一時(shí)刻只有一只LED數(shù)碼管工作,利用人眼視覺(jué)惰性特征,只要刷新頻率不小于25Hz,宏觀上就看到所有位同時(shí)顯示,且沒(méi)有閃爍感。
從圖中可以看出,在軟件譯碼的動(dòng)態(tài)LED顯示電路中,無(wú)論位數(shù)多寡,都只需一套筆段碼鎖存器與驅(qū)動(dòng)器,一套位掃描碼鎖存器與驅(qū)動(dòng)器,硬件開(kāi)銷少。因此,在單片機(jī)應(yīng)用系統(tǒng)中得到了廣泛應(yīng)用。
P0口漏極開(kāi)路,低電平驅(qū)動(dòng)能力強(qiáng),可吸收3.2mA的灌電流,當(dāng)PNP三極管電流放大系數(shù)β大于100時(shí),集電極最大電流ICmax達(dá)320mA,足可以驅(qū)動(dòng)10只動(dòng)態(tài)工作電流為30mA的發(fā)光二極管。在本例中,基極限流電阻取2kΩ,基極電流IB在1.80~2.2mA之間。筆段限流電阻為100~120Ω,當(dāng)LED壓降取2V時(shí),LED工作電流IF約為20~24mA之間。該電路結(jié)構(gòu)簡(jiǎn)單,僅使用8只中功率PNP管、2塊7407同相驅(qū)動(dòng)器;驅(qū)動(dòng)程序編寫、調(diào)試容易。
在動(dòng)態(tài)掃描顯示方式中,一般使用定時(shí)中斷方式,本例使用定時(shí)器T2。由于顯示位較多,刷新頻率取50Hz,即一位顯示時(shí)間為(1/50
×
8)即2.5ms。因此定時(shí)器T2溢出時(shí)間為2.5ms,假設(shè)晶振頻率為11.0592MHz,則定時(shí)器T2初值為63232(F700H)。
用軟件方式完成筆段譯碼時(shí),一般采用雙顯示緩沖區(qū)結(jié)構(gòu):顯示數(shù)碼緩沖區(qū)和筆段代碼緩沖區(qū)。當(dāng)有數(shù)據(jù)進(jìn)入數(shù)碼緩沖區(qū)時(shí),執(zhí)行查表操作,把顯示數(shù)碼緩沖區(qū)內(nèi)數(shù)碼轉(zhuǎn)換為筆段碼并保存到筆段代碼緩沖區(qū)內(nèi);在顯示定時(shí)中斷服務(wù)程序中,只需將筆段碼緩沖區(qū)信息輸出到筆段代碼鎖存器中,因?yàn)椴粫?huì)經(jīng)常改寫顯示內(nèi)容。這樣能有效減少顯示驅(qū)動(dòng)程序的執(zhí)行時(shí)間,提高系統(tǒng)響應(yīng)速度。圖6-14顯示驅(qū)動(dòng)參考程序如下:
LEDBUF1 DATA 70H ;數(shù)碼顯示緩沖區(qū)(為調(diào)試方便,高位存放在低地址中)
LEDBUF2 DATA 78H ;筆段代碼緩沖區(qū)(采用雙緩沖區(qū)結(jié)構(gòu))
LEDSP DATA 6FH ;LED位掃描指針
NDHZ BIT 08H ;滅0標(biāo)志
ORG0000H
LJMPMAIN
ORG002BH
LJMPCTC2
ORG100H
MAIN:
MOVSP,#0DFH ;對(duì)于具有256字節(jié)內(nèi)部RAM芯片來(lái)說(shuō),將E0H-FFH,
;共計(jì)32字節(jié)作為堆棧區(qū)
;---復(fù)位后,將01H~0FF內(nèi)部RAM單元清0
MOVR0,#01H
LOOP1:
MOV@R0,#0
INCR0
CJNER0,#0,LOOP1
;----初始化定時(shí)器T2
MOVTH2,#0F7H
MOVTL2,#00H ;初值0F700送定時(shí)器T2
MOVRCAP2H,#0F7H
MOVRCAP2L,#00H ;初始化重裝初值
MOVT2CON,#00000100B ;初始化T2工作方式(自動(dòng)重裝初值、定時(shí))并啟動(dòng)了T2
;-----初始化中斷控制器
SETBET2 ;允許定時(shí)器T2中斷
SETBEA ;開(kāi)中斷
HERE:SJMPHERE ;虛擬主程序
;定時(shí)器T2作顯示定時(shí)器(溢出時(shí)間為2.5ms,自動(dòng)重裝初值方式)
PROCCTC2
CTC2:
PUSHPSW
PUSHACC ;保護(hù)現(xiàn)場(chǎng)
SETBRS1
SETBRS0 ;切換工作區(qū)
MOVA,LEDSP ;取掃描位指針
ANLA,#07H ;僅保留低3位
ADDA,#LEDBUF2 ;與筆段碼緩沖區(qū)首地址相加,以便獲得筆段碼地址
MOVR0,A ;對(duì)應(yīng)位筆段地址保存在R0中
MOVP2,@R0 ;筆段碼送P2口
;送掃描碼
MOVA,LEDSP
ANLA,#07H ;僅保留低3位
CJNEA,#0,NEXT1
MOVP0,#01111111B ;輸出位掃描碼(P0.7位亮)
SJMPEXIT
NEXT1:
CJNEA,#1,NEXT2
MOVP0,#10111111B ;輸出位掃描碼(P0.6位亮)
SJMPEXIT
NEXT2:
CJNEA,#2,NEXT3
MOVP0,#11011111B ;輸出位掃描碼(P0.5位亮)
SJMPEXIT
NEXT3:
CJNEA,#3,NEXT4
MOVP0,#11101111B ;輸出位掃描碼(P0.4位亮)
SJMPEXIT
NEXT4:
CJNEA,#4,NEXT5
MOVP0,#11110111B ;輸出位掃描碼(P0.3位亮)
SJMPEXIT
NEXT5:
CJNEA,#5,NEXT6
MOVP0,#11111011B ;輸出位掃描碼(P0.2位亮)
SJMPEXIT
NEXT6:
CJNEA,#6,NEXT7
MOVP0,#11111101B ;輸出位掃描碼(P0.1位亮)
SJMPEXIT
NEXT7:
MOVP0,#11111110B ;輸出位掃描碼(P0.0位亮)
EXIT:
INCLEDSP ;指針加1
CLRTF2
POPACC
POPPSW
RETI
END
DISPTAB: ;七段共陽(yáng)LED筆段碼(0-F)
DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH
;把顯示緩沖區(qū)內(nèi)待顯示數(shù)碼轉(zhuǎn)換為筆段碼,并存放在筆段碼緩沖區(qū)(檢查高位是否為0,若是
;要滅0)
PROCDISPC
DISPC:
MOVR0,#LEDBUF1 ;數(shù)碼緩沖區(qū)首地址送R0
MOVR1,#LEDBUF2 ;筆段碼緩沖區(qū)首地址送R1
MOVR2,#7 ;記錄轉(zhuǎn)換位
MOVDPTR,#DISPTAB ;把共陽(yáng)LED筆段表首地址裝入DPTR
SETBNDHZ ;滅0標(biāo)志置1
LOOP1:
MOVA,@R0 ;取顯示數(shù)碼
JNBNDHZ,NEXT1
;滅0標(biāo)志有效,說(shuō)明高位0,要檢查數(shù)碼是否為0
CJNEA,#0,NEXT2 ;本位數(shù)碼為0,不顯示
MOV@R1,#0FFH ;直接送FF碼
LJMPNEXT3
NEXT2:
CLRNDHZ ;高位為0,但本位不是0,要清滅0標(biāo)志
NEXT1:
MOVCA,@A+DPTR
MOV@R1,A ;筆段數(shù)碼送筆碼顯示緩沖區(qū)
NEXT3:
INCR0
INCR1
DJNZR2,LOOP1 ;循環(huán)直到十位
;轉(zhuǎn)換個(gè)位(個(gè)位不滅0)
MOVA,@R0 ;取顯示數(shù)碼
MOVCA,@A+DPTR
MOV@R1,A ;筆段數(shù)碼送筆碼顯示緩沖區(qū)
RET
END
當(dāng)CPUI/O引腳資源緊張時(shí),可采用D型觸發(fā)器、可編程8255并行I/O擴(kuò)展芯片構(gòu)成動(dòng)態(tài)LED顯示器的筆段碼鎖存器和位掃描碼鎖存器,如圖6-15所示。圖(a)使用兩片74HC273構(gòu)成筆段碼鎖存器和位掃描碼鎖存器,而圖(b)用8255的B口作為筆段碼鎖存器;A口作為位掃描碼鎖存器。由于8255A口負(fù)載能力有限,不能直接驅(qū)動(dòng)LED,為此圖中采用中功率PNP管(如8550)增大筆段驅(qū)動(dòng)電流。圖6-15按位掃描LED動(dòng)態(tài)顯示驅(qū)動(dòng)電路(1)(a)由74HC273構(gòu)成按位掃描動(dòng)態(tài)顯示驅(qū)動(dòng)電路圖6-15按位掃描LED動(dòng)態(tài)顯示驅(qū)動(dòng)電路(2)(b)由8255構(gòu)成的按位掃描動(dòng)態(tài)顯示驅(qū)動(dòng)電路圖6-16多位動(dòng)態(tài)顯示驅(qū)動(dòng)電路(1)(a)按筆段掃描動(dòng)態(tài)顯示驅(qū)動(dòng)電路圖6-16多位動(dòng)態(tài)顯示驅(qū)動(dòng)電路(2)(b)按位分組掃描動(dòng)態(tài)顯示驅(qū)動(dòng)電路
當(dāng)顯示位數(shù)較多,如12位以上時(shí),即使將顯示刷新率降到25Hz(實(shí)際上當(dāng)刷新頻率降到25Hz時(shí)已出現(xiàn)輕微的閃爍感)后,仍不能保證每位顯示時(shí)間大于1ms時(shí),可采用按字段掃描方式或按位分組掃描方式的動(dòng)態(tài)顯示驅(qū)動(dòng)電路。
在按字段掃描方式中,不論位數(shù)多少,對(duì)于八段數(shù)碼顯示器來(lái)說(shuō),筆段引腳只有8根,即使顯示刷新頻率為50Hz,按字段掃描時(shí),每一字段顯示時(shí)間依然為1/(50
×
8)
=
2.5ms。顯示時(shí)每次點(diǎn)亮一個(gè)字段(即掃描信息從字段引腳dp~a輸入),同一字段的顯示信息由位選擇電路控制,如圖6-16(a)所示,顯示時(shí)先將顯示數(shù)碼緩沖區(qū)內(nèi)數(shù)碼轉(zhuǎn)換為筆段碼,然后將筆段碼緩沖區(qū)內(nèi)信息轉(zhuǎn)化為位筆段顯示信息碼,如下圖所示。顯示時(shí)只將位筆段顯示信息送位選擇口。圖6-16(a)所示按字段掃描LED動(dòng)態(tài)顯示驅(qū)動(dòng)程序如下:
;P0口輸出筆段掃描碼;P2口輸出1~8位筆段顯示信息;P1高4位輸出9~12位筆段顯示
;信息
;刷新率定為50Hz,即同一筆段必須在1/50,即20ms內(nèi)點(diǎn)亮一次,每筆段顯示時(shí)間為
;20/8
=
2.5ms,即定時(shí)器溢出時(shí)間為2.5ms
;由于不會(huì)經(jīng)常改寫顯示緩沖區(qū)內(nèi)容,為提高系統(tǒng)反應(yīng)速度,設(shè)三緩沖區(qū):顯示數(shù)碼緩沖區(qū)、
;筆段碼緩沖區(qū)、位筆段顯示信息緩沖區(qū)
LEDBUF1 DATA 80H ;數(shù)碼顯示緩沖區(qū)(為調(diào)試方便,高位存放在低地址中)
LEDBUF2 DATA 90H ;筆段代碼緩沖區(qū)
LEDBUF3 DATA 0A0H ;位筆段顯示信息緩沖區(qū)(共占用16字節(jié))
LEDSP DATA 6FH ;LED字段指針
NDHZ BIT 08H ;滅0標(biāo)志
ORG0000H
LJMPMAIN
ORG002BH
LJMPCTC2
ORG100H
MAIN:
MOVSP,#0AFH
HERESJMPHERE;將顯示緩沖區(qū)內(nèi)數(shù)碼轉(zhuǎn)換為筆段碼(檢查高位是否為0,若是要滅0)
PROCDISPC
DISPC:
MOVR0,#LEDBUF1
MOVR1,#LEDBUF2
MOVR2,#11 ;先轉(zhuǎn)換高11位(個(gè)位不滅0)
MOVDPTR,#DISPTAB ;把共陰LED筆段碼表首地址裝入DPTR
SETBNDHZ ;滅0標(biāo)志置1
CLRET2 ;為避免改寫位筆段顯示信息緩沖區(qū)時(shí)出現(xiàn)混亂,禁止T2
;中斷
LOOP1:
MOVA,@R0 ;取顯示數(shù)碼
JNBNDHZ,NEXT1
;滅0標(biāo)志有效,說(shuō)明高為0,要檢查數(shù)碼是否為0
CJNEA,#0,NEXT2
;本位為0,不顯示
MOV@R1,#00H ;直接送00碼(共陰LED)
LJMPNEXT3
NEXT2:
CLRNDHZ ;清滅標(biāo)志
NEXT1:
MOVCA,@A+DPTR
MOV@R1,A ;筆段碼送筆段碼緩沖區(qū)
NEXT3:
INCR0
INCR1
DJNZR2,LOOP1 ;循環(huán)直到十位
;轉(zhuǎn)換個(gè)位
MOVA,@R0 ;取顯示數(shù)碼
MOVCA,@A+DPTR ;查筆段碼表
MOV@R1,A ;送筆段碼緩沖區(qū)
;把每一位的筆段碼轉(zhuǎn)換為位筆段顯示信息
MOVR1,#LEDBUF3
MOVR3,#8 ;記錄移動(dòng)筆段數(shù)
LOOP2:
MOVR0,#LEDBUF2
MOVR2,#0 ;記錄轉(zhuǎn)換位
CLRC ;清除Cy標(biāo)志
LOOP3:
MOVA,@R0
RRCA ;把筆段碼移到Cy
MOV@R0,A ;回寫
MOVA,@R1 ;取位字段顯示信息
RLCA ;把CY移到位顯示信息
MOV@R1,A ;回寫
INCR0
INCR2 ;指向下一位
CJNER2,#4,NEXT4
;將9~12位筆段顯示信息對(duì)調(diào),因?yàn)?~12位筆段顯示信息從P1.
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 培訓(xùn)機(jī)構(gòu)入股合同范本
- 海爾空調(diào)采購(gòu)合同范本
- 海綿鞋料售賣合同范本
- 社區(qū)廣告合作合同范本
- 商場(chǎng)店面裝修合同范本
- 宜州租房轉(zhuǎn)租合同范本
- 石材施工采購(gòu)合同范本
- 簡(jiǎn)單的付款合同范本
- 工程押金協(xié)議合同范本
- 外賣代理合同范本
- 通信技術(shù)未來(lái)發(fā)展趨勢(shì)
- 整形美容外科進(jìn)修匯報(bào)
- 立達(dá)RSBD并條機(jī)培訓(xùn)資料講課文檔
- 2025年幼兒園膳食工作計(jì)劃
- 心絞痛健康宣教課件
- 奧爾夫音樂(lè)教師培訓(xùn)課件
- 幼兒園防蚊蟲(chóng)健康活動(dòng)
- 渝23TJ02 丁基橡膠彈性體復(fù)合高分子自粘防水卷材建筑防水構(gòu)造 DJBT50-167
- JJG 667-2025液體容積式流量計(jì)檢定規(guī)程
- 介入術(shù)后迷走神經(jīng)反射護(hù)理講課件
- 2025至2030中國(guó)核桃油行業(yè)市場(chǎng)發(fā)展分析及投資前景與投資策略報(bào)告
評(píng)論
0/150
提交評(píng)論