16×16点阵显示设计_第1页
16×16点阵显示设计_第2页
16×16点阵显示设计_第3页
16×16点阵显示设计_第4页
16×16点阵显示设计_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、HUNAN INSTITUTE OF ENGINEERING课程设计课程名称嵌入式系统课程设计课题名称 16X16的点阵显示设计专业班级学号姓名指导老师2016年12月20日电气信息学院课程设计任务书课显点1616名称题设计示阵的X名 姓亚级号师 老问 时 讦 18 77 日 30 月12 年16 -20日18万12 年见 意丁嫌望、刘一;A 一核一甲1 扃;见一丁一、任务及要求CPLD为复杂可编程逻辑器件,通过 EDA技术对其进行编程,可将一个较复杂的数字系统 集成于一个芯片中,制成专用集成电路芯片,并可随时在系统修改其逻辑功能。并最终完 成电路的编程调试。具体要求如下:用一个16X 16的

2、点阵使用逐列循环扫描的方式不间断的显示你姓名的全部大写拼音字母。二、进度安排第一周:周一:集中布置课程设计相关事宜。周二周三:子模块程序设计,顶层电路程序设计。周四周日:子模块,顶层电路仿真。第二周:周一周三:编程下载,系统调试。周四周五:设计报告撰写。周五进行答辩和设计结果检查。三、参考资料1 . 张 原编著,可编程逻辑器件设计及应用,机械工业出版社。2 .荀殿栋,徐志军编著,数字电路设计实用手册,电子工业出版社。3 .刘洪喜,陆颖编著.VHDL电路设计实用教程清华大学出版社目录1 . 总体设计思路与功能设计11.1. 基本原理 1.总体设计框图2.顶层文件设计22 .单元电路设计3列循环扫

3、描模块3字符样式设计模块3循环扫描及延时模块4整个程序 53 .系统调试与仿真9开发环境介绍 9创建工程9编译前设计9全程编译11时序仿真 124 .下载调试135 .心得体会146 .参考文献14总体设计思路基本原理LED就是Light Emitting Diode (发光二极管)的缩写。在某些半导体材料的PN结中,注入的少数载流子与多数载流子复合时会把多余的能量以光的形式释放出来, 从而把电能直接转换为光能。 PN 结加反向电压,少数载流子难以注入,故不发光。这种利用注入式电致发光原理制作的二极管叫发光二极管,通称LED, LED显示屏是一种通过控制半导体发光二极管的显示方式,用来显示文字

