EDA课程设计报告(电子钟)ooa.docx
EDA课课程设计计报告数字字钟设计计班 级:学 号:姓 名:一、设计计任务设计一台台能显示示时、分分、秒的的数字钟钟。具体体要求如如下:(1) 由实验箱箱上的时时钟信号号经分频频产生秒秒脉冲;(2) 计时计数数器用224进制制计时电电路;(3) 可手动校校时,能能分别进进行时、分分的校正正;(4) 整点报时时;选做:可可设置闹闹时功能能,当计计时计到到预定时时间时,扬扬声器发发出闹铃铃信号,闹闹铃时间间为4ss,并可可提前终终止闹铃铃。二、 试试验目的的(1) 掌握时十十进制、六六进制和和二十四四进制计计数器的的设计方方法。(2) 掌握多位位计数器器相连的的设计方方法。(3) 掌握多位位共阴极极扫描显显示数码码管的驱驱动及编编码。三、总体体设计方方案本数字系系统实现现数字钟钟的基本本的计时时功能,输输入8Hz的的时钟,通过分频产生1Hz的时钟信号,采用24/12小时制计时,能显示时、分、秒。本系统还具有校正功能,可以进行时分的校时,当计时器运行到59分59秒开始报时,另外还可以设定闹钟,当按下闹铃开关时,可在规定时间闹铃,当开关复位时,闹铃停止。本数字钟钟实际上上是一个个对频率率(1HHz)进进行计数数的计数数电路。由由于计数数的起始始时间不不可能与与标准时时间一致致,故需需要在电电路上加加一个校校时电路路,同时时分频后后的1Hz时时间信号号必须做做到准确确稳定。通通常使用用石英晶晶体振荡荡器电路路构成数数字钟。数字钟的的基本组组成本数字钟钟的实现现可分为为以下几几个模块块:(1) 秒计数数模块:秒计数数,在频频率为11Hz的时钟钟下以660次为为循环计计数,并并产生进进位信号号影响分分计数; (2) 分计计数模块块:分计计数,在在秒进位位信号为为高电平平时,计计数一次次,同样样以600次为一一个循环环计数,同同时产生生分进位位信号影影响时计计数;(33) 时计数数模块:时计数数,在分分进位信信号为高高电平时时,计数数一次,以以24/12次次为一个个循环计计数;(44) 频频率产生生模块:产生8Hz的计数数频率 ,通过过分频得得到1HHz频率率;(5) 时间显显示模块块:数码码管通过过动态显显示,同同时进行行一定频频率的扫扫描显示示时,分分,秒。(6) 时间设置模块:设置调试使能端,可以调时,分,秒。基本功能是在使能端为高电平时,可以使时和、分和秒循环计数;(7) 整点报时模块:在秒计数到50秒时,同时分计数到59分开始,蜂鸣器产生四个时钟周期的鸣叫,到整点是产生两个时钟周期的鸣叫。(8) 闹钟模块:在设定闹钟闹铃时间后,当闹钟使能端有效时,可在闹铃时间闹铃,通过人工拨0后停闹。一个基本本的数字字钟电路路主要由由译码显显示器、“时”,“分”,“秒”计数器和定时器组成。干电路系统由秒信号发生器、“时”,“分”,“秒”计数器、译码器及显示器、电路组成。分频器电电路:通常,数数字钟的的晶体振振荡器输输出频率率较高,为为了得到到1Hzz的秒信信号输入入,需要要对振荡荡器的输输出信号号进行分分频。通通常实现现分频器器的电路路是计数数器电路路,当计计数满时时则产生生相应的的跳变,从从而得到到想要的的的分频频后频率率。 时间计数数单元:时间计计数单元元有时计计数、分分计数和和秒计数数等几个个部分。时时计数单单元一般般为122进制计计数器或或24进进制计数数器。译码驱动动及显示示单元:计数器器实现了了对时间间的累计计以84421BBCD码码形式输输出,为为了将计计数器输输出的884211BCDD码显示示出来。试试验箱上上有几种种模式可可供选择择,选择择模式55则自带带有显示示译码器器,代码码中就可可以直接接送四位位bcdd码给相相应端口口就行。 校时电源源电路:当重新新接通电电源或走走时出现现误差时时都需要要对时间间进行校校正。通通常,校校正时间间的方法法是:首首先截断断正常的的计数通通路,然然后再进进行人工工出触发发计数将将高电平平信号加加到需要要校正的的计数单单元的输输入端,相应的时分秒数值随着时钟脉冲信号跳变,校正好后,再按下使能键变为低电平,转入正常计时状态。整点报时时电路:一般时时钟都应应具备整整点报时时电路功功能,即即在时间间出现整整点时,数字字钟会自自动报时时,以示示提醒。其其作用方方式是发发出连续续的或有有节奏的的音频声声波,较较复杂的的也可以以是实时时语音提提示。本设计的的总体设设计原理理结构框框图如下:校时电路秒计数器分计数器分译码器秒译码器分显示器秒显示器时译码器时计数器时显示器报时1HZ振荡器分频器图1 数数字钟的的系统框框图该系统由由振荡器器、分频频器、“时、分分、秒”计数器器、译码码器及显显示器、校校时电路路、整点点报时电电路等组组成。石石英晶体体振荡器器和分频频器产生生整个系系统的时时基信号号,它直直接决定定计时系系统的精精度。“秒计数数器”采用六六十进制制计数器器,每累累计600秒向“分计数数器”进位;“分计数数器”采用六六十进制制计数器器,每累累计600分向“时计数数器”进位;“时计数数器”采用二二十四进进制计数数器,按按照“24翻翻1”规律计计数。“时、分分、秒”计数器器的输出出经译码码器送显显示器显显示。校校时电路路用来当当计时出出现误差差时对“时、分分、秒”进行校校对调整整。整点点报时电电路是根根据计时时系统的的输出状状态产生生一脉冲冲信号,然然后去触触发音频频发生器器实现报报时。本程序实实现的功功能并不不复杂,故故本课程程设计并并未采用用例化语语句,而而是将各各个模块块的功能能整合到到一起,采用一个结构体多个进程来实现。 四、调试试过程程序完成成后,首首先要做做的便是是仿真,观观察仿真真图,改改变相应应的输入入参数值值看是否否达到所所要求的的结果。输入时钟钟信号如如下:相应的产产生仿真真图如下下:从图中可可以看出出,仿真真结果正正常,分分秒可以以正常跳跳变。其它功能能也同样样可以通通过更改改输入参参数来观观察输出出的仿真真结果,从从而查看看实现的的功能。如如下所示示:从图中可可以看出出,闹铃铃功能正正常实现现。图中中实现的的是调节节分位的的时间,其其它位的的时间调调节方法法一致。从图中可可以看出出整点报报时功能能也能实实现,产产生高电电平使得得蜂鸣器器发声。调时功能能测试,从从图中可可以看出出,可以以正常调调节时间间。部分RTTL图五、实验验心得:本次课程程设计是是通过所所学的EEDA知知识,自自主设计计使用物物品,将将所学的的知识运运用到实实处,感感觉收获获很大,以以前学的的时候都都是学的的理论上上的知识识,并没没有运用用到实际际做具体体的功能能器件上上来,通通过这次次的课程程设计使使我将理理论的知知识联系系到实际际运用中中来,巩巩固了以以前学习习的知识识,并且且有了新新的收获获,进一一步熟悉悉了软件件运用和和实验箱箱的使用用,增强强了自我我动手能能力。学习EDDA课程程已经过过去一段段时间,好好多知识识开始模模糊,所所以在实实验过程程中要经经常翻阅阅书本查查询相关关知识,实实验的过过程也将将书本的的知识进进一步强强化,对对书本的的知识有有了新的的认识,受受益匪浅浅。在程程序设计计过程中中容易将将各个复复合语句句的范围围用错,从从而出现现意想不不到的结结果,逻逻辑出现现紊乱,有有时是漏漏掉了某某些语句句或者是是一些语语法错误误,这些些在编译译的时候候都会有有相应的的出错提提示,顺顺着提示示去改正正相对比比较容易易,不过过也出现现过几次次错误出出现的地地方和提提示出错错的地方方不一致致,费了了很大力力气才解解决,还还有一种种就是,编编译可以以通过,但但是结果果不与预预想的一一致,一一般进程程proocesssendd prroceess不不会出错错,原因因主要是是进程中中的逻辑辑顺序或或嵌套没没有安排排好,比比如iffelsseendd iff语句,如如果iff语句结结束的位位置用错错,即eend if的的位置不不对,不不会提示示出错但但是不能能达到想想要的结结果,这这就需要要从头认认真分析析各逻辑辑关系,重重新考虑虑endd iff位置,总总之课程程设计虽虽然辛苦苦,但是是却有其其中的乐乐趣,尤尤其是解解决问题题后的成成就感,学学以致用用,感觉觉很充实实。EDDA是现现代信息息社会里很有用用的一门门学科,以以后一定定会再次次用到,现现在打好好基础,为为以后的的学习和和工作奠奠定基础础,培养养兴趣。参考文献献:EDDA技术术与VHHDL(第第二版).潘松 黄继继业 .清华大大学出版版社.220088六、程序序清单librraryy ieeee;use ieeee.sstd_loggic_11664.aall; use ieeee.sstd_loggic_unssignned.alll;entiity shuuzizzhonng iisportt(cllk1,sett,naaol,chaangee,s11,s22,s33:inn sttd_llogiic;-秒秒分时校校验-s11,s22,s33;闹铃铃设置nnaoll,调时时间启动动键chhanggeminiite11:ouut sstd_loggic_vecctorr(3 dowwntoo 0);miniite22:ouut sstd_loggic_vecctorr(3 dowwntoo 0); secoond11,seeconnd2, hoour11,hoour22:ouut sstd_loggic_vecctorr(3 dowwntoo 0); couut:oout stdd_loogicc);end enttityy;archhiteectuure onee off shhuziizhoong issignnal clkk,teemp:stdd_loogicc;begiin pro:proocesss(cclk11) vvariiablle nn:inntegger:=0 ; bbegiin if clkk1'eevennt aand clkk1=''1' theen iff n=4 tthenn teemp<<=noot ttempp;n:=0; ellse n:=n+1; endd iff; eend if; ennd pproccesss prro; cllk<=temmp; prro1:proocesss(cclk,sett,s11,s22,s33,chhangge,nnaoll) varriabble mseccondd1,mmseccondd2,mmminnitee1,mmminnitee2,mmhouur111,mhhourr12,mhoour221,mmhouur222:sttd_llogiic_vvecttor(3 ddownnto 0);variiabllemminnitee10,mmiinitte200,mhhourr1100,mhhourr1200,mhhourr2100,mhhourr2200:sttd_llogiic_vvecttor(3 ddownnto 0);begiin iff (cclk''eveent andd cllk=''1') thhen iif(nnaoll='11') theen -qiidonng ddinsshi iif ss2=''1'tthenn mmiinitte100:=mmminnitee10+1; iif mmminnitee10="10010"" tthenn mmminiite110:="00000"" mmminiite220:=mmiinitte200+1; if mmiinitte200="001100" theen mmminnitee20:="000000" eend if; eend if; endd iff; -分校验验 iif ss3=''1' theen mhhourr1100:=mmhouur1110+11; mhhourr2100:=mmhouur2110+11; iif mmhouur1110=""10110" theen mmhouur1110:="00000"" mmhouur1220:=mhoour1120+1; endd iff; if mhoour1110="00011"" annd mmhouur1220=""00001" theen mmhouur1110:="00001""mhhourr1200:=""00000" eend if; iif mmhouur2110=""10110" theen mmhouur2110:="00000"" mhhourr2200:=mmhouur2220+11; ennd iif; iif mmhouur2110=""01000"aand mhoour2220="00010"" thhen mhoour2210:="000000"mmhouur2220:="00000"" ennd iif;end if;-时校校验 ennd iif; iff seet=''1' theen -启启动校验验 iff s11='11' tthenn mssecoond11:=mmseccondd1+11; iif mmseccondd1=""10110" thhen mseeconnd1:="000000" mmseccondd2:=mseeconnd2+1; if mseeconnd2="01110"" thhen mseeconnd2:="000000" eend if; ennd iif; ennd iif; -秒秒校验 iif ss2=''1' tthenn mmiinitte1:=mmminiite11+1; iif mmminnitee1=""10110" tthenn mmminiite11:=""00000" mmminiite22:=mmminnitee2+11; if mmiinitte2="01110"" theen mmminnitee2:="00000"" eend if; eend if; eend if; -分分校验 if s3='1'' thhen mmhouur111:=mmhouur111+1; mmhouur211:=mmhouur211+1; iif mmhouur111="110100" tthenn mhhourr11:="000000" mhoour112:=mhoour112+11; eend if; iff mhhourr11="00011"" annd mmhouur122="000011" theen mmhouur111:=""00001"mhoour112:="00000"" eend if; iif mmhouur211="110100" tthenn mhhourr21:="000000" mhhourr22:=mhhourr22+1; ennd iif; iif mmhouur211="001000"annd mmhouur222="000100" thhen mhoour221:="00000""mhhourr22:="000000" ennd iif; ennd iif;-时校验验 eelsee mseccondd1:=mseeconnd1+1;-正常常计时工工作 iff mssecoond11="110100" theen mmseccondd1:="00000"" mseeconnd2:=mssecoond22+1; iff mssecoond22="001100" thhen mseeconnd2:="000000" mmminnitee1:=mmiinitte1+1; iff mmminiite11="110100" tthenn mmminiite11:=""00000" mmiinitte2:=mmminiite22+1; if mmiinitte2="01110"" thhen mmiinitte2:="000000" mmhouur111:=mmhouur111+1; mmhouur211:=mmhouur211+1; iff mhhourr11="10010"" thhen mhoour111:="00000"" mmhouur122:=mmhouur122+1; endd iff; if mhoour111=""00111" andd mhhourr12="00001"" thhen mhoour111:="00001""mhhourr12:="000000" eend if;-122小时制制 if mhoour221=""10110" theen mmhouur211:=""00000" mhhourr22:=mhhourr22+1; endd iff; if mhoour221=""01000"aand mhoour222=""00110" theen mmhouur211:=""00000"mhoour222:="00000"" eend if;-244小时制制 endd iff;ennd iif; endd iff;ennd iif; ennd iif; if naool=''0' theen secoond11<=mmseccondd1;secoond22<=mmseccondd2;miniite11<=mmminnitee1;miniite22<=mmminnitee2; if cchannge='0'' thhen houur1<<=mhhourr11;houur2<<=mhhourr12; elsee hoour11<=mmhouur211;hoour22<=mmhouur222;-122/244小时制制转换end if;elsse seccondd1<="00000""seccondd2<="00000""minnitee1<=mmiinitte100;minnitee2<=mmiinitte200; if cchannge='0'' thhen houur1<<=mhhourr1100;hoour22<=mmhouur1220; elsse hhourr1<=mhoour2210;houur2<<=mhhourr2200;-122/244小时制制转换end if;end if;if (mseeconnd1="00000"" orr mssecoond11="000011") andd (mmseccondd2=""00000") annd (mmiinitte1="00000"") aand (mmminiite22="000000")-annd(mmseccondd1<""00110")andd(mseeconnd2="00000"") tthenn coout<<='11' elsse iif cchannge='0'' thhen if (mmminiite11=mmminiite110) andd (mmminnitee20=mmiinitte2) annd (mhoour112=mmhouur1220) andd (mmhouur111=mhhourr1100) aand (mssecoond11<=""01000") annd (mseeconnd2="00000"") tthenn coout<<='11'eelsee coout<<='00'-整点点报时 ennd iif;eelsee iff (mmminnitee1=mmminnitee10)andd (mmminnitee20=mmiinitte2) and (mhhourr22=mhoour2220) annd (mhoour221=mmhouur2110) andd (mmseccondd1<="01101"") aand (mseeconnd2="00000"")theen ccoutt<=''1' ellse coutt<=''0' eend if; endd iff;end if;end if;end proocesss;end arcchittectturee onne;