数电设计数字钟基于QUARTUS.docx

上传人:b****1 文档编号:15196728 上传时间:2023-07-02 格式:DOCX 页数:24 大小:89.03KB
下载 相关 举报
数电设计数字钟基于QUARTUS.docx_第1页
第1页 / 共24页
数电设计数字钟基于QUARTUS.docx_第2页
第2页 / 共24页
数电设计数字钟基于QUARTUS.docx_第3页
第3页 / 共24页
数电设计数字钟基于QUARTUS.docx_第4页
第4页 / 共24页
数电设计数字钟基于QUARTUS.docx_第5页
第5页 / 共24页
数电设计数字钟基于QUARTUS.docx_第6页
第6页 / 共24页
数电设计数字钟基于QUARTUS.docx_第7页
第7页 / 共24页
数电设计数字钟基于QUARTUS.docx_第8页
第8页 / 共24页
数电设计数字钟基于QUARTUS.docx_第9页
第9页 / 共24页
数电设计数字钟基于QUARTUS.docx_第10页
第10页 / 共24页
数电设计数字钟基于QUARTUS.docx_第11页
第11页 / 共24页
数电设计数字钟基于QUARTUS.docx_第12页
第12页 / 共24页
数电设计数字钟基于QUARTUS.docx_第13页
第13页 / 共24页
数电设计数字钟基于QUARTUS.docx_第14页
第14页 / 共24页
数电设计数字钟基于QUARTUS.docx_第15页
第15页 / 共24页
数电设计数字钟基于QUARTUS.docx_第16页
第16页 / 共24页
数电设计数字钟基于QUARTUS.docx_第17页
第17页 / 共24页
数电设计数字钟基于QUARTUS.docx_第18页
第18页 / 共24页
数电设计数字钟基于QUARTUS.docx_第19页
第19页 / 共24页
数电设计数字钟基于QUARTUS.docx_第20页
第20页 / 共24页
亲,该文档总共24页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

数电设计数字钟基于QUARTUS.docx

《数电设计数字钟基于QUARTUS.docx》由会员分享,可在线阅读,更多相关《数电设计数字钟基于QUARTUS.docx(24页珍藏版)》请在冰点文库上搜索。

数电设计数字钟基于QUARTUS.docx

数电设计数字钟基于QUARTUS

大连理工大学本科实验报告

题目:

数电课设——多功能数字钟

课程名称:

数字电路课程设计

学院(系):

电信学部

专业:

电子与通信工程

班级:

学生姓名:

***************

学号:

***************

完成日期:

成绩:

2010年12月17日

题目:

多功能数字时钟

一.设计要求

1)具有‘时’、‘分’、‘秒’的十进制数字显示(小时从00~23)

2)具有手动校时校分功能

3)具有整点报时功能,从59分50秒起,每隔2秒钟提示一次

4)具有秒表显示、计时功能(精确至百分之一秒),可一键清零

5)具有手动定时,及闹钟功能,LED灯持续提醒一分钟

6)具有倒计时功能,可手动设定倒计时范围,倒计时停止时有灯光提示,可一键清零

二.设计分析及系统方案设计

1.数字钟的基本功能部分,包括时、分、秒的显示,手动调时,以及整点报时部分。

基本模块是由振荡器、分频器、计数器、译码器、显示器等几部分组成。

利用DE2硬件中提供的50MHZ晶振,经过分频得到周期为1s的时钟脉冲。

将该信号送入计数器进行计算,并把累加结果以“时”“分”“秒”的形式通过译码器由数码管显示出来。

进入手动调时功能时,通过按键改变控制计数器的时钟周期,使用的时钟脉冲进行调时计数(KEY1调秒,LOAD2调分,LOAD3调时),并通过译码器由七位数码管显示。

从59分50秒开始,数字钟进入整点报时功能。

每隔两秒提示一次。

(本设计中以两个LED灯代替蜂鸣器,进行报时)

2.多功能数字钟的秒表功能部分,计时范围从00分秒至59分秒。

可由输入信号(RST1)异步清零,并由按键(EN1)控制计时开始与停止。

将DE2硬件中的50MHZ晶振经过分频获得周期为秒的时钟脉冲,将信号送入计数器进行计算,并把累计结果通过译码器由七位数码管显示。

3.多功能数字钟的闹钟功能部分,通过按键(KEY1,KEY2,KEY3)设定闹钟时间,当时钟进入闹钟设定的时间(判断时钟的时信号qq6,qq5与分信号qq4,qq3分别与闹钟设定的时信号r6,r5与分信号r4,43是否相等),则以LED灯连续提示一分钟。

