《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 可編程邏輯 > 設(shè)計(jì)應(yīng)用 > 基于單片機(jī)和可編程邏輯器件實(shí)現(xiàn)LED顯示屏
基于單片機(jī)和可編程邏輯器件實(shí)現(xiàn)LED顯示屏
微計(jì)算機(jī)信息
聶雄
摘要: LED顯示屏主要由電流驅(qū)動(dòng)電路及LED點(diǎn)陣陣列、控制系統(tǒng)和PC端管理軟件三部分構(gòu)成(圖1)。控制系統(tǒng)負(fù)責(zé)接收、轉(zhuǎn)換和處理各種外部信號(hào),并實(shí)現(xiàn)掃描控制,然后驅(qū)動(dòng)LED點(diǎn)陣顯示需要的文字或圖案。控制系統(tǒng)作為L(zhǎng)ED顯示屏
關(guān)鍵詞: CPLD AT89S52 LED顯示屏 ATF1508 Keil
Abstract:
Key words :

         LED顯示屏主要由電流驅(qū)動(dòng)電路及LED點(diǎn)陣陣列、控制系統(tǒng)和PC端管理軟件三部分構(gòu)成(圖1)??刂葡到y(tǒng)負(fù)責(zé)接收、轉(zhuǎn)換和處理各種外部信號(hào),并實(shí)現(xiàn)掃描控制,然后驅(qū)動(dòng)LED點(diǎn)陣顯示需要的文字或圖案??刂葡到y(tǒng)作為L(zhǎng)ED顯示屏的核心部分,直接決定了顯示屏的顯示效果和性能的優(yōu)劣。本文詳細(xì)分析采用Verilog HDL對(duì)ATF1508AS進(jìn)行編程,實(shí)現(xiàn)雙口RAM訪問和產(chǎn)生LED點(diǎn)陣驅(qū)動(dòng)電路所需的各種時(shí)序信號(hào)。

1  LED顯示屏的基本結(jié)構(gòu)及關(guān)鍵技術(shù)

      本系統(tǒng)設(shè)計(jì)中,控制系統(tǒng)采用單片機(jī)+CPLD的方案來實(shí)現(xiàn),整個(gè)控制系統(tǒng)可分為:信號(hào)接收及處理模塊和CPLD的掃描控制模塊和LED點(diǎn)陣驅(qū)動(dòng)模塊,如圖1 所示。本系統(tǒng)的關(guān)鍵技術(shù)是使用雙口RAM和CPLD芯片,解決LED顯示屏中高速數(shù)據(jù)傳輸和快速掃描控制的難題,大大提高了動(dòng)態(tài)顯示的刷新率。

        信號(hào)接收與處理模塊的功能是AT89S52單片機(jī)通過串口接收PC送來的點(diǎn)陣信息,同時(shí)對(duì)點(diǎn)陣信息做各種不同的處理。利用雙口RAM IDT7007在單片機(jī)和ATF1508AS之間以共享的方式建立高速的數(shù)據(jù)交換通道。

         CPLD的掃描控制模塊采用ATF1508AS芯片實(shí)現(xiàn)。其功能是從雙口RAM讀取點(diǎn)陣信息,串行化后送顯示掃描驅(qū)動(dòng)電路,同時(shí)輸出各種所需的控制信號(hào)。CPLD具有掃描速度快,延時(shí)短等特點(diǎn),克服了單片機(jī)由于傳輸速率慢而造成在大屏幕顯示時(shí)產(chǎn)生的閃爍效應(yīng)。

2  基于CPLD的掃描控制模塊的設(shè)計(jì)

