石豐華 劉勛
摘 要:隨著電子設計技術的發展,通過大規模可編程集成電路控制的LED顯示屏的應用越來越廣,通過FPGA控制LED顯示屏的設計正以其高靈活性,高效率,低成本,低能耗等優點逐漸成為人們使用LED顯示控制的主流設計方式。本設計是利用EDA技術,基于FPGA的基礎上控制16*16的LED點陣漢字顯示設計,在技術實現上相較其他簡單并且易更改或升級,在熟悉VHDL代碼及各功能的前提下,編寫用于控制LED顯示屏的程序代碼及預先設定好的所需顯示的漢字符號代碼,通過Quartus II軟件的編譯仿真,在硬件電路上實現LED屏上的漢字滾動或循環顯示。
關鍵詞:FPGA VHDL 漢字顯示
1.前言
1.1 概述
LED漢字顯示屏如今在越來越多的場合有了廣泛的應用,例如體育場館中的大屏顯示器,銀行、廣告、火車站包括很多小吃攤的宣傳。LED漢字顯示屏在未來將會有越來越多用武之地,并且呈現快速增長之勢。
因此研究LED漢字顯示的設計方法將具有很重要的理論及現實的意義。
基于FPGA的LED_16*16點陣漢字顯示設計是通過EDA技術控制LED顯示屏的工作,達到預期的設計目的。之所以基于FPGA的設計是因為現場可編程門陣列(FPGA)設計的周期小,靈活度較高,適合用于較小的批量系統,能夠提高系統的可靠性和集成度,并且采用了編寫靈活的VHDL語言編寫主程序。此文正是基于對FPGA及LED的了解下,通過可編程門陣列控制16*16的LED漢字顯示。顯示的漢字字符是預先設定好的,將漢字顯示內容翻譯成程序代碼,通過FPGA編譯顯示出來,需要另外增加或修改字符與圖形可以通過16*16漢字字符生成器翻譯成代碼語言,然后植入程序內編譯仿真,最后下載至實際硬件電路中循環顯示預先設定的字符。
1.2 總體設計
1.2.1 設計任務
本次設計需要達到的效果是在16*16的LED顯示屏上顯示出“成、都、理、工、大、學、歡、迎、您”九個漢字,使用FPGA設計控制LED顯示屏循環顯示這九個漢字。
1.2.2 設計方案
(1)設計一個32進制計數器用于循環顯示九個漢字,每個漢字的顯示時間為1s。
(2)設計一個16進制計數器用于控制行和列驅動控制器的輸出數據。
(3)設計一個列驅動控制器。
(4)設計一個行驅動控制器。
(5)將所有分塊設計組合成一個“元器件”并下載至硬件電路中顯示九個不同的漢字。
方案:每次顯示一個漢字,一秒鐘后刷新顯示第二個漢字,然后一秒后刷新顯示第三個漢字,依次刷新顯示所有漢字。
1.3LED點陣顯示特點
(1)可以用于顯示各種文字、數字、圖表、曲線、圖形;
(2)采用純紅、高綠作雙基色的發光器件,發光亮度高,色彩鮮艷、豐富;
2.軟件的設計與仿真
2.1LED的顯示原理
16×16掃描LED點陣漢字顯示的工作原理與8位掃描數碼管類似。LED點陣有16個端口,每個陰極端口又有16個LED燈,所以一共16*16個LED燈,其譯碼地址通過4位列信號線(SEL0-SEL3)控制,其漢字掃描碼由16位段地址(0-15)輸入。通過時鐘信號的每列掃描完整的顯示漢字。
點陣LED采用掃描的方式顯示,實際運用時分為三種:點掃描、行掃描、列掃描。
使用點掃描模式時,其頻率必須較大,周期應小于1ms才能符合人眼視覺停留要求。而對于行掃描和列掃描,其掃描頻率則必須大于128Hz,那么周期需要比7.8ms小,才符合要求,使得LED顯示燈在人眼中能顯示一個完整的漢字。另外,在驅動一整行(列)LED燈時,激勵電流必須足夠大才能保證LED燈有足夠的亮度,否則會出現LED燈亮度不足而模糊的狀態。
2.2計數器的設計
2.2.132進制計數器的設計與仿真
COUNT32.vhd是設計的32進制的計數器,每當計數器加一,計一個數,然后輸出下一個字。例如,當計數為“00000B”時顯示“成”,當計數為“00001B”時顯示“都”等。給定的脈沖周期為1s。程序描述如下:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY COUNT32 IS
PORT( CLK1: IN STD_LOGIC;
QOUT : OUT STD_LOGIC_VECTOR(4 DOWNTO 0));
END ENTITY COUNT32;
ARCHITECTURE BEHV OF COUNT32 IS
SIGNAL CQI : STD_LOGIC_VECTOR(4 DOWNTO 0);
BEGIN
PROCESS(CLK1)
BEGIN
IF (CLK1'EVENT AND CLK1='1') THEN
CQI<=CQI+1;
END IF;
QOUT<=CQI;
END PROCESS;
END ARCHITECTURE BEHV;
每當CLK1給一個脈沖時,輸出值為前一個輸出值加一,直至計數至32。例如,24ns時輸出為00010,24ns后變為00011,較前數值加一,因此該模塊滿足設計要求。
2.2.216進制計數器的設計與仿真
COUNT16.vhd是設計的16進制的計數器,其輸出端用于控制行驅動和列驅動控制器的輸出數據,程序從略。
如圖所示為16進制計數器的時序仿真圖,每當CLK1給一個脈沖時,輸出值為前一個輸出值加一,直至計數至16。例如,當時間為24.425ns時的輸出為2,當基于時鐘脈沖CLK1后,即24.425ns后輸出為3,較前數值加一,因此該模塊滿足設計要求。
2.3 列驅動設計與仿真
ROWCON.vhd為行驅動控制器,該模塊控制所亮的行,當輸出為0001H時,給點陣的第一行高電平,輸出為0010H時,給點陣的第二行高電平,依次類推,逐次給每行高電平。
2.4 行驅動設計與仿真
XIANSHI.vhd為列驅動控制器,SHI控制的是所顯示的字。例如,當SHI為00H時,表示顯示第一個字;當SHI為01H時,表示顯示第二個字,依次類推。WEI控制顯示漢字的每一行的信息,例如當WEI為0000B時,表示的是輸出字的第一行的文字信息;當WEI為0001B時,表示的是輸出字的第二行的文字信息,依次類推。所需要顯示的漢字分別是“成、都、理、工、大、學、歡、迎、您”,
2.5分塊程序的組合與全程編譯仿真
將32進制計數器,16進制計數器,行掃描模塊,漢字字符掃描與顯示模塊組合,分別引出CLK(控制每個字的行掃描,掃描頻率較高)、CLK1(控制顯示字符的快慢,頻率為1秒)為輸入,ROW[3..0](根據CLK進行每一列的掃描),Q[15..0](表示每個字符各列的代碼信息)為輸出,這樣就將所有的分塊程序組合至含2個輸入,2個輸出的模塊中。
3.軟件的整體調試、編譯與下載
3.1 子程序塊的編譯與仿真
在Quartus II中新建四個.vhd文件,分別命名為COUNT32、COUNT16、ROWCON、XIANSHI,分別編寫程序,將程序編譯后,分別新建四個.vwf的文件,用于對上訴四個子程序的時序仿真,待仿真正確結束后,全部保存在同一文件夾中。
3.2 子程序塊的組合
將四個.vhd文件分別創建為一個元件,共有四個元件,將四個元件按照2.5.1原理組合圖鏈接好后,命名為Block1.bdf,新建一個Block1.vwf文件,將組合元件編譯,檢查錯誤,進行全程的編譯與仿真
3.3 程序下載結果展示
在16*16 LED顯示屏中顯示“成都理工大學歡迎您”,部分結果截取如下圖所示,即完成了預定的設計任務。
參考文獻:
[1]艾明晶.EDA設計實驗教程.清華大學出版社,2014.
[2]喬廬峰、王志功.VHDL數字電路設計教程.電子工業出版社,2013.1
[3]張鵬、李曼義.基于FPGA和VHDL的LED點陣漢字滾動顯示設計.信息技術,2009.12