课程设计报告学生姓名学号班级专业电子信息工程题目数字时钟设计指导教师2011年11月课程设计报告1一、任务和设计要求1.熟悉集成电路的引脚安排。2.掌握各芯片的逻辑功能及使用方法。3.了解数字钟的组成及工作原理。4.熟悉数字钟的设计与制作。1.设计指标(1)时间以24小时为一个周期;(2)显示时、分、秒;(3)有校时功能,可以分别对时及分进行单独校时,使其校正到标准时间;(4)计时过程具有报时功能,当时间到达整点前5秒进行蜂鸣报时。2.设计要求(1)画出电路原理图(或仿真电路图);(2)元器件及参数选择;(3)电路仿真与调试二、设计原理设计思路根据系统设计要求,系统设计采用自顶向下设计方法,由时钟分频部分、计时部分、按键部分调时部分和显示部分五个部分组成。这些模块都放在一个顶层文件中。1)时钟计数:首先下载程序进行复位清零操作,电子钟从00:00:00计时开始。sethour可以调整时钟的小时部分,setmin可以调整分钟,步进为1。由于电子钟的最小计时单位是1s,因此提供给系统的内部的时钟频率应该大于1Hz,这里取100Hz。CLK端连接外部10Hz的时钟输入信号clk。对clk进行计数,当clk=10时,秒加1,当秒加到60时,分加1;当分加到60时,时加1;当时加到24时,全部清0,从新计时。用6位数码管分别显示“时”、“分”、“秒”,通过OUTPUT(6DOWNTO0)上的信号来点亮指定的LED七段显示数码管。2)时间设置:手动调节分钟、小时,可以对所设计的时钟任意调时间,这样使数字钟真正具有使用功能。我们可以通过实验板上的键7和键4进行任意的调整,因为我们用的时钟信号均是1HZ的,所以每LED灯变化一次就来一个脉冲,即计数一次。3)清零功能:reset为复位键,低电平时实现清零功能,高电平时正常计数。可以根据我们自己任意时间的复位。总体结构图课程设计报告2三、系统设计1)时、分、秒计时器时计时器为一个24进制计数器,分、秒计时器均为60进制计数器。当秒计时器接受到一个秒脉冲时,秒计数器开始从1计数到60,此时秒显示器将显示00、01、02、...、59、00;每当秒计数器数到00时,就会产生一个脉冲输出送至分计时器,此时分计数器数值在原有基础上加1,其显示器将显示00、01、02、...、59、00;每当分计数器数到00时,就会产生一个脉冲输出送至时计时器,此时时计数器数值在原有基础上加1,其显示器将显示00、01、02、...、23、00。即当数字钟运行到23点59分59秒时,当秒计时器在接受一个秒脉冲,数字钟将自动显示00点00分00秒。2)校时电路当开关拨至校时档时,电子钟秒计时工作,通过时、分校时开关分别对时、分进行校对,开关每按1次,与开关对应的时或分计数器加1,当调至需要的时与分时,拨动reset开关,电子钟从设置的时间开始往后计时。四、参考程序Alert模块LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYalertISPORT(clk:INSTD_LOGIC;dain:INSTD_LOGIC_VECTOR(6DOWNTO0);课程设计报告3speak:OUTSTD_LOGIC;lamp:OUTSTD_LOGIC_VECTOR(2DOWNTO0));ENDalert;ARCHITECTUREfunOFalertISSIGNALcount:STD_LOGIC_VECTOR(1DOWNTO0);SIGNALcount1:STD_LOGIC_VECTOR(1DOWNTO0);BEGINspeaker:PROCESS(clk)BEGIN--speak=count1(1);IF(clk'eventandclk='1')THENIF(dain=0000000)THENspeak=count1(1);IF(count1=10)THENcount1=00;--count1为三进制加法计数器ELSEcount1=count1+1;--speak=count1(0);ENDIF;ENDIF;ENDIF;ENDPROCESSspeaker;lamper:PROCESS(clk)BEGINIF(rising_edge(clk))THENIF(count=10)THENIF(count=00)THENlamp=001;--循环点亮三只灯ELSIF(count=01)THENlamp=010;ELSIF(count=10)THENlamp=100;ENDIF;count=count+1;ELSEcount=00;ENDIF;ENDIF;课程设计报告4ENDPROCESSlamper;ENDfun;Hour模块LIBRARYIEEE;useIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYhourISPORT(clk,reset:INSTD_LOGIC;daout:outSTD_LOGIC_VECTOR(5DOWNTO0));ENDENTITYhour;ARCHITECTUREfunOFhourISSIGNALcount:STD_LOGIC_VECTOR(5DOWNTO0);BEGINdaout=count;PROCESS(clk,reset)BEGINIF(reset='0')THENcount=000000;--若reset=0,则异步清零ELSIF(clk'eventandclk='1')THEN--否则,若clk上升沿到IF(count(3DOWNTO0)=1001)THEN--若个位计时恰好到1001即9IF(count16#23#)THEN--23进制count=count+7;--若到23D则elsecount=000000;--复0ENDIF;ELSIF(count16#23#)THEN--若未到23D,则count进1count=count+1;ELSE--否则清零count=000000;ENDIF;--ENDIF(count(3DOWNTO0)=1001)ENDIF;--ENDIF(reset='0')ENDPROCESS;ENDfun;Minute模块LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYminuteISPORT(clk,clk1,reset,sethour:INSTD_LOGIC;enhour:OUTSTD_LOGIC;课程设计报告5daout:OUTSTD_LOGIC_VECTOR(6DOWNTO0));ENDENTITYminute;ARCHITECTUREfunOFminuteISSIGNALcount:STD_LOGIC_VECTOR(6DOWNTO0);SIGNALenhour_1,enhour_2:STD_LOGIC;--enmin_1为59分时的进位信号BEGIN--enmin_2由clk调制后的手动调时脉冲信号串daout=count;enhour_2=(sethourandclk1);--sethour为手动调时控制信号,高电平有效enhour=(enhour_1orenhour_2);PROCESS(clk,reset,sethour)BEGINIF(reset='0')THEN--若reset为0,则异步清零count=0000000;ELSIF(clk'eventandclk='1')THEN--否则,若clk上升沿到IF(count(3DOWNTO0)=1001)THEN--若个位计时恰好到1001即9IF(count16#60#)THEN--又若count小于16#60#,即60IF(count=1011001)THEN--又若已到59Denhour_1='1';--则置进位为1count=0000000;--count复0ELSEcount=count+7;--若count未到59D,则加7,即作加6校正ENDIF;--使前面的16#60#的个位转变为8421BCD的容量ELSEcount=0000000;--count复0(有此句,则对无效状态电路可自启动)ENDIF;--ENDIF(count16#60#)ELSIF(count16#60#)THENcount=count+1;--若count16#60#则count加1enhour_1='0'after100ns;--没有发生进位ELSEcount=0000000;--否则,若count不小于16#60#count复0ENDIF;--ENDIF(count(3DOWNTO0)=1001)ENDIF;--ENDIF(reset='0')ENDprocess;ENDfun;Second模块LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;课程设计报告6ENTITYsecondISPORT(clk,reset,setmin:STD_LOGIC;enmin:OUTSTD_LOGIC;daout:OUTSTD_LOGIC_VECTOR(6DOWNTO0));ENDENTITYsecond;ARCHITECTUREfunOFsecondISSIGNALcount:STD_LOGIC_VECTOR(6DOWNTO0);SIGNALenmin_1,enmin_2:STD_LOGIC;--enmin_1为59秒时的进位信号BEGIN--enmin_2由clk调制后的手动调分脉冲信号串daout=count;enmin_2=(setminandclk);--setmin为手动调分控制信号,高电平有效enmin=(enmin_1orenmin_2);--enmin为向分进位信号PROCESS(clk,reset,setmin)BEGINIF(reset='0')THENcount=0000000;--若reset为0,则异步清零ELSIF(clk'eventandclk='1')then--否则,若clk上升沿到IF(count(3downto0)=1001)then--若个位计时恰好到1001即9IF(count16#60#)then--又若count小于16#60#,即60HIF(count=1011001)then--又若已到59Denmin_1='1';count=0000000;--则置进位为1及count复0ELSE--未到59Dcount=count+7;--则加7,而+7=+1+6,即作加6校正ENDIF;ELSE--若count不小于16#60#(即count等于或大于16#60#)count=0000000;--count复0ENDIF;--ENDIF(count16#60#)ELSIF(count16#60#)then--若个位计数未到1001则转此句再判count=count+1;--若count16#60#则count加1enmin_1='0'after100ns;--没有发生进位ELSE--否则,若count不小于16#60#count=0000000;--则count复0ENDIF;--ENDIF(count(3DOWNTO0)=1001)ENDIF;--ENDIF(reset='0')ENDPROCESS;ENDfun;课程设计报告7五、系统调试与性能分析时基T产生电路数字钟以其显示时间的直观性、走时准确性作为一种计时工具,数字钟的基本组成部分离不开计数器,在控制逻辑电路的控制下完成预定的各项功能。由晶振产生的频率非常稳定的脉冲,经整形、稳定电路后,产生一个频率为1Hz的、非常稳定的计数时钟脉冲。调时、调分信号的产生由计数器的