ImageVerifierCode 换一换
格式:DOCX , 页数:58 ,大小:1.36MB ,
资源ID:25730664      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/25730664.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(eda课程设计LED点阵显示控制.docx)为本站会员(b****2)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

eda课程设计LED点阵显示控制.docx

1、eda课程设计LED点阵显示控制绍 兴 文 理 学 院数 理 信 息 学 院EDA技术课 程 设 计 报 告课题 LED点阵显示控制设计 姓 名 学 号 专业班级 指导教师 时 间 课程设计任务书班 级姓名题目LED点阵显示控制设计技术参数、设计要求、检测数据等在EDA实验箱上利用FPGA和16*16点阵实现如下功能:实现基本的字符显示(譬如绍大)字符的显示时间可调整(譬如1秒、5秒、10秒等)字符可实现闪烁显示(譬如0.5s)字符可实现移位显示,且移位方向可控(左移、右移等)设计进度安排或工作计划2013.1.42013.1.4任务分配,熟悉课题,查询相关资料,出方案初稿。2013.1.52

2、013.1.5方案交流并定稿,划分设计模式,课程设计开展。2013.1.62013.1.7各模块设计实现及调试验证。2013.1.102013.1.13设计整体实现、调试及验证,并开始撰写报告。2013.1.142103.1.15设计完成,课程设计报告撰写并定稿,上交。其 它基于任务书,我们小组对设计增加了一些功能如下:通过键控可以改变字幕滚动速度。通过键控可以使字幕横向或纵向滚动。通过键控可以使字闪烁出现。LED点阵显示控制摘 要本文对基于FPGA控制的LED汉字滚动显示器的设计方法进行了探讨。提出了两个实现方案。并对其中一个方案作了详细说明。文中首先介绍了完成本设计所需的原理、技术、以及所

3、要实现的功能;然后研究了滚动显示汉字的方法及键控模式改变滚动的方式;最后,用VHDL语言程序设计了一个完整的LED汉字滚动显示器。本系统在FPGA试验箱上完成,由扫描控制模块、只读存储器ROM和16*16LED点阵显示模块、一个4-16译码器构成。其中:扫描控制模块和只读存储器ROM集成在FPGA芯片内部。一个4-16译码器(74LS154)输入完成FPGA中1616点阵显示模块的列扫描模式。FPGA定义的只读存储器ROM中保存了要显示的汉字的数模,并以16位的数据宽度输出到LED阵显示模块的行端,配合列扫描控制共同完成汉字的滚动显示。同时通过键控模式,对字幕滚动速度、方式、形式可调。本系统利

4、用数字系统设计自动化(EDA)技术实现了全硬件方式的LED点阵显示。利用FPGA内部的物理资源,将只读存储器ROM和主要功能模块设计在FPGA内部。充分显示了EDA技术设计的灵活性,同时也大大提高了系统的集成度和稳定性 关键词 FPGA; LED; EDA;动态扫描1.设计概述1.1LED点阵原理以下为88点阵LED外观及引脚图及其等效电路,只要其对应的X、Y轴顺向偏压,即可使LED发亮。例如如果想使左上角LED点亮,则Y0=1,X0=0即可。应用时限流电阻可以放在X轴或Y轴。图 11 88点阵LED外观图5图 12 88点阵LED等效图5 1.2点阵LED扫描法介绍 点阵LED一般采用扫描式

5、显示,实际运用分为三种方式: (1)点扫描(2)行扫描(3)列扫描若使用第一种方式,其扫描频率必须大于1664=1024Hz,周期小于1ms即可。若使用第二和第三种方式,则频率必须大于168=128Hz,周期小于7.8ms即可符合视觉暂留要求。此外一次驱动一列或一行(8颗LED)时需外加驱动电路提高电流,否则LED亮度会不足1.3汉字显示原理要实现汉字的显示,首先是获得数模并保存,即在存贮器中建立汉字数据库。这里,直接运用取字模软件,输入要取模的字,自动生成字形码。然后是在扫描模块的控制下,从低往高列扫描的次序正确地输出这些数据,由于人视觉暂留效果,即呈现完整字形。某一时刻能在显示数据序列中定

