数电课设vhdl数字钟设计.docx

上传人:b****3 文档编号:12902833 上传时间:2023-04-22 格式:DOCX 页数:21 大小:118.39KB
下载 相关 举报
数电课设vhdl数字钟设计.docx_第1页
第1页 / 共21页
数电课设vhdl数字钟设计.docx_第2页
第2页 / 共21页
数电课设vhdl数字钟设计.docx_第3页
第3页 / 共21页
数电课设vhdl数字钟设计.docx_第4页
第4页 / 共21页
数电课设vhdl数字钟设计.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

数电课设vhdl数字钟设计.docx

《数电课设vhdl数字钟设计.docx》由会员分享,可在线阅读,更多相关《数电课设vhdl数字钟设计.docx(21页珍藏版)》请在冰豆网上搜索。

数电课设vhdl数字钟设计.docx

数电课设vhdl数字钟设计

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

 

题目:

数字钟的设计

 

课程名称:

数字电路课程设计

学院(系):

电子信息与电气工程学部

专业:

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

班级:

*********

学生姓名:

****

学号:

********

完成日期:

*********

成绩:

 

2012年12月28日

实验题目:

多功能数字钟的设计

一、设计要求

1.能够显示基本的数字钟并能自主运行。

2.数字钟能够进行调时,包括小时分钟秒钟都能调。

3.在接近整点时led灯会闪烁提示,并且整点时另一个led灯会提示。

4.数字钟能够转变成秒表并能运行与暂停,秒表能够进行一键清零。

5.数字钟还能够转变成倒计时,倒计时范围可手动调节,在倒计时停止时会有led灯闪烁提示。

二、设计分析与系统方案设计

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

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

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

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

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

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

每隔两秒提示一次。

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

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

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

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

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

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

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

倒计时结束时(即00时00分00秒)。

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

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

系统总体结构框图

 

三、系统以及模块硬件电路设计

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

50MHZ分频如下

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

系统硬件电路设计图如下

实验接口引脚连接如下

接口

名称

类型

(输入/输出)

结构图上

的信号名

引脚号

说明

clk

Input

Pin_N2

2

50MHzclock信号

En1

Input

Pin_P2

1

秒表运行使能段

EN2

Input

Pin_B13

2

倒计时运行使能段

KEY1

Input

Pin_N23

5

秒钟调节按键

Led1

Output

Pin_AF23

7

接近整点显示

Led2

Output

Pin_AB21

7

整点显示

Load1

Input

Pin_V2

1

时钟运行使能端

Load2

Input

Pin_U4

1

数字钟分钟调节按键

Load3

Input

Pin_V1

1

数字时钟调节按键

Load4

Input

Pin_T7

1

选择秒表显示

Load5

Input

Pin_A13

4

选择倒计时显示

Load6

Input

Pin_AF14

3

倒计时初始秒钟设定

Load7

Input

Pin_AD13

8

倒计时初始分钟设定

Load8

Input

Pin_AC13

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_P1

1

秒表异步清零

Rst2

Input

Pin_C13

4

倒计时异步清零

四、系统的程序设计

1.分频模块

process(clk)

begin

ifrising_edge(clk)then

ifp1=49then

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

else

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

endif;

endif;

endprocess;

process(cp1)

begin

ifrising_edge(cp1)then

ifp2=999then

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

else

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

endif;

endif;

endprocess;

process(cp2)

begin

ifrising_edge(cp2)then

ifp3=999then

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

elsep3<=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;

(1)分频模块进行了三次大的分频

Ø首先乘以50得到CP1也就是0.000001s的信号

Ø在CP1的基础上继续分频乘以1000得到cp2就是0.001s信号

Ø在cp2的基础上分频乘以1000得到cp3就是1s的信号

(2)利用cp2(0.001s)信号加一个模10计数器变成al信号即为0.01s信号用于秒表计时

(3)利用cp2(0.001s)信号加一个模500计数器变成hlfs信号即为0.5s信号用于时钟以及秒表的设定

2.数字钟模块

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"=>led1<='1';

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

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

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

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

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

endcase;

elseled1<='0';led2<='0';

endif;

endif;

endif;

endif;

endprocess;

process(hlfs,cp4,load2)

begin

ifload2='1'thenclkx<=hlfs;elseclkx<=cp4;endif;

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;

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;

数字钟模块在load1=1,key1=0时进行秒钟手动调节

Load1=0时运行秒钟并设定整点报时

Load2=1时进行分钟手动调节

Load2=0时运行分钟

Load3=1时进行时钟手动调节

Load3=0时运行时钟

3.秒表模块

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;

