已阅读5页,还剩9页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
点阵led显示的设计1课程设计指标(1)实现点阵led的动态扫描。 (2)在点阵led显示学生自己的中文名字、班级和学号。(3)两个功能键:1)、启动显示,2)、停止显示。2课程设计的总体方案2.1 方案比较在1616led发光二极管点阵上显示汉字的方式有两种:第一种方法是滚屏显示学生班级,姓名,学号,另一种方法是每次显示一个汉字,一秒钟后刷新显示第二个汉字,再一秒钟后刷新显示第三个汉字,依次刷新显示班级和学号数。循环显示以上内容。对于前一种方案,可以依次对多汉字抽取像素信息,并按顺序排队存放于rom之中,这样便可得到一个待显示数据序列。然后通过寻址的方法来控制该数据序列的释放过程,就可实现在1616 led 发光二极管点阵上滚动显示多汉字信息的目的。这种方法虽然看起来比较简单,但是实现起来却有许多困难,由于滚屏显示是将需要显示的内容当成一个整体,即是在行方向上看成许多汉字排成一排,然后通过指针顺序控制汉字的显示,而对于在vhdl语言中指针的使用这方面的内容我们接触不多,没有经验,因此做起来比较困难。而且,如果滚屏显示时间把握得不好,那么显示的效果将会受到很大的影响。而采用刷新显示对时间方面要求比较低,容易控制。而且刷新显示比较符合我们的习惯。2.2 方案选择 通过上述比较,我们决定采用方案二。3设计的详细原理3.1 系统结构及工作原理led点阵显示控制的传统方式是采用单片机或系统机作为cpu来实现,当系统显示的信息比较多时,由于单片机的输入/输出端口(i/o)有限,采用此方式的成本将大大增加,系统和程序的设计难度也急剧增加;而且,当系统完成后修改、改变显示方式或扩展时,所需改动的地方比较大,甚至有可能需要重新设计;另外,在以显示为主的系统中,单片机的运算和控制等主要功能的利用率很低,单片机的优势得不到发挥,相当于很大得资源浪费。如果采用现场可编程逻辑器件作为cpu来设计控制器,选择合适的器件,利用器件丰富的i/o口、内部逻辑和连线资源,采用自顶而下的模块化设计方法,可以方便地设计整个显示系统。由于pld器件的外围器件很少,且可以利用pld的编程端口(可复用)进行在系统编程,使得系统的修改、显示方式的改变和扩展都变的非常简单、方便。本系统采用单个1616led点阵逐列左移(或右移)显示汉字或字符,需显示汉字或符号的1616点阵字模已经存放在字模存储器中。显示控制器由复杂可编程逻辑器件(cpld)epm7128slc84-15来实现,系统组成原理框图如图1所示。系统原理是pld控制模块首先产生点阵字模地址,并从存储器读出数据存放在16位寄存器中,然后输出到led点阵的列,同时对点阵列循环扫描以动态显示数据,当需要显示数据字模的列和被选中的列能够协调配合起来,就可以正确显示汉字或符号。 图1点阵显示控制器原理框图3.2 控制器设计及工作原理从框图中可以看出,系统的关键在于控制器的设计。led点阵显示数据地址的产生、点阵列扫描和需显示数据的配合以及点阵显示方式控制的实现都必须由控制器来实现。对单个1616led点阵显示控制器进行设计的顶层逻辑原理图如图2所示。图2 控制器顶层电路原理图原理图中包含5个模块,其中sequ模块产生读信号rdn和10位地址线(ad9.0)中的最低位地址ad0,ad0和其它模块产生的地址配合,通过8位数据线(data7.0)从存储器读出列高字节(ad0=1时)和低字节(ad0=0时),由于1616点阵字模数据为32个字节,每列含两个字节即16位,它由hout7.0和lout7.0 来构成;模块r由adclk提供一个慢时钟构成16进制计数器,它的输出送给r模块,为变模计数器r提供一个模,通过模的规律变化以控制点阵按照左移或右移等显示方式进行显示;模块decode4_16是一个416译码器,其输出l15.0连接到led点阵的列,可选中1616led点阵的某列,并显示sequ模块输出的点阵高低字节(字模)数据;模块r为点阵显示控制的核心,为了实现点阵汉字从右到左逐列移动显示,它由r模块提供的模,在r内部构成两个变模计数器,其中一个用来产生读字模数据的地址ad4.1,另外一个产生1616led点阵列扫描选择地址r3.0,列扫描选择地址由decode4_16译码后输出;模块rdd为字选择计数器,其输出可以控制多块led显示器的显示及其显示方式。为了实现字符由右到左逐列移动显示,模块r内部设计了两个由r控制的变模加法计数器,其中r3.0为列扫描控制线。3.3 系统扩展以上为显示单个字符系统,若要同时显示多个字符时,可以按照图1加入虚线框内部分,并且模块rdd设计成r的格式,把ad4作为rdd的记数脉冲即可。按照epm7128slc8415的资源(64个i/o口,2个全局时钟,1个全局复位和5个可复用专用端口,5000个等效逻辑门,192个内部寄存器),若不外部扩展译码器,可以有效控制约16个字符的显示;而采用外部译码器时,可以控制的字符数将大大增加,但须注意时钟clk的频率需要提高,以视觉不能看到整个字符的闪烁为基准。4系统软件设计控制核心模块r采用vhdl语言设计,在开发软件max+plus 10.2中实现,详细程序见附录a。从程序可以看出,随着r从0000到1111不断变化,即实现了系统时钟对点阵led的不停扫描。当r=0000时,即读出第一个字符的第一列并显示在led的第1列;当r=0001时,即读出第一个字符的第一、二列并显示在led的第1、2列由此类推,由于系统扫描时钟为1khz,扫描速度比较快,因此,当完成一次扫描时,在人眼视觉差的作用下会看到整个的字符好像是静态显示的一样。然后,在通过控制rdd按一定时间在一定的范围顺序自增,每自增1则显示一个汉字,这样就能实现多个汉字的刷新显示了。5设计的仿真和运行结果以上程序在max+plus10.2上仿真验证结果如图3所示。 图3 r模块仿真时序图在设计中,应注意模块sequ的记数时钟clk频率的选择应远远大于模块r的记数时钟adclk的频率,r的记数时钟为地址最低位ad0,字选择计数器的时钟脉冲为16进制模块r的最高位out3。这样, r3.0变化的足够快,在点阵led上可以看到完整的字符,并当r记数到15产生进位返回到0时,字选择模块rdd获得一个记数脉冲并加1(上升沿触发),此后将显示下一个字符。6、结论以上点阵字符显示系统在开发软件max+plus10.2上经仿真验证无误。另外,由于器件含有丰富的可编程连线资源,当系统显示方式和显示字符个数变化时,只需要通过开发工具修改控制器的控制逻辑和连接关系,再将修改完成的程序通过下载电缆下载到器件即可,而电路板可以不做任何改动,可见,系统的维护和修改是极其方便和容易的。当然,由于clpd的驱动能力有限,当点阵led显示亮度不够时,需要添加led驱动电路以得到合适的led显示亮度。7.心得体会两周的eda课程设计时间虽然很短暂,但我从中获益匪浅.首先对eda这门课程有了更深刻的了解,因为课程设计本身要求将以前所学的理论知识运用到实际的电路程序设计当中去,在设计的过程中,我无形中便加深了对vhdl语言的了解及运用能力,并且对课本以及以前学过的知识有了一个更好的总结与理解;以前的eda实验只是针对某一个小的功能设计,而eda课程设计对我们的总体电路的设计的要求更严格,需要通过翻阅复习以前学过的知识确立了实验总体设计方案,然后逐步细化进行各模块的设计;其次,在程序仿真的过程中总会出现一些问题,需要我们细心解决,所以这两周下来,我对程序故障的排查能力有了很大的提高;再次,通过此次课程设计,我对altera公司的max+plus软件从编译、排错到波形仿真、下载到fpga器件上仿真都有了一定的掌握。也加强了发现问题,解决问题的能力,同时还学会了和他人的有效合作、高效率的解决问题,这对我们以后的工作和学习的帮助都很有用处。参考文献电子技术实验指导书,李国丽,朱维勇主编,中国科技大学出版社。电子技术基础 模拟部分(第四版),康华光主编,高教出版社。数字电子技术基础(第四版),阎石主编,高教出版社。eda技术基础,谭会生主编,湖南大学出版社。eda技术实用教程,李洋主编,机械工业出版社。附录a 程序清单library ieee; use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity dot_led is port(clk :in std_logic; -系统时钟(1khz) key: in std_logic_vector(1 downto 0);-功能键,key=01,启动显示;key=10,停止显示 r:out std_logic_vector(3 downto 0); -点阵led行输入,当r=0000, 表示第一列有效. l:out std_logic_vector(15 downto 0); -点阵led列输入 end dot_led; architecture display of dot_led is signal rdd:std_logic_vector(3 downto 0);-控制显示一个汉字或字符的时间 signal ldd:std_logic_vector(3 downto 0);-ldd用来选择扫描的列 signal cnt0: integer range 0 to 2000; signal temp: std_logic_vector(1 downto 0); begin process(clk,key) begin if (key=11) then cnt01999 then cnt0=0;temp=key; else cnt0=cnt0+1; end if; end if; end process; process(clk) variable cnt: integer; variable tmp:std_logic_vector(3 downto 0); begin if clkevent and clk=1 then if cnt500000 then cnt:=cnt+1; else cnt:=0; if tmp=1100 then tmp:=0000; else tmp:=tmp+1; end if; end if; end if; rdd=tmp; end process; process(clk) variable tmb:std_logic_vector(3 downto 0); begin if clkevent and clk=1 then if tmb=1111 then tmb:=0000; else tmb:=tmb+1; end if; end if; ldd r=0000; l r=0001; l r=0010; l r=0011; l r=0100; l r=0101; l r=0110; l r=0111; l r=1000; l r=1001; l r=1010; l r=1011; l r=1100; l r=1101; l r=1110; l r=1111; lnull; end case; elsif rdd=0001and temp=01 then -子 case ldd is when 0000 = r=0000; l r=0001; l r=0010; l r=0011; l r=0100; l r=0101; l r=0110; l r=0111; l r=1000; l r=1001; l r=1010; l r=1011; l r=1100; l r=1101; l r=1110; l r=1111; lnull; end case; elsif rdd=0010and temp=01 then -06 case ldd is when0000 = r=0000; l r=0001; l r=0010; l r=0011; l r=0100; l r=0101; l r=0110; l r=0111; l r=1000; l r=1001; l r=1010; l r=1011; l r=1100; l r=1101; l r=1110; l r=1111; lnull; end case; elsif rdd=0011and temp=01 then -02 case ldd is when 0000= r=0000; l r=0001; l r=0010; l r=0011; l r=0100; l r=0101; l r=0110; l r=0111; l r=1000; l r=1001; l r=1010; l r=1011; l r=1100; l r=1101; l r=1110; l r=1111; lnull; end case; elsif rdd=0100and temp=01 then -班 case ldd is when 0000= r=0000; l r=0001; l r=0010; l r=0011; l r=0100; l r=0101; l r=0110; l r=0111; l r=1000; l r=1001; l r=1010; l r=1011; l r=1100; l r=1101; l r=1110; l r=1111; lnull; end case; elsif rdd=0101and temp=01 then -吴 case ldd is when 0000= r=0000; l r=0001; l r=0010; l r=0011; l r=0100; l r=0101; l r=0110; l r=0111; l r=1000; l r=1001; l r=1010; l r=1011; l r=1100; l r=1101; l r=1110; l r=1111; lnull; end case; elsif rdd=0110and temp=01 then -云 case ldd is when 0000= r=0000; l r=0001; l r=0010; l r=0011; l r=0100; l r=0101; l r=0110; l r=0111; l r=1000; l r=1001; l r=1010; l r=1011; l r=1100; l r=1101; l r=1110; l r=1111; lnull; end case; elsif rdd=0111and temp=01 then -20 case ldd is when 0000= r=0000; l r=0001; l r=0010; l r=0011; l r=0100; l r=0101; l r=0110; l r=0111; l r=1000; l r=1001; l r=1010; l r=1011; l r=1100; l r=1101; l r=1110; l r=1111; lnull; end case; elsif rdd=1000and temp=01 then -06 case ldd is when0000 = r=0000; l r=0001; l r=0010; l r=0011; l r=0100; l r=0101; l r=0110; l r=0111; l r=1000; l r=1001; l r=1010; l r=1011; l r=1100; l r=1101; l r=1110; l r=1111; lnull; end case; elsif rdd=1001and temp=01 then -57 case ldd is when 0000= r=0000; l r=0001; l r=0010; l r=0011; l r=0100; l r=0101; l r=0110; l r=0111; l r=1000; l r=1001; l r=1010; l r=1011; l r=1100; l r=1101; l r=1110; l r=1111; lnull; end case; elsif rdd=1010and temp=01 then -17 case ldd is when 0000= r=0000; l r=0001; l r=0010; l r=0011; l r=0100; l r=0101; l r=0110; l r=0111; l r=1000; l r=1001; l r=1010; l r=1011; l r=1100; l r=1101
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年不动产买卖合同2篇
- 2024年标准版施工代理协议版B版
- 2024年度物流服务合同标的及物流服务范围和要求2篇
- 2024年事业单位合同制员工劳动权益保障与争议解决合同2篇
- 2024年某地区桩基工程实施协议版B版
- 2024年度医疗器械购销及安装调试服务合同3篇
- 2024年三方合同主体变更及知识产权转移协议3篇
- 2024年度品牌合作合同标的为联合营销活动3篇
- 2024年期货交易风险控制与合规管理合同3篇
- 2024“智能教育”在线学习平台建设合同2篇
- 钢化玻璃的MSDS英文报告
- 大学生情绪管理1500字论文2篇
- 2023广东省成人高考《英语》(高升专)考试卷及答案(单选题型)
- 《德米安 埃米尔 辛克莱年少时的故事》读书笔记思维导图PPT模板下载
- 年产万吨天然饮用水生产项目可行性研究报告
- 临床药理学第十四章 肾功能不全临床用药
- YS/T 682-2008钌粉
- GB/T 5976-2006钢丝绳夹
- 丽声妙想英文绘本第一级 My Dad课件
- 部编版五年级语文上-句子专项课件
- 初中语文人教九年级下册《统一》PPT
评论
0/150
提交评论