[计算机硬件及网络]多动能数字钟.doc

上传人:音乐台 文档编号:1991300 上传时间:2019-01-28 格式:DOC 页数:38 大小:34.85KB
返回 下载 相关 举报
[计算机硬件及网络]多动能数字钟.doc_第1页
第1页 / 共38页
[计算机硬件及网络]多动能数字钟.doc_第2页
第2页 / 共38页
[计算机硬件及网络]多动能数字钟.doc_第3页
第3页 / 共38页
亲,该文档总共38页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《[计算机硬件及网络]多动能数字钟.doc》由会员分享,可在线阅读,更多相关《[计算机硬件及网络]多动能数字钟.doc(38页珍藏版)》请在三一文库上搜索。

1、设计内容简介 设计一个数字计时器,可以完成00:00:00到23:59:59的计时功能,并在控制电路的作用下具有保持、清零、快速校时、快速校分、快速较秒等功能。在设计的电路具有上述基木功能的前提下,我又进行了功能扩展:整点报时、闹钟设置、彩铃和万年历功能。(由于时间限制,万年历功能未经硬件测试,仅通过软件层面简单调试仿真)设计要求说明 设计基本要求: 1、能进行正常的时、分、秒计时功能; 2、分别由六个数码管显示时分秒的计时: 3. K1是系统的使能开关(K1=0正常工作,K1=1时钟保持不变); 4. K2是系统的清零开关(K2=0正常J:作,K2=1时钟的分、秒全清零); 5. K3是系统

2、的校分开关(K3=0正常:作,K3=1时可以快速校分);6. K4是系统的校时开关(K4=0正常二作,K4=1时可以快速校时); 设计提高部分要求 1、使时钟具有整点报时功能(当时钟计到5953H寸开始报时,在5953, 5955,5957,时报时频率为512Hz, 5959,时报时频率为1KHz); 2、闹表设定功能;方案论证(整体电路的工作原理)木实验在实现实验基木功能的基础上,加入了整点报时、闹钟设置、彩铃和万年历显示调节功能。蔡个I-匕路由计数模块、分频模块、校时、校分较秒模块,清零模块、保持模块,整点报时模块,闹钟设定模块、彩铃模块,以及万年历模块构成。(如下图所示) 基木功能:数字

3、计时器基木功能是计时,因此首先需要获得具有精确振荡时间的脉振信号,以此作为计时电路的时序基础,实验中可以使用的振荡频率源为48MHZ,通过分频获得所需脉冲频率(1 Hz 2Hz, 4Hz,1 KHz,500Hz,6MHz )。经过Verilog编程可以轻松获得较为精确的分频信一号。在计数模块中,秒位和分位分别通过编程用模60计数器实现,时位通过编程川模24计数器实现。校时、校分及校秒模块则通过语言选择实现。清零及保持功能在计数模块中用判断语句可轻松实现。计数模块总共输出6路信一号:秒位的个、一位,分位的个、一十位及时位的个、一卜位。 整点报时:利用计数模块的输出作为报时模块的输入,当检测到59

4、 53 , 59 55 ,5957”时令报时模块的输出为500Hz, 59 59”时令报时模块的输出为I Kz.,驱动蜂鸣器产生不同的响声。闹钟设定模块:这里设计一个闹钟模块,输入为计数模块的输出及一系列调节信号,输出接到译码模块上。在闹钟模块内部,核心模块是一个选择模块,选择输出的信号是闹钟显示还是正常的计数显示。为了使闹钟模块与计数模块是相互独立的,因此单独设一计模24(闹钟小时)和模60(闹钟分钟)作为选择模块的输入。设计程序语言的思想是,当检测到与设定闹钟相同的时、分位时就输出一个信一号1,并保存当前计数位(加1)当检测到当前信号与保存位相同时输出信一号恢复为00(这个信一号将作为闹铃

5、结束的判断信一号)彩铃模块:木程序选用了一段悠扬的梁祝音乐,该模块的输入分别为6MHz和4Hz,通过编程实现输出为符合一音律的不同频率。程序实现的思想并不复杂,只要有乐谱可以实现各种不同的音乐输出。蜂鸣器何时鸣叫取决于闹钟模块的输出。 译码显示模块:木模块没有采用Veri log语言实现,通过搭建原理图实现。显示功能是通过数选器、译码器、码转换器和7段显示管实现的。因为实验中只用一个译码显示单元,6个7段码(用于显示时分秒),所以通过I个24选4MUX和一个3-8译码器配合,显示译码器采JJ 7447,根据计数器的信号进行数码管的动态显示。万年历模块:通过编程可以轻松实现,原理与上述计数模块,