4、、图形、图像、动画、行情、视频、录像信号等各种信息的显示屏幕。16X16扫描LED点阵的工作原理同8位扫描数码管类似。它有16个共阴极输出端口, 每个共阴极对应有16个LED显示灯,所以其扫描译码地址需4位信号线(SEL0-SED3, 其汉字扫描码由 16 位段地址(0-15)输入。通过时钟的每列扫描显示完整汉字。点阵LED一般采用扫描式显示,实际运用分为三种方式:( 1)点扫描( 2)行扫描( 3)列扫描若使用第一种方式,其扫描频率必须大于16X64=1024Hz,周期小于1ms即可。若使用第二和第三种方式,则频率必须大于16 X 8=128Hz,周期小于即可符合视觉暂留要求。此外一次驱动一

5、列或一行(8颗LED)时需外加驱动电路提高电流,否则LED亮度会不足。实验箱上为我们提供了 16*16 的点阵显示模块。通过观察,我们可以看到,此点阵显示屏即为16行、16列的LED显示灯。那么控制这些灯的亮暗分布,就能达到字符显示的目的。首先输出预定义“吕、苏、田、口”四个汉字,显示屏上的灯的亮暗情况具体应如何。如第一个汉字吕 :000000000000000000000000000000000000000001111100000 000000000000000000000000000000100010000000000011111000000000000000000000000000000

6、00000000000000000000如果高电平1'时表示灯是亮白1低电平'0'时灯是暗的,这样上面的灯呈现在我们眼 前的就是吕宇了。依次类推,我们就可以设计出所有要显示的汉字了。这样这些汉字就 好象是被我们当作了固定模型了。但如何点亮这些灯呢,这就要求有一个脉冲循环扫描 的电路,我们采用列扫描,当扫描的和我们先设计好的汉字模型的高电平相匹配时,灯 就相应的点亮。由于扫描的速度很快,我们人的眼睛并不会感到灯的闪烁,所以每扫描 完16列就会显示在我们眼中一个汉字了。但要所有的汉字就可以依次的显示出来并不 停的循环显示,就还要再有一个时序控制电路来控制。此时序控制电路象一

7、个计数器, 有自动清零的功能,这样就可以实现循环的效果了。设计框图图总体设计框图顶层文件设计 nr iaiiBavBiar'iain-脉冲、使能信号图顶层文件设计:、单元电路设计列循环扫描通过对每一列的扫描来完成对字母的现实,只要扫描的频率足够快,就能给人以连 续的感觉。因此要控制扫描的频率,不能太低,否则,就会造成视觉上的不连续, 输 入一个时钟信号,输出为4位二进制(用sel表示)列选信号,用来选中列,进行扫描 扫描程序如下:Library ieee;use dz_xs isPort(enable,clk:in std_logic;-端口定义输入信号Sel:out std_logi

8、c_vector(3 downto 0);- 端口定义 输出信号End dz_xs;Architecture count of dz_xs isSignal lie:std_logic_vector(3 downto 0);BeginProcess(clk,enable) beginIf clk'event and clk='1'thenIf enable='1' thenIf lie>"0000" thenLie<=lie-"0001"ElseLie<="1111"End i

9、f; End if;End if;Sel<=lie;End process;字符样式设计本环节是建立一个数据库,使之能在扫描的同时读取所需要的信息,从而完成汉字的显示。本次设计“吕、苏、田、口”汉字样式设计程序如下:Library ieee;use dz_xs isPort(enable,clk:in std_logic;-端口定义 输入信号h0,h8:out std_logic_vector(7 downto 0);- 端口定义 输出信号(h0-列数据输出,h8-代表行数据输出)End dz_xs;Architecture count of dz_xs isSignal lie:std

10、_logic_vector(3 downto 0);-信号标志Signal past1:std_logic_vector(1 downto 0);BeginProcess(enable,clk)-脉冲、使能信号BeginIf clk'event and clk='1'thenIf enable='1' thenCase lie isWhen "00"=>Case lie is -“吕"字设计When "0011"=>h0<="00000000"h8<="

11、;01111110"When "0100"=>h0<="01111110"h8<="01000010"When "0101"=>h0<="01000010"h8<="01000010"When "0110"=>h0<="01000010"h8<="01000010"When "0111"=>h0<="010000

12、10"h8<="01000010"When "1000"=>h0<="01000010"h8<="01000010"When "1001"=>h0<="01000010"h8<="01000010"When "1010"=>h0<="01000010"h8<="01000010"When "1011"=>

13、;h0<="01000010"h8<="01000010"When "1100"=>h0<="01111110"h8<="01000010"When "1101"=>h0<="00000000"h8<="01111110"When others=>h0<="00000000"h8<="00000000”;End case;When "

14、;01"=>Case lie is -"苏" 字设计When "0011"=>h0<="00100000"h8<="00000000"When "0100"=>h0<="00100000"h8<="00000000"When "0101"=>h0<="00100000"h8<=""When "0110"=&g

15、t;h0<="01110000"h8<=""When "0111"=>h0<="00101000"h8<=""When "1000"=>h0<="00100011"h8<=""When "1001"=>h0<="00100000"h8<=""When "1010"=>h0<=&qu

16、ot;00101000"h8<=""When "101 l"=>h0<="01110000"h8<=""When "1100"=>h0<="00100000"h8<=""When "1101"=>h0<="00100000"h8<="00001100"When others=>h0<="00000000&q

17、uot;h8<="00000000"End case;When "10"=>Case lie is -“田" 字设计When"0100"=>h0<="00011111 "h8<=""When"0101"=>h0<="00010001 "h8<="00010000"When"0110"=>h0<="00010001 "h8<

18、="00010000"When"011 l"=>h0<="00010001 "h8<="00010000"When"1000"=>h0<="00011111 "h8<=""When"1001 "=>h0<="00010001 "h8<="00010000"When"1010"=>h0<="0001000

19、1 "h8<="00010000"When"101 l"=>h0<="00010001 "h8<="00010000"When"1100"=>h0<="00011111 "h8<=""When others=>h0<="00000000"h8<="00000000"End case;When "11"=>Case lie

20、is - " 口” 字设计When"0101 "=>h0<="00011111 "h8<=""When"0110"=>h0<="00010000"h8<="00100000"When"011 l"=>h0<="00010000"h8<="00100000"When"1000"=>h0<="00010000&quo

21、t;h8<="00100000"When"1001"=>h0<="00010000"h8<="00100000"When"1010"=>h0<="00010000"h8<="00100000"When"1011"=>h0<="00011111"h8<=""When others=>h0<="00000000"

22、;h8<="00000000"End case;End if;End if;End process;循环扫描及期间的延时环节为使汉字不断地循环显示, 并且使每个汉字之间有停顿, 就需要在中间加一定的延时和循环环节。在这一环节中,可以通过修改其数值来控制每个字母的显示时间,其程序如下:process(clk)variable int: integer range 0 to 10000;beginif clk event and clk= 1 thenif int<10000 thenint:=int+1;elseint:=0;if next1= ” 11” the

23、nnext1<= ” 00 ” ;elsenext1<= next1+ 1end if;end if;end if;end process;总程序library ieee;use yz_ok isport(enable,clk:in std_logic;sel:out std_logic_vector(3 downto 0);h0,h8:out std_logic_vector(7 downto 0);end yz_ok;architecture count of yz_ok issignal lie:std_logic_vector(3 downto 0);signal next

24、1: std_logic_vector(1 downto 0);begina1:process(clk,enable)beginIf clk'event and clk='1'thenIf enable='1' thenIf lie>"0000" thenLie<=lie-"0001"ElseLie<="1111"End if;End if;End if;Sel<=lie;End process;a2:process(enable,clk)beginIf clk'

25、event and clk='1'thenIf enable='1' thenCase next1 isWhen "00"=>Case lie isWhen "0011"=>h0<="00000000"h8<="01111110”;When "0100"=>h0<="01111110"h8<="01000010”;When "0101"=>h0<="010000

26、10"h8<="01000010"When "0110"=>h0<="01000010"h8<="01000010"When "0111"=>h0<="01000010"h8<="01000010"When "1000"=>h0<="01000010"h8<="01000010"When "1001"=>

27、;h0<="01000010"h8<="01000010"When "1010"=>h0<="01000010"h8<="01000010"When "1011"=>h0<="01000010"h8<="01000010"When "1100"=>h0<="01111110"h8<="01000010"When

28、"1101"=>h0<="00000000"h8<="01111110"When others=>h0<="00000000"h8<="00000000"End case;When "01"=>Case lie isWhen "0011"=>h0<="00100000"h8<="00000000"When "0100"=>h0<

29、;="00100000"h8<="00000000"When "0101"=>h0<="00100000"h8<=""When "0110"=>h0<="01110000"h8<=""When "0111"=>h0<="00101000"h8<=""When "1000"=>h0<=&q

30、uot;00100011"h8<=""When "1001"=>h0<="00100000"h8<=""When "1010"=>h0<="00101000"h8<=""When "101 l"=>h0<="01110000"h8<=""When "1100"=>h0<="0010000

31、0"h8<=""When "1101"=>h0<="00100000"h8<="00001100"When others=>h0<="00000000"h8<="00000000"End case;When "10"=>Case lie isWhen"0100"=>h0<="00011111 "h8<=""When&quo

32、t;0101"=>h0<="00010001 "h8<="00010000"When"0110"=>h0<="00010001 "h8<="00010000"When"011 l"=>h0<="00010001 "h8<="00010000"When"1000"=>h0<="00011111 "h8<="&

33、quot;When"1001"=>h0<="00010001 "h8<="00010000"When"1010"=>h0<="00010001 "h8<="00010000"When"101 l"=>h0<="00010001 "h8<="00010000"When"1100"=>h0<="00011111"h8

34、<=""When others=>h0<="00000000"h8<="00000000"End case;When "11"=>Case lie isWhen"0101 "=>h0<="00011111 "h8<=""When"0110"=>h0<="00010000"h8<="00100000"When"011 l&q

35、uot;=>h0<="00010000"h8<="00100000"When"1000"=>h0<="00010000"h8<="00100000"When"1001"=>h0<="00010000"h8<="00100000"When"1010"=>h0<="00010000"h8<="00100000"

36、When"101 i"=>h0<="00011111"h8<=""When others=>h0<="00000000"h8<="00000000"End case;When others=>h0<="00000000"h8<="00000000"End case;End if;End if;End process;a3:process(clk)variable int: integer range 0

37、 to 10000;beginif clk'event and clk='1'thenif int<10000 thenelseint:=0;if next1="11"thennext1<="00"elsenext1<= next1+'1'end if;end if;end if;end process;end count;第三章系统调试与仿真开发环境介绍Quartus II是Altera公司的综合性 PLD开发软件,支持原理图、VHDL Veril-ogHDL以及 AHDL(Altera Har

38、dware Description Language等多种设计输入形式,内嵌自有的综合器 以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程。Quartus II支持 Altera的IP核,包含了 LPM/MegaFunction宏功能模块库,使用户 可以充分利用成熟的模块,简化了设计的复杂性、加快了设计速度。对第三方EDA工具的良好支持也使用户可以在设计流程的各个阶段使用熟悉的第三方EDA工具。此外,Quartus II通过和 DSP Builder工具与 Matlab/Simulink 相结合,可以方便地 实现各种DSP应用系统;支持 Altera的片上可编程系统(SOPC开发,

39、集系统级 设计、嵌入式软件开发、可编程逻辑设计于一体,是一种综合性的开发平台。调试与仿真创建工程在Quartus II中新建一个 VHDL File文件,将VHDL代码输入这个文件,并保存到工 作目录,名为。利用new preject wizard 工具创建一个工程,工程名为yz_ok,顶层文件实体名为yz_ok,并将上面创建的文件加入到工程中。编译前设置(1)选择目标芯片。用 assignmemts- settings命令,弹出 settings对话框,选择 目标芯片为 EP1C3T144C&FfarUe Lijg LUE 杵FdlTirmgA-HT-MKwta L 虫'in

40、c11 EQ*T«tf £«4kp D:Oki*Oe R TW5-: SWfcTflfc Xnitva i L-vfanff卜 Fittan BvqrEiipiiril p I Laqc国 nJab PcvPlPfaMaZfv 4吗.T kiw4e&M 品2”Ejr 亏。”加mtialM 配HE L I DJrt131G|i|E« I 球* INf|口EMa.lRn%tern4岁*&士归1.旧HKL© .ft FF2ZT力工 口山1时十 EFien?阿二 WrK gMQM:处Fi ERSOqZEEE 心皿1 EPJCIVg ml

41、diEE2匚也九皿足 Q"KT mi . EFFzrsri: fid«s«: 后也皿皿国小kI EF-2ljM2E£J Epm"W EP3D0" KSUMmcI ERH 航飞 EMaTr44Ca LAdwamdl efufeg m为 51EI L甘温工三在J 4%一”:宿R E 曰二FE£C9 -皿3|Swr-Zikil* tta、1 l, F«ta (.Emsr知ptf plai.学 C«1 3ffJ Stwv KVATcad M*rhMp#Wi ubwf2田-Qi Bafc 0* 痔:w 9:led.

42、二二Z3图3-1选择目标器件(2)选择工作方式,编程方式,及闲置引脚状态单击上图中的 device&pin options 按钮,弹出 device&pin options 窗口。 在 General 项中选中auto-restart configuration after error, 使对FPGA的配置失败后能自动重新 配置,并加入 JTAG用户编码。图3-2选择配置器件工作方式在 configuration 项中,其下方的 Generate compressed bitstreams 处打勾,这样就 能产生用于EPCS的POF压缩配置文件。active serial。图3

43、-3选择编程方式在Unused pins项,将目标器件闲置引脚状态设置高阻态,即选择 As input,tri-stated 。图3-4设置闲置引脚状态在Configuration选项页,选择配置器件为 EPCS1其配置模式选择为全程编译设置好刖面的内谷之后,就可以进行编译了。选择 Processing菜单中start compilation ,在窗口的下方 processing栏中显示编译信息。中1J |iteEtaiXfMHIIX124 fudter 翼R口工 4k - 钟 J一:口*2 3w»I. I命mrw E a I .二 y“工 a J" i4 L»M

44、n- tiMrcw> r i.n >xq j . 1 口图3-5全程编译成功完成完成后在工程管理窗口左是角显示了工程yz_ok的层次结构和其中结构模块耗用的逻辑宏单元数。此栏的右边是编译处理流程,包括数据网表建立、逻辑综合、 适配、配置文件装配和时序分析等。时序仿真(1)新建一个矢量波形文件,同时打开波形编辑器。设置仿真时间为50us,保存波形文件为。clk,enable 及(2)将工程yz_ok的端口信号名选入波形编辑器中,所选的端口有 总线h0和h8。设置clk的时钟周期为 2us,占空比为50%。图3-6选择仿真控制仿真器参数设置。选择菜单Assignment中的Settings,在Settings窗口下选择Simulator,在右侧的 simulation mode 项下选择timing ,即选择时序仿真,并选择

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论