数码管学号滚动显示
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
南京邮电大学
通达学院
课程设计报告
设计类别: EDA-VHDL
专业名称: 通信工程
班级学号:
基本题 : 数字时钟设计
综合题 : 数码管学号滚动显示
同小组成员:
学号:
姓名:
指导教师: 王奇、梅中辉、周晓燕,孔凡坤日期:2011年11月7日—11月18日
一、数码管学号滚动显示
1.实验目的
(1)掌握VHDL语言的语法规范,掌握时序电路描述方法
(2)掌握多个数码管动态扫描显示的原理及设计方法
2.实验所用仪器及元器件
(1)计算机
(2)直流稳压电源
(3)数字系统与逻辑设计实验开发板
3.实验任务要求
要求学生在六个数码管滚动显示自己的学号(六位),每隔一定时间循环移位一次,学号为奇数则左移,学号为偶数则右移。间隔时间可由开关选择1秒,2秒,3秒和4秒。
4.实验原理
为使得输入控制电路简单且易于实现,采用动态扫描的方式实现设计要求。动态扫描显示需要由两组信号来控制:一组是字段输出口输出的字形代码,用来控制显示的字形,称为段码;另一组是位输出口输出的控制信号,用来选择第几位数码管工作,称为位码。
各位数码管的相同段是并联的,段码的输出对各位数码管来说都是相同的。因此在同一时刻如果各位数码管都处于点亮状态,6位数码管将显示相同的字符。若要各位数码管能够显示出与本位相应的字符,就必须采用扫描显示方式,即在某一时刻,只让某一位处于点亮状态,而其它各位处于灭灯状态。同时,段码输出相应位要显示字符的字型码。这样在同一时刻,只有选通的那一位显示出字符,而其它各位则是熄灭的,如此循环下去,就可以使各位数码管显示出要显示的字符。
虽然这些字符是在不同时刻出现的,而且同一时刻,只有一位显示,其它各位熄灭,但由于数码管具有余辉特性和人眼有视觉暂留现象,只要每位数码管显示间隔足够短,给人眼的视觉匰象就会戯连续稳定地显示。
总之,多个数码管动态扫描显示,是将所有数码管犄相同段并联在一起,通过选通信号分时控制各个数码管的公共端,循环点亮多个敠码管,并利用人眼的视觉暂留现象,Ꮺ要扫描的频率大于50Hz,将看不到闪烁现象。个数码管则需要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