摘 要
LED(Light Emitting Diodes)顯示技術(shù)指將光電、計(jì)算機(jī)以及控制等相關(guān)內(nèi)容綜合于一體的新技術(shù)。它與傳統(tǒng)的廣告宣傳緊密結(jié)合成一種新的媒體宣傳工具,廣泛應(yīng)用于展覽中心、金融市場(chǎng)、體育場(chǎng)館、機(jī)場(chǎng)、碼頭、車站等公共場(chǎng)所的信息顯示和廣告宣傳。LED顯示系統(tǒng)主要由顯示模塊、控制器以及完成文字錄入和顯示模式選擇的計(jì)算機(jī)三個(gè)部分組成。該系統(tǒng)既可顯示中文、英文,也可顯示用戶指定的圖形符號(hào)。
本文闡明了用單片機(jī)控制雙色顯示屏的方法,對(duì)LED顯示模塊單元如何進(jìn)行行列信號(hào)控制及信號(hào)傳輸中的驅(qū)動(dòng)問(wèn)題進(jìn)行了研究。討論了單片機(jī)控制系統(tǒng)中關(guān)鍵的數(shù)據(jù)處理以及發(fā)送等問(wèn)題。設(shè)計(jì)以16×64點(diǎn)陣屏為例介紹了整套LED點(diǎn)陣漢字顯示系統(tǒng)的實(shí)現(xiàn)方法和原理,用KEILC51對(duì)單片機(jī)進(jìn)行編程,實(shí)現(xiàn)了單片機(jī)與微機(jī)的通訊。并使LED屏的顯示實(shí)現(xiàn)了固定和平移的變換功能。
關(guān)鍵詞:發(fā)光二極管;顯示屏;單片機(jī);掃描
1 緒論LED(Light Emitting Diode,發(fā)光二極管)顯示屏是利用發(fā)光二極管點(diǎn)陣模塊或像素單元組成的平面式顯示屏幕。由于它具有色彩鮮艷、亮度高、壽命長(zhǎng)、工作穩(wěn)定可靠等優(yōu)點(diǎn),在許多行業(yè)都得到了廣泛的應(yīng)用,如在車站、碼頭、商場(chǎng)、銀行等公共場(chǎng)所將LED顯示屏用于信息發(fā)布。顯示屏的優(yōu)點(diǎn)還在于播放的內(nèi)容信息量大,實(shí)時(shí)性強(qiáng)等。由8×8 LED點(diǎn)陣拼成的顯示屏有同步和異步之分,同步控制顯示屏由計(jì)算機(jī)作為主控器,異步控制顯示屏的主控器可采用單片機(jī)。單片機(jī)控制的雙色顯示屏由于結(jié)構(gòu)簡(jiǎn)單,由于成本低廉,深受人們的喜愛(ài),本文將對(duì)此進(jìn)行討論。
本設(shè)計(jì)為雙色LED顯示屏,因?yàn)閮煞N顏色的顯示控制原理一樣,所以文中不作特別說(shuō)明。顯示單色時(shí),只接通一種顏色。在顯示雙色時(shí),將兩種顏色同時(shí)點(diǎn)亮,并送出相同的控制數(shù)據(jù)就能實(shí)現(xiàn)。本文重點(diǎn)對(duì)顯示屏的控制原理作研究設(shè)計(jì),而不過(guò)多的強(qiáng)調(diào)色彩變換。
1.1 LED概述LED顯示屏是由單顆的LED燈組成的,LED的性能特性是影響顯示屏顯示效果的一個(gè)重要因素,所以在這里簡(jiǎn)單介紹一下LED的相關(guān)知識(shí)。
1.1.1 LED的結(jié)構(gòu)及發(fā)光原理LED是一種能夠?qū)㈦娔苻D(zhuǎn)化為可見(jiàn)光的半導(dǎo)體器件,它不是采用白熾燈鎢絲發(fā)光與節(jié)能燈三基色粉發(fā)光的原理,而采用電場(chǎng)發(fā)光。它的基本結(jié)構(gòu)是一塊電致發(fā)光的半導(dǎo)體材料,置于一個(gè)有引線的架子上,然后四周用環(huán)氧樹(shù)脂密封,起到保護(hù)內(nèi)部芯線的作用,所以LED的抗震性能好。50年前人們已經(jīng)了解半導(dǎo)體材料可產(chǎn)生光線的基本知識(shí),第一個(gè)商用二極管產(chǎn)生于1960年。下面是LED 的簡(jiǎn)易封裝外形結(jié)構(gòu)圖。
圖1-1 LED示意圖
發(fā)光二極管的核心部分是由P型半導(dǎo)體和N型半導(dǎo)體組成的晶片,在P型半導(dǎo)體和N型半導(dǎo)體之間有一個(gè)過(guò)渡層,稱為P-N結(jié)。在某些半導(dǎo)體材料的PN結(jié)中,注入的少數(shù)載流子與多數(shù)載流子復(fù)合時(shí)會(huì)把多余的能量以光的形式釋放出來(lái),從而把電能直接轉(zhuǎn)換為光能。PN結(jié)加反向電壓,少數(shù)載流子難以注入,故不發(fā)光。這種利用注入式電致發(fā)光原理制作的二極管叫發(fā)光二極管,通稱LED。當(dāng)它處于正向工作狀態(tài)時(shí)(即兩端加上正向電壓),電流從LED陽(yáng)極流向陰極時(shí),半導(dǎo)體晶體就發(fā)出從紫外到紅外不同顏色的光線,光的強(qiáng)弱與電流有關(guān)。
1.1.2 LED光源的特點(diǎn)LED光源的特點(diǎn)非常明顯,壽命長(zhǎng)、光效高、無(wú)輻射與低功耗。LED的光譜幾乎全部集中于可見(jiàn)光頻段,其發(fā)光效率可達(dá)80-90%。將LED與普通白熾燈、螺旋節(jié)能燈及T5三基色熒光燈進(jìn)行對(duì)比,結(jié)果顯示:普通白熾燈的光效為12lm/W,壽命小于2000小時(shí),螺旋節(jié)能燈的光效為60lm/W,壽命小于8000小時(shí),T5熒光燈則為96lm/W,壽命大約為10000小時(shí),而直徑為5毫米的白光LED為20~28lm/W,壽命可大于100000小時(shí)。有人還預(yù)測(cè),未來(lái)的LED壽命上限將無(wú)窮大。具體表現(xiàn)在以下幾方面:
(1)電壓:LED使用低壓電源,供電電壓在6-24V之間,根據(jù)產(chǎn)品不同而異,所以它是一個(gè)比使用高壓電源更安全的電源,特別適用于公共場(chǎng)所。
(2)效能:消耗能量較同光效的白熾燈減少80% 。
(3)適用性:很小,每個(gè)單元LED小片是3-5mm的正方形,所以可以制備成各種形狀的器件,并且適合于易變的環(huán)境。
(4)穩(wěn)定性:10萬(wàn)小時(shí),光衰為初始的50% 。
(5)響應(yīng)時(shí)間:其白熾燈的響應(yīng)時(shí)間為毫秒級(jí),LED燈的響應(yīng)時(shí)間為納秒級(jí)。
(6)對(duì)環(huán)境污染:無(wú)有害金屬汞。
(7)顏色:改變電流可以變色,發(fā)光二極管方便地通過(guò)化學(xué)修飾方法,調(diào)整材料的能帶結(jié)構(gòu)和帶隙,實(shí)現(xiàn)紅、黃、綠、蘭、橙多色發(fā)光。如小電流時(shí)為紅色的LED,隨著電流的增加,可以依次變?yōu)槌壬S色,最后為綠色。
(8)價(jià)格:LED的價(jià)格比較昂貴,較之于白熾燈,幾只LED的價(jià)格就可以與一只白熾燈的價(jià)格相當(dāng),而通常每組信號(hào)燈需由上300-500只LED構(gòu)成。
1.2 LED顯示屏的現(xiàn)狀隨著社會(huì)文化的不斷發(fā)展,人們的消費(fèi)標(biāo)準(zhǔn)不斷改變,戶外燈箱廣告更是扮演著越來(lái)越重要的宣傳角色,不論是汽車站,火車站,股市交易市場(chǎng),還是學(xué)校都離不開(kāi)它,然而傳統(tǒng)的霓虹燈廣告牌不論是在顯示效果、耗電量還是可修改性上都無(wú)法滿足當(dāng)前社會(huì)的需求,傳統(tǒng)的霓虹燈廣告亟待改進(jìn)。
由于單片機(jī)技術(shù)的不斷發(fā)展和高亮度LED發(fā)光管的出現(xiàn)使得大屏幕高亮度LED電子廣告屏成為可能,與傳統(tǒng)的霓虹燈廣告在顯示效果以及可修改性上都有著無(wú)法比擬的優(yōu)勢(shì),而且單片機(jī)的日益平民化以及LED技術(shù)的不斷創(chuàng)新,使得高亮度高清晰的LED點(diǎn)陣廣告牌與傳統(tǒng)霓虹燈廣告牌的成本日益接近。另外,SMT技術(shù)的飛速發(fā)展,開(kāi)關(guān)電源的大規(guī)模使用,使其無(wú)論在體積上還是在可靠性上都比傳統(tǒng)的霓虹燈廣告有明顯的優(yōu)勢(shì),為其在特殊領(lǐng)域的應(yīng)用奠定了基礎(chǔ)。
這種新興的大屏幕顯示技術(shù)成為眾人目光的焦點(diǎn)。與傳統(tǒng)的顯示設(shè)備相比,首先,LED 顯示屏色彩豐富,3基色的發(fā)光管的可以顯示全彩色,顯示顯示方式變化多樣(文字、圖形、動(dòng)畫(huà)、視頻、電視畫(huà)面等)、亮度高,是集光電子技術(shù)、微電子技術(shù)、計(jì)算機(jī)技術(shù)、信息處理技術(shù)于一體的高技術(shù)產(chǎn)品,可用來(lái)顯示文字、計(jì)算機(jī)屏幕同步的圖形。其次,LED 顯示屏的象素采用LED發(fā)光二極管,將多個(gè)發(fā)光二極管以序列的形式構(gòu)成LED顯示陣列,這種顯示屏具有耗電省、成本低、亮度清晰度高、壽命長(zhǎng)等優(yōu)點(diǎn),而且 LED 顯示屏以其受空間限制較小,并可以根據(jù)用戶要求設(shè)計(jì)屏的大小,具有全彩色效果,視角大,是信息傳播設(shè)施劃時(shí)代的產(chǎn)品。再次,LED 顯示屏應(yīng)用廣泛,金融證券、銀行利率、商業(yè)廣告、文化娛樂(lè)等方面,顯示效果清晰穩(wěn)定,越來(lái)越多的地方開(kāi)始使用LED電子顯示屏,有巨大的社會(huì)效益和經(jīng)濟(jì)效益。它以其超大畫(huà)面、超寬視覺(jué)、靈活多變的顯示方式等獨(dú)居一格的優(yōu)勢(shì),是目前國(guó)際上使用廣泛的顯示系統(tǒng)。
1.3 本設(shè)計(jì)的應(yīng)用及意義本文所設(shè)計(jì)的LED顯示屏是小規(guī)模的點(diǎn)陣顯示屏,每次可靜態(tài)顯示四個(gè)國(guó)標(biāo)漢字,可動(dòng)態(tài)顯示多個(gè)文字,可顯示256像素內(nèi)的簡(jiǎn)單圖形。在實(shí)際中可用于廣告牌顯示,也可作為公共場(chǎng)合的提醒顯示等。
通過(guò)本設(shè)計(jì),主要了解顯示控制模塊的各個(gè)組成部分和驅(qū)動(dòng)電路的原理與設(shè)計(jì),以及驅(qū)動(dòng)芯片的控制和軟件編程。大的顯示屏都是由許多的小模塊組裝而成,如果弄明白了單個(gè)模塊的顯示控制原理,這將對(duì)設(shè)計(jì)組裝大的顯示屏起到積極的指導(dǎo)意義。
1.4 設(shè)計(jì)主要工作(1)介紹顯示系統(tǒng)的各個(gè)組成部分,各個(gè)元器件的管腳定義和工作原理。
(2)介紹點(diǎn)陣的顯示控制原理。
(3)介紹硬件原理圖的設(shè)計(jì)。
(4)給出顯示系統(tǒng)的軟件設(shè)計(jì)。
(5)通過(guò)設(shè)計(jì),在顯示屏上顯示像素在16×64范圍內(nèi)的圖文。實(shí)現(xiàn)文字的分幕靜態(tài)顯示和移動(dòng)顯示。
2 系統(tǒng)總體方案本章圍繞系統(tǒng)的總體設(shè)計(jì),介紹系統(tǒng)組成框圖、主控芯片單片機(jī)的內(nèi)部硬件資源和接口設(shè)置,以及整個(gè)顯示控制系統(tǒng)所用到的其它元器件的介紹。
2.1 系統(tǒng)總體規(guī)劃本設(shè)計(jì)的LED點(diǎn)陣顯示系統(tǒng)主要實(shí)現(xiàn)的功能是中英文漢字靜態(tài)和動(dòng)態(tài)顯示以及一些簡(jiǎn)單的圖形顯示。作為下位機(jī)的單片機(jī)系統(tǒng)通過(guò)RS-232串行口接收有上位機(jī)即PC機(jī)傳入的顯示信息和控制信號(hào)。該數(shù)據(jù)經(jīng)過(guò)處理后,寫(xiě)入顯示用的器件的RAM中進(jìn)行儲(chǔ)存。在顯示系統(tǒng)正常運(yùn)行后,系統(tǒng)將RAM中的顯示內(nèi)容和控制信息送入LED顯示屏體進(jìn)行顯示,通過(guò)各個(gè)發(fā)光二極管的亮滅來(lái)實(shí)現(xiàn)完整信息顯示。整個(gè)系統(tǒng)由硬件和軟件兩大部分組成。硬件電路大致上可以分成單片機(jī)系統(tǒng)及外圍電路、列驅(qū)動(dòng)電路和行驅(qū)動(dòng)電路以及LED點(diǎn)陣陣列三大部分。
整個(gè)系統(tǒng)的基本框圖如下:
圖2-1 系統(tǒng)框圖
(1)PC機(jī)部分
PC機(jī)部分是在一個(gè)軟件平臺(tái)上(本設(shè)計(jì)的軟件平臺(tái)是KEILC51),實(shí)現(xiàn)軟件的編譯,生成單片機(jī)的可執(zhí)行文件。同時(shí)完成通訊端口的軟件設(shè)置,使程序能正確的寫(xiě)入單片機(jī)。PC部分還要完成對(duì)文字字模的提取。
(2)單片機(jī)部分
單片機(jī)部分的工作流程入下:51單片機(jī)利用自身所具有的串行通信口,接收PC機(jī)傳送下來(lái)的串行數(shù)據(jù),然后將接收到的數(shù)據(jù)通過(guò)并行口輸出,送到各驅(qū)動(dòng)芯片。實(shí)現(xiàn)對(duì)各驅(qū)動(dòng)芯片的控制和數(shù)據(jù)輸入。本設(shè)計(jì)使用的單片機(jī)為ATMEL公司生產(chǎn)的AT89C51。
(3)驅(qū)動(dòng)電路設(shè)計(jì)
驅(qū)動(dòng)部分分為行驅(qū)動(dòng)和列驅(qū)動(dòng)。行驅(qū)動(dòng)提供顯示模塊的行掃描信號(hào),列驅(qū)動(dòng)提供顯示數(shù)據(jù)。
常用的顯示驅(qū)動(dòng)方式有三種:
(1)串行控制驅(qū)動(dòng),這種方式的好處是單元內(nèi)的線路連接簡(jiǎn)單,給印刷電路板的設(shè)計(jì)帶來(lái)方便,減少了布線的密度,方便以后的制作與調(diào)試,而且相對(duì)提高了每個(gè)單元的可靠性。
(2)并行控制驅(qū)動(dòng),將顯示數(shù)據(jù)通過(guò)并行(一般為8位)方式送入驅(qū)動(dòng)電路,這樣的好處是:相對(duì)于串行控制而言,數(shù)據(jù)的刷新速度快,在處理同等數(shù)量的數(shù)據(jù)時(shí),對(duì)處理速度要求可以大大降低,從而提高了系統(tǒng)的穩(wěn)定性,但也正因?yàn)椤安⑿小笔箚卧獌?nèi)的數(shù)據(jù)線路的連接更加復(fù)雜,布線后的排錯(cuò)難度大大增加。
(3)采用專用集成電路(ASIC)直接驅(qū)動(dòng),由于這種專用集成電路是集行控制、列控制和外圍驅(qū)動(dòng)于一體,使系統(tǒng)的穩(wěn)定性更為可靠,特別適合戶外的大型或者超大型顯示屏。因?yàn)檫@種類型的顯示屏對(duì)圖像顯示要求高,不僅要保證圖像的一致性,而且要保證圖像的穩(wěn)定、高亮。
本次設(shè)計(jì)的顯示屏僅為16行×64列,更適合采用串行控制這種方式,這樣做既省去了并行控制驅(qū)動(dòng)在硬件制作過(guò)程中復(fù)雜的布線,又因?yàn)闆](méi)有采用專用集成電路在一定程度上降低了整個(gè)系統(tǒng)的成本。
本設(shè)計(jì)的行驅(qū)動(dòng)部分用兩塊74HC138芯片的級(jí)聯(lián)來(lái)控制,列驅(qū)動(dòng)用16片74HC595芯片來(lái)控制。行驅(qū)和列驅(qū)的控制信號(hào)都由單片機(jī)的并行口提供。
(4)顯示模塊
顯示模塊是顯示圖文的載體。它由16個(gè)8×8的LED矩陣模塊組成,分為上下兩部分,每部分的行控制信號(hào)分別相連,同一列兩模塊的列線相連。
2.2 單片機(jī)通訊設(shè)置及串行口介紹單片機(jī)的通訊方式有兩種:并行和串行。并行通訊是指數(shù)據(jù)的N個(gè)位同時(shí)發(fā)送和接收。串行通訊是指數(shù)據(jù)一位一位的按順序發(fā)送和接收。本設(shè)計(jì)是利用單片機(jī)的串行通訊來(lái)實(shí)現(xiàn)的,其串行口是一個(gè)可編程的全雙工串行通訊接口,它可以作為UART(通用異步收發(fā)器),也可作為同步移位寄存器。在使用時(shí)需要對(duì)串行口進(jìn)行一些設(shè)置。
2.2.1 內(nèi)部寄存器的設(shè)置單片機(jī)通過(guò)引腳RXD串行數(shù)據(jù)接收端(P3.0)和引腳TXD串行數(shù)據(jù)發(fā)送端(P3.1)與外界通信的。在串行口內(nèi)部有兩個(gè)物理上獨(dú)立的接收、發(fā)送緩沖器SBUF,它們占用同一地址99 H,可同時(shí)發(fā)送、接收數(shù)據(jù)。發(fā)送緩沖器只能寫(xiě)入,不能讀出;接收緩沖器只能讀出,不能寫(xiě)入。串行發(fā)送與接收的速率與移位時(shí)鐘同步。
單片機(jī)串行口的編程是對(duì)串行控制寄存器SCON的控制。SCON是一個(gè)特殊功能寄存器,用以設(shè)定串行口的工作方式、接收/發(fā)送控制以及設(shè)置狀態(tài)標(biāo)志。其格式為:
表2-1 SCON各位定義
7
6
5
4
3
2
1
0
SM0
SM1
SM2
REN
TB8
RB8
TI
RI
SM1、SM0:串行口工作方式選擇位,其定義如下表所示。
表2-2 串行口工作方式
SM0/SM1
工作方式
功能
波特率
00
方式0
8位移位寄存器
Fosc/12
01
方式1
10位UART
可選
10
方式2
11位UART
Fosc/64或Fosc/32
11
方式3
11位UART
可選
SM2:多機(jī)通信控制位,主要用于方式2和方式3。當(dāng)接收機(jī)的SM2=1時(shí)可以利用收到的RB8來(lái)控制是否激活RI(RB8=0時(shí)不激活RI,收到的信息丟棄;RB8=1時(shí)收到的數(shù)據(jù)進(jìn)入SBUF,并激活RI,進(jìn)而在中斷服務(wù)中將數(shù)據(jù)從SBUF讀走)。當(dāng)SM2=0時(shí),不論收到的RB8為0和1,均可以使收到的數(shù)據(jù)進(jìn)入SBUF,并激活RI(即此時(shí)RB8不具有控制RI激活的功能)。通過(guò)控制SM2,可以實(shí)現(xiàn)多機(jī)通信。
在方式0時(shí),SM2必須是0。在方式1時(shí),若SM2=1,則只有接收到有效停止位時(shí),RI才置1。
REN:接收允許控制位。若用軟件置REN=1,則啟動(dòng)串行口接收數(shù)據(jù);若用軟件置REN=0,則禁止接收。
TB8:在方式2和方式3中,是發(fā)送數(shù)據(jù)的第九位,可以用軟件規(guī)定其作用??梢宰鳛閿?shù)據(jù)的奇偶校驗(yàn)位,或在多機(jī)通信中,作為地址幀/數(shù)據(jù)幀的標(biāo)志位。在方式0和方式1中,該位未使用。
RB8:在方式2和方式3中,是接收數(shù)據(jù)的第九位,作為奇偶校驗(yàn)位或地址幀/數(shù)據(jù)幀的標(biāo)志位。在方式1時(shí),若SM2=0,則RB8是接收到的停止位。在方式0中不使用RB8。
TI:發(fā)送中斷標(biāo)志位。在方式0時(shí),當(dāng)串行發(fā)送第8位數(shù)據(jù)結(jié)束時(shí),或在其他方式,串行發(fā)送停止位的開(kāi)始時(shí),由內(nèi)部硬件使TI置1,向CPU發(fā)中斷申請(qǐng)。在中斷服務(wù)程序中,必須用軟件將其清0。以此取消中斷申請(qǐng)。
RI:接收中斷標(biāo)志位。在方式0時(shí),當(dāng)串行發(fā)送第8位數(shù)據(jù)結(jié)束時(shí),或在其他方式,串行發(fā)送停止位的開(kāi)始時(shí),由內(nèi)部硬件使TI置1,向CPU發(fā)中斷申請(qǐng)。在中斷服務(wù)程序中,也必須用軟件將其清0,以此取消中斷申請(qǐng)。
2.2.2 單片機(jī)的串行口工作方式0介紹單片機(jī)串行口共有四種工作方式,在本設(shè)計(jì)中,用到的是方式0。下面對(duì)單片機(jī)的工作方式0作簡(jiǎn)要介紹。
方式0時(shí),串行口為8位同步移位寄存器輸入輸出方式,多用于外接移位寄存器以擴(kuò)展I/O口,波特率固定為fosc/12,其中fosc為時(shí)鐘頻率。在方式0中,串行端口作為輸出時(shí),只要向串行緩沖器SBUF寫(xiě)入一個(gè)字節(jié)數(shù)據(jù)后,串行端口就把此8位數(shù)據(jù)以固定的波特率,從RXD引腳逐位輸出,低位在前,高位在后。此時(shí),TXD輸出頻率為fosc/12的同步移位脈沖。數(shù)據(jù)發(fā)送前,中斷標(biāo)志TI還必須置0,8位數(shù)據(jù)發(fā)送完后,TI自動(dòng)置1。如果還要發(fā)送,必須用軟件件將TI清0。當(dāng)串口端以方式0作為輸入時(shí),RXD為數(shù)據(jù)輸入端,TXD仍為同步信號(hào)輸出端,輸出頻率為fosc/12的同步移位脈沖,使外部數(shù)據(jù)逐位移入RXD。當(dāng)接收到8位數(shù)據(jù)后,中斷標(biāo)志RI置1。如果還要接收,必須用軟件將RI清0。在本設(shè)計(jì)中,串行端口作為數(shù)據(jù)輸出使用。
方式0輸出:
方式0輸入:
圖2-2 方式0輸入輸出
本設(shè)計(jì)中,串口工作在方式0下,由RXD 輸出列顯示時(shí)需要的數(shù)據(jù),由TXD 輸出數(shù)據(jù)傳輸?shù)耐揭莆粫r(shí)鐘脈沖。每8個(gè)移位時(shí)鐘脈沖過(guò)后,RXD 也傳輸完一個(gè)8位數(shù)據(jù),然后TI 自動(dòng)置1,再通過(guò)軟件將TI清0,繼續(xù)傳輸下一個(gè)8位數(shù)據(jù)。
2.3 主要元器件介紹本設(shè)計(jì)主要用到的元件有單片機(jī)AT89C51、8×8 LED點(diǎn)陣顯示模塊、74HC595、74HC138和S8550。
(1)單片機(jī)AT89C51
LED點(diǎn)陣顯示系統(tǒng)的控制核心為單片機(jī),掃描顯示﹑數(shù)據(jù)傳送以及各個(gè)驅(qū)動(dòng)信號(hào)都由單片機(jī)產(chǎn)生并由其I/O口輸出。本設(shè)計(jì)采用的控制芯片為單片機(jī)AT89C51,它是美國(guó)ATMEL公司生產(chǎn)的低電壓,高性能CMOS 8位機(jī),片內(nèi)含有4KB的可反復(fù)擦寫(xiě)的只讀程序存儲(chǔ)器(PEROM)和128B的隨機(jī)存取數(shù)據(jù)存儲(chǔ)器(RAM)。芯片內(nèi)部集成了通用的8位中央處理器(CPU)和FLASH存儲(chǔ)單元,全面兼容標(biāo)準(zhǔn)的MCS-51指令系統(tǒng)。
AT89C51是一個(gè)低功耗高性能單片機(jī),共有40個(gè)引腳,其中包括32個(gè)外部雙向輸入/輸出口,同時(shí)內(nèi)含兩個(gè)外部中斷口,兩個(gè)16位可編程定時(shí)/計(jì)數(shù)器,兩個(gè)全雙工的串行通信口。AT89C51可以按照常規(guī)方法進(jìn)行編程,也可以在線編程。由于其將通用的微處理器和Flash內(nèi)存結(jié)合在一起,故可反復(fù)擦寫(xiě)。
圖2-3為AT89C51的引腳圖。
圖2-3 AT89C51的引腳定義
(2)8×8 LED點(diǎn)陣顯示模塊
由于LED 點(diǎn)陣和LED數(shù)碼管一樣有共陰和共陽(yáng)之分,在設(shè)計(jì)驅(qū)動(dòng)與掃描電路時(shí)就有所不同。例如,在驅(qū)動(dòng)共陽(yáng)級(jí)點(diǎn)陣時(shí),掃描信號(hào)應(yīng)為高電平有效;在驅(qū)動(dòng)共陰級(jí)點(diǎn)陣時(shí),掃描信號(hào)就應(yīng)該為低電平有效。
在本設(shè)計(jì)中使用的LED顯示模塊以列為共陰極、行為共陽(yáng)極。由于本設(shè)計(jì)采用的是行掃描,所以行掃描信號(hào)應(yīng)為高電平有效。該模塊為8×8紅橙雙色點(diǎn)陣模塊,它在每一個(gè)顯示點(diǎn)都封裝了紅橙兩種發(fā)光二極管。模塊中每一行的8個(gè)紅色LED和該行的8個(gè)橙色LED的陽(yáng)極連接在一起,以方便作為行驅(qū)動(dòng)線。同行的不同色的LED的陰極是分開(kāi)的,方便作為列驅(qū)動(dòng)。在同一模塊中不同行的相同列中,同一顏色的LED的陰極是連接在一起的,以便于在掃描驅(qū)動(dòng)方式下工作。這樣,通過(guò)行和列的選取,就能實(shí)現(xiàn)模塊中任意LED的點(diǎn)亮顯示。
LED模塊采用雙列直插式封裝,其示意圖如2-4。
圖2-4 LED模塊
上列管腳依次為低四位共陽(yáng)(Common)引腳和8個(gè)紅色(Red)陰極管腳,下列為高四位共陽(yáng)引腳和8個(gè)橙色(Orange)陰極管腳。C后的編號(hào)代表第幾行,如:C1代表第一行。R和O后的編號(hào)代表第幾列,如:R1代表紅色顯示第一列,O1代表橙色顯示第一列。
(3)74HC595
74HC595具有8位串行輸入并行輸出的移位寄存器和一個(gè)8位輸出鎖存器。 其外形封裝和引腳圖如下:
圖2-5 74HC595外形
在595的輸入側(cè)有8個(gè)串行移位寄存器,每個(gè)移位寄存器的輸出都將連接一個(gè)輸出鎖存器。引腳SER是串行數(shù)據(jù)的輸入短。引腳SCK是移位寄存器的移位時(shí)鐘脈沖,在時(shí)鐘上升沿時(shí)發(fā)生移位,并將SER的下一個(gè)數(shù)據(jù)打入最低位。移位后的各位信號(hào)出現(xiàn)在各移位寄存器的輸出端,即輸出鎖存器的輸入端。RCK是輸出鎖存器的打入信號(hào),在其上升沿時(shí),將移位寄存器的輸出打入到輸出鎖存器。引腳
是輸出三態(tài)門(mén)的開(kāi)放信號(hào),只有當(dāng)其為低時(shí)鎖存器的輸出才有效,否則為高阻態(tài)。
是移位寄存器的清零輸入信號(hào),當(dāng)它為低電平時(shí),移位寄存器的輸出全部為零。因?yàn)樾酒腞CK和RSCK是兩個(gè)獨(dú)立的信號(hào),所以能夠做到輸入串行移位與輸出鎖存互不干擾。
芯片的輸出端為QA-QH,QH1是串行數(shù)據(jù)輸出端,在595的級(jí)聯(lián)中使用,作為向下一級(jí)的級(jí)聯(lián)輸出。
(4)74HC138
74HC138是3端輸入8端輸出的譯碼器。3輸入端口為二進(jìn)制輸入,共有8種輸出結(jié)果。輸出端輸出低電平有效,當(dāng)S1為高電平,
與
為低電平時(shí),譯碼器才處于工作狀態(tài)。否則譯碼器被禁止,所有的輸出被封鎖在高電平。74LS138譯碼器的引腳圖,邏輯圖及真值表如下圖2-6、圖2-7所示:
圖2-6 74LS138的外部引腳圖以及內(nèi)部原理圖
輸入
輸出
S1
A2 A1 A0
0
X
1
1
1
1
1
1
1
1
X
1
0
0
0
0
0
0
0
0
X X X
X X X
0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
0 1 1 1 1 1 1 1
1 0 1 1 1 1 1 1
1 1 0 1 1 1 1 1
1 1 1 0 1 1 1 1
1 1 1 1 0 1 1 1
1 1 1 1 1 0 1 1
1 1 1 1 1 1 0 1
1 1 1 1 1 1 1 0
圖2-7 3線-8線譯碼器74HC138的真值表
由上看以看出,只要在信號(hào)輸入端A,B,C輸入特定組合序列,就可以在輸出端輸出低電壓,我們正是利用這個(gè)信號(hào)來(lái)控制行電路掃描的。
(5)S8550
S8550是中頻放大功率三極管, 三極管為PNP型,管腳排列順序?yàn)椋篍、B、C。 即從下圖中的第一腳起分別為:發(fā)射極、基極和集電極。其封裝外形和管腳排列如下圖:
圖2-8 S8550
3 硬件設(shè)計(jì)與實(shí)現(xiàn) 3.1 顯示控制原理本設(shè)計(jì)由單片機(jī)控制74HC138和74HC595的輸出,由138輸出行選通信號(hào),74HC595輸出列選通信號(hào)。通過(guò)74HC138進(jìn)行行掃描和595輸出的不同數(shù)據(jù)來(lái)點(diǎn)亮LED模塊中的LED燈,從而實(shí)現(xiàn)既定的顯示目標(biāo)。
從理論上說(shuō),不論顯示圖形還是文字,只要控制與組成這些圖形或文字的各個(gè)點(diǎn)所在位置相對(duì)應(yīng)的LED器件發(fā)光,就可以得到我們想要的顯示結(jié)果,這種同時(shí)控制各個(gè)發(fā)光點(diǎn)亮滅的方法稱為靜態(tài)驅(qū)動(dòng)顯示方式。16×64的點(diǎn)陣共有1024個(gè)發(fā)光二極管,顯然單片機(jī)沒(méi)有這么多端口,如果我們采用鎖存器來(lái)擴(kuò)展端口,按8位的鎖存器來(lái)計(jì)算,16×64的點(diǎn)陣需要128個(gè)鎖存器。這個(gè)數(shù)字很龐大,而且成本很昂貴,我們僅僅是16×64的4個(gè)漢字點(diǎn)陣,在實(shí)際應(yīng)用中的顯示屏往往要大得多,這樣在鎖存器上花的成本將是一個(gè)很龐大的數(shù)字。因此在實(shí)際應(yīng)用中的顯示屏幾乎都不采用這種設(shè)計(jì),而采用另一種稱為動(dòng)態(tài)掃描的顯示方法。
動(dòng)態(tài)掃描的意思簡(jiǎn)單地說(shuō)就是逐行輪流點(diǎn)亮,這樣掃描驅(qū)動(dòng)電路就可以實(shí)現(xiàn)多行(比如8行)的同名列共用一套列驅(qū)動(dòng)器。具體就16×64的點(diǎn)陣來(lái)說(shuō),把所有同一列的發(fā)光管的陰極連在一起,再去驅(qū)動(dòng)這一列LED (共陽(yáng)接法),每一列先送出對(duì)應(yīng)第1行發(fā)光管對(duì)應(yīng)的數(shù)據(jù)并鎖存,再選通第1行使其點(diǎn)亮一定的時(shí)間,然后熄滅;再送出第2行的數(shù)據(jù)并鎖存,再選通第2行使其點(diǎn)亮相同的時(shí)間,然后熄滅……第16行之后,又重新點(diǎn)亮第1行,反復(fù)輪回。當(dāng)這樣輪回的速度足夠快(每秒24次以上),由于人眼的視覺(jué)暫留現(xiàn)象,就能看到顯示屏上穩(wěn)定的圖形了。
采用掃描方式進(jìn)行顯示時(shí),每行有一個(gè)行驅(qū)動(dòng)器,各行的同名列共用一個(gè)列驅(qū)動(dòng)器。顯示數(shù)據(jù)通常存儲(chǔ)在單片機(jī)的程序存儲(chǔ)器中,按8位一個(gè)字節(jié)的形式順序排放。顯示時(shí)要把一行中各列的數(shù)據(jù)都傳送到相應(yīng)的列驅(qū)動(dòng)器上去,這就存在一個(gè)顯示數(shù)據(jù)傳輸?shù)膯?wèn)題。從控制電路到列驅(qū)動(dòng)器的數(shù)據(jù)傳輸可以采用并行方式或串行方式。
采用并行方式時(shí),16×64的LED點(diǎn)陣有8列8×8的點(diǎn)陣,需要8×8=64個(gè)列數(shù)據(jù)輸入口,而一個(gè)AT89C51只有32個(gè)I/O接口,還要同時(shí)驅(qū)動(dòng)行數(shù)據(jù),根本不夠用;并且從控制電路到列驅(qū)動(dòng)器的線路數(shù)量大,相應(yīng)的硬件數(shù)目多,由此可以得出,當(dāng)列數(shù)很多時(shí),并行傳輸?shù)姆桨甘遣豢扇〉摹?div style="height:15px;">
采用串行傳輸?shù)姆椒?,控制電路可以只?根線:數(shù)據(jù)線、時(shí)鐘線。將行數(shù)據(jù)一位一位傳往行驅(qū)動(dòng)器,在硬件方面無(wú)疑是十分經(jīng)濟(jì)的。但是,串行傳輸過(guò)程較長(zhǎng),數(shù)據(jù)按順序一位一位地輸出給行驅(qū)動(dòng)器,只有當(dāng)一行的各列數(shù)據(jù)都已傳輸?shù)轿恢?,這一行的各列才能并行地進(jìn)行顯示。這樣,對(duì)于一行的顯示過(guò)程就可以分解成列數(shù)據(jù)準(zhǔn)備(傳輸)和列數(shù)據(jù)顯示兩個(gè)部分。對(duì)于串行傳輸方式來(lái)說(shuō),列數(shù)據(jù)準(zhǔn)備時(shí)間可能相當(dāng)長(zhǎng),在行掃描周期確定的情況下,留給顯示的時(shí)間就太少了,以致影響到LED的亮度。
為了解決串行傳輸中列數(shù)據(jù)準(zhǔn)備和列數(shù)據(jù)顯示的時(shí)間矛盾問(wèn)題,可以采用重疊處理的方法。在顯示本行數(shù)據(jù)的同時(shí),傳送下一行的數(shù)據(jù)。為了達(dá)到重疊處理的目的,列數(shù)據(jù)的顯示驅(qū)動(dòng)電路就需要具有鎖存功能。經(jīng)過(guò)上述分析,可以歸納出列驅(qū)動(dòng)器電路應(yīng)具備的主要功能:對(duì)數(shù)據(jù)準(zhǔn)備來(lái)說(shuō),它應(yīng)能實(shí)現(xiàn)串入并出的移位功能;對(duì)數(shù)據(jù)顯示來(lái)說(shuō),應(yīng)具有并行鎖存的功能。這樣,本行已準(zhǔn)備好的數(shù)據(jù)打人并行鎖存器進(jìn)行顯示時(shí),串并移位寄存器就可以準(zhǔn)備下一行的列數(shù)據(jù),而不會(huì)影響本行的顯示。
具備以上列驅(qū)動(dòng)功能的集成電路有74LS(HC)595、MC14094、CD4094等。本設(shè)計(jì)采用的列驅(qū)動(dòng)芯片是74HC595。下面就以74HC595為例,說(shuō)明LED模塊的具體點(diǎn)亮過(guò)程。
本設(shè)計(jì)中使用的LED模塊每一行的陽(yáng)極都連接在一起,每行都可以用一個(gè)行驅(qū)動(dòng)器,而各行的同名列共用一個(gè)列驅(qū)動(dòng)器。行驅(qū)動(dòng)用74HC138來(lái)控制,列驅(qū)動(dòng)用595來(lái)控制。掃描顯示時(shí),從第一行開(kāi)始,按順序依次對(duì)各行進(jìn)行掃描,即將該行接高電平。同時(shí),根據(jù)各列鎖存的數(shù)據(jù),確定相應(yīng)的列驅(qū)動(dòng)器是否將該列接為低電平。接上低電平的列,就在該行該列點(diǎn)燃相應(yīng)的LED;未接通列所對(duì)應(yīng)的LED就熄滅。當(dāng)一行掃描時(shí)間結(jié)束后,下一行又以同樣的方法進(jìn)行掃描顯示。全部16行掃描一次的時(shí)間稱為一個(gè)掃描周期,待全部16行掃描一次后,又從第一行開(kāi)始下一個(gè)周期的掃描。只要掃描周期的時(shí)間比人眼1/25秒的暫留時(shí)間短,人眼就不容易感覺(jué)出閃爍的現(xiàn)象,而是覺(jué)得一直都是在點(diǎn)亮。
例如:我們送出的行選通信號(hào)00000010(左高右低),即第二行輸出是高電平。同時(shí)送出紅色列選通信號(hào)11111011(左高右低),即第三列是低電平。所以,我們將點(diǎn)亮第二行第三列的LED。如圖3-1A。若行譯碼器送出信號(hào)00010000(左高右低),列送出紅色信號(hào)11001010(左高右低),則顯示結(jié)果如圖3-1B。橙色的顯示原理與紅色相同。
圖3-1A 圖3-1B
3.2 單片機(jī)系統(tǒng)及外圍電路由于LED點(diǎn)陣顯示屏由單片機(jī)控制部分和顯示驅(qū)動(dòng)部分組成,單片機(jī)我選擇最常見(jiàn)的ATMEL公司的AT89C51單片機(jī)。此單片機(jī)與MCS-51產(chǎn)品指令系統(tǒng)完全兼容,由4K字節(jié)可重擦寫(xiě)Flash閃速存儲(chǔ)器,128×8字節(jié)內(nèi)部RAM,32個(gè)可編程I/O口線,2個(gè)16位定時(shí)/計(jì)數(shù)器和6個(gè)中斷源。并且該單片機(jī)經(jīng)濟(jì)實(shí)用,使用廣泛。
本設(shè)計(jì)使用的是AT89C51的最小系統(tǒng)電路,包括:電源、時(shí)鐘脈沖、復(fù)位電路和程序存儲(chǔ)器設(shè)定電路,暫時(shí)只是顯示很少的幾十個(gè)漢字,不用外接存儲(chǔ)擴(kuò)展。
下圖為本設(shè)計(jì)使用的單片機(jī)最小系統(tǒng)原理圖。
圖3-2 89C51的基本外部電路
3.3 行驅(qū)動(dòng)電路設(shè)計(jì)行驅(qū)動(dòng)電路由兩片74HC138進(jìn)行級(jí)聯(lián),輸出16位的行驅(qū)掃描信號(hào)。16位掃描信號(hào)輸出后分別接上1K電阻作為S8550基極輸入。S8550的發(fā)射極接高電平,集電極輸出信號(hào)作為L(zhǎng)ED顯示模塊的行掃描信號(hào)接入顯示模塊。S8550的基極電阻可以改變,若想行驅(qū)動(dòng)的電流大點(diǎn),基極電阻就相應(yīng)減小,反之,增大基極的電阻就可減小集電極電流輸出。
3.3.1 單片機(jī)對(duì)74HC138的控制74HC138是三端輸入八端輸出的二進(jìn)制譯碼器,輸出為低電平有效。輸入的3位二進(jìn)制代碼共有8種狀態(tài),譯碼器將每個(gè)輸入代碼譯成對(duì)應(yīng)的一根輸出線上的高、低電平信號(hào)。A3、A2、A1為輸入端口,Y0~Y7是八個(gè)輸出端。
74HC138有三個(gè)附加的控制端S1、
和
。當(dāng)S1=1、
+
=0時(shí),譯碼器才出于工作狀態(tài)。否則譯碼器被禁止,所有的輸出被封鎖在高電平。
由于在設(shè)計(jì)中的掃描行有16行,一塊74HC138只能實(shí)現(xiàn)8行的掃描,故需要將兩塊74HC138進(jìn)行級(jí)聯(lián),由此組成4線—16線譯碼器,將輸入的4位二進(jìn)制代碼D3、D2、D1、D0譯成16個(gè)獨(dú)立的低電平信號(hào)
~
。兩片74HC138的級(jí)聯(lián)方式如下:
圖3-3 74HC138的級(jí)聯(lián)與控制
上圖中第一塊74HC138的S1接高電平,第二塊輸入信號(hào)
+
與第一片
相連接作為兩片74HC138的使能控制信號(hào)。當(dāng)使能信號(hào)為低時(shí),兩片74HC138才能工作,否則兩片都不能工作。按照上圖的連接,并且使能信號(hào)為低時(shí)的情況下。在D3D2D1D0輸出0000到0111這八個(gè)信號(hào)時(shí),由于D3為0,所以第二片74HC138禁止,只有第一片正常工作。當(dāng)D3D2D1D0為1000到1111時(shí),D3為高電平,所以第一片74HC138禁止工作,第二片74HC138正常工作。綜合前面的兩種情況,當(dāng)P1.3~P1.0輸出0000~1111,就能從接聯(lián)后的兩片74HC138的輸出端依次輸出
~
的低電平信號(hào)。
3.3.2 行控制信號(hào)的產(chǎn)生由于該LED模塊是采用共陽(yáng)極掃描的,而74HC138輸出的電平是低電平有效。例:當(dāng)我們要選通第一行時(shí),74HC138輸出11111110,這樣第一行成了低電平,其他反而成了高電平,這與我們的想法正好相反。所以我們不能用74HC138直接產(chǎn)生控制信號(hào)。
從上面的分析我們可以知道,只要將74HC138的輸出信號(hào)取反,就能實(shí)現(xiàn)我們的目標(biāo)。當(dāng)然我們可以在74HC138的輸出直接加上反相器實(shí)現(xiàn)。但在此處,我們?cè)?4HC138的輸出加上一個(gè)S8550,S8550是PNP反向放大驅(qū)動(dòng)管。當(dāng)信號(hào)由S8550的基極輸入時(shí),在C(集電極)極將輸出與輸入相反的信號(hào)。這樣,不僅使74HC138的輸出信號(hào)反了向,達(dá)到了輸出高電平有效的目的,而且通過(guò)S8550的放大,增強(qiáng)了輸出電流的驅(qū)動(dòng)能力,使LED的亮度得到了提高。
圖3-4 行控制信號(hào)產(chǎn)生
3.4 列驅(qū)動(dòng)電路設(shè)計(jì)設(shè)計(jì)中列驅(qū)動(dòng)由74HC595來(lái)實(shí)現(xiàn)。每個(gè)74HC595能驅(qū)動(dòng)8列,所以控制64列的LED點(diǎn)陣需要8個(gè)595。8個(gè)74HC595通過(guò)級(jí)聯(lián)方式來(lái)對(duì)列進(jìn)行驅(qū)動(dòng)。
3.4.1 單片機(jī)對(duì)74HC595的控制74HC595是串入并出的移位寄存器,單片機(jī)采用串口傳輸數(shù)據(jù),由RXD 輸出數(shù)據(jù)到SER,由TXD 輸出同步數(shù)據(jù)移位脈沖到SRCK,由單片機(jī)的P1.7口輸出74HC595的數(shù)據(jù)鎖存信號(hào)。只有當(dāng)鎖存信號(hào)有效,即鎖存信號(hào)的時(shí)鐘上升沿到來(lái)時(shí),595才輸出列控制的數(shù)據(jù)。
74HC595和89C51的連接方式如下圖:
圖 3-5 單片機(jī)對(duì)595的控制
由于發(fā)送的是8位數(shù)據(jù),則可以利用單片機(jī)的串口進(jìn)行數(shù)據(jù)發(fā)送。讓串口工作在方式0,在方式0下,8位數(shù)據(jù)通過(guò)RXD輸出,低位在前高位在后。同時(shí)在RXD輸出數(shù)據(jù)時(shí),TXD輸出同步的移位時(shí)鐘脈沖。如上圖,通過(guò)PC機(jī)將74HC595的輸入數(shù)據(jù)寫(xiě)入單片機(jī)的SBUF區(qū),數(shù)據(jù)由RXD引腳輸出,同步移位脈沖由TXD引腳輸出。當(dāng)數(shù)據(jù)全部移入74HC595,此時(shí)由P1.7輸出一個(gè)上升沿,將74HC595中移位寄存器的輸出(移位數(shù)據(jù))打入到輸出鎖存器。在實(shí)際應(yīng)用中,一塊74HC595是遠(yuǎn)不夠的。本設(shè)計(jì)就需要16塊74HC595來(lái)對(duì)雙色16×64點(diǎn)陣進(jìn)行列驅(qū)動(dòng),這就要用到74HC595的級(jí)聯(lián)。
74HC595的接聯(lián)方式如下圖:
圖3-6 595的級(jí)聯(lián)
3.4.2 列控制信號(hào)的產(chǎn)生列信號(hào)是由74HC595產(chǎn)生的,數(shù)據(jù)由單片機(jī)的串口(P3.0)產(chǎn)生,從74HC595的串行數(shù)據(jù)輸入端SER輸入,由QA~QH并行輸出。
在這里需要注意的是,74HC595的數(shù)據(jù)是從低位向高位移位的,而單片機(jī)串口發(fā)送數(shù)據(jù)是先發(fā)低位,再發(fā)高位。所以要注意數(shù)據(jù)的對(duì)應(yīng),使74HC595輸出的數(shù)據(jù)與相應(yīng)的列對(duì)應(yīng)正確,這樣方便軟件的調(diào)試。例如:由單片機(jī)串口發(fā)出的數(shù)據(jù)是11101101(左高右低),那么從74HC595并行口輸出的信號(hào)是10110111。如下圖所示:
圖3-7 74HC595數(shù)據(jù)的傳送
3.5 LED顯示模塊的連接LED顯示模塊是由16片8×8的小模塊組成,其連接方式的電路原理圖如下(由于圖片太大,為了能清楚的看到連接方式,只給出了部分的連接圖):
圖3-8 LED 模塊部分連接
3.6 電路原理圖設(shè)計(jì)在前面,分別介紹了電路各個(gè)部分的功能,通過(guò)對(duì)電路的分析,給出了各個(gè)部分電路的實(shí)現(xiàn)方法。只要將前面各個(gè)部分電路綜合起來(lái)就是一個(gè)完整的電路原理圖了。本設(shè)計(jì)的電路原理圖由Protell99繪制,完整的電路原理圖見(jiàn)附錄。
3.7 硬件電路制作介紹完整個(gè)電路的功能以及實(shí)現(xiàn)方法以后,下面就開(kāi)始硬件電路制作。硬件電路制作是及其重要的,它是整個(gè)顯示系統(tǒng)的載體,也是進(jìn)行軟件設(shè)計(jì)的依據(jù)。
本設(shè)計(jì)的硬件電路采用全手工方式焊接而成。采用單層通用板,各元件均為直插式。但考慮到連線較多,而單層板的走線通道有限,所以在制作時(shí)采用了跳線連接。
在焊接時(shí)需要注意的是,要避免虛焊和短路,焊接完一部分就必須檢查一部分。下面是焊接好后的硬件電路外形圖。右邊的上下兩排是16塊列驅(qū)動(dòng)芯片74HC595,中間是由16塊8×8的LED 模塊組成的顯示屏幕。左邊的小模塊是由74HC138和S8550組成的行驅(qū)動(dòng)電路。整個(gè)電路均是全手工焊接。
圖3-9 硬件電路圖
4 軟件設(shè)計(jì) 4.1 漢字字模提取本顯示系統(tǒng)主要是實(shí)現(xiàn)漢字的顯示,涉及到漢字字模的提取。這里簡(jiǎn)單介紹一下漢字的顯示原理。
4.1.1 漢字的點(diǎn)陣顯示原理我們以UCDOS中文宋體字庫(kù)為例,每一個(gè)字由16行16列的點(diǎn)陣組成顯示。即國(guó)標(biāo)漢字庫(kù)中的每一個(gè)字均由256點(diǎn)陣來(lái)表示。我們可以把每一個(gè)點(diǎn)理解為一個(gè)象素,而把每一個(gè)字的字形理解為一幅圖像。事實(shí)上這個(gè)漢字屏不僅可以顯示漢字,也可以顯示在256象素范圍內(nèi)的任何圖形。如常用的8位AT89C51單片機(jī)控制,由于單片機(jī)的總線為8位,所以一個(gè)字需要拆分為2個(gè)部分,如下圖所示。
圖4-2 16×16 漢字組成
本設(shè)計(jì)是通過(guò)行掃描來(lái)實(shí)現(xiàn)顯示數(shù)據(jù)的。所以下面我們從行掃描的角度來(lái)分析漢字點(diǎn)陣的組成規(guī)律。
行掃描時(shí),漢字分成左右兩個(gè)部分,左邊部分由8×16點(diǎn)陣組成,右邊部分也由8×16點(diǎn)陣組成。本例通過(guò)行掃描方法首先顯示左半部分第一行,然后顯示右邊部分第一行,當(dāng)掃描完第一行后,按照第一行的掃描方式繼續(xù)掃描其余行。
下面以大字為例,說(shuō)明行掃描時(shí),列顯示數(shù)據(jù)的生成。
該例中,LED在列顯示的數(shù)據(jù)為低電平時(shí)點(diǎn)亮,假設(shè)用P10-P17來(lái)控制左邊部分,用P20-P27來(lái)控制右邊部分。如下圖,當(dāng)掃描第一行左邊部分時(shí),只有P10為低電平,其余為高電平。所以P17-P10為11111110,按C語(yǔ)言中寫(xiě)為十六進(jìn)制數(shù)為0xfe;掃描第一行右邊部分時(shí),所有燈都不亮。故P27-P20為11111111, 按C語(yǔ)言中寫(xiě)為十六進(jìn)制數(shù)為0xff。接下來(lái)按照第一行的處理方法來(lái)得到其余的列顯示數(shù)據(jù)。
依照上面的方法,行掃描16次,列一共送出32個(gè)8位顯示數(shù)據(jù),這樣可以得出漢字“大”的掃描代碼為:
0xfe,0xff,0xfe,0xff,0xfe,0xff,0xfe,0xff,0xfe,0xff,0x00,0x01,0xfe,0xff,0xfd,0x7f
0xfd,0x7f,0xfd,0xbf,0xfb,0xbf,0xfb,0xdf,0xf7,0xef,0xef,0xe7,0xdf,0xf1,0xbf,0xfb
圖4-3“大”字字模提取
4.1.2 通過(guò)軟件提取漢字字模由上面的分析可以看出,如果要人工來(lái)對(duì)每個(gè)字來(lái)提取它的字模,確實(shí)是一件比較繁瑣的事,而且自己寫(xiě)字模也不是必要的。所以我們利用市面上的字模提取軟件來(lái)直接提取就可以了。
現(xiàn)在市面上有很多的字模提取軟件,在這里,我以 PCtoLCD2002字模提取軟件為例來(lái)加以說(shuō)明。
PCtoLCD2002的功能很齊全,其主要功能有
(1)生成中英文數(shù)字混合的字符串的字模數(shù)據(jù).
(2)可選擇字體,大小,并且可獨(dú)立調(diào)整文字的長(zhǎng)和寬,生成任意形狀的字符。
(3)各種旋轉(zhuǎn),翻轉(zhuǎn)文字功能
(4)任意調(diào)整輸出點(diǎn)陣大小,并任意調(diào)整字符在點(diǎn)陣中的位置。
(5)字模數(shù)據(jù)輸出可自定義各種格式,系統(tǒng)預(yù)設(shè)了C語(yǔ)言和匯編語(yǔ)言兩種格式,并且可自己定義出新的數(shù)據(jù)輸出格式;每行輸出數(shù)據(jù)個(gè)數(shù)可調(diào)。
(6)支持四種取模方式:逐行(就是橫向逐行取點(diǎn)),逐列(縱向逐列取點(diǎn)),行列(先橫向取第一行的8個(gè)點(diǎn)作為第一個(gè)字節(jié),然后縱向取第二行的8個(gè)點(diǎn)作為第二個(gè)字節(jié)……),列行(先縱向取第一列的前8個(gè)點(diǎn)作為第一個(gè)字節(jié),然后橫向取第二列的前8個(gè)點(diǎn)作為第二個(gè)字節(jié)……)。
(7)支持陰碼(亮點(diǎn)為1),陽(yáng)碼(亮點(diǎn)為0)取模。
(8)支持縱向(第一位為低位),倒向(第一位為高位)取模。
(9)輸出數(shù)制可選16進(jìn)制或10進(jìn)制。
在實(shí)際使用時(shí),可以根據(jù)需要提取符合自己設(shè)計(jì)字模,這樣就簡(jiǎn)化了自己去寫(xiě)字模的繁瑣。
4.2 軟件設(shè)計(jì)流程圖顯示屏軟件的主要功能是向顯示屏提供顯示數(shù)據(jù),并產(chǎn)生各種控制信號(hào),使屏幕按設(shè)計(jì)的要求顯示。根據(jù)軟件分層次設(shè)計(jì)的原理,可把顯示屏的軟件系統(tǒng)分成兩大層:第一層是底層的顯示驅(qū)動(dòng)程序,第二層是上層的系統(tǒng)應(yīng)用程序。顯示驅(qū)動(dòng)程序負(fù)責(zé)向點(diǎn)陣屏傳送特定組合的顯示數(shù)據(jù),并負(fù)責(zé)產(chǎn)生行掃描信號(hào)和其它控制信號(hào),配合完成LED顯示屏的掃描顯示工作。顯示驅(qū)動(dòng)程序由顯示子程序?qū)崿F(xiàn);系統(tǒng)環(huán)境設(shè)置(初始化)由系統(tǒng)初始化程序完成;顯示效果處理等工作,則由主程序通過(guò)調(diào)用子程序來(lái)實(shí)現(xiàn)。
然后顯示驅(qū)動(dòng)程序查詢當(dāng)前燃亮的行號(hào),從顯示緩存區(qū)內(nèi)讀取下一行的顯示數(shù)據(jù),并通過(guò)串口發(fā)送給移位寄存器。為消除在切換行顯示數(shù)據(jù)的時(shí)候產(chǎn)生拖尾現(xiàn)象,驅(qū)動(dòng)程序先要關(guān)閉顯示屏,即消隱,等數(shù)據(jù)發(fā)送完畢后輸出74HC595的鎖存信號(hào),將顯示數(shù)據(jù)打入輸出鎖存器并鎖存,然后再輸出新的行號(hào),并打開(kāi)顯示。圖4-1為顯示驅(qū)動(dòng)程序(顯示屏掃描函數(shù))流程圖。
圖4-1 顯示驅(qū)動(dòng)程序流程圖
4.2.1 系統(tǒng)主程序系統(tǒng)主程序開(kāi)始以后,首先是對(duì)系統(tǒng)環(huán)境初始化,包括設(shè)置串口,端口以及一些參數(shù);然后以分屏效果顯示“電子科大中山學(xué)院”,接著開(kāi)始左跑馬滾動(dòng)顯示“本屏由電子科技大學(xué)中山學(xué)院04電子科學(xué)與技術(shù)黃桷制作,指導(dǎo)教師:陳李勝。謝謝各位老師和同學(xué)!”。設(shè)置系統(tǒng)程序不斷地循環(huán)執(zhí)行上述顯示效果。
系統(tǒng)主程序代碼及注釋:
#include <AT89x51.H>
#define uchar unsigned char
#define uint unsigned int
#define SPEED 1 //定義移動(dòng)顯示速度
#define light 2 //定義移動(dòng)顯示行掃描速度
sbit OE=P1^5; // 138使能信號(hào)
sbit STC=P1^7;
uchar col,row; //col為位移變量,row為行變量
uint word=0; //顯示一個(gè)漢字發(fā)送的字節(jié)數(shù)
uchar code HZ[]; //移動(dòng)顯示漢字?jǐn)?shù)組
uchar BUFF[18]; //定義移動(dòng)顯示數(shù)據(jù)存放緩沖空間
void loadoneline(void); //移動(dòng)顯示裝載數(shù)據(jù)
void delay(uchar t); //延時(shí)函數(shù)
void sendoneline(void); //移動(dòng)顯示發(fā)送數(shù)據(jù)
void out_rxd(unsigned char *d); //靜態(tài)顯示數(shù)據(jù)發(fā)送
uchar two_onebyte(uchar h1,uchar h2); //移動(dòng)顯示數(shù)據(jù)調(diào)整模塊
unsigned char code sw[16]={0x10,0x11,0x12,0x13,0x14,0x15,
0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,}; /*靜態(tài)行掃描的16行段碼*/
unsigned char e=0;
/********************************************/
void main(void)
{*****參數(shù)定義*****
SCON=0; //串口初始化,串口工作于工作方式0
*****調(diào)用靜態(tài)顯示程序*****
*****調(diào)用動(dòng)態(tài)顯示子程序****
while(1) //重復(fù)循環(huán)左移顯示
{
while(col<16)
{
for(i=0;i<SPEED;i++) //左移速度
{
OE=1; //關(guān)138
for(row=0;row<16;row++) //動(dòng)態(tài)16行掃描
{
STC=0; //595鎖存數(shù)據(jù)
loadoneline();
sendoneline();
OE=0; //138有效
P2=row; //P2口開(kāi)始發(fā)送行掃描信號(hào)
STC=1; //595輸出數(shù)據(jù)
delay(light); //行掃描時(shí)間間隔
}
}
col++; // 列數(shù)據(jù)移位指針加1
}
col=0; //重新開(kāi)始移動(dòng)
word=word+32; //移動(dòng)顯示下一個(gè)字
if(word>=1024) //移動(dòng)顯示完畢后,又重新開(kāi)始移動(dòng)顯示
word=0;
}
}
}
4.2.2 系統(tǒng)子程序(1)靜態(tài)顯示子程序
for(x=0;x<=1;x++) //顯示兩幕
{
for(k=20;k>0;k--) //每幕靜態(tài)顯示時(shí)間
{
for(i=1;i<=31;i+=2) //16次列數(shù)據(jù)發(fā)送
{
P2=0xFF;
OE=1; //關(guān)138
for(n=m;n>=y;n--) //發(fā)送列數(shù)據(jù)
{
out_rxd(&hanzi[n][i]); //從串口輸出第n個(gè)字的第i字節(jié)
out_rxd(&hanzi[n][i-1]); //從串口輸出第n個(gè)字的第i+1字節(jié)
}
STC=0;
STC=1; //595鎖存信號(hào)上升沿來(lái)到,輸出列數(shù)據(jù)
OE=0; //138有效
P2=sw[e]; //輸出行掃描信號(hào)
delay(20); //延時(shí),等待一段時(shí)間,讓這行顯示的內(nèi)容在人眼內(nèi)產(chǎn)生“視覺(jué)暫留”現(xiàn)象
e++; //行加一
if(e==16)
e=0; //掃描完16行,又重新開(kāi)始掃描
}
}
m=m+4; //顯示下一幕
y=y+4;
};
(2)移動(dòng)顯示子程序
uchar two_onebyte(uchar h1,uchar h2) //移動(dòng)顯示數(shù)據(jù)調(diào)整模塊
{
uchar temp,tempcol;
if(col<8) //輸出8位二進(jìn)制數(shù)
tempcol=col;
else
tempcol=col-8;
temp=(h1>>tempcol)|(h2<<(8-tempcol));//h1左移tempcol 位后和h2右移8- tempcol相或,取出移位后的數(shù)據(jù)
temp=255-temp;
return temp;
}
void loadoneline(void) //把字模移入數(shù)組的子函數(shù);
{
uchar s;
for(s=0;s<9;s++) //s為要顯示的數(shù)字+1(8位數(shù)據(jù)移出時(shí),要移動(dòng)9次)
{
BUFF[2*s]=HZ[word+32*s+2*row];
BUFF[2*s+1]=HZ[word+1+32*s+2*row];
}
}
void send(void) //發(fā)送一行的子函數(shù);
{ char s;uchar inc;
if(col<8)
inc=0;
else
inc=1;
for(s=0+inc;s<=15+inc;s++) //s=2*要顯示的數(shù)字-1;
{
SBUF=two_onebyte(BUFF[s],BUFF[s+1]);
while(!TI); //等待數(shù)據(jù)發(fā)送完畢;
TI=0; //為下次發(fā)送做準(zhǔn)備;
}
}
(3)延時(shí)與串口發(fā)送子程序
void delay(uchar t) //延時(shí)模塊 ;
{ uchar i,j;
for(j=0;j<t;j++)
{
for(i=0;i<20;i++); //延遲時(shí)間為20×t;
}
}
void out_rxd(unsigned char *d) //從串口發(fā)送數(shù)據(jù);
{
SBUF=*d; //數(shù)據(jù)存入緩沖區(qū)發(fā)送;
while(TI==0); //等待發(fā)送完畢;
TI=0; //為下次發(fā)送做準(zhǔn)備;
}
4.3 基于Proteus 的單片機(jī)可視化仿真 4.3.1 Proteus 簡(jiǎn)介 Proteus軟件是來(lái)自英國(guó)Labcenter electronics公司的EDA工具軟件,Proteus軟件有十多年的歷史,在全球廣泛使用,除了其具有和其它EDA工具一樣的原理布圖、PCB自動(dòng)或人工布線及電路仿真的功能外,其革命性的功能是,他的電路仿真是互動(dòng)的,針對(duì)微處理器的應(yīng)用,還可以直接在基于原理圖的虛擬原型上編程,并實(shí)現(xiàn)軟件源碼級(jí)的實(shí)時(shí)調(diào)試,如有顯示及輸出,還能看到運(yùn)行后輸入輸出的效果,配合系統(tǒng)配置的虛擬儀器如示波器、邏輯分析儀等。
在本設(shè)計(jì)中,運(yùn)用Proteus軟件來(lái)調(diào)試程序,避免了反復(fù)對(duì)單片機(jī)的程序燒寫(xiě)和調(diào)試時(shí)對(duì)硬件的損傷。在Proteus 環(huán)境下,通過(guò)原理圖的設(shè)計(jì)和編寫(xiě),幾乎可以達(dá)到完全和硬件電路一致的效果。如果軟件在Proteus 環(huán)境下能通過(guò),那么在相應(yīng)的硬件電路下就不會(huì)有說(shuō)明大的問(wèn)題了。更重要的是,我們可以看到顯示效果,可以實(shí)時(shí)的改變我們的程序,來(lái)達(dá)到我們的顯示目標(biāo)。所以說(shuō),在軟硬件調(diào)試時(shí),使用Proteus 軟件將起到事半功倍的效果。
圖4-2 Proteus 下的電路原理圖4.3.2 Proteus 仿真效果本設(shè)計(jì)的調(diào)試過(guò)程先在Proteus軟件上通過(guò),然后再和實(shí)際的硬件相結(jié)合,進(jìn)行整體調(diào)試。下面是在Proteus軟件上的調(diào)試過(guò)程和結(jié)果。首先在Proteus軟件下按照實(shí)際電路畫(huà)好原理圖,如圖4-2。在畫(huà)圖時(shí),使用了和實(shí)際所用元件相同功能的元件,如用反向器代替了S8550,這不影響我們的調(diào)試結(jié)果。
圖4-3是加載HEX文件的示意圖。首先然后在KEIL 軟件編譯好程序,程序中應(yīng)按照原理圖中的布線要求對(duì)各信號(hào)進(jìn)行定義,單片機(jī)輸出口和138以及595的控制信號(hào)必須一一對(duì)應(yīng)。在KEIL下編譯程序,排除程序的語(yǔ)法錯(cuò)誤。編譯完后生成HEX 文件,然后在Proteus 軟件下加載到單片機(jī)就可進(jìn)行仿真了。下面是加載HEX文件的示意圖。
圖4-3 在Proteus原理圖下加載HEX文件 下面是仿真效果圖。
圖4-4 仿真效果 通過(guò)不斷的仿真,我們可以方便的修改程序的錯(cuò)誤和不當(dāng)之處,這不僅使我們可以看到最終顯示效果,更重要的是為我們?cè)趯?shí)際的硬件上調(diào)試起到了很好的指導(dǎo)作用在實(shí)際硬件調(diào)試時(shí),只要硬件電路沒(méi)有問(wèn)題,軟件方面幾乎不用修改,就能達(dá)到較好的效果。
5 結(jié) 論本文通過(guò)設(shè)計(jì)單片機(jī)控制單色LED顯示屏的方法,對(duì)LED顯示模塊單元如何進(jìn)行行列信號(hào)控制及信號(hào)傳輸中的驅(qū)動(dòng)問(wèn)題進(jìn)行了研究。介紹了硬件的原理以及連接的方法,軟件的設(shè)計(jì)流程以及部分代碼,并在附錄1給出了完整的電路圖,經(jīng)焊接并調(diào)試后可以正常顯示漢字、圖片信息,并且可動(dòng)態(tài)顯示。
硬件部分的設(shè)計(jì)保證了點(diǎn)陣的正常工作。列驅(qū)動(dòng)電路中的74HC595實(shí)現(xiàn)了串入并出,并且?guī)в墟i存和移位的功能;行驅(qū)動(dòng)電路使用了3-8線譯碼器74HC138加S8550驅(qū)動(dòng),因?yàn)槿绻脝纹瑱C(jī)直接連接LED點(diǎn)陣,引腳不夠,同時(shí)驅(qū)動(dòng)能力也不行,而用了這個(gè)譯碼器,可以節(jié)省引腳,并且方便做大屏幕的時(shí)候擴(kuò)展。
軟件部分的設(shè)計(jì)跟硬件完美配合實(shí)現(xiàn)漢字、圖形的顯示。通過(guò)LED點(diǎn)陣顯示原理,我們知道只要合理的安排行選信號(hào)以及列信號(hào)同時(shí)導(dǎo)通的組合順序就可以顯示任何的圖形、文字。軟件的設(shè)計(jì)就是完成將漢字點(diǎn)陣數(shù)據(jù)通過(guò)一些特殊的算法調(diào)整,得到跟LED點(diǎn)陣相對(duì)應(yīng)的數(shù)據(jù),并將這些數(shù)據(jù)以及控制信號(hào)傳送到LED點(diǎn)陣屏,來(lái)實(shí)現(xiàn)分屏掃描顯示以及左移掃描顯示的效果。
在設(shè)計(jì)中,由于采用的是手工焊接,在布線時(shí)就比較麻煩,不能象印制電路版那樣方便,所以在顯示時(shí),采用單色顯示。因?yàn)榧t橙兩種顏色的顯示控制原理是一樣的,如果將兩種顏色同時(shí)點(diǎn)亮,并送出相同的信號(hào),就將顯示彩色效果。
當(dāng)然,沒(méi)有什么是完美無(wú)缺的,對(duì)于文中存在的不足和疏漏之處,請(qǐng)大家見(jiàn)諒,并給于指正,謝謝!
附錄附圖1電路原理圖: