《基于VHDL语言的数字钟设计.docx》由会员分享,可在线阅读,更多相关《基于VHDL语言的数字钟设计.docx(11页珍藏版)》请在优知文库上搜索。
1、信息与通信工程学院数字电路与逻辑设计班实验题目:基于VHDL语言的数字钟设计级:姓名:学号:日期:指导教师:一 .摘要数字钟是一个将时、“分、“秒显示于人的视觉器官的计时装置。它的根本功能是计时,计时周期为24小时,显示满刻度23时59分59秒:或者计时周期为12小时并配有上下午指示,显示满刻度为11时59分59秒,通过六个七段数码管显示出来。本实验主要在理论分析和具体的软硬件实现上,基于VHDL语言编写源代码,使用软件QuartusII进行处理,再配合具体电路连接,实现一个多功能的数字钟。关键词:数字钟;VHDL语言;七段数码管二 .设计任务要求设计实现一个数字钟。1.24小时制,显示刻度从
2、0:0:0到23:59:59。2.12小时制,显示刻度从0:0:0到11刻9:59。3.12/24小时制可切换,12小时制下上下午有不同显示(上午发光二极管不亮,下午发光二极管亮)。4 .可手动校对时间,能对时和分进行校正。5 .整点报时功能。6 .闹铃功能,可设置闹铃时间,当计时到预定时间时I蜂鸣器发出闹铃信号,闹铃时间为5秒,可提前终止闹铃。7 .可认为设置时间为倒计时模式8 .可切到屏保模式,六个数码管显示为“supper字样。三.设计思路和总体设计框图1.设计思路程序设计主要分为四个模块,第一局部,做分频器,分出一秒的时钟用来计数,再分出一个中频时钟用来扫描显示数码管,我选择的频率是5
3、0kHZ;第二局部,做计数器,秒随时钟沿计数进1,分钟随着秒计数60次进一,而小时,由于有12/24小时制的切换,时的计数有两个信号来进行,一个信号hourl是分60进一在0到23循环计数,另一个信号hour2是分60进一在0到11循环计数;第三局部,做扫描显示六个七段数码管,通过选通信号6矢量Cat来依次使六个数码管亮,数码管每两位对应相应的时分秒;第四局部,其他输入输出单元,比方数字钟的时间修正,闹铃等, 设计的关键是做好计数器和数码管显示,2.总体设计框图这些都是基于前三个局部,做起来难度不大。 这是本实验最核心的局部。6数码管显示时钟,带调时功能,能设置闹钟,闹钟响可人为停止,整点报时
4、,12/24小时制手动切换,可人为设置时间为倒计时,并修正了一个11:59:59(或23:59:59)跳变到00:00:00的bug(即11:59:59跳变到00:00:00时会先跳到11:0():00再跳到00:00:00的错误),缺乏是防抖动设计缺少经验。madebysupperlibraryiecc;useieee.std_logic_1l64.all;useieee.std_logic_unsigned.all;entitymemclockisport(clk:inStdOgic;mfix,hfix:instd_logic;change:instd_logic;Iastinstd_lo
5、gic;Id0:outStd_JOgic;name:instd_logic;alaim:instd_logic;cat:OUtstd_logic_vector(5downtoO);SPk:oiItStdogic;Iightroutstd_logic_vector(6downto0);endmenclock;architecturebehaveofmcmclockissignaltemp:integerrangeOto15;SignaljzintegerrangeOto5;Signalclkl,clk2:std_logic;signalDiinuteiintegerangeOto59;signa
6、lSecondrintegerrangeOto59:signalhourthourlHntegerrangeOto23;signalhour2HntegerrangeOto11;signalh,hl,m,ml,s,sl!integerrangeOto15;signalImpkintegerrangeOto499999999;signaltp2:integerrangeOto999;Signalho:integerrangeOto23;signalmin:integerrangeOto59;beginpO:process(clk)beginif(clk,eventandclk=,)thenift
7、mp1=49999999thentmp1=0;elsetmp1=tmp1+1;endif;if(tmp2=999)thentmp2=O;elsetmp2=tmp2+1;endif;endif;endprocess;p5:process(tmpl)beginiftmp1=49999999thenclkl=;elseclkl=0,;endif;iftp2=999thenclk2=T;elseclk2=,O,;endif;endprocess;pkprocess(clkl)beginif(clkeventandclkl=,)thenif(last-)thenbacktothetimeif(secon
8、d=0)thensecond=59;if(minute=O)thenminute=59;hourl=hour1-1;if(hour1=0)thenhourl=23;endif;hour2=hour2-1;if(hour2=0)thenhour2=l1;endif;elseminute=minute-1;endif;elsesecond=second-1;endif;elseif(second=59)thennormaltimerulessecond=0;if(minute=59)thenminute=0;hourl=hour1+1;if(hourl=23)thenhourl=0;endif;h
9、our2=hour2+1;if(hour2=ll)thenhour2=0;endif;elseminute=minute+l;endif;elsesecond=second1;endif;endif;if(change=1,)then-12/24stylechangeif(hour2=23andminute=59andsecond=59)thenhour=0;elsehourll)thenldO=T;elseldO=,O,;endif;ElseIf(hour1=23andminute=59andsecond)thenhourl=0;elsehour=hourl;endif;ldO=,O,;en
10、dif;if(alarm=,0)thenalarmclockif(mfix-)thenminutechangeif(minute=59)theninute=O;elseminute=minLite+l;endif;endif;if(hfix-)then-hourchangeif(hourl=23)thenhourl=0;elsehourl=hour1+1;endif;if(hour2=ll)thenhour2=0;elsehour2=hour2+l;endif;endif;elseif(mfix=,1,)thenalarmminchangeif(rnin=59)thenmin=0;elsemi
11、n=min+l;endif;endif;if(hfix-)then-alarmhochangeif(ho=23)thenho=0;elseho=ho+1;endif;endif;endif;if(minute=Oandsecond3)thenrighttimeringspk=;elsif(minute=minandhour=hoandsecond5)thenalarmclockif(alarm=,)thenspk=,O;elsif(alan=,O)thenspk=;endif;elsespk=,O;endif;endif;endprocess;p2:process(clk2)encoderbe
12、ginif(clk2,eventandCIk2=T)thenif(j=5)thenj=0;elsej=j+l;endif;if(alarm=,0,andnamc=,0,)thenshowalarmtimehO=(hour-h1)/10;Hl=hourrem10;M0=(minute-ml)10;M1=minuterem10;S0=(second-s1)/10;Sl=secondrem10;elsif(alan=andname=0,)thenh(K=(ho-hl)10;H1=horem10;M(R=(min-ml)10;Ml=minrem10;S(X=0;SK=O;elsif(name=l,)thenh(R=10;hl=ll;m=12;ml=13;s=14;slcat-01Illl,tempcat-,101111tempcat=110111”;IemPcat=nIllOll,tempcatcat=nHll10templightlightlightlightlightlightIightlightlightlightlightlightlightlightlightlightlight=OOOOOOO;Endcase;endif;endprocess;