数字逻辑课程设计-—数字钟
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数字逻辑课程设计
—数字钟
班级:计114
学号:119074122
姓名:石险峰
指导老师:苏小虎
一、任务与要求
设计任务:设计一个具有整点报时功能的数字钟
要求:
1、设计一个有“时”、“分”、“秒”(23小时59分59秒)显示且有校时功能的数字钟。
2、有校时功能,可以分别对时及分进行单独校时,使其校正到标准时间。
3、计时过程具有整点报时功能,当时间到达整点前10秒进行报时。
4、用中小规模集成电路组成数字钟,并在实验箱上进行组装、调试。
5、画出框图和逻辑电路图。
功能:
1、计时功能:
要求准确计时,以数字形式显示时、分、秒的时间。小时的计时要求为“23翻1”。
2、校时功能:
当数字钟接通电源或者计时出现误差时,需要校正时间(简称校时)。校时是数字钟应具备的基本功能,一般电子手表都具有时、分、秒等校时功能。
3、整点报时:
每当数字钟计时快要到整点时发出声响,此实验设计当时钟计时到59分50秒时开始报时,持续10秒。
二、设计方案
电路组成框图:
图1 数字钟电路组成框图
数字钟电路是一个典型的数字电路系统,其由时、分、秒计数器以及校时和显示电路组成。其主要功能为计时、校时和报时。利用60进制和24进制递增计数器子电路构成数字钟系统,由2个60进制同步递增计数器完成秒、分计数,由24进制同步递增计数器完成小时计数。秒、分、时之间采用同步级联的方式。按键func_sel产生单脉冲,控制数字钟在计时/校时/校分/校秒四个状态间切换。报时功能为整点来临时蜂鸣器发出声响。
三、设计和实现过程
1.各部分电路的设计过程
(1)时分秒计数器的设计
时间计数电路由秒个位和秒十位计数器、分个位和分十位计数器
及时个位和时十位计数器电路构成,其中秒个位和秒十位计数器、分个位和分十位计数器为60进制计数器,而根据设计要求,时个位和时十位计数器为24进制计数器。
秒/分钟显示电路:由于秒钟与分钟的都是为60进制的,所以它们的电路大体上是一样的,都是由一个10进制计数器和一个6进制计数器组成;有所不同的是分钟显示电路中的10进制计数器的ENP 和ENT引脚是由秒钟显示电路的进位信号控制的。
分和秒计数器都是模M=60的计数器,其计数规律为00—01—…—58—59—00…。可选两片74LS160设计较为简单。
时计数器是一个“23翻0”的特殊进制计数器,即当数字钟运行到23时59分59秒时,秒的个位计数器再输入一个秒脉冲时,数字钟应自动显示为00时00分00秒,实现日常生活中习惯用的计时规律。可选两片74LS160设计。
图 2 60进制同步递增计数器
图3 24进制同步递增计数器(2)校时电路的设计
校时模块采用AHDL语言描述,源码如下:
SUBDESIGN COUNT_CONTROL
(
FUNC_SEL:INPUT;
SETN:INPUT;
SEC_CO,MIN_CO:INPUT;
SEC_EN,MIN_en,HOUR_EN:OUTPUT;
)
VARIABLE
Q[1..0]:DFF;
BEGIN
Q[].CLK=FUNC_SEL;
Q[]=Q[]+1;
IF(q[]>3)THEN Q[]=0;
END IF;
CASE Q[] IS
WHEN 0=>SEC_EN=VCC;
MIN_EN=SEC_CO;
HOUR_EN=MIN_CO;
WHEN 1=>SEC_en=gnd;
min_en=gnd;
hour_en=!setn;
when 2=>sec_en=gnd;
min_en=!setn;
hour_en=gnd;
when 3=>sec_en=!setn;
min_en=gnd;
hour_en=gnd;
end case;
end;
(3)整点报时电路的设计
因报时须在59分50秒开始,故可在分计时电路引出“5”“9”状态,秒计时电路引出“5”“0”状态,用与门连接后即可接到蜂鸣器,起到报时作用。电路部分截图如下:
图 5 报时电路(4)显示电路及完整原理图
图表1显示电路
1/相关器件源码
counter6
subdesign counter6 (
clk:input;
q[2..0]:output;
)
variable ss:machine of bits(q[2..0]) with states
(s0=0,
s1=1,
s2=2,
s3=3,
s4=4,
s5=5
);
begin
ss.clk=clk;
table
ss=>ss;
s5=>s4;
s4=>s3;
s3=>s2;
s2=>s1;
s1=>s0;
s0=>s5;
end table;
end;
select_disp
subdesign select_disp (
sel[2..0]:input;
in0[3..0]:input;
in1[3..0]:input;
in2[3..0]:input;
in3[3..0]:input;
in4[3..0]:input;
in5[3..0]:input;
out[3..0]:output;
)
begin
case sel[] is
when 0=>out[]=in0[]; when 1=>out[]=in1[]; when 2=>out[]=in2[]; when 3=>out[]=in3[]; when 4=>out[]=in4[]; when 5=>out[]=in5[]; end case; end;
deled
SUBDESIGN deled
(
num[3..0]:INPUT;
a,b,c,d,e,f,g:OUTPUT;
)
BEGIN
TABLE
NUM[3..0]=>a,b,c,d,e,f,g; H"0" =>1,1,1,1,1,1,0; H"1" =>0,1,1,0,0,0,0; H"2" =>1,1,0,1,1,0,1; H"3" =>1,1,1,1,0,0,1; H"4" =>0,1,1,0,0,1,1; H"5" =>1,0,1,1,0,1,1; H"6" =>1,0,1,1,1,1,1; H"7" =>1,1,1,0,0,0,0; H"8" =>1,1,1,1,1,1,1; H"9" =>1,1,1,1,0,1,1; H"A" =>1,1,1,0,1,1,1; H"B" =>0,0,1,1,1,1,1; H"C" =>1,0,0,1,1,1,0; H"D" =>0,1,1,1,1,0,1; H"E" =>1,0,0,1,1,1,1; H"F" =>1,0,0,0,1,1,1; END TABLE;
END;