2.1 設(shè)計(jì)思想

       本模塊的功能是從存儲(chǔ)器中讀取數(shù)據(jù),將數(shù)據(jù)輸送到顯示屏體上,同時(shí)產(chǎn)生各種控制信號(hào)。時(shí)序產(chǎn)生模塊由兩部分構(gòu)成,一是產(chǎn)生訪問雙口RAM的時(shí)序,二是產(chǎn)生LED顯示屏接口所需的各種信號(hào)。

       硬件電路我們采用較常見的CPLD芯片ATF1508來實(shí)現(xiàn)控制系統(tǒng)中的時(shí)序產(chǎn)生部分。CPLD是一種具有豐富的可變成I/O引腳的可編程邏輯器件,不僅可以實(shí)現(xiàn)常規(guī)的邏輯器件功能,還可以實(shí)現(xiàn)復(fù)雜而獨(dú)特的時(shí)序邏輯功能。軟件我們采用Verilog HDL語言來進(jìn)行設(shè)計(jì)。Verilog HDL是用于邏輯設(shè)計(jì)的硬件描述語言,已成為IEEE標(biāo)準(zhǔn)。利用Verilog HDL語言對(duì)ATF1508AS進(jìn)行編程,實(shí)現(xiàn)掃描控制模塊所需的功能。

       掃描控制部分的原理電路如圖2所示,ATF1508AS是核心部分,需要根據(jù)系統(tǒng)需要定義ATF1508AS的各個(gè)I/O端口,下面是I/O端口定義和內(nèi)部寄存器定義的Verilog HDL語言代碼。

module LedSequ(color, datain, addrout, CE, OE, SEMR, RWC, sdr, sdb, sck, le, oe1, cs, clk, counter);
input clk;  //系統(tǒng)時(shí)鐘
input[7:0] datain;//RAM數(shù)據(jù)輸入
input[1:0] color;//顏色控制
output[13:0] addrout;//地址輸出口
output SEMR,RWC;
output CE,OE,sdr,sdb,sck,le,oe1,cs;
output[3:0] counter;
reg[3:0] hcnt;//38譯碼器計(jì)數(shù)器
reg [7:0] data1;//數(shù)據(jù)寄存器
reg[3:0] counter;//38翻碼器輸出端
reg SEMR,RWC;
reg SDA,SDC;

reg[13:0] addrout,addr;//addr地址計(jì)數(shù)器
reg[3:0] state;// 狀態(tài)寄存器
reg [2:0] shcnt;  //移位脈沖讀數(shù)器
reg CE,OE,sdr,sdb,sck,le,oe1,cs;
reg [8:0] byte;
parameter s0=1'd0,s1=1'd1,s2=1'd2,s3=1'd3, s4=1'd4, s5=1'd5; //狀態(tài)常量
2.2 訪問雙口RAM時(shí)序的產(chǎn)生
      IDT7007是具有32KB的雙口RAM電路,與ATF1508AS的連接電路如圖2所示,其中: 為片選信號(hào), 為讀寫控制信號(hào), 為輸出使能信號(hào),A0R-A13R為右端口地址總線,D0R-D7R為右端口數(shù)據(jù)總線,其右端口讀寫時(shí)序如圖4所示。我們采用有限狀態(tài)機(jī)實(shí)現(xiàn),其基本工作原理是:S0狀態(tài)進(jìn)行初始化,S1狀態(tài)時(shí)ATF1508AS首先輸出地址信號(hào)addrout,然后置 相有效,S2狀態(tài)讀取雙口RAM的數(shù)據(jù),并存儲(chǔ)到內(nèi)容寄存器datain中,從而完成雙口RAM的讀數(shù)據(jù)過程。下面給出ATF1508AS讀取雙口RAM數(shù)據(jù)的主要代碼:
always @ (posedge clk)
begin //每個(gè)時(shí)鐘周期,狀態(tài)變化一次
  case(state)
  s0: begin      //初始化狀態(tài)
 CE=1'b0;     //IDT7007片選
 OE=1'b1;     //IDT7007讀選通
 le=1'b0; 
 oe1 = 1'b0;
 cs  = 1'b0;
 addr= 14'b0;
 SEMR=1'b1;   //IDT7007 置1有
 RWC = 1'b1;  //寫控制 1
 hcnt=4'b0000;
 counter=4'b0000;
 state=s1;
    end
s1: begin  //輸出RAM地址
 CE=1'b0;
 addrout=addr;//輸出地址
 OE=1'b0;
 SEMR=1'b1;
 RWC = 1'b1;
 shcnt = 3'b000;
 state=s2;
end
 s2: begin //讀雙口RAM數(shù)據(jù)
 oe1=1'b0;
        data1 = datain;
        state=s3;
  end
 ……(顯示掃描及LED驅(qū)動(dòng)代碼部分)
    endcase
  end


