以FPGA控制为核心的LED汉字滚动显示器设计.docx
以FPGA控制为核心的1ED汉字滚动显示器设计引言现代文明的一个显著特征是城市中随处可见的五颜六色的广告宣传,其中大多都是由皿点阵制作的汉字或图形广告,广泛应用在银行、医院、酒店、火车站、体育场馆等各种公共场所。汉字滚动显示器的传统设计方法是用里拉机来控制的,虽然单片机方案具有价格低廉,程序辘灵活等特点,但由于单片机硬件资源的限制,未来对设计的变更和升级,总是要付出较多研发经费和较长投放市场周期的代价,甚至有可能需要重新设计。况且,在以显示为主的系统中,单片机的运算和控制等主要功能的利用率很低,单片机的优势得不到发挥,相当于很大的资源浪费。采用侬技术的自顶向下的模块化设计方法,借助相关开发软件,例如QUaItUSn软件,将硬件描述语言VHD1程序固化于具有丰富I/O口、内部逻辑和连线资源的皿(现场可编程门阵列)中。该技术具有系统设计效率高、集成度好、保密性强、易于修改、易于实现等优点,成为当今数字系统设计主流技术。此方式所制作的1ED点阵控制器,由于是纯硬件行为,具有速度快、可靠性高、抗干扰能力强、开发周期短等显著优点。1EDA点阵显示汉字原理以8X8的1ED点阵为例,8X8的1ED点阵是由64个发光二极管按矩阵形式排列而成,每一行上的发光管有一个公共的阳极(或阴极),每一列上的发光管有一个公共的阴极(或阳极),一般按动态扫描方式显示汉字或图形。扫描分为点扫描、行扫描和列扫描三种方式。行扫描需要按行抽取字型码,列扫描则需要按列抽取字型码。为满足视觉暂留要求,若使用点扫描方式,其扫描频率必须大于16X64=1024Hz,周期小于1ms。若使用行或列扫描,则频率必须大于16X8=128Hz,周期小于7.8ms0由于所用实验板上提供有1kHz的时钟,本例设计中利用该时钟进行扫描,使每行扫描时间为1ms,实验结果显示亮度合适。现以行扫描为例简单说明动态扫描显示的原理。图1给出汉字“热”在点阵为列共阳时的行字模。工作时先将要扫描行的点阵字模从各列上输出,再让译码器选中(扫描)该行,使本行得以显示,接着再送下一行数据,再使下一行有效,直到8行全被扫描一遍。至此,一幅完整的文字信息就显现出来,然后再反复扫描这8行直至显示新的信息。以下设计采用行扫描方式实现滚动显7JoO1OO1OOfJBmi11ionQ1OOIo1oBIihobOIOo1o1OR100.1001IBZotot0OfOtoX)O1O1O1IOBiooiojoiboootoooOo1ooooIoojooJotoroo/oo>-)图1汉字的像一点图2硬件原理图整个电路由五大部分组成:时钟计数模块GEJC1K,存储汉字字模的幽1模块ROMZI,数据分配器模块MUX,移位模块YW及显示模块X1ANSH-1。时钟计数模块用于产生整个电路所需要的时钟及其对时钟的计数值,例如:移位时钟C1KY肌移位计数器CNTY肌字计数器CNTWORD,显示扫描计数器CNTSMoRoMZ1模块是由QUaItUSn中的1PMIPORTRoM定制成,用来存储8个待显示的汉字。MUX模块用于在扫描时钟及扫描计数器的作用下,从ROM中读出一个汉字的8个行字模信息,送给移位模块YW,YW模块在移位时钟及移位计数器作用下,根据SE1ECT信号选择对读出的字模信息,进行相应的移位(左移、右移、上移、下移)后,最后送显示模块D1SP驱动1ED点阵显示汉字。原理图如图2所示。c1rI>INPUTGEC1KCNTWORD2.0ADDRESS53CNT_YW3.OCNT_SM2.OC1K_SMC1K一YWADDRESS2.OYWM1;XCNT_YW3.01C1KYWW1W1;W1ADDRESS5.0ROMZ1q7O1C1KJMCNTSM2,0DIN7.08b64wordsW1I7O)W1270WI国70W14.0W157.OW167.0W177OJW1870W117.0W12(7.0W13(7.OW14(7.0W157OjWI.6(70W17(7.0W187.01YW11(7.0YW127.0YW137.OYW147.0YW157.0)YW16口.叫YW177.0YW187.0W1-W1VrT1W1W1;INPUTC1KcZDSE1EC(J0I>d10图2点阵控制器原理图3模块设计及时序仿真3.1时钟计数产生模块时钟计数产生模块由1kHz的输人时钟为基准,进行17位的循环计数CNT16.O1该时钟,既是动态扫描显示的时钟,也是从ROM中取一个字8个字模的时钟,对之进行的3位循环计数作为扫描显示计数器和取一个字的字型码计数器。CNT16.0中的CNT9是对该时钟的1024分频,将其作为移位时钟CNT_YW,周期约为1S0CNT1310作为4位的移位计数器,是对移位时钟C1K_YW的计数,也是对移位位数的统计。16个状态使一个汉字逐列移进点阵,又逐列移出。每经过16个移位时钟,将会显示完一个汉字。CNT16.14作为3位的取字计数器。CNT1614CNT2.0作为ROM地址发生器。3.2ROMZI模块利用1PM参数化模块库中单口ROM,利用Qua1tusII中的MegaWizardP1ug-Ir1MarIager定制而成,定制前首先要制作1PMRoM初始化文件,其中存储待显示汉字的字模数据,然后按照1PMMegaWizardP1ug-InManager的向导提示,结合设计要求进行定制。图3为所定制ROM中的初始化汉字“元旦生日开心快乐”的字型码。数据分配模块MUX要求能在8个时钟作用下,从ROM中读出一行(一个汉字的8个字型码)分别送到数据分配器中的W11W18输出端。图4为数据分配模块在扫描时钟作用下读取的字模数据,比较图3和图4可知,仿真结果正确,能满足题目要求。一1"丫一犷一旷飞一,海丫戈X1gr-尸,1k丁I发IiIN)0&1n*<2)也XNIUXttI1一1J-X1XX.U*1X我出上一Cfc)十1X,",i电i&IWX也区1一1A一CIM1»F一J1秋.J1.工二J1二工ISwiSa图4数据分配模块的时序分析波形比,。3.3移位模块YW移位模块YW是整个设计的核心,行扫描实现左移,是通过每来一个移位时钟,将每一行的字模按位左移一位,扫描时钟到来时送出移位后的新字模。通过8次移位,可将一个汉字移出点阵平面,按类似的道理,也可以将一个汉字经8次移位后移进点阵平面。本例(图2)中,CNTYW为移位时钟的计数值,以W11-W18为欲显示汉字的原始字模,11O180为移位后从列上送出的8行显示字模信息,111118为8个原始字模信息未送出位的暂存信号。设计中需要16个移位时钟,通过前8个时钟将W1IW18字模移进1ED点阵平面,再经后8个时钟,将汉字又一位一位地移出。移位设计参考文献中有关移位蛋储的设计,分计数值为“0000和非OOo0两部分处理,对第一行字模的处理为:IFCNTYW=mOOOOwTHEN110<="0000000&W11(7);111<=W11(6DOWNTOO)E1SE110<=110(6DOWNTOo)&111(7);111<-111(6DOWNTO0)&''ENDIF/&S扁hw/南其他行可按相同方法处理,具体参见如下的程序:IFCNT_YW="000。"THEN1IOV='0000"&W11(7);11IV=W11(6DOWNTO0)&'0';120V=0000"&.W12(7);112<=W11(6DOWNTO()&.''130V=0000&W13(7);113<=W11(6DOWNTO0)&,o,5140<=0000"&W14(7);114V=W11(6DOWNTO0)&150<w0000wW15(7)j115<-W11(6DOWNTO0)&'0、160<-w0000r,W16(7);116<=W11(6DOWNTO0)&r0,;170<w0000W17(7)j117<=W11(6DOWNTO0)&'0,180<-"0000W18(7);118<-W18(6DOWNTO0)&,0;E1SE110<=110(6DOWNTOO)&&111(7);11K=11I(6DOWNTOO)&b;120<=120(6D()WNT()0)112(7);112<=112(6DoWNTOO)&'O';V千113(60胎谿蠹130<=130(6D()WNTOO)&&113E111DOWNTO0)&-,0,5右移处理方法与上面左移相反,如对第一行可按如下方法处理:IFCNT_YW=wOOOOwTHEN110<=W11(O)&"OoOOoo0”;111V='O'&W11(7DOWNTO1);E1SE110<111(O)110(7DOWNTOI)J111<=''&11M7DOWNTO1);ENDIE上移时的部分程序按以下思路编制:110170在CNT_YW为初态“0000”时,各信号均赋值X“00”,非初态时,均进行上移一位。即:110<=120;120<=130:;160<=170;170<=180;对于180,在汉字移进1ED过程中即前8个状态各移进一个新行,在移出1ED即后8个状态时,都补进X“00”。程序如下:IFCNT_YW=w0000,zTHEN110<=XWS120<=X"00"170<=X,E1SE110<=120UNOV=130;130<=140;170<=180jENDIF;IFCNTYW=''THENCASECNT_YW(2DOWNTO0)ISWHEN"000=>180V=W1hWHEN"001->180<=W12;WHENv110w->180<=W17;WHEN"i11"=>180<=W18;WHENOTHERS=>NU11;ENDCASE;E1SE180<=X00";/ENDIF;>.为ggQ廿。空而下移程序可按相反思路去编。3.4显示模块DISP设计显示模块DISP是以CNT-SM为扫描计数器,是对IkHz进行三位循环计数,由前述的时钟计数产生模块产生,W11-W18为待送出显示的8个8位字型码,由前述的移位模块YW提供;SW7.0为行扫描输出信号,连接至点阵的8个行;DATA7.0为行扫描时对应的列输出字型码,对外连至点阵的8歹人该模块参考文献中数码管动态显示程序进行设计如下:1IBRARYIEEE;USEIEEE.STD_1OGIC_1164.A11;USEIEEE.STD_1OGIC_UNSIGNDE.A11;ENTITYDISPISPe)RT(-CNT_SM