数码管学号滚动显示课程设计.doc

上传人:文库蛋蛋多 文档编号:4149273 上传时间:2023-04-07 格式:DOC 页数:20 大小:1.37MB
返回 下载 相关 举报
数码管学号滚动显示课程设计.doc_第1页
第1页 / 共20页
数码管学号滚动显示课程设计.doc_第2页
第2页 / 共20页
数码管学号滚动显示课程设计.doc_第3页
第3页 / 共20页
数码管学号滚动显示课程设计.doc_第4页
第4页 / 共20页
数码管学号滚动显示课程设计.doc_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《数码管学号滚动显示课程设计.doc》由会员分享,可在线阅读,更多相关《数码管学号滚动显示课程设计.doc(20页珍藏版)》请在三一办公上搜索。

1、南京邮电大学通达学院课程设计报告设计类别: EDA-VHDL 专业名称: 通信工程 班级学号: 学生姓名: 基本题 : 数字时钟设计 综合题 : 数码管学号滚动显示 同小组成员: 学号: 姓名: 指导教师: 王奇、梅中辉、周小燕、孔凡坤 日 期: 2012年6月11日6月22日 一、数字时钟1实验目的(1)掌握VHDL语言的语法规范,掌握时序电路描述方法(2)掌握多个数码管动态扫描显示的原理及设计方法2实验任务要求要求学生设计一个时钟,并输出到数码管显示时,分,秒。3设计思路及VHDL代码 首先要设置一个时钟信号,根据时钟信号的变化来进行时钟的变化,从秒的变化到时的变化条件是不同的。将时分秒各

