蔡湘云 惠州城市職業(yè)學院 廣東惠州 516001
基于51單片機控制的小型LED屏設計
蔡湘云 惠州城市職業(yè)學院 廣東惠州 516001
本文設計了一種51單片機直接控制的小型LED顯示屏。采用動態(tài)顯示,異步掃描,數(shù)據(jù)串行輸入,占用較少的接口完成控制功能。能實現(xiàn)顯示內(nèi)容水平、垂直、對角線的移動,適用于小型展示,數(shù)據(jù)內(nèi)容不常變更,在生產(chǎn)成本上優(yōu)于高端的嵌入式系統(tǒng),利于節(jié)省生產(chǎn)成本的需求。
51單片機;小型LED顯示屏;08接口
隨著LED材料和工藝的不斷更新, LED顯示屏在短短十年內(nèi)得到越來越廣泛的應用,其以豐富多彩的形式在廣告、證券交易、展覽、交通指示等方面起到信息展示的作用。針對不同的應用場合,LED顯示屏的種類繁多,大到戶外播放的巨幅LED屏,小到幾厘米的胸牌指示牌,他們的數(shù)據(jù)傳輸和電路控制的方式多樣。
而伴隨著LED顯示屏的出現(xiàn),對應的控制系統(tǒng)也不斷更新發(fā)展,層出不窮。 LED顯示屏的控制系統(tǒng)是基于嵌入式微處理器開發(fā),所以單片機占有重要的一席之地。由于顯示屏本身從色彩上有單色、雙色、全彩等形式,在使用上還有戶外、室內(nèi)、大型屏、小型屏的區(qū)別,在顯示上還有循環(huán)移動、覆蓋、霓虹燈等效果。針對這些不同的類型需求,對控制器的運算速度、執(zhí)行效率、存儲容量都有不同的要求。目前,很多控制卡生產(chǎn)廠家采用高端嵌入式系統(tǒng)進行設計,這樣雖然能較好的提高產(chǎn)品的數(shù)據(jù)處理能力,但是開發(fā)和產(chǎn)品成本也隨之成倍的增加。
目前,單片機正在朝著高性能和多品種方向發(fā)展,而它本身具有的體積小、成本低的重要特點使它嵌入式微處理器的舞臺仍受到廠家的青睞。特別在LED的小型屏上仍有廣泛的應用。本文主要設計了一款基于51單片機直接控制的控制系統(tǒng),主要控制對象為雙基色單元板構成的LED顯示屏并能實現(xiàn)一般的水平和垂直滾動顯示。
圖一 8*8LED點陣
一般的LED點陣模塊由8*8個LED發(fā)光二極管方陣組成,其實物圖和原理圖如圖一所示。只要使點陣處于正偏導通,如圖即讓ROW為正, COL為負則能控制對應的LED發(fā)光,通過控制對應的不同LED發(fā)光來完成各種字符和圖形的顯示。
顯示屏一般要完成漢字符號的顯示,至少需要16*16的點陣,如要完成更美觀的圖形文字,則可以使用更多點數(shù)的點陣。由于直接使用8*8點陣模塊組合成大型顯示屏,所用到的模塊數(shù)量龐大,難以組裝,也存在安全問題,所以LED廠商推出了組裝LED顯示屏的基本單元——LED單元板。通過多塊單元板拼接,可以組裝成不同尺寸的LED屏。本電路選用的是4塊雙基色64*32單元板拼接而成。
圖二 單元板電路結構
2.1雙基色單元板電路
本小型LED屏為雙基色的64*32點陣,由四塊單元板構成,在實際中如還需要更大的顯示區(qū)域,可以在考慮單片機接口和存儲空間的前提下,通過08接口擴展。一塊單元板電路模塊主要由32塊個8*8的LED點陣、 32 塊74HC595、8片4953、2片74HC138 和74HC245組成。如圖二所示,圖中的接口采用08接口。
在電路中,控制信號和數(shù)據(jù)信號從右端的08接口輸入,在信號輸入后,為了防止數(shù)據(jù)線過長,信號被衰減,所以在08接口后使用了一片用于增強信號驅(qū)動能力的芯片74HC245。電路采用的是異步顯示,因此信號之后分為兩部分進入控制電路。一部分是列數(shù)據(jù)信號,有RCK、 SCK、 R1、 R2,另一部分是行數(shù)據(jù)信號,有A、B、C、D、EN進入行掃描電路。如果有級聯(lián)的下一個單元板,信號將再次匯入輸出08接口,以供下一級聯(lián)單元板使用。
2.2單元板電路原理和數(shù)據(jù)處理
本電路采用掃描方式進行顯示,行信號由74HC138譯碼器經(jīng)譯碼提供,但由于該芯片驅(qū)動力不足以驅(qū)動一組發(fā)光二極管,因此在輸出端接上了8片4953來增強驅(qū)動能力。74HC138將A、B、 C、 D譯碼后產(chǎn)生16位輸出信號,每次選通一片4953并選中其中對應的一行,如此時列信號已經(jīng)送達,則此時對應行的二極管發(fā)光,顯示數(shù)據(jù)。當一行顯示結束后,又以同樣的方法掃描下一行,全部各行都掃描一遍,就是一個掃描周期。在電路設計要考慮掃描時間要比人眼視覺暫留的臨界時間短,一般要求少于18ms,就不那么容易感覺到數(shù)據(jù)的閃爍或更替。
在列掃描中,由于單片機的接口有限,選擇使用串行傳輸方法,利用兩根信號線R和G,將列數(shù)據(jù)一位一位的傳往列驅(qū)動器74HC595。數(shù)據(jù)在單片機中先由并轉串,按順序傳給列驅(qū)動器,直到全部列數(shù)據(jù)傳輸?shù)轿?,這一行的各列才能進行并行顯示。由此來看,顯示必須是在列數(shù)據(jù)傳輸完畢后才能進行,而采用串行傳輸?shù)牧袛?shù)據(jù)準備的時間較長,有可能會拖長整個掃描周期。因此針對這一問題,采用的是重疊處理的方法,即在這一行顯示的時候,下一行的列數(shù)據(jù)開始傳輸,因此本電路中選擇了具有鎖存功能的列驅(qū)動74HC595,如圖三所示。
2.3電路整體設計和構成
本電路單片機采用SST89C58,工作頻率為12MHz,通過08接口控制LED顯示屏,如圖四所示。電路結構簡潔,沒有擴展存儲器,適用于小型的LED顯示系統(tǒng)。顯示效果豐富、成本低廉、易于控制。
本電路采用單片機直接驅(qū)動小型LED屏,為了能實現(xiàn)垂直、水平、對角線滾動,設定了顯示區(qū)域是顯示屏的4倍。如圖五所示,在所示的顯示區(qū)域中,以XL、YL為LED顯示屏左上角原點坐標,寬度和高度分別為LW、LH,假設顯示數(shù)據(jù)的起始地址為DATA_BEGIN。則可以確定坐標XL、 YL對應于掃描線Y0起始存儲單元的地址L0為:
L0=DATA_BEGIN+(DH+YL)[DH]*DW+XL
此時L0存儲單元中BW位分別對應于顯示區(qū)域的(XL,YL)、(XL,YL+1*SW),……(XL,YL+(BW-1)*SW)共BW個點。而L0對應BW個Y,需要將LW個數(shù)據(jù)輸出。其中DW:顯示區(qū)域的寬度。 DH:顯示區(qū)域的高度。LW:LED顯示屏的寬度。LH:LED顯示屏的高度。 SW:LED顯示屏的掃描寬度,這里SW=16。BW:掃描線數(shù)。
部分程序設計如下:
#include<REG51.H>
#include<Test_Data.c>
#define DW 128
#define DH 64
#define LW 64
#define LH 32
#define SW 16
#define EN_ON 1
#define EN_OFF 0
sfr CTRL_PORT=0xa0;
sfr DATA_PORT0=0x80;
sbit E=P2^5;
sbit RCK=P2^6;
sbit SCK=P2^7;
//XL:數(shù)據(jù)起始地址的x坐標
YL:數(shù)據(jù)起始地址的y坐標
Display_count:每屏顯示次數(shù),可以控制移動速度,數(shù)字越大單屏顯示時間越長,移動速度越慢//
void display(unsigned int XL,unsigned int YL,unsigned int display_count)
{unsigned char line;
unsign4ed char col;
unsigned char code*ram_point;
unsigned ink k ,data_begin_addr;
for(k=0;k<display_count;k++)
{for(line=0;line<SW;line++)
{data_begian addr=Display_Font;
r a m_p o i n t=d a t a_b e g i n_ addr+YL*DW+XL+line*DW;
E=EN_ON;
for(col=LW;col>0;col--)
{DATA_PORT0=*ram_point;
ram_point++;
SCK=0;sck=1;
E=EN_OFF;
RCK=0;RCK=1;
CTRL_PORT=CTRL_PORT&0xe0;
CTRL_PORT=CTRL_PORT1line;}}}
void main(void)
{unsigned int XL,YL,count=80;
display(0,0,3000);
while(1)
{for(XL=0;XL<DW/2;XL++)
display (XL,0,count); //水平右移
for(XL=DW/2;XL>0;XL--)
display (XL,0,count); //水平左移
for(YL=0;YL<DH/2;YL++)
display (0,YL, count); //垂直移動
for(YL=DH/2;YL>0;YL--)
display (0,YL, count); //垂直移動
for(XL=0;XL<LH;XL++)
display (XL*2,XL,count); //對角線移動
for(XL=LH;XL>0;XL--)
display (XL*2,XL,count); //對角線移動
for(XL=LH;XL>0;XL--)
display (XL*2,LH-XL,count); //對角線移動
for(XL=0;XL<32;XL++)
display (XL*2,LH-XL,count); } //對角線移動
//數(shù)據(jù)文件<Test_Data.c>//
unsigned char code Display_Font[128][48]={數(shù)據(jù)省略}
圖三 74HC595鎖存列數(shù)據(jù)
圖四 電路總體結構
圖五 LED顯示屏顯示區(qū)域
[1]王守中.51單片機開發(fā)入門與典型實例.人民郵電出版社
[2]鄔寬明.單片機外圍器件實用手冊:數(shù)據(jù)傳輸接口器件分冊.北京航空航天大學出版社