4.多功能数字钟的倒计时功能部分,可通过按键(LOAD7调秒,LOAD8调分,LOAD9调时)设定倒计时开始时刻。

倒计时的时钟与数字钟的时钟相同,每迎到一个时钟上升沿,则计数器减一。

计数器减至00时,分钟位、秒钟位恢复至59,时钟位恢复至23。

倒计时结束时(即00时00分00秒),控制LED灯亮,表示倒计时结束。

本设计通过数据选择器控制译码器,使数码管独立显示,各功能之间互不影响。

当LOAD4为高电平,则对秒表信号进行译码,数码管显示秒表数据;当LOAD4为低电平,LOAD5为高电平,则对闹钟信号进行译码,数码管显示闹钟数据;当LOAD4,LOAD5为低电平,LOAD6为高电平,则对倒计时信号进行译码,数码管显示倒计时信号数据;当LOAD4,LOAD5,LOAD6全为低电平,则对正常时钟信号进行译码,数码管显示时钟信号数据。

附图1:

系统总体结构框图

 

3.系统以及模块硬件电路设计

硬件模块包含与,或,非多个基本逻辑单元,由硬件芯片内部提供,软件编程是为了目的性的操作硬件。

50MHZ的晶振进行分频操作:

根据上式得到周期分别为1s,,的时钟。

附图2系统硬件电路设计

下载时选择的开发系统模式以及管脚定义

表1GW48-CK开发系统工作模式:

接口

名称

类型

(输入/输出)

结构图上

的信号名

引脚号

说明

clk

Input

Pin_N2

2

50MHzclock信号

En1

Input

Pin_P2

1

秒表运行使能段

EN2

Input

Pin_N1

2

倒计时运行使能段

KEY1

Input

Pin_N23

5

秒钟调节按键

KEY2

Input

Pin_P23

6

闹钟分钟调节按键

KEY3

Input

Pin_W26

6

闹钟时钟调节按键

Led1

Output

Pin_AE23

7

闹钟显示

Led2

Output

Pin_AA20

7

接近整点显示

Led3

Output

Pin_Y18

7

整点显示

Led4

Output

Pin_AF23

7

倒计时结束显示

Led5

Output

Pin_AD12

8

倒计时结束闪烁

Load1

Input

Pin_V2

1

时钟运行使能端

Load2

Input

Pin_V1

1

数字钟分钟调节按键

Load3

Input

Pin_U4

1

数字时钟调节按键

Load4

Input

Pin_U3

1

选择秒表显示

Load5

Input

Pin_P1

1

选择闹钟显示

Load6

Input

Pin_A13

4

选择倒计时显示

Load7

Input

Pin_C13

3

倒计时初始秒钟设定

Load8

Input

Pin_AC23

8

倒计时初始分钟设定

Load9

Input

Pin_AD13

8

倒计时初始时钟设定

q1[0]

Output

Pin_AF10

8

秒钟低位数码管显示

q1[1]

Output

Pin_AB12

8

q1[2]

Output

Pin_AC12

8

q1[3]

Output

Pin_AD11

8

q1[4]

Output

Pin_AE11

8

q1[5]

Output

Pin_V14

8

q1[6]

Output

Pin_V13

8

q2[0]

Output

Pin_V20

6

秒钟高位数码管显示

q2[1]

Output

Pin_V21

6

q2[2]

Output

Pin_W21

6

q2[3]

Output

Pin_Y22

6

q2[4]

Output

Pin_AA24

6

q2[5]

Output

Pin_AA23

6

q2[6]

Output

Pin_AB24

6

q3[0]

Output

Pin_AB23

6

分钟低位数码管显示

q3[1]

Output

Pin_V22

6

q3[2]

Output

Pin_AC25

6

q3[3]

Output

Pin_AC26

6

q3[4]

Output

Pin_AB26

6

q3[5]

Output

Pin_AB25

6

q3[6]

Output

Pin_Y24

6

q4[0]

Output

Pin_Y23

6

分钟高位数码管显示

q4[1]

Output

Pin_AA25

6

q4[2]

Output

Pin_AA26

6

q4[3]

Output

Pin_Y26

6

q4[4]

Output

Pin_Y25

6

q4[5]

Output

Pin_U22

6

q4[6]

Output

Pin_W24

6

q5[0]

Output

Pin_U9

1

q5[1]

Output

Pin_U1

1

q5[2]

Output

Pin_U2

1

小时低位数码管显示

q5[3]

Output

Pin_T4

1

q5[4]

Output