2、分为为十位和各位即六位数字显示时间来分析。原理图如下:秒针个位信号数码管译码器模10计数器 清零进位 秒针十位信号数码管译码器模6计数器清零清零清零清零进位时针十位信号分针个位信号分针十位信号时针个位信号进位进位进位数码管译码器数码管译码器数码管译码器数码管译码器模10计数器模10计数器模6计数器模3计数器 VHDL源程序如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity shizhong isport( clk:in std_logic; led1:out std_logic_v

3、ector(6 downto 0); led2:out std_logic_vector(6 downto 0); led3:out std_logic_vector(6 downto 0); led4:out std_logic_vector(6 downto 0); led5:out std_logic_vector(6 downto 0); led6:out std_logic_vector(6 downto 0);end shizhong;architecture main of shizhong issignal hou1:std_logic_vector(3 downto 0);s

4、ignal hou2:std_logic_vector(3 downto 0);signal min1:std_logic_vector(3 downto 0);signal min2:std_logic_vector(3 downto 0);signal sec1:std_logic_vector(3 downto 0);signal sec2:std_logic_vector(3 downto 0);begin-h110:process(clk,hou2,min1,min2,sec1,sec2)beginif clkevent and clk=1 thenif (hou1=0010 and

5、 hou2=0011)and(min1=0101 and min2=1001) and (sec1=0101 andsec2=1001) thenhou1=0000;else if (hou2=1001and(min1=0101 and min2=1001) and (sec1=0101 and sec2=1001)thenhou1=hou1+1;end if;end if;end if;end process h110; 时钟的十位-h220:process(clk,min1,min2,sec1,sec2,hou1)beginif clkevent and clk=1 thenif (hou

6、1=0010 and hou2=0011)and(min1=0101 and min2=1001) and (sec1=0101 andsec2=1001) thenhou2=0000;else if hou2=1001and(min1=0101 and min2=1001) and (sec1=0101 and sec2=1001)thenhou2=0000;else if(min1=0101 and min2=1001) and (sec1=0101 and sec2=1001) thenhou2=hou2+1;-speak=clk;end if;end if;end if;end if;

7、end process h220; 时钟的个位-m110:process(clk,min2,sec1,sec2)beginif clkevent and clk=1 thenif (min1=0101 and min2=1001) and (sec1=0101 and sec2=1001) thenmin1=0000;else if (min2=1001and (sec1=0101 and sec2=1001)thenmin1=min1+1;end if;end if;end if;end process m110; 分钟的十位-m220:process(clk,sec1,sec2)begin

8、if clkevent and clk=1 thenif min2=1001and (sec1=0101 and sec2=1001)thenmin2=0000;else if (sec1=0101 and sec2=1001) thenmin2=min2+1;end if;end if;end if;end process m220; 分钟的个位-s110:process(clk)beginif clkevent and clk=1 thenif (sec1=0101 and sec2=1001)thensec1=0000;else if sec2=1001thensec1=sec1+1;e

9、nd if;end if;end if;end process s110; 秒钟的十位-s220:process(clk)beginif clkevent and clk=1 thenif sec2=1001 thensec2=0000;else sec2LED1LED1LED1LED1LED2LED2LED2LED2LED2LED2LED2LED2LED2LED2LED2LED3LED3LED3LED3LED3LED3LED3LED4LED4LED4LED4LED4LED4LED4LED4LED4LED4LED4LED5LED5LED5LED5LED5LED5LED5LED6LED6LED6

10、LED6LED6LED6LED6LED6LED6LED6LED6=1000000;end case;end process disp;-end main;4仿真波形及分析通过波形可以看出,秒,分,时各位之间可以很好地完成进位功能,秒钟达最大值59进一并清零,分钟达最大值59进一并清零,时钟打最大值23进一并清零,数字时钟功能可以实现。5实验总结与体会 本实验为基础题的第一题,整体功能与实际联系较为紧密,因此各模块的分析和设计方面难度减少了很多,通过这个课题的设计,我们初步认识了VHDL语言,以及quartus II 软件的具体应用方法,能够很直观地将电路模块化分析并使用vhdl语言设计出来。二

11、、数码管学号滚动显示1实验目的(1)掌握VHDL语言的语法规范,掌握时序电路描述方法(2)掌握多个数码管动态扫描显示的原理及设计方法2实验任务要求 要求学生在六个数码管滚动显示自己的学号(六位),每隔一定时间循环移位一次,学号为奇数则左移,学号为偶数则右移。间隔时间可由开关选择1秒,2秒,3秒和4秒。3设计思路及VHDL代码本题要求六位学号可以滚动显示,通过对其功能的理解,可以找出每个数字对应的数码管位置变化的规律。具体实现可以通过在每个脉冲上升沿触发学号中六个数字001908依次在六个数码管上输出,而在六个脉冲之后,六位学号还是依次输出,但是显示的数码管不同,首个数字在第二位数码管显示,以此

12、类推,最后一位在第一位数码管显示。六个脉冲构成一个循环,以同上的方法类推显示即可实现学号的右移效果。显示的间隔时间可以通过源程序内改变运行次数来控制。原理图如下: 移 位 时 间 控制时钟信号 clk12分频电路 动 态 扫 描移 位 控 制数码管显示电路模块设计:l 输入&输出 输入: clk -时钟信号 column -行列式键盘的4列 输出: led_out -数码管8段显示,可显示09,AF led_sel -选择6个数码管,1表示点亮对应数码管 output -分频后的时钟 Interval -随学号移动而数值改变的寄存器l 分频电路模块PROCESS(clk)-12分频电路VARI

13、ABLE counter: std_logic_vector(2 downto 0);-计数寄存器,12分频输入时钟为 1Hz BEGIN IF (clkEVENT AND clk =0) THEN -下降沿有效 counter := counter + 1 ; IF (counter = 6) THEN clk_temp key_code key_code key_code key_code key_code shift = shift- 1;-数据右移1位if(shift = 000) thenshift if(time_count = 10) then time_count := 00

14、; shift = shift - 1;-数据右移1位if(shift = 000) thenshift if(time_count = 11) then time_count := 00; shift = shift - 1;-数据右移1位if(shift = 000) thenshift if(time_count = 00) then shift = shift - 1;-数据右移1位if(shift = 000) thenshift shift = shift - 1;-数据右移1位if(shift = 000) thenshift =110;end if; END CASE;end

15、if; end process; 注: 该模块利用 key_code的四个数值来控制四个case,由于time_count 初始值是00,在进入运算时是01,根据case的不同,运行次数不同,分别是一次,两次,三次和四次,根据这个来控制移动的间隔时间。l 数码管显示模块process (clk)-显示学号001908 VARIABLE led_sel_llb :std_logic_vector(3 DOWNTO 0); -信号量,6个数码管显示的选择 begin if (clk event and clk=0) then -时钟下降沿有效 if (led_sel_count = 0000) t

16、hen-轮询6个数码管 led_sel_count = 0101; else led_sel_count led_out led_out led_out led_out led_out led_out led_out = 0110) then led_sel_llb := led_sel_llb - 0110;end if; case led_sel_llb is -选择要被点亮的数码管 when 0000 = led_sel led_sel led_sel led_sel led_sel led_sel led_sel = 000001; -其他情况下,位置6,内容5 end case; e

17、nd if; end process; 注: 该模块中, led_sel用来表示选中的数码管, led_out 表示输出的数值。每一个clock过来,都会输出一个数,依次是0-0-1-9-0-8,而数字输出在哪个数码管是由相同时刻的led_sel决定的。由于时钟频率很高,虽然每个时钟来临时只有一个数码管被点亮,但由于视觉停留,所以可以达到每个数码管都被点亮的效果。VHDL源程序如下:LIBRARY ieee ;USE ieee.std_logic_1164.all ;USE ieee.std_logic_unsigned.all ;-显示模块ENTITY llb IS PORT ( clk :

18、 IN STD_LOGIC; led_out : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); -数码管8段显示,可显示09,AF led_sel : BUFFER STD_LOGIC_VECTOR(5 DOWNTO 0); -选择6个数码管,1表示点亮对应数码管output : OUT STD_LOGIC;interval : OUT STD_LOGIC_VECTOR(2 downto 0); column : IN STD_LOGIC_VECTOR(3 downto 0) -行列式键盘的4列) ; END llb ;ARCHITECTURE Behavior OF l

19、lb IS signal clk_temp : std_logic := 1; -用作分频后的电路时钟 signal led_sel_count : std_logic_vector(3 DOWNTO 0); -信号量,6个数码管显示的选择 signal div_cnt : std_logic_vector(1 downto 0); -行扫描驱动signal scan_key : std_logic_vector(3 DOWNTO 0); -扫描码寄存器 signal key_code : std_logic_vector(1 DOWNTO 0); -存储键值signal shift : st

20、d_logic_vector(2 DOWNTO 0):= 110; -控制数码管显示的数据右移begin output = clk_temp; interval = shift;PROCESS(clk)-12分频电路 VARIABLE counter: std_logic_vector(2 downto 0);-计数寄存器,12分频输入时钟为 1Hz BEGIN IF (clkEVENT AND clk =0) THEN -下降沿有效 counter := counter + 1 ; IF (counter = 6) THEN clk_temp key_code key_code key_co

21、de key_code key_code shift = shift- 1;-数据右移1位if(shift = 000) thenshift if(time_count = 10) then time_count := 00 ; shift = shift - 1;-数据右移1位if(shift = 000) thenshift if(time_count = 11) then time_count := 00; shift = shift - 1;-数据右移1位if(shift = 000) thenshift if(time_count = 00) then shift = shift - 1;-数据右移1位if(shift = 000) thenshift shift = shift - 1;-数据右移1位if(shift = 000) thenshift =110;end if; END CASE;end

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号