EDA 16x16点阵显示要点.docx
- 文档编号:12939144
- 上传时间:2023-06-09
- 格式:DOCX
- 页数:21
- 大小:231.91KB
EDA 16x16点阵显示要点.docx
《EDA 16x16点阵显示要点.docx》由会员分享,可在线阅读,更多相关《EDA 16x16点阵显示要点.docx(21页珍藏版)》请在冰点文库上搜索。
EDA16x16点阵显示要点
课程设计报告
课程名称数字系统与逻辑设计
课题名称16*16点阵显示
专业通信工程
班级
学号
姓名
指导教师乔汇东胡瑛
2012年7月2日
湖南工程学院
课程设计任务书
课程名称数字系统与逻辑设计
课题16*16点阵显示
专业班级通信工程1001班
学生姓名
学号
指导老师乔汇东胡瑛
审批乔汇东
任务书下达日期2012年6月23日
任务完成日期2012年7月2日
《数字系统与逻辑设计》课程设计任务书
一、设计目的
全面熟悉、掌握VHDL语言基本知识,掌握利用VHDL语言对常用的的组合逻辑电路和时序逻辑电路编程,把编程和实际结合起来,熟悉编制和调试程序的技巧,掌握分析结果的若干有效方法,进一步提高上机动手能力,培养使用设计综合电路的能力,养成提供文档资料的习惯和规范编程的思想。
二、设计要求
1、设计正确,方案合理。
2、程序精炼,结构清晰。
3、设计报告5000字以上,含程序设计说明,用户使用说明,源程序清单及程序框图。
4、上机演示。
5、有详细的文档。
文档中包括设计思路、设计仿真程序、仿真结果及相应的分析与结论。
三、进度安排
第二十周星期一:
课题讲解,查阅资料
星期二:
总体设计,详细设计
星期三:
编程,上机调试、修改程序
星期四:
上机调试、完善程序
星期五:
答辩
星期六-星期天:
撰写课程设计报告
附:
课程设计报告装订顺序:
封面、任务书、目录、正文、评分、附件(A4大小的图纸及程序清单)。
正文的格式:
一级标题用3号黑体,二级标题用四号宋体加粗,正文用小四号宋体;行距为22。
正文的内容:
一、课题的主要功能;二、课题的功能模块的划分(要求画出模块图);三、主要功能的实现;四、系统调试与仿真;五、总结与体会;六、附件(所有程序的原代码,要求对程序写出必要的注释);七、评分表。
一.16*16点阵显示的总体设计
1.116*16点阵显示
本实验主要完成汉字字符在LED上的显示,16*16扫描LED点阵的工作原理与8位扫描数码管类似,只是显示的方式与结果不一样而已。
下面就本实验系统的16*16点阵的工件原理做一些简单的说明。
16*16点阵由此256个LED通过排列组合而形成16行*16列的一个矩阵式的LED阵列,俗称16*16点阵。
本实验的示例程序依次显示的是“湖南工程学院”,要求每隔一秒换下一个字显示。
1.2基本设计思想
单个的LED的电路如下图11-1所示:
图11-1单个LED电路图
由上图可知,点阵内的二极管间的连接都是行共阳,列共阴。
本实验采用共阴,当二极管的共阳极为高电平,共阴极为低电平时,所接点发光;反之处于截止状态,不放光。
本实验采取行扫描方式,用列给文字信息,利用周期为1s的脉冲来控制所显示的字。
即对于单个LED的电路图当Rn输入一个高电平,同时Cn输入一个低电平时,电路形成一个回路,LED发光。
也就是LED点阵对应的这个点被点亮。
16*16点阵也就是由16行和16列的LED组成,其中每一行的所有16个LED的Rn端并联在一起,每一列的所有16个LED的Cn端并联在一起。
通过给Rn输入一个高电平,也就相当于给这一列所有LED输入了一个高电平,这时只要某个LED的Cn端输入一个低电平时,对应的LED就会被点亮。
具体的电路如下图11-2所示:
图11-216*16点阵电路原理图
在点阵上显示一字符是根据其字符在点阵上的显示的点的亮灭来表示的,如下图11-3所示:
图11-3字符在点阵上的显示
在上图中,显示的是一个“汉”字,只要将被“汉”字所覆盖的区域的点点亮,则在点阵中就会显示一个“汉”字。
根据前面我们所介绍的点阵显示的原理,当我们选中第一列后,根据要显示汉字的第一列中所需要被点亮的点对应的Rn置为高电平,则在第一列中需要被点亮的点就会被点亮。
依此类推,显示第二列、第三列……第N列中需要被点亮的点。
然后根据人眼的视觉原理,将每一列显示的点的间隔时间设为一定的值,那么我们就会感觉显示一个完整的不闪烁的汉字。
同时也可以按照这个原理来显示其它的汉字。
下图11-4是一个汉字显示所需要的时序图:
图11-4显示时序图
二.16*16点阵显示的功能实现
2.1系统的总体框图
2.2系统的流程图
否是
是
否
是否
是否
2.3系统各功能模块实现
1.六进制计数器当每一个时钟上升沿到来时,计数器就记一次数。
其程序如下:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityjyis
port(clk,rst:
instd_logic;
din:
bufferstd_logic_vector(3downto0));
endjy;
architecturebofjyis
begin
process(clk,rst)
begin
ifrst='1'thendin<="0000";
elsifclk'eventandclk='1'then
ifdin=7thendin<="0000";
elsedin<=din+1;
endif;
endif;
endprocess;
endb;
其仿真波形:
2.A为列驱动控制器,该模块控制所亮的行,当输出为1000000000000000时,给点阵的第一行高电平,输出为010*********时,给点阵的第二行高电平,依次类推,逐次给每行高电平。
其程序:
A:
process(hl)
begin
casehlis
when"0000"=>row<="1000000000000000";
when"0001"=>row<="0100000000000000";
when"0010"=>row<="0010000000000000";
when"0011"=>row<="0001000000000000";
when"0100"=>row<="0000100000000000";
when"0101"=>row<="0000010000000000";
when"0110"=>row<="0000001000000000";
when"0111"=>row<="0000000100000000";
when"1000"=>row<="0000000010000000";
when"1001"=>row<="0000000001000000";
when"1010"=>row<="0000000000100000";
when"1011"=>row<="0000000000010000";
when"1100"=>row<="0000000000001000";
when"1101"=>row<="0000000000000100";
when"1110"=>row<="0000000000000010";
when"1111"=>row<="0000000000000001";
whenothers=>row<="0000000000000000";
ENDcase;
endprocessA;
其仿真波形:
3.B为行驱动控制器din控制的是所显示的字。
例如当din为000时,表示显示第一个字;当为001时,表示显示第二个字,依次类推。
hl控制所显示的为字的第几行,例如当hl为全是0时,表示输出字的第一行文字信息,依次类推。
其中包括两种花样的显示方式,其描述如下:
B:
process(clk,rst,din)
begin
ifrst='1'thendout<="0000000000000000";
hl<="0000";din<="000";
elsifclk'eventandclk='1'then
ifdin>6thendin<="000";
elsedin<=din+1;
ifhl>15thenhl<="0000";
elsehl<=hl+1;
endif;
casedinis
when"000"=>
casehlis
when"0000"=>dout<="1000000000011111";
when"0001"=>dout<="0100001000010001";
when"0010"=>dout<="0010111110010001";
when"0011"=>dout<="0010001000010001";
when"0100"=>dout<="0001001000011111";
when"0101"=>dout<="1000001000010001";
when"0110"=>dout<="0100111111010001";
when"0111"=>dout<="0010100001010001";
when"1000"=>dout<="0001100001011111";
when"1001"=>dout<="0000100001010001";
when"1010"=>dout<="0001100001010001";
when"1011"=>dout<="0001111111010001";
when"1100"=>dout<="0010000000010001";
when"1101"=>dout<="0100000000100001";
when"1110"=>dout<="0100000001000111";
when"1111"=>dout<="0000000010000001";
whenothers=>dout<=null;
endcase;
when"001"=>
casehlis
when"0000"=>dout<="0000000000000000";
when"0001"=>dout<="0000000100000000";
when"0010"=>dout<="0001111111111000";
when"0011"=>dout<="0000000100000000";
when"0100"=>dout<="0000000100000000";
when"0101"=>dout<="0000000100000000";
when"0110"=>dout<="0111111111111110";
when"0111"=>dout<="0100010010000010";
when"1000"=>dout<="0100001100000010";
when"1001"=>dout<="0100111111000010";
when"1010"=>dout<="0100000100000010";
when"1011"=>dout<="0100000100000010";
when"1100"=>dout<="0101111111111010";
when"1101"=>dout<="0100000100000010";
when"1110"=>dout<="0100000100000110";
when"1111"=>dout<="0000000000000011";
whenothers=>dout<=null;
endcase;
when"010"=>************
其仿真波形:
三.系统的调试与仿真
整个系统的调试与仿真如下图:
调试成功:
仿真波形成功:
部分生成的电路图如下:
四.总体与体会
这次EDA课程设计历时三晚上。
三个晚上在实验室里做EDA,虽然这的课程设计只有短短的三晚,但是这依旧是身体和精神上的折磨,经过了各种挣扎,才完成了这次“艰难的实验”。
有了这次课程设计设计,进一步加深了对EDA的了解,懂得了一些以前书本上没有搞懂的东西。
让我对它兴趣盎然,不再认为它是一门非常无聊的学科,你知道的,当程序做出来并且仿真成功的那一刻你是多么的开心。
这次实验我明白了点阵显示的原理和一些EDA的基本东西,同时也对它的基本思想有了本质的区别认识,懂得了led的显示以及二极管发光与汉字显示的关系。
了解一些仿真软件的使用,明白仿真波形的对电路的涵义。
这也锻炼了我作为一个新时代的大学生做事应该有的基本素质和基本能力。
首先,我知道了做实验之前应该有个对实验的整体认识,实验的大体了解以及基本知识的储备。
其次,要对整体的实验进行分解处理,要有层次性,从整体到部分的分散,“大事化小,小事化了”的基本思想这里得以充分应用。
再次。
根据各个部分的的功能进行“各个击破”,对各个功能模块分类,分别管理设计。
最后,整合各个部分的功能,对整体进行仿真调试。
实验过程难免会出现错误,无数次的理解错误,无数次的程序错误,无数次的仿真错误,无数次的报告修改错误,这些都无可厚非,这本来就是发现错误,更改错误的过程,通过错误你才能理解的更加深刻,你才明白的更加彻底。
成功等于无数的失败(错误)加上一次的正确。
只有经历了你才知道成功的可贵之处,才会有更多的成就感与喜悦感。
总而言之,这次设计的16×16点阵显示汉字还是比较成功的,就是报告阶段产生了小插——报告不通过,因为自己的懒惰就无知的从网上拷贝了一篇非自己的心得的心得,可是乔老师是什么人,怎么逃过他的法眼,这点小聪明被拆穿了,聪明反被聪明误,唉,得不偿失。
不过,真的要感谢乔老师,让我明白了这些,清楚地认识了自己,是您让我明白了诚实的重要性。
再次感谢乔老师和胡老师的辛勤付出。
谢谢你们。
五附件
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityeda1is
port(clk,rst:
instd_logic;
din:
bufferstd_logic_vector(2downto0);
dout:
outstd_logic_vector(15downto0);
row:
outstd_logic_vector(15downto0);
hl:
bufferstd_logic_vector(3downto0));
endeda1;
architectureaofeda1is
begin
A:
process(hl)
begin
casehlis
when"0000"=>row<="1000000000000000";
when"0001"=>row<="0100000000000000";
when"0010"=>row<="0010000000000000";
when"0011"=>row<="0001000000000000";
when"0100"=>row<="0000100000000000";
when"0101"=>row<="0000010000000000";
when"0110"=>row<="0000001000000000";
when"0111"=>row<="0000000100000000";
when"1000"=>row<="0000000010000000";
when"1001"=>row<="0000000001000000";
when"1010"=>row<="0000000000100000";
when"1011"=>row<="0000000000010000";
when"1100"=>row<="0000000000001000";
when"1101"=>row<="0000000000000100";
when"1110"=>row<="0000000000000010";
when"1111"=>row<="0000000000000001";
whenothers=>row<="0000000000000000";
ENDcase;
endprocessA;
B:
process(clk,rst,din)
begin
ifrst='1'thendout<="0000000000000000";
hl<="0000";din<="000";
elsifclk'eventandclk='1'then
ifdin>6thendin<="000";
elsedin<=din+1;
ifhl>15thenhl<="0000";
elsehl<=hl+1;
endif;
casedinis
when"000"=>
casehlis
when"0000"=>dout<="1000000000011111";
when"0001"=>dout<="0100001000010001";
when"0010"=>dout<="0010111110010001";
when"0011"=>dout<="0010001000010001";
when"0100"=>dout<="0001001000011111";
when"0101"=>dout<="1000001000010001";
when"0110"=>dout<="0100111111010001";
when"0111"=>dout<="0010100001010001";
when"1000"=>dout<="0001100001011111";
when"1001"=>dout<="0000100001010001";
when"1010"=>dout<="0001100001010001";
when"1011"=>dout<="0001111111010001";
when"1100"=>dout<="0010000000010001";
when"1101"=>dout<="0100000000100001";
when"1110"=>dout<="0100000001000111";
when"1111"=>dout<="0000000010000001";
whenothers=>dout<=null;
endcase;
when"001"=>
casehlis
when"0000"=>dout<="0000000000000000";
when"0001"=>dout<="0000000100000000";
when"0010"=>dout<="0001111111111000";
when"0011"=>dout<="0000000100000000";
when"0100"=>dout<="0000000100000000";
when"0101"=>dout<="0000000100000000";
when"0110"=>dout<="0111111111111110";
when"0111"=>dout<="0100010010000010";
when"1000"=>dout<="0100001100000010";
when"1001"=>dout<="0100111111000010";
when"1010"=>dout<="0100000100000010";
when"1011"=>dout<="0100000100000010";
when"1100"=>dout<="0101111111111010";
when"1101"=>dout<="0100000100000010";
when"1110"=>dout<="0100000100000110";
when"1111"=>dout<="0000000000000011";
whenothers=>dout<=null;
endcase;
when"010"=>
casehlis
when"0000"=>dout<="0000000000000000";
when"0001"=>dout<="0001111111111000";
when"0010"=>dout<="0001111111111000";
when"0011"=>dout<="0000000110000000";
when"0100"=>dout<="0000000110000000";
when"0101"=>dout<="0000000110000000";
when"0110"=>dout<="0000000110000000";
when"0111"=>dout<="0000000110000000";
when"1000"=>dout<="0000000110000000";
when"1001"=>dout<="0000000110000000";
when"1010"=>dout<="0000000110000000";
when"1011"=>dout<="0000000110000000";
when"1100"=>dout<="0000000110000000";
when"1101"=>dout<="0111111111111110";
when"1110"=>dout<="0111111111111110";
when"1111"=>dout<="0000000000000000";
whenothers=>dout<=null;
endcase;
when"011"=>
casehlis
when"0000"=>dout<="0000010000000000";
when"0001"=>dout<="0000100000000000";
when"0010"=>dout<="0001000111111000";
when"0011"=>dout<="0011000100001000";
when"0100"=>dout<="10010001000
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- EDA 16x16点阵显示要点 16 x16 点阵 显示 要点