您好,欢迎访问三七文档
南京邮电大学通达学院课程设计报告设计类别: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-080403i)设计思路:(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代码LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYjiyawenISPORT(clk,clear,key_in:INSTD_LOGIC;num_out:OUTSTD_LOGIC_VECTOR(6DOWNTO0);pipe_out:OUTSTD_LOGIC_VECTOR(5DOWNTO0));ENDjiyawen;ARCHITECTUREbehaveOFjiyawenISSIGNALclk_temp:STD_LOGIC;SIGNALclk_te:STD_LOGIC;SIGNALcount_f:INTEGERRANGE0TO5;SIGNALCNT6:INTEGERRANGE0TO6;SIGNALNUM:INTEGERRANGE0TO5;SIGNALcount_FLAG:INTEGERRANGE0TO99;SIGNALFLAG:INTEGERRANGE0TO6;SIGNALFL:INTEGERRANGE0TO40000;SIGNALF:INTEGERRANGE0TO40000;SIGNALkey_cnt:INTEGERRANGE0TO3;SIGNALkey_0:STD_LOGIC;SIGNALkey_1:STD_LOGIC;SIGNALkey_2:STD_LOGIC;SIGNALkey_3:STD_LOGIC;SIGNALkey_v:STD_LOGIC;SIGNALkey_flag:STD_LOGIC;SIGNALkey_s:STD_LOGIC;SIGNALdelay_5ms:INTEGERRANGE0TO250000;SIGNALFLAG_NUM:INTEGERRANGE0TO10;BEGINP0:process(clk)beginprocess(clk)beginIF(clk'eventandclk='1')THENIFFL=50000THEN-------芯片晶振始终信号为50MHZ,需要经过分频讲信号分成1khzFL=0;clk_te=notclk_te;ELSEFL=FL+1;endif;endif;endprocessP0;P1:process(clk_te)-------将已经分过频的时钟作为参数beginIF(clk_te'eventandclk_te='1')THENIFcount_f=5THENcount_f=0;clk_temp=notclk_temp;ELSEcount_f=count_f+1;endif;endif;endprocessP1;P2:process(clk_temp,clear)beginif(clk_temp'eventandclk_temp='1')thenifclear='0'thenCNT6=0;elsifCNT6=6thenCNT6=1;elseCNT6=CNT6+1;endif;ifcount_FLAG=99thencount_FLAG=0;FLAG=FLAG+1;elsecount_FLAG=count_FLAG+1;endif;endif;if(FLAG=5)thenFLAG=0;endif;endprocessP2;P3:PROCESS(CNT6)beginCASECNT6ISWHEN1=pipe_out=011111;NUM=0;WHEN2=pipe_out=101111;NUM=1;WHEN3=pipe_out=110111;NUM=2;WHEN4=pipe_out=111011;NUM=3;WHEN5=pipe_out=111101;NUM=4;WHEN6=pipe_out=111110;NUM=5;WHENOTHERS=pipe_out=111111;NUM=0;ENDCASE;endprocessP3;P4:process(NUM,FLAG)-----使用的是共阳管beginFLAG_NUM=(FLAG+NUM)mod6;caseFLAG_NUMiswhen0=num_out=1000000;when1=num_out=0000000;when2=num_out=1000000;when3=num_out=0011001;when4=num_out=1000000;when5=num_out=0110000;WHENOTHERS=num_out=0000000;endcase;endprocessP4;P5:process(clk)beginkey_0=key_in;key_1=key_0;key_v=(key_1and(notkey_0));endprocessP5;P6:process(clk)beginif(key_v=’1’)thendelay_5ms=0;elsedelay_5ms=delay_5ms+1;endif;endprocessP6;P7:process(clk)beginif(delay_5ms=250000)thenkey_2=key_in;elsekey_2=1;endif;endprocessP7;P8:process(clk)beginkey_3=key_2;key_flag=(key_3and(notkey_2));endprocessP8;P9:process(clk)beginif(key_flag)thenkey_cnt=key_cnt+1;elsekey_cnt=0;endif;endprocessP9;P10:PROCESS(key_cnt)beginCASEkey_cntISWHEN0=F=100000;WHEN1=F=200000;WHEN2=F=300000;WHEN3=F=400000;ENDCASE;endprocessP10;ENDbehave;6.仿真波形及分析用012345来仿真。状态为:012345-123450-234501-345012-450123-501234-012345i)仿真波形ii)波形分析由波形可见,随着大计数周期的增加,依次产生012345-123450-234501-345012-450123-501234-012345……,这样便实现了循环移位。当清零信号为0时,控制数码管是否点亮的信号全为1,实现了让数码管全部熄灭的目标。实验室实测时,加大count_FLAG值为100,观察到稳定持续的周期循环移位的数码显示,完成实验任务。308040-080403。(按键控制还是有问题)二、数字时钟1.实验目的(1)掌握VHDL语言的语法规范,掌握时序电路描述方法(2)掌握多个数码管动态扫描显示的原理及设计方法2.实验任务要求要求学生设计一个时钟,并输出到数码管显示时,分,秒。3设计思路及VHDL代码libraryieee;useieee.std_logic_1164.all;useieee.std_logic_arith.all;useieee.std_logic_unsigned.all;--------------------------------------------------------------------entitydigitalisport(Clk:instd_logic;--时钟输入Rst:instd_logic;--复位输入Display:outstd_logic_vector(6downto0);--七段码管显示输出SEG_SEL:bufferstd_logic_vector(2downto0)--七段码管扫描驱动);enddigital;--------------------------------------------------------------------architecturebehaveofdigitalissignalDisp_Temp:integerrange0to15;signalDisp_Decode:std_logic_vector(6downto0);signalSEC1,SEC10:integerrange0to9;signalMIN1,MIN10:integerrange0to9;signalHOUR1,HOUR10:integerrange0to9;signalClk1kHz:std_logic;--数码管扫描时钟signalClk1Hz:std_logic;--时钟计时时钟signalled_count:std_logic_vector(2downto0);signalled_display:std_logic_vector(3downto0);signalspkcout:std_logic;beginPROCESS(cl
本文标题:数码管学号滚动显示
链接地址:https://www.777doc.com/doc-1801338 .html