秒表模块中Rse1=1时秒表异步清零利用上升沿a1当en1=1时运行秒表并进行进位处理与时钟相类似,en1=0时秒表暂停。

4.倒计时模块

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

begin

ifload6='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";z1<="1001";alz1<='1';

elsifz1="0000"then

z1<="1001";z2<=z2-1;alz1<='0';

elsez1<=z1-1;alz1<='0';

endif;

ifalz5='1'then

ifz1="0001"andz2="0000"

thenled3<='1';elseled3<='0';

endif;endif;

endif;

endif;

endprocess;

process(alz1,rst2,en2,load7,clkx3,hlfs)

begin

ifload7='1'thenclkx3<=hlfs;elseclkx3<=alz1;endif;

ifrst2='1'thenz4<="0000";z3<="0000";alz2<='1';

elsifrising_edge(clkx3)then

ifz4="0000"andz3="0000"

thenz4<="0101";z3<="1001";alz2<='1';

elsifz3="0000"then

z3<="1001";z4<=z4-1;alz2<='0';

elsez3<=z3-1;alz2<='0';

endif;

ifalz4='1'then

ifz4<="0000"andz3<="0000"

thenalz5<='1';

elsealz5<='0';endif;

endif;

endif;

endprocess;

process(clkx4,alz2,rst2,en2,load8,hlfs)

begin

ifload8='1'thenclkx4<=hlfs;elseclkx4<=alz2;endif;

ifrst2='1'thenz6<="0000";z5<="0000";

elsifrising_edge(clkx4)then

ifz6="0000"andz5="0000"

thenz6<="0010";z5<="0011";

elsifz5="0000"then

z5<="1001";z6<=z6-1;

elsez5<=z5-1;

endif;

ifz5="0000"andz6="0000"thenalz4<='1';elsealz4<='0';endif;

endif;

endprocess;

倒计时模块中当LOAD4为低电平,LOAD5为高电平时,数码管显示倒计时。

当EN2为高电平,倒计时开始;当EN2为低电平,倒计时中止。

当RST2为高电平,倒计时归零。

由LOAD8,LOAD7,LOAD6分别对倒计时初始时刻的时、分、秒进行设定。

5.功能选择模块

process(qq1,qq2,qq3,qq4,qq5,qq6,b,c,d,e,f,g,load4,load5,z1,z2,z3,z4,z5,z6)

begin

ifload4='1'thenvis1<=b;vis2<=c;vis3<=d;vis4<=e;vis5<=f;vis6<=g;

elsifload5='1'thenvis1<=z1;vis2<=z2;vis3<=z3;vis4<=z4;vis5<=z5;vis6<=z6;

elsevis1<=qq1;vis2<=qq2;vis3<=qq3;vis4<=qq4;vis5<=qq5;vis6<=qq6;

endif;

endprocess;

对系统的功能进行选择load4=1为运行秒表

Load5=1为运行倒计时

其余情况为运行时钟。

6.显示模块

process(vis1,vis2,vis3,vis4,vis5,vis6)

begin

casevis1is

when"0000"=>q1<="1000000";

when"0001"=>q1<="1111001";

when"0010"=>q1<="0100100";

when"0011"=>q1<="0110000";

when"0100"=>q1<="0011001";

when"0101"=>q1<="0010010";

when"0110"=>q1<="0000010";

when"0111"=>q1<="1111000";

when"1000"=>q1<="0000000";

when"1001"=>q1<="0010000";

whenothers=>null;

endcase;

casevis2is

when"0000"=>q2<="1000000";

when"0001"=>q2<="1111001";

when"0010"=>q2<="0100100";

when"0011"=>q2<="0110000";

when"0100"=>q2<="0011001";

when"0101"=>q2<="0010010";

when"0110"=>q2<="0000010";

when"0111"=>q2<="1111000";

when"1000"=>q2<="0000000";

when"1001"=>q2<="0010000";

whenothers=>null;

endcase;

casevis3is

when"0000"=>q3<="1000000";

when"0001"=>q3<="1111001";

when"0010"=>q3<="0100100";

when"0011"=>q3<="0110000";

when"0100"=>q3<="0011001";

when"0101"=>q3<="0010010";

when"0110"=>q3<="0000010";

when"0111"=>q3<="1111000";

when"1000"=>q3<="0000000";

when"1001"=>q3<="0010000";

whenothers=>null;

endcase;

casevis4is

when"0000"=>q4<="1000000";

when"0001"=>q4<="1111001";

when"0010"=>q4<="0100100";

when"0011"=>q4<="

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

当前位置:首页 > 工程科技 > 冶金矿山地质

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1