数字系统与逻辑设计16x16点阵显示Word下载.docx
《数字系统与逻辑设计16x16点阵显示Word下载.docx》由会员分享,可在线阅读,更多相关《数字系统与逻辑设计16x16点阵显示Word下载.docx(22页珍藏版)》请在冰豆网上搜索。
5、有详细的文档。
文档中包括设计思路、设计仿真程序、仿真结果及相应的分析与结论。
三、进度安排
第二十周星期一:
课题讲解,查阅资料
星期二:
总体设计,详细设计
星期三:
编程,上机调试、修改程序
星期四:
上机调试、完善程序
星期五:
答辩
星期六-星期天:
撰写课程设计报告
附:
课程设计报告装订顺序:
封面、任务书、目录、正文、评分、附件(A4大小的图纸及程序清单)。
正文的格式:
一级标题用3号黑体,二级标题用四号宋体加粗,正文用小四号宋体;
行距为22。
正文的内容:
一、课题的主要功能;
二、课题的功能模块的划分(要求画出模块图);
三、主要功能的实现;
四、系统调试与仿真;
五、总结与体会;
六、附件(所有程序的原代码,要求对程序写出必要的注释);
七、评分表。
目录
一、16*16点阵显示系统的总体设计5
1.1、16*16点阵显示设计5
1.2、基本设计思想5
二、16*16点阵显示系统的功能实现6
2.1、系统的总体框图6
2.2、程序流程图7
2.3、系统各功能模块的实现8
2.3.1时序控制模块8
2.3.2扫描控制8
2.3.3显示控制模块9
三、16*16点阵显示系统的调试与仿真12
四、总结与体会15
五、附录(源程序)15
六、评分表21
一、16*16点阵显示系统的总体设计
1.1、16*16点阵显示设计
设计一个16*16的LED点阵显示器,完成汉字字符在LED上的显示,并且依次显示的是“湖南工程学院”,要求每隔一秒换下一个字显示。
1.2、基本设计思想
本实验主要完成汉字字符在LED上的显示,16*16扫描LED点阵的工作原理与8位扫描数码管类似,只是显示的方式与结果不一样而已。
下面就本实验系统的16*16点阵的工件原理做一些简单的说明。
16*16点阵由此256个LED通过排列组合而形成16行*16列的一个矩阵式的LED阵列,俗称16*16点阵。
单个的LED的电路如下图11-1所示:
图11-1单个LED电路图
由上图可知,对于单个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、系统的总体框图
16*16点阵系统即显示屏为16行、16列的LED显示灯,那么控制这些灯的亮暗就可以达到汉字的显示的目的,要求有一个脉冲循环扫描,我们采用行扫描,当扫描的和我们先设计好的汉字模型的高电平相匹配时,字就会相应的点亮。
由于扫描的速度很快,我们人的眼睛并不会感到灯的闪烁,所以每扫描完16行就会显示在我们眼中一个汉字了。
但要所有的汉字可以依次的显示出来并不停的循环显示,就还要有一个时序控制电路来控制,这个时序控制电路还有自动清零的功能,这样就可以实现循环的效果。
其设计总体框图如下:
2.2、程序流程图
N
Y
2.3、系统各功能模块的实现
2.3.1时序控制模块
此模块用来控制每个字的显示时间,当计满1000个脉冲时jishu自动清零,即每个汉字显示1000个脉冲时间。
一共有六个汉字(湖、南、工、程、学、院)。
当zishu=5时,zishu自动清零,此后是这些汉字显示的下一个循环,如此不停的循环显示各个汉字。
其程序如下:
com1:
process(clk)
begin
ifclk'
eventandclk='
1'
then
nb<
=nb+1;
ifjishu<
999then
jishu<
=jishu+1;
test<
='
0'
;
else
=0;
endif;
endif;
iftest'
eventandtest='
ifzishu<
5then
zishu<
=zishu+1;
elsezishu<
endif;
endprocesscom1;
2.3.2扫描控制
这是用来实现行扫描控制,每扫描16行,nb自动清零,这样就提供了一个循环行扫描的功能,这样就可以循环显示每个汉字。
此功能的相关程序语句如下:
signalnb:
std_logic_vector(3downto0);
ifclk'
2.3.3显示控制模块
此模块用来实现显示出相应的汉字。
zishu控制汉字的个数,nb控制扫描的行数。
其程序实现如下:
com2:
process(clk)
variablec,r:
std_logic_vector(15downto0);
begin
casezishuis
when0=>
--湖
casenbis
when"
0000"
=>
r:
="
1000000000000000"
;
c:
1011110111111011"
0001"
0100000000000000"
1100110111000001"
0010"
0010000000000000"
1110110111011011"
0011"
0001000000000000"
1111110111011011"
0100"
0000100000000000"
0110000000011011"
0101"
0000010000000000"
1001110111000011"
0110"
0000001000000000"
1101110101011011"
0111"
0000000100000000"
1111000000011011"
when"
1000"
0000000010000000"
1110011101011011"
1001"
0000000001000000"
1101011101000011"
1010"
0000000000100000"
0011011101011011"
1011"
0000000000010000"
1011011101011011"
1100"
0000000000001000"
1101"
0000000000000100"
1011000001011011"
1110"
0000000000000010"
1011011110101011"
1111"
0000000000000001"
1011111101110111"
endcase;
when1=>
--南
1111111011111111"
1111111011111011"
1000000000000001"
1011011111011011"
1011101110111011"
1010000000001011"
1011111011111011"
1011111011101011"
1011111111110111"
endcase;
when2=>
--工
casenbis
1111111111111111"
1111111111110111"
1000000000000011"
when"
0000000000100001"
when3=>
--程
1111011111111011"
1110001000000001"
0000111011111011"
1110111011111011"
0000000011111011"
1110111000000011"
1100011111111111"
1100100000000001"
1010101111011111"
1010111111010111"
0110111000000011"
1110111111011111"
1110111111011011"
1110100000000001"
1110111111111111"
endcase;
when4=>
--学
1101110111110111"
1110111011110111"
1110111011101111"
1011111111111101"
0111111111111011"
1110000000011111"
1111111110111111"
1111111001111011"
1111101011111111"
1111110111111111"
when5=>
--院
1111111101111111"
1000111110111111"
1011000000000001"
1010101111111101"
1010011111101011"
1001110000000111"
1010111111111111"
1011011111110111"
1011000000000011"
1011011101011111"
1001011101011111"
1010111101011111"
1011111011011101"
1011110111100001"
1011001111111111"
whenothers=>
null;
cn<
=notc;
rn<
=notr;
endprocesscom2;
三、16*16点阵显示系统的调试与仿真
在没有修改之前,编译出现75个警告,并且仿真出现许多的毛刺,经过修改,在显示控制模块加一个时钟控制,使毛刺消失,编译也只有15个警告。
具体仿真如下:
修改前列仿真出现的毛刺情况
修改前行仿真出现的毛刺情况
修改后系统的仿真:
修改后时钟上升沿到来时行的变化,没有出现毛刺现象
修改后时钟上升沿到来时列的变,没有出现毛刺现象
四、总结与体会
课程设计都有不一样的收获,这学期上EDA课程的时候,总感觉很容易,但是经过这一周的的EDA课程设计,发现自己对概念很模糊,操作也总是会出现这里或那里的种种错误,通过这次EDA课程设