Pin_R7

1

q5[5]

Output

Pin_R6

1

q5[6]

Output

Pin_T3

1

q6[0]

Output

Pin_T2

1

小时高位数码管显示

q6[1]

Output

Pin_P6

1

q6[2]

Output

Pin_P7

1

q6[3]

Output

Pin_T9

1

q6[4]

Output

Pin_R5

1

q6[5]

Output

Pin_R4

1

q6[6]

Output

Pin_R3

1

rst1

Input

Pin_T7

1

秒表异步清零

Rst2

Input

Pin_B13

4

倒计时异步清零

四系统的VHDL设计

源程序:

--代码共372行

libraryieee;

useclockis

port(load9,load8,load7,load6,load5,load4,load3,load2,load1:

instd_logic;

clk,rst1,rst2,en1,en2,key1,key2,key3:

instd_logic;

q1,q2,q3,q4,q5,q6:

outstd_logic_vector(6downto0);

led1,led2,led3,led4,led5:

outstd_logic

);

end;

architectureaofclockis

signalqq1,qq2,qq3,qq4,qq5,qq6:

std_logic_vector(3downto0);--数字钟计数器信号

signalvis1,vis2,vis3,vis4,vis5,vis6:

std_logic_vector(3downto0);

signalcp1,cp2,cp3,cp4,cp5:

std_logic;

signalp1:

integerrange0to49;

signalp2:

integerrange0to999;

signalp3:

integerrange0to999;

signalclfsa:

integerrange0to499;

signalen,a1,e1,c1,hlfs,l:

std_logic;

signalclkx,clkx1,clkx2,clkx3,clkx4:

std_logic;

signala,b,c,d,e,f,g:

std_logic_vector(3downto0);--秒表计数器信号

signalr1,r2,r3,r4,r5,r6:

std_logic_vector(3downto0);--闹钟信号

signalz1,z2,z3,z4,z5,z6:

std_logic_vector(3downto0);--倒计时计数器信号

signalalz1,alz2,alz3,alz4,alz5:

std_logic;

Begin

--------------------------------------------------------

---------------分频模块-----------------------------

--------------------------------------------------------

process(clk)--分频1

begin

ifrising_edge(clk)then

ifp1=49then

p1<=0;cp1<='1';

else

p1<=p1+1;cp1<='0';

endif;

endif;

endprocess;

process(cp1)--分频2

begin

ifrising_edge(cp1)then

ifp2=999then

p2<=0;cp2<='1';

else

p2<=p2+1;cp2<='0';

endif;

endif;

endprocess;

process(cp2)--得到周期为1秒的信号

begin

ifrising_edge(cp2)then

ifp3=999then

p3<=0;cp3<='1';

else

p3<=p3+1;cp3<='0';

endif;

endif;

endprocess;

process(cp2)--得到周期为百分之一秒的信号

begin

ifrising_edge(cp2)then

ifa="1001"thena<="0000";a1<='1';

elsea<=a+1;a1<='0';

endif;

endif;

endprocess;

process(cp2)--得到周期为秒的信号

begin

ifrising_edge(cp2)then

ifclfsa=499then

clfsa<=0;hlfs<='1';

else

clfsa<=clfsa+1;hlfs<='0';

endif;

endif;

endprocess;

--------------------------------------------------------

---------------数字钟模块--------------------------

--------------------------------------------------------

process(cp3,load1,key1)--数字钟秒钟计数器

begin

ifrising_edge(cp3)then

ifload1='1'then

ifkey1='0'then--秒钟手动调节

ifqq2="0101"andqq1="1001"

thenqq1<="0000";qq2<="0000";

elsifqq1="1001"then

qq1<="0000";qq2<=qq2+1;

elseqq1<=qq1+1;

endif;

endif;

elseifload1='0'then

ifqq2="0101"andqq1="1001"

thenqq1<="0000";qq2<="0000";cp4<='1';

elsifqq1="1001"then

qq1<="0000";qq2<=qq2+1;cp4<='0';

elseqq1<=qq1+1;cp4<='0';

endif;

ifqq2="0101"anden='1'then--整点报时

caseqq1is

when"0001"=>led2<='1';

when"0011"=>led2<='1';

when"0101"=>led2<='1';

when"0111"=>led2<='1';

when"1001"=>led3<='1';

whenothers=>led2<='0';led3<='0';

endcase;

elseled2<='0';led3<='0';

endif;

endif;

endif;

endif;

endprocess;

process(hlfs,cp4,load2)--数字钟分钟计数器

begin