2.3  LED顯示驅(qū)動(dòng)時(shí)序信號(hào)的產(chǎn)生

    CPLD 與LED點(diǎn)陣的驅(qū)動(dòng)電路接口如圖  所示,其中:CS為3-8譯碼器片選信號(hào);OE為BMI5026輸出使能信號(hào),控制LED點(diǎn)陣是否能被點(diǎn)亮;LE為驅(qū)動(dòng)芯片數(shù)據(jù)鎖存信號(hào);sck為移位脈沖,將CPLD串行輸出的紅綠數(shù)據(jù)串行移入MBI5026(移位寄存器);A-D為雙3-8譯碼器構(gòu)成的4-16譯碼器的數(shù)據(jù)輸入,實(shí)現(xiàn)顯示行選通控制; sdr為紅數(shù)據(jù)信號(hào)線;sdb為綠數(shù)據(jù)信號(hào)線。
其工作過程為:S3狀態(tài),sck脈沖置0,sdr和sdb分別輸出一位數(shù)據(jù);S4狀態(tài)時(shí),sck置 1,紅和綠數(shù)據(jù)分別移入相應(yīng)移位寄存器BMI5026,若不足8位時(shí),返回S3狀態(tài),若不足一行時(shí),返回S1狀態(tài),讀下一個(gè)字節(jié),若完成一行數(shù)據(jù)移位過程,則轉(zhuǎn)S5狀態(tài);S5狀態(tài)時(shí),置le為0,將BMI5026的緩沖寄存中一個(gè)顯示行的點(diǎn)陣數(shù)據(jù)送輸出寄存器,同時(shí)置cs1有效,控制第hcnt行的點(diǎn)陣顯示,然后判斷一屏內(nèi)容是否顯示完成,返回s1狀態(tài)。圖4為完整的有限狀態(tài)機(jī)的狀態(tài)圖。

      下面給出LED顯示屏體驅(qū)動(dòng)時(shí)序信號(hào)對(duì)應(yīng)的Verilog HDL程序代碼:

    s3: begin
  sck=1'b0;
        sdr= SDA && color[0];
        sdb= SDC && color[1];
        OE=1'b1; CE=1'b1;
     state=s4;
     end
 s4: begin // 移位輸出到LED顯示屏
  sck = 1'b1;
  shcnt = shcnt +1'b1;
  if (shcnt = = 0)
    begin
     addr=addr+1'b1; //讀完一個(gè)字節(jié)地址記數(shù)器加1
     byte=byte+8'b1;
     if(byte= = nrow)// 如果讀完一行數(shù)據(jù)
       begin
         oe1=1'b1;//關(guān)LED顯示
   cs=1'b1;
   le=1'b0;//驅(qū)動(dòng)芯片寫入數(shù)據(jù)
   byte = 8'b0;
   state=s5;//讀完一行數(shù)據(jù)則顯示
       end
    else state=s1;
   end
   else state=s3; //當(dāng)前字節(jié)移位輸出
 end
 s5: begin
           sck=1'b0;
le=1'b0;
     counter=hcnt;
     OE=1'b1;
     CE=1'b0;
           if(addr = = nscreen)
               addr=0;
          oe1=1'b0;
     cs=1'b0;
     state =s1;
       end

 

4系統(tǒng)測(cè)試及仿真

   系統(tǒng)的開發(fā)調(diào)試環(huán)境是:?jiǎn)纹瑱C(jī)部分在KeilC51下調(diào)試,CPLD部分在Maxplus10下調(diào)試。LED顯示屏的掃描控制模塊的Verilog HDL源程序編寫完成后,在ALTERA公司Maxplus10可以先進(jìn)行軟件仿真,以觀察各信號(hào)是否符合硬件電路所需的時(shí)序要求。圖5為掃描模塊 CLPD仿真結(jié)果,符合設(shè)計(jì)要求。通過JTAG接口下載到ATF1508AS后,系統(tǒng)工作正常。

5 結(jié)束語

       基于Verilog HDL實(shí)現(xiàn)的LED顯示屏掃描控制模塊,應(yīng)用于我們開發(fā)LED大屏幕電子信息顯示屏系統(tǒng),簡(jiǎn)化了系統(tǒng)結(jié)構(gòu),提高性了性價(jià)比。該LED顯示屏在實(shí)際應(yīng)用中具有良好的顯示效果,畫面清晰、性能穩(wěn)定,已經(jīng)在學(xué)校的多個(gè)部門得到應(yīng)用。

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。