本系統(tǒng)采用AT89C52單片機作控制器,整個電路主要由單片機控制及其接口電路、驅(qū)動顯示電路、電源電路等部分組成。為了簡化顯示屏電路,降低成本,本系統(tǒng)在單片機部分不加字庫存儲器。而在PC機上編輯漢字和字符顯示信息,并將其轉(zhuǎn)換為相應(yīng)的點陣顯示數(shù)據(jù),然后通過串口(采用RS-232通信標準)送給單片機存儲并進行顯示處理。圖1所示為其硬件系統(tǒng)原理圖。
用74LS154設(shè)計的16x16點陣屏
圖2是一種8x8的LED點陣單色行共陽模塊的內(nèi)部結(jié)構(gòu)圖,其單點工作電壓Uf為1.8 V,正向電流IF為8~10 mA。當(dāng)某一行線為高電平而某一列線為低時,其行列交叉的點就被點亮;而當(dāng)其某一列線為高時,其行列交叉的點為暗;當(dāng)某一行線為低電平時,無論列線如何,對應(yīng)這一行的點全部為暗。
用四個8x8點陣顯示可構(gòu)成16x16點陣顯示器,其連接方法如圖3所示。圖中,將(A)和(B)的8列、(C)和(D)的8列分別對應(yīng)相連,同時將(A)和(C)的8行、 (B)和(D)的8行分別對應(yīng)相連。即可形成一個16行(每一行有16個LED)、16列(每一列也有16個LED)的16x16點陣顯示器,可將這256個點稱為一頁,這樣,顯示字符時。只要對一頁中對應(yīng)的亮滅進行控制即可。
LED點陣顯示器的掃描驅(qū)動
LED顯示屏驅(qū)動電路的設(shè)計應(yīng)與所用控制系統(tǒng)相配合。驅(qū)動通常分為動態(tài)掃描型及靜態(tài)鎖存型驅(qū)動二大類。本文以動態(tài)掃描型驅(qū)動電路的設(shè)計為例來進行分析。動態(tài)掃描型驅(qū)動方式是指顯示屏上的16行發(fā)光二極管共用一組列驅(qū)動寄存器,然后通過行驅(qū)動管的分時工作,來使每行LED的點亮?xí)r間占總時間的1/16。只要每行的刷新速率大于50 Hz,利用人眼的視覺暫留效應(yīng),人們就可以看到一幅完整的文字或畫面。
74HC138 作用原理于高性能的存貯譯碼或要求傳輸延遲時間短的數(shù)據(jù)傳輸系統(tǒng),在 高性能存貯器系統(tǒng)中,用這種譯碼器可以提高譯碼系統(tǒng)的效率。將快速賦能電路用于高速存貯器時,譯碼器的延遲時間和存貯器的賦能時間通常小于存貯器的典型存取時間,這就是說由肖特基鉗位的系統(tǒng)譯碼器所引起的有效系統(tǒng)延遲可以忽略不計。HC138 按照三位二進制輸入碼和賦能輸入條件,從8 個輸出端中譯出一個 低電平輸出。
AT89S52單片機有四個I/O口(P0、P1、P2、P3),每個I/O口有8位,如果都采用并行輸出,顯然不能滿足要求,因此,本設(shè)計中的行掃描驅(qū)動采用并口輸出,而場掃描驅(qū)動采用串口輸出。
行掃描驅(qū)動
由于16x64點陣顯示器有16行,為充分利用單片機的接口,本電路中加入了一個4-16線譯碼器74LS154,其輸入是一個16進制碼,解碼輸出為低態(tài)掃描信號,它們的管腳示意圖如圖4所示。把74LS154的G1和G2引腳接地,然后以A、B、C、D四腳為輸入端。就會形成16種不同的輸入狀態(tài),分別為0000~1111,然后使每種狀態(tài)只控制一路輸出,即會有16路輸出。如果一行64點全部點亮,則通過74LS154的電流將達640 mA,而實際上,74LS154譯碼器提供不了足夠的吸收電流來同時驅(qū)動64個LED同時點亮,因此,應(yīng)在74LS154每一路輸出端與16x64點陣顯示器對應(yīng)的每一行之間用一個三極管來將電流信號放大,本文選用的是達林頓三極管TIP127。這樣,74LS154某一輸出腳為低電平時,對應(yīng)的三極管發(fā)射極為高電平,從而使點陣顯示器的對應(yīng)行也為高電平。
列掃描驅(qū)動
本系統(tǒng)場掃描驅(qū)動電路的設(shè)計可用串入并出的通用集成電路74HC595來作為數(shù)據(jù)鎖存。74HC595是一個八位串行輸入三態(tài)并行輸出的移位寄存器,其管腳見圖4所示,其中SI是串行數(shù)據(jù)的輸入端,RCK是存儲寄存器的輸入時鐘,SCK是移位寄存器的輸入時鐘,Q‘H是串人數(shù)據(jù)的輸出,G是對輸人數(shù)據(jù)的輸出使能控制,QA~QH為串入數(shù)據(jù)的并行輸出。從SI口輸入的數(shù)據(jù)可在移位寄存器的SCK腳上升沿的作用下輸入到74HC595中。并在RCK腳的上升沿作用下將輸入的數(shù)據(jù)鎖存在74HC595中,這樣,當(dāng)G為低電平時,數(shù)據(jù)便可并行輸出。為了避免與PC機串口輸入的數(shù)據(jù)相互干擾,也可使用模擬串口P1.4~P1.7來分別輸出串行數(shù)據(jù)、移位時鐘SCK、存儲信號RCK和并行輸出的使能信號G。
為了消除電源電壓的波動及行掃描管壓降(第一行點亮的點數(shù)不同,將引起管壓降的變化,從而影響通過LED管的電流)的變化對LED顯示屏亮度的影響,設(shè)計時可采用列恒流驅(qū)動電路,可選用三極管8550和外圍元件構(gòu)成列恒流驅(qū)動電路,并通過調(diào)整100 kΩ可調(diào)電阻使三極管處于放大狀態(tài),同時將集電極電流調(diào)整為10 mA,從而使點亮對應(yīng)點陣時通過LED的電流不變。
掃描顯示工作過程
將8片74HC595進行級連,可共用一個移位時鐘SCK及數(shù)據(jù)鎖存信號RCK。這樣,當(dāng)?shù)谝恍行枰@示的數(shù)據(jù)經(jīng)過8x8=64個SCK時鐘后便可將其全部移入74HC595中,此時還將產(chǎn)生一個數(shù)據(jù)鎖存信號RCK將數(shù)據(jù)鎖存在74HC595中,并在使能信號G的作用下,使串入數(shù)據(jù)并行輸出,從而使與各輸出位對應(yīng)的場驅(qū)動管處于放大或截止?fàn)顟B(tài);同時由行掃描控制電路產(chǎn)生信號使第一行掃描管導(dǎo)通,相當(dāng)于第一行LED的正端都接高,顯然,第一行LED管的亮滅就取決于74HC595中的鎖存信號;此外,在第一行LED管點亮的同時,再在74HC595中移入第二行需要顯示的數(shù)據(jù),隨后將其鎖存,同時由行掃描控制電路將第一行掃描管關(guān)閉而接通第二行,使第二行LED管點亮,以此類推,當(dāng)?shù)谑袙呙柽^后再回到第一行,這樣,只要掃描速度足夠高,就可形成一幅完整的文字或圖像。
軟件設(shè)計流程圖
#include《reg52.h》
char tab[32]={
0x00,0x00,0x10,0x00,0x90,0x3F,0x90,0x10,0xFF,0x10,0x90,0x10,0x90,0xBF,0x10,0x40,
0x00,0x30,0xFE,0x0F,0x22,0x02,0x22,0x42,0x22,0x82,0xFE,0x7F,0x00,0x00,0x00,0x00};
char tab1[32]={
0x10,0x04,0x10,0x03,0xD0,0x00,0xFF,0xFF,0x90,0x00,0x10,0x11,0x00,0x08,0x10,0x04,
0x10,0x03,0xD0,0x00,0xFF,0xFF,0xD0,0x00,0x10,0x03,0x10,0x04,0x10,0x08,0x00,0x00};
char tab2[32]={
0x10,0x04,0x60,0x04,0x02,0x7C,0x0C,0x03,0xC0,0x20,0x04,0x20,0x04,0x20,0x04,0x20,
0x04,0x20,0xFC,0x3F,0x04,0x20,0x04,0x20,0x04,0x20,0x04,0x20,0x00,0x20,0x00,0x00} ;
void delay(int z)
{
int x,y;
for(x=z;x》0;x--)
for(y=10;y》0;y--);
}
void main(void)
{
int i,j;
while(1)
{
for(i=200;i》0;i--)
{
P3 = 0xf0;
P0 = tab[0];
P2 = tab[1];
delay(1);
P3 = 0xf1;
P0 = tab[2];
P2 = tab[3];
delay(1);
P3 = 0xf2;
P0 = tab[4];
P2 = tab[5];
delay(1);
P3 = 0xf3;
P0 = tab[6];
P2 = tab[7];
delay(1);
P3 = 0xf4;
P0 = tab[8];
P2 = tab[9];
delay(1);
P3 = 0xf5;
P0 = tab[10];
P2 = tab[11];
delay(1);
P3 = 0xf6;
P0 = tab[12];
P2 = tab[13];
delay(1);
P3 = 0xf7;
P0 = tab[14];
P2 = tab[15];
delay(1);
P3 = 0xf8;
P0 = tab[16];
P2 = tab[17];
delay(1);
P3 = 0xf9;
P0 = tab[18];
P2 = tab[19];
delay(1);
P3 = 0xfa;
P0 = tab[20];
P2 = tab[21];
delay(1);
P3 = 0xfb;
P0 = tab[22];
P2 = tab[23];
delay(1);
P3 = 0xfc;
P0 = tab[24];
P2 = tab[25];
delay(1);
P3 = 0xfd;
P0 = tab[26];
P2 = tab[27];
delay(1);
P3 = 0xfe;
P0 = tab[28];
P2 = tab[29];
delay(1);
P3 = 0xff;
P0 = tab[30];
P2 = tab[31];
}
for(j=200;j》0;j--)
{
P3 = 0xf0;
P0 = tab1[0];
P2 = tab1[1];
delay(1);
P3 = 0xf1;
P0 = tab1[2];
P2 = tab1[3];
delay(1);
P3 = 0xf2;
P0 = tab1[4];
P2 = tab1[5];
delay(1);
P3 = 0xf3;
P0 = tab1[6];
P2 = tab1[7];
delay(1);
P3 = 0xf4;
P0 = tab1[8];
P2 = tab1[9];
delay(1);
P3 = 0xf5;
P0 = tab1[10];
P2 = tab1[11];
delay(1);
P3 = 0xf6;
P0 = tab1[12];
P2 = tab1[13];
delay(1);
P3 = 0xf7;
P0 = tab1[14];
P2 = tab1[15];
delay(1);
P3 = 0xf8;
P0 = tab1[16];
P2 = tab1[17];
delay(1);
P3 = 0xf9;
P0 = tab1[18];
P2 = tab1[19];
delay(1);
P3 = 0xfa;
P0 = tab1[20];
P2 = tab1[21];
delay(1);
P3 = 0xfb;
P0 = tab1[22];
P2 = tab1[23];
delay(1);
P3 = 0xfc;
P0 = tab1[24];
P2 = tab1[25];
delay(1);
P3 = 0xfd;
P0 = tab1[26];
P2 = tab1[27];
delay(1);
P3 = 0xfe;
P0 = tab1[28];
P2 = tab1[29];
delay(1);
P3 = 0xff;
P0 = tab1[30];
P2 = tab1[31];
}
for(j=200;j》0;j--)
{
P3 = 0xf0;
P0 = tab2[0];
P2 = tab2[1];
delay(1);
P3 = 0xf1;
P0 = tab2[2];
P2 = tab2[3];
delay(1);
P3 = 0xf2;
P0 = tab2[4];
P2 = tab2[5];
delay(1);
P3 = 0xf3;
P0 = tab2[6];
P2 = tab2[7];
delay(1);
P3 = 0xf4;
P0 = tab2[8];
P2 = tab2[9];
delay(1);
P3 = 0xf5;
P0 = tab2[10];
P2 = tab2[11];
delay(1);
P3 = 0xf6;
P0 = tab2[12];
P2 = tab2[13];
delay(1);
P3 = 0xf7;
P0 = tab2[14];
P2 = tab2[15];
delay(1);
P3 = 0xf8;
P0 = tab2[16];
P2 = tab2[17];
delay(1);
P3 = 0xf9;
P0 = tab2[18];
P2 = tab2[19];
delay(1);
P3 = 0xfa;
P0 = tab2[20];
P2 = tab2[21];
delay(1);
P3 = 0xfb;
P0 = tab2[22];
P2 = tab2[23];
delay(1);
P3 = 0xfc;
P0 = tab2[24];
P2 = tab2[25];
delay(1);
P3 = 0xfd;
P0 = tab2[26];
P2 = tab2[27];
delay(1);
P3 = 0xfe;
P0 = tab2[28];
P2 = tab2[29];
delay(1);
P3 = 0xff;
P0 = tab2[30];
P2 = tab2[31];
}
}
}
評論
查看更多