6、位待显示数据的地址指针可用下式计算: addr=n+m 图 13滚动显示多汉字信息的原理示意图51.4设计的主要功能 基本功能: 实现基本的字符显示(譬如绍大) 字符的显示时间可调整(譬如1秒、5秒、10秒等) 字符可实现闪烁显示(譬如0.5s) 字符可实现移位显示,且移位方向可控(左移、右移等) 附加功能: 通过键控可以改变字幕滚动速度。 通过键控可以使字幕横向或纵向滚动。 通过键控可以使字闪烁出现。 1.5设计的主要工作 本设计需要利用EDA工具软件QuartusII编写并调试系统的VHDL程序。并且每一个模块都在这个软件下进行了仿真。系统的VHDL程序编好过后先在实验室的EDA实验箱上下

7、载调试、验证。2. 设计方案2.1方案一本文系统的LED点阵模块,共由1616=256个LED发光二极管组成。如何在该点阵模块上显示汉字是本文设计的关键技术。本文系统设计是采用一种16路动态分时扫描技术来实现的。具体方法是,将4个88数组的显示模块组合成两个16行16列的扫描结构。其行输入端与FPGA内的只读存储器ROM的16位数据输出端口相连;16个列控制端与一个4-16译码器的输出相连;而译码器的输入端和片选信号又与FPGA内的列扫描控制模块的输出端口相连。图2-1 系统结构框图2.2方案二VHDL程序设计的是硬件,可以“并发执行”。本设计可以将LED显示屏要的显示内容抽象成一个二维数组(

8、数组中的1对映点阵显示屏上面的亮点),用VHDL语言设计一个进程将这个数组动态显示在LED显示屏上,再利用另一个进程对这个数组按一定频率进行数据更新,更新的方式可以有多种。因为两个进程是同时进行的(并发执行),如果对数组中的汉字数据按滚动的方式更新,则可实现汉字的滚动显示。该方案的原理图。 2.3方案比较方案一很容易实现,而且占用FPGA的资源较少。但是由于其实现方式的局限性,该方案只能实现汉字的滚动显示。方案二中将LED点阵抽象成了一个二维数组。可以设计一些比较复杂的算法来控制这个数组,使设计的系统不但可以滚动显示汉字,还可以扩展一些其它的显示效果。但是方案二中对数组的处理部分对FPGA芯片

9、的资源消耗太大,所以最终选择方案一。3. 设计实现3.1分频程序该电路主要包含有一个计数器模块和一个译码输出模块,该电路是通过计数器模块实现分频的。比如要从12MHz的全局时钟得到100Hz的时钟,必须进行120000倍分频。但是这么大的分频需要仿真时间很久。仿真是一般采用小的分频来替代,真正下载到电路上时,就需要采用120000分频了。译码器的输入采用了寄存器锁存输出,这是为了消除毛刺。多输入的组合逻辑电路中,默写输入信号在理想情况下应该同时发生变化,但由于延迟路径不同造成这些输入信号发生变化的时间有微小差别(门延迟时间量级),这是得到的是输出信号就会有毛刺,这些毛刺有可能会给下一级电路带来