ifload2='1'thenclkx<=hlfs;elseclkx<=cp4;endif;--当load2为高电平时,进行分调节

ifrising_edge(clkx)then

ifqq4="0101"andqq3="1001"

thenqq3<="0000";qq4<="0000";cp5<='1';

elsifqq3="1001"then

qq3<="0000";qq4<=qq4+1;cp5<='0';

elseqq3<=qq3+1;cp5<='0';

endif;

endif;

ifqq3="1001"andqq4="0101"thenen<='1';elseen<='0';endif;

endprocess;

process(hlfs,cp5,load1)--数字钟时钟计数器

begin

ifload3='1'thenclkx1<=hlfs;elseclkx1<=cp5;endif;--当load3为高电平时,进行小时调节

ifrising_edge(clkx1)then

ifqq5="0011"andqq6="0010"then

qq5<="0000";qq6<="0000";

elsifqq5="1001"then

qq5<="0000";qq6<=qq6+1;

elseqq5<=qq5+1;

endif;

endif;

endprocess;

--------------------------------------------------------

---------------闹钟模块-----------------------------

--------------------------------------------------------

process(hlfs,load5,key1)--闹钟秒计数器

begin

ifrising_edge(hlfs)then

ifload5='1'then

ifkey1='0'then--手动进行闹钟秒设定

ifr2="0101"andr1="1001"

thenr1<="0000";r2<="0000";

elsifr1="1001"then

r1<="0000";r2<=r2+1;

elser1<=r1+1;

endif;

endif;endif;endif;

endprocess;

process(hlfs,load5,key2)--闹钟分计数器

begin

ifrising_edge(hlfs)then

ifload5='1'then

ifkey2='0'then--手动进行闹钟分设定

ifr4="0101"andr3="1001"

thenr3<="0000";r4<="0000";

elsifr3="1001"then

r3<="0000";r4<=r4+1;

elser3<=r3+1;

endif;

endif;endif;endif;

endprocess;

process(hlfs,load5,key3)--闹钟小时计数器

begin

ifrising_edge(hlfs)then

ifload5='1'then

ifkey3='0'then--手动进行闹钟小时设定

ifr6="0010"andr5="0011"

thenr5<="0000";r6<="0000";

elsifr5="1001"then

r5<="0000";r6<=r6+1;

elser5<=r5+1;

endif;

endif;endif;endif;

endprocess;

process(cp3,qq1,qq2,qq3,qq4,qq5,qq6,r1,r2,r3,r4,r5,r6)--数字钟与闹钟相符,以LED灯进行提示

begin

ifrising_edge(cp3)then

ifqq3=r3andqq4=r4andqq5=r5andqq6=r6

thenled1<='1';

elseled1<='0';

endif;

endif;

endprocess;

--------------------------------------------------------

---------------秒表模块-----------------------------

--------------------------------------------------------

process(a1,rst1,en1)--秒表计数器

begin

ifrst1='1'thenb<="0000";c<="0000";--秒表异步清零

elsifrising_edge(a1)then

ifen1='1'then

ifb="1001"andc="1001"

thenb<="0000";c<="0000";c1<='1';

elsifb="1001"then

b<="0000";c<=c+1;c1<='0';

elseb<=b+1;c1<='0';

endif;

endif;

endif;

endprocess;

process(c1,rst1,en1)

begin

ifrst1='1'thend<="0000";e<="0000";

elsifrising_edge(c1)then

ifen1='1'then

ifd="1001"ande="0101"

thend<="0000";e<="0000";e1<='1';

elsifd="1001"then

d<="0000";e<=e+1;e1<='0';

elsed<=d+1;e1<='0';

endif;endif;

endif;

endprocess;

process(e1,rst1,en1)

begin

ifrst1='1'thenf<="0000";g<="0000";

elsifrising_edge(e1)then

ifen1='1'then

iff="1001"andg="0101"

thenf<="0000";g<="0000";

elsiff="1001"then

f<="0000";g<=g+1;

elsef<=f+1;

endif;

endif;

endif;

endprocess;

--------------------------------------------------------

---------------倒计时模块--------------------------

--------------------------------------------------------

process(cp3,rst2,en2,clkx2,load7,hlfs)--倒计时计数器

begin

ifload7='1'thenclkx2<=hlfs;elseclkx2<=cp3;endif;

ifrst2='1'thenz2<="0000";z1<="0000";alz1<='1';--倒计时异步清零

elsifrising_edge(clkx2)then

ifen2='1'then

ifz2="0000"andz1="0000"

thenz2<="0101

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

当前位置:首页 > 医药卫生

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2