6、调节模块很是类似。由于未经硬件测试(时间限制),将在下面的子模块介绍中给出软件层面的实现和编译调试结果。分频模块:module clkdiv (clk, clkout, clkoutlk, clkout500, clkout2, clkout6M, clkout4):input elk:output clkout, clkoutlk, elkout500, clkout2, clkout6M, clkout4;reg clkout,clkoutlk, clkout500, clkout2, clkout6M, clkout4:reg 31:O cnt, cnm, cnn, cmm, caa,

7、cbb:always(posedge elk)/产生1Hz信号begin i f (cnt二=32d24000000) begin clkout(二1dl: cnt=cnt+32dl: end else if (cnt二二32d48000000) begin clkout(二1bO: cnt=32 dO: end else cnt=cnt+:32 dl:endalways(posedge elk)begin i f (cnm二二32d24000) beginclkoutlk(二1dl:cnm=cnm+32dl:endelse i f (cnm=32 d48000)beginclkoutlk(二

8、IhO:cnm=32 dO:endelsecnm=cnm+32dl: always(posedge clk)begin i f (cnn二二32d48000) begin clkout500=1dl: cnn=cnn+32 d l: end else if (cnn二二32d96000) begin clkout500(二1bO: cnn=32 dO: end else cnn=cnn+32endalways( (posedgebegin if(cmm= 32 begindldl2000000) clkout2=1dl:cmm=cmm+32dl:endelse if (cmm二二32d2400

9、0000)beginclkout2(二1bO:cmm=32 dO:endelsecmm=cmm+32 d 1:endalways(posedge clk)begin if (caa=二32 d4) begin clkout6M(二1 dl: caa=caa+32dl: end else if (caa二二32 d8) begin clkout6M=1bO: caa=32 dO: end else caa=caa+32 d l:endalways(posedge elk)begin i f (cbb= 32 d6000000) begin clkout4二1dl: cbb=cbb+32dl: e

10、nd else if (ebb二二32d12000000) begin clkout4(二IbO: cbb=32 dO: end else cbb=cbb+32dl:endEndmodule计数模块:计数模块中包含三个校准模块和三个计数模块(分别对应着秒分时)。 (secondclka为秒脉冲输入信号1Hz,secondclkb为输入校准信号用频率2Hz,K5jiaomiao,K3jiaofen, K4jiaoshi分别为校秒、校分、校时输入信号,clkdff为D触发器输入信一号(去开关抖动用),reset 1K2为清零信号,startOKi为保持信号。输出分别对应秒分时的个位和十位。一校准模

11、块程序实现:一校准模块程序实现:module xiaozhun(clka, clkb, cp, ciko):input clka, clkb, cp;刀正常进位信号频率、校准频率、校准使能信号output clko:reg clko; alwaysbegin if(!cp) clko=clka: else clko=clkb;endEndmodule一秒计数模块程序实现:module second (c k, reset, start, SI, SH, co):input elk;/输入计数时钟input reset, start;/清零信号、保持信号output co=l b0;/进位信号r

12、eg co;output 3:0 SL, SH:reg3:0 SL, SI-i:reg7:Ocnt:always(posedge clk or negedge reset)beginif(!reset) beginSL=4 d0: SH=4 d0: cnt=8 d0: endelsebegin if(!start) begini f (cnt=8 d59) begin cnt=8 d0: SL=4d0: SH=4d0; co=1b1: endelse begin co=1b0: cnt=cnt+8 dl: SL=cnt%10; SIi=cnt/ 10; endendendendendmodul

13、emodule minute (clk, reset, start, ML, MH, co):input c1k;刀输入计数时钟input reset, start:/清零信一号、保持信一号output co=l b0;/进位信一号reg co;output 3:01 ML, MI I:reg3:0 ML, MH:reg7:Ocnt:always(posedge clk or negedge reset)beginif(!reset)beginML=4d0;MMMH=4dO:cnt=8 dOendelsebegin if(!start)beginif (cnt二二8 d59) begin cn

14、t=8 dO: ML=ldO: MH=1 dO ; co=1bl: endelse begin co= 1bO: cnt =cnt+8 dl: Ml,(二cnt%10; Mll =cnt/10; endendendendendmodule时计数模块module hour (c 1 k, reset, start, HL, HH):input cik;/输入计数时钟input reset, start;/清零信号、保持信号output 3:OHL, HH:reg 3:0 HL., HH:reg7:0 cnt:always(posedge clk or negedge reset)beginif(

15、!reset)beginHL=4 dO:HH=4 dO:module hour (c 1 k, reset, start, HL, HH):input cik;/输入计数时钟input reset, start;/清零信号、保持信号output 3:OHL, HH:reg 3:0 HL., HH:reg7:0 cnt:always(posedge clk or negedge reset)beginif(!reset)beginHL=4 dO:HH=4 dO: HL=4 dO: HH=4 dO: endelse begin cnt=cnt+8 dl: HL二cnt%10; HH=cnt/10:

16、 endendendendendmodule整点报时:整点报时模块: (输入分别为秒位和分位以及报时所需的两种频率,输出为驱动蜂鸣器的频率)module baoshi(sl,sh, ml,mh, clklk, clk500, clkbeep):input 3:0 sl,sh, ml, mh:input clklk,clk500:output clkbeep:reg clkbeep:always begin if (mh二二8 d5&ml二二8 d9&sh二二8 d5&s l二二8 d3) clkbeep=clk500: else i f (mh=8 d5&m1=8 d9&sh=8 d5&s 1

17、=8 d5) clkbeep=clk500:else if (mh二二8 d5&ml二二8 d9&sh二二8 d5&sl二二8 d7)clkbeep=clk500:else i f (mh=8 d5&ml二二8 d9&sh二二8 d5&sl二二8 d9)clkbeep=clklk:elseclkbeep=0:endendmodule闹钟设定模块:闹钟设定模块中包含2个校准模块,1个模60计数模块,I个模24计数模块和1个输出信号选择模块。(其中计数模块与前Ih1的类似,只是不含进位输出信一号)闹钟调节模块程序实现:module tiaonao(clka, cp, clko):input clk

18、a,cp;/闹钟调节用频率、调节输入使能信号output clko:reg clko: alwaysbegin if(cp) clko=clka: else c1ko=0:endEndmodule模24计数模块和模60计数模块的程序源码不再给出(与前面的计数模块程序基木类似,只是不输出进位信号,无清零保持信号)输出信号选择模块程序实现: ( sl, sh, ml, mh, hl, hh为正常计数输入信一号,iml, imh, ihl, ihh为闹钟输入信号,slo, sho, mlo, mho, hlo, hho为输出信一号接译码显示模块,k为显示闹钟或正常计数选择信一号,km为响铃判断信号)

19、modulenaozhxuan (sl, sh, ml, mh, hl, hh, iml, imh, ihl, ihh, slo, sho, mlo, mho, hlo, hho, k, km);input3:0 sl,sh, ml, mh, hl,hh, iml,imh, ihl, ihh:input k:output 3:Oslo, sho, mlo, mho, hlo, hho;reg 3:O slo, sho, mlo, mho, hlo, hho, xx:output km:reg km:initialbeginkm=0;Endalwaysbeginif(!k)beginbegins

20、lo=sl;sho=sh;mlo=ml;mho=mh:h1o=h1;hho=hh;endif(mlo=iml)&(mho=imh)&(hlo=ihl)&(hho=ihh)begi nxx=mlo;km= 1;end else if(mlo=xx km=0;endelsebegins l o=4 d8:sho=4 d8:mlo=iml;mho=imh;hlo=ihl;hho=ihh:endendEndmodule彩铃模块:梁祝源码:(来自网络)module song (c l k_6MHz, c l k_ 4Hz, speaker, h i gh, med, l ow):input clk6lH

21、z, clk_ 4Hz:output speaker;output 3:0 high, med, low:reg3:0 high, med, low:reg13:0 divider,origin:reg7:01 counter:reg speaker;wire carry;assign carry=(divider二二16383):always 0(posedge clk6MHz)beginif(carry) divider=origin:else divider=divider+l:endalways R(posedge carry)beginspeaker=一speaker:endalwa

22、ys(posedge ck_ 4Hz) begincase(high, med, low),b000000000011:origin=7281:,b000000000101:origin=8730;b000000000110:origin=9565;,b000000000111:origin=10310:,b000000010000:origin=10647:,b000000100000:origin=11272:b000000110000:origin=11831:,b000001010000:origin=12556:,b000001100000:origin=12974:b0001000

23、00000:origin=13516:b000000000000:origin=16383:endcase endalways(posedge clk_ 4Hz) beginif(counter=63) counter=0:else counter=counter+l;case (counter)0:(high, med, low二b000000000011:1:high, med, low=b000000000011:2:high, med, low二,b000000000011:3:(high, med, low二,h000000000011:4:(high, med, low二,b000

24、000000101:5:(high, med, low=b000000000101:6:high, med, low二b000000000101:7:(high, med, l ow _ h000000000110:8:(high, med, l ow二,h000000010000:9:(high, med, low=b000000010000:9:high, med, low=b000000010000:10:high, med, low=b000000010000:11:high, med, low=b000000100000:12:high, med, low=b000000000110

25、:13:high, med, low=b000000010000:14:high, med, low=b000000000101:15:high, med, low=,b000000000101:16:high, med, low=b000001010000:17:(high, med, low=b000001010000:18:(high, med, low=b000001010000:19:high, med, low=b000100000000:20:(high, med, low=b000001100000:21:(high, med, low=b000001010000:22:hig

26、h, med, low=,6000000110000:23:high, med, low=b000001010000:24:high, med, low=b000000100000:25:(high, med, low=6000000100000:26:high, med, l ow=,6000000100000:27:high, med, low=b000000100000:28:high, med, low=b000000100000:29:(high, med, low=6000000100000:30:high, med, low=b000000100000:31:high, med,

27、 low=b000000100000:32:high, med, low=,b000000100000:33:high, med, low=,6000000100000:34:high, med, low卜,b000000100000:35:high, med, low卜b000000110000;36:high, med, low二b000000000111:37:high, med, low二,b000000000111:38:high, med, low二,b000000000110:39:high, med, low卜b000000000110:40:high, med, low二b0

28、00000000101:41:high, med, low二b000000000101:42:lh i gh, med, l ow二,b000000000101:43:high, med, low二b000000000110:44:high, med, low=b000000010000:45:high, med, low二,b000000010000:46:high, med, low二,b000000100000:47:high, med, low二,b000000100000:48:high, med, low=b000000000011:49:high, med, low二b00000

29、0000011:50:(high, med, low卜,b000000010000:51:high, med, low二,b000000010000:52:high, med, low=b000000000110:53:high, med, low=b000000000101:54:h i gh, med, l ow卜,6000000000110:55:h i gh, med, low二b000000010000:56:high, med, low二b000000000101:57:high, med, low=b000000000101:58:high, med, low二,b0000000

30、00101:59:high, med, low=b000000000101:60:high, med, low卜,b000000000101;61:high, med, low二,b000000000101:62:high, med, low二,b000000000101:63:high, med, low=b000000000101:endcaseendendmodule译码显示模块: 显示电路土要由数据选择器24选4MUX、译码器74138.显示译码器7447和数码显示管组成。显示电路示意图如下:因为实验要求只用一个显示译码器7447,所以考虑用动态扫描显示法进行数招显示,即每次只显示一位

31、,按照一定的显示时间间隔轮流显示。每个显示位均为四位二进制数,所以需要数选器,要显示的位有时分秒6位( I IH,HL,MH,ML,SH,SL )。数选器的选择信号有三位,所以要用一个模8循环计数器作为数选器的地址选择端,供轮流选择带显示的数据,此外,还要用一个3-8译码器来选择数码管(DIG位)来显示对应的数据。(这部分功能实现未采用Verilog语言,原因是用原理图现成的模块搭建一!分方便)万年历模块:万年历实现程序设计思想:万年历显示一般为“20100420”正好用到8个数码管.年、月、日分别对应3个模块。年月的输出除了连接译码显示外,还要输入到日的模块中,以供各种不同情形的进位判断(诸

32、如大月、小月,平年闰年对应不同的日进位输出)。年月日的设定信号,初始化信号一与前面的校分、清零信号实现原理基木类似。至于当前数码管的显示同样可以设计一个输出选择模块,选择当前显示(正常时分秒计数或闹钟设定界面或万年历显示界面),涉及开关不够用问题可通过对开关编码实现。日计数模块程序设计:module day (clk, reset, S1, S2, co, year, month);input15:0year,month;/年、月作为输入供日进位判断使用input elk;刀侮24小时的输出进位作为日的输入时钟input reset;/重置信号,恢复到“20080101output c。二1

33、h0;/进位信号reg co;output3:OSl, S2:reg 3:0S1, S2:reg15:0 cnt;always(posedge elk or negedge reset)beginif(!reset) begin S1=4 dO: S2=4 d 1: cnt二16 dl: endelse beginif(month=1)&(cnt二二31)begin cnt=16 dl: S 1 =4 d0: S2=4 dl: co(二1bl: end else if(month=3&cnt二二31) begin cnt(二16 d l: S1=4 dO: S2=4dl: co(二1bl: e

34、nd else if(month二二4&cnt二二30) begin ent(二16 d l: S1=4dO: S2=4dl: co=1 bl: endelse if(month=5&cnt=31)begi n cnt=16 d1: S1=4d0: S2=4 dl: endelse if(month=5&cnt二二31)begi n cnt二16 d l: S1=4dO: S2=4 dl: co(二1bl: endelse if (month=8&cnt=31)begin cnt(二16 d l: S1=4 dO: S2=4dl: co二1bl: end else if(month二二9&cn

35、t二二30) begin cnt二16 d l: S 1 =4 dO: S2=4 dl; co=1 bl: end else if(month=10&cnt= 31)begin cnt=16 dl: S1=4 dO: S2 =4 d l: co二1hl: end else if(month=11&cnt=30) begin cnt(二16 d l: Sl=4d0: S2 =4 d l: co(二lbl: endelse if(month二二12&cnt二二31)begin cnt(二16 d l: S1=4 dO: S2 =4 d l: co(二1bl; endelse if(month=2&

36、cnt=2S&year/4) begin cnt(二16 d l: S1=4dO: S2=4 dl: co(二1bl: end else if(month二二2&cnt=29&.&(!(year/4) begincnt(二16 d1:S1=4dO:S2=4 dl:co=1bl:endelsebeginco=1bO:cnt=cnt+16dl:S1=cnt/10%10:S2=cnt%10;EndendendEndmodule月计数模块程序设计:module month(clk, reset, S1, S2, co, cnt):input elk:input reset:output co=l bO

37、:output cnt:reg co;output 3:0S一,S2:reg 3:0S1,S2:reg15:0 cnt:always(posedge elk or negedge reset)beginif(!reset) begi n S1=4 dO: S2=4 d 1: cnt二16 dl: endelse beginif (cnt=8 d12) begin cnt=16dl: S1=4 dO: S2=4 dl: co(二IM: endelse begin co=1bO: cnt=cnt+16dl: S1=cnt/10%10: S2=cnt%10; endendendEndmodule年计

38、数模块程序设计:module year(clk, reset, S1, S2, S3, S4, cnt):input clk:input reset:output cnt;output 3:0S1, S2, S3, S4:reg 3:0 S 1, S2, S3, S4:reg15:0 cnt;always(posedge clk or negedge reset)beginif(!reset) begin S1=4 d2: S2=4 dO: S3=4 dO: S4=4 d8: cnt二16 d2008: endelse begini f (cnt二二8 d2030) begin cnt二16 d2008: S 1 =4 d2: S2=4 dO: S3=4 dO: S4=4 d8: endelse begin cnt=cnt+16 dl: S1=cnt/1000%10: S2=cnt/100%10: S3=cnt/10%10: S4=cnt%10; endendendendmodule

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1