10、,使得整个系统运行不稳定。因此,为保证系统的稳健性,一般情况下,都应该给输出信号去毛刺,使之变得干净。在设计中,译码的输入是计数器的输出,计数器各级输出延迟是不一样的,因此译码器输出clk_scan信号波形就会有毛刺。if(reset_n=0)then -clk输入的500KHz信号 cnt_scan:=0; -clk_scan1.25khz的点阵动态扫描信号 cnt_key:=0; elsif(rising_edge(clk)then -clk_key1KHz的键盘扫描信号 if(cnt_scan=cnt_scanhigh)then cnt_scan:=0; else cnt_scan:=c

11、nt_scan+1; end if; if(cnt_key=cnt_keyhigh)then cnt_key:=0; else cnt_key:=cnt_key+1; end if; if(cnt_scan(cnt_scanhigh/2)then clk_scan=1; else clk_scan(cnt_keyhigh/2)then clk_key=1; else clk_key=0; end if; end if;把有毛刺的信号通过时钟采样,即通过一个D触发器也可以消除毛刺。本设计就是使用这种方法。这种方法的缺点是信号通过一个D触发器后,就延迟了一个时钟周期。对于本设计这种延迟是允许的。p

12、rocess(reset_n,clk_key,key1_in) variable temp1:std_logic; variable cnt1:integer range 0 to 15; begin if(reset_n=0)then key1_out=1; -高电平表示没有按下 elsif(rising_edge(clk_key)then if(temp1=key1_in)then if(cnt1=cnt1high)then cnt1:=0; key1_out=temp1; else cnt1:=cnt1+1; end if; else temp1:=key1_in; cnt1:=0; e

13、nd if; end if; end process; 3.2移动速度控制程序在用VHDL编程的时候,可以定义一个变量x作为“滑窗”在ROM上的起始地址,设计一个进程按一定的频率对x进行累加,再设计一个进程将以x为起始地址的长度为16的ROM中的区域动态显示在LED点阵中。显然x累加的速度决定了汉字的滚动速度。if(reset_n=0)then n=nhigh)then n=n; else n=n+1; end if; end if; elsif(key2=0)then if(flag_key=0)then flag_key:=1; if(n=1)then n=n; else n=n-1; e

14、nd if; end if; else flag_key:=0; end if; end if; if(reset_n=0)then -x的控制进程 cntx:=0; x=0; elsif(rising_edge(clk_scan)then if(flag_scan=1)then if(cntx=n*10 or cntx=cntxhigh)then cntx:=0; else cntx:=cntx+1; end if; if(cntx=n*10)then if(x=xhigh)then x=0; else x=x+1; end if; end if; end if; end if;此进程根据定

15、义的信号n来控制x递增的速度,n由外部的按键控制。n的范围为15代表了汉字的不同的滚动速度。当n为1时汉字滚动的速度最快,n为5时LED点阵上显示的汉字滚动速度最慢。3.3按键扫描本系统用到的按键只有5个:复位按键,控制n增大和减小的两个按键,控制闪烁的一个按键,控制横向纵向的一个按键。3.4汉字显示程序if(reset_n=0)then -显示各种模式转换 data=0000000000000000; elsif(rising_edge(clk_scan)then if(key4=1)then if(shanshuo=1)then if(key3=1)then index:=(cnt-x)

16、mod L_SZ); -左移 if(key5=1)then -显示模式转换上下或左右 data=ledsj(index); else data=ledsj1(index); end if; end if; if(key3=0)then index:=(cnt+x) mod L_SZ); -右移 if(key5=1)then data=ledsj(index); else data=ledsj1(index); end if; end if; elsif(shanshuo=0)then data=x0000; end if; elsif(key4=0)then if(key3=1)then in

17、dex:=(cnt-x) mod L_SZ); if(key5=1)then data=ledsj(index); else data=ledsj1(index); end if; end if; if(key3=0)then index:=(cnt+x) mod L_SZ); if(key5=1)then data=ledsj(index); else data(cnt_scanhigh/2)then clk_scan=1; else clk_scan(cnt_keyhigh/2)then clk_key=1; else clk_key=0; end if; end if; end proc

18、ess;end abc;2、键盘扫描字幕显示控制模块程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity mnscan isport( clk_scan:in std_logic; -分频时钟 scan:out std_logic_vector(3 downto 0); -列扫描 data:out std_logic_vector(15 downto 0); -列段码输出 dis_n:out std_logic_vector(6

19、 downto 0); -不需要小数点(7位) key1,key2,key3,key4,key5:in std_logic; -key1(加速)key2(减速)key3=1左移key3=0右移 -key4(闪烁控制) key5(输出形式) reset_n:in std_logic -复位); end mnscan;architecture abc of mnscan isconstant L_SZ:integer:=223;constant L_DZ:integer:=15;signal cnt:integer range 0 to L_DZ; -和点阵屏的列一样大signal n:integ

20、er range 1 to 5; -控制速度signal flag_scan:std_logic;signal x:integer range 0 to L_SZ;signal shanshuo:std_logic; -闪烁signal shanshuo_cnt:integer range 0 to 60;-创建一个可以存储2唯数据的数据类型 array_1 array_2type array_2 is array(0 to 31)of std_logic_vector(15 downto 0);constant ledsj:array_2:=(x0008),(x3f88),(x2204),(

21、x2204),(x2112),(x210f),(x2888),(x1044),(x3f82),(x209f),(x2080),(x2080),(x2098),(x3f87),(x2080),(x0000),-绍 上下(x0000),(x0080),(x0080),(x0080),(x0080),(x7fff),(x0080),(x0140),(x0140),(x0240),(x0220),(x0420),(x0810),(x1808),(x7004),(x2002)-大);type array_1 is array(0 to 31)of std_logic_vector(15 downto 0);constant ledsj1:array_1:=(x0000),(x0000),(x7f7e),(x2182

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1