数电设计数字钟基于QUARTUS.docx
- 文档编号:27502163
- 上传时间:2023-07-02
- 格式:DOCX
- 页数:24
- 大小:89.03KB
数电设计数字钟基于QUARTUS.docx
《数电设计数字钟基于QUARTUS.docx》由会员分享,可在线阅读,更多相关《数电设计数字钟基于QUARTUS.docx(24页珍藏版)》请在冰豆网上搜索。
数电设计数字钟基于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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 设计 数字 基于 QUARTUS