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