EDA-VHDL_实验报告_数字时钟设计_数码管学号滚动显示
时间:2025-07-10
时间:2025-07-10
数字时钟设计 数码管学号滚动显示
南京邮电大学 通达学院 课程设计报告
设计类别: EDA-VHDL 专业名称: 通信工程 班级学号: 08000403 (16班) 学生姓名: 吉雅雯 基本题 : 数字时钟设计 综合题 : 数码管学号滚动显示 同小组成员:
学号: 08001601 姓名: 刘婷
指导教师: 王奇、梅中辉、周晓燕,孔凡坤
日 期: 2011年11月7日—11月18日
数字时钟设计 数码管学号滚动显示
一、数码管学号滚动显示
1.实验目的
(1)掌握VHDL语言的语法规范,掌握时序电路描述方法 (2)掌握多个数码管动态扫描显示的原理及设计方法
2.实验所用仪器及元器件
(1)计算机
(2)直流稳压电源
(3)数字系统与逻辑设计实验开发板
3.实验任务要求
要求学生在六个数码管滚动显示自己的学号(六位),每隔一定时间循环移位一次,学号为奇数则左移,学号为偶数则右移。间隔时间可由开关选择1秒,2秒,3秒和4秒。
4.实验原理
为使得输入控制电路简单且易于实现,采用动态扫描的方式实现设计要求。动态扫描显示需要由两组信号来控制:一组是字段输出口输出的字形代码,用来控制显示的字形,称为段码;另一组是位输出口输出的控制信号,用来选择第几位数码管工作,称为位码。
各位数码管的相同段是并联的,段码的输出对各位数码管来说都是相同的。因此在同一时刻如果各位数码管都处于点亮状态,6位数码管将显示相同的字符。若要各位数码管能够显示出与本位相应的字符,就必须采用扫描显示方式,即在某一时刻,只让某一位处于点亮状态,而其它各位处于灭灯状态。同时,段码输出相应位要显示字符的字型码。这样在同一时刻,只有选通的那一位显示出字符,而其它各位则是熄灭的,如此循环下去,就可以使各位数码管显示出要显示的字符。
虽然这些字符是在不同时刻出现的,而且同一时刻,只有一位显示,其它各位熄灭,但由于数码管具有余辉特性和人眼有视觉暂留现象,只要每位数码管显示间隔足够短,给人眼的视觉印象就会是连续稳定地显示。
总之,多个数码管动态扫描显示,是将所有数码管的相同段并联在一起,通过选通信号分时控制各个数码管的公共端,循环点亮多个数码管,并利用人眼的视觉暂留现象,只要扫描的频率大于50Hz,将看不到闪烁现象。6个数码管则需要50*6=300Hz以上才能看到持续稳定点亮的现象。
5.设计思路及VHDL代码
循环左滚动,始终点亮6个数码管,左出右进。状态为:080403-804030-040308-403080-030804-308040-080403 i)设计思路:
(1)同时让6个数码管显示数字的代码主体和实验任务1中一致,基本思想也一致。(2)为实现移位,关键改动为新增一个计数器,计数周期远远大于扫描周期,这样,在一个大的计数周期内,对于要显示的6位数码进行动态扫描(和实验任务1中相同),显示出6种移位状态中的一种;在下一个大的周期内,计数变量FLAG加1,
数字时钟设计 数码管学号滚动显示
使用求余运算将显示位的数码移位,比如,FLAG为0时,显示“012345”六位数码,FLAG为1时,将FLAG与扫描周期计数变量CNT6相加求余(即FLAG_A求余)对应的数码为080403,显示的数码也就为“080403”。以此类推,实现循环移位。 (3)加入按键控制,按键按下来控制移位的时钟的频率,以实现间隔时间可由开关选择1秒,2秒,3秒和4秒。
ii)VHDL代码 LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY jiyawen IS
PORT( clk,clear,key_in:IN STD_LOGIC; num_out:OUT STD_LOGIC_VECTOR(6 DOWNTO 0); pipe_out:OUT STD_LOGIC_VECTOR(5 DOWNTO 0)); END jiyawen;
ARCHITECTURE behave OF jiyawen IS
SIGNAL clk_temp:STD_LOGIC; SIGNAL clk_te:STD_LOGIC; SIGNAL count_f: INTEGER RANGE 0 TO 5; SIGNAL CNT6:INTEGER RANGE 0 TO 6; SIGNAL NUM:INTEGER RANGE 0 TO 5; SIGNAL count_FLAG:INTEGER RANGE 0 TO 99; SIGNAL FLAG:INTEGER RANGE 0 TO 6; SIGNAL FL:INTEGER RANGE 0 TO 40000; SIGNAL F:INTEGER RANGE 0 TO 40000; SIGNAL key_cnt:INTEGER RANGE 0 TO 3; SIGNAL key_0:STD_LOGIC; SIGNAL key_1:STD_LOGIC; SIGNAL key_2:STD_LOGIC; SIGNAL key_3:STD_LOGIC; SIGNAL key_v:STD_LOGIC; SIGNAL key_flag:STD_LOGIC; SIGNAL key_s:STD_LOGIC; SIGNAL delay_5ms:INTEGER RANGE 0 TO 250000; SIGNAL FLAG_NUM:INTEGER RANGE 0 TO 10;
BEGIN
P0:process(clk)
begin process(clk) begin IF(clk'event and clk='1') THEN
数字时钟设计 数码管学号滚动显示
IF FL=50000 THEN-------芯片晶振始终信号为50MHZ,需要经过分频讲信号分成1khz FL<=0; clk_te<=not clk_te; ELSE FL<=FL+1; end if; end if; end process P0;
P1:process(clk_te) -------将已经分过频的时钟作为参数 begin IF(clk_te'event and clk_te='1') THEN IF count_f=5 THEN count_f<=0; clk_temp<=not clk_temp; ELSE count_f<=count_f+1; end if; end if; end process P1; P2:process(clk_temp,clear) begin if(clk_temp'event and clk_temp='1')then if clear='0' then CNT6<=0; elsif CNT6=6 then CNT6<=1; else CNT6<=CNT6+1; end if; if count_FLAG=99 then count_FLAG<=0; FLAG<=FLAG+1; else count_FLAG<=count_FLAG+1; …… 此处隐藏:5648字,全部文档内容请下载后查看。喜欢就下载吧 ……