多功能数字钟.docx
- 文档编号:11689214
- 上传时间:2023-03-30
- 格式:DOCX
- 页数:26
- 大小:222.06KB
多功能数字钟.docx
《多功能数字钟.docx》由会员分享,可在线阅读,更多相关《多功能数字钟.docx(26页珍藏版)》请在冰豆网上搜索。
多功能数字钟
设计题目
多功能数字钟设计
设计要求
设计一数字钟,实现以下功能:
1.具有时、分、秒计数显示功能,以24小时循环计时;
2.具有校时功能,可以分别对时及分进行单独校时,使其校正到标准时间,并能对计时清零;
3.具有仿广播电台整点报时的功能,整点报时的同时LED灯花样显示。
设计过程
一、系统方案选择和论证
1、数字钟系统方案选择和论证
本设计的总体组成框图如图1所示:
数字钟电路系统由主体电路和拓展电路两大部分组成。
其中,主体电路完成数字钟的基本功能,拓展电路完成电路的拓展功能。
该系统的工作原理是:
震荡器产生的稳定高频脉冲信号,完成数字钟的时间基准,再经分频器输出标准秒脉冲。
秒计数器计满60后向分计数器进位,分计数器计满60后向小时计数进位,小时计数器按“12翻1”规律计数。
计数器的输出经译码器送显示器。
计时出现误差时可以用校时电路进行校时、校分、校秒。
拓展电路必须在主体电路正常运行的情况下才能进行功能拓展。
采用译码器接到分计数器和秒计数器相应的输出端,使计数器运行到差十秒整点报时,利用分频器输出的500HZ和1000HZ的信号加到音响电路中,用于模仿电台报时:
每当数字钟计时快要正点时发出声响,按照4低音一高音的顺序发出间断声响,以最后一声高音的时刻为正点时刻。
LED灯也依次轮流显示。
在EDA实验室可以直接通过实验箱上的频率脉冲给该电路图添加所需要的频率,而不需要我们自己设计。
下面通过硬件中数字钟所需要的频率来设计电路。
实验中需要的是1HZ的脉冲,通过该脉冲使数字钟达到秒信号所需要的频率
图1多功能数字钟系统组成框图
1.1振荡器设计方案
振荡器是数字钟的核心。
振荡器的稳定度及频率的精确度决定了数字钟计时的准确程度,一般来说,振荡器的频率越高,计时精度越高
方案一:
采用由555集成电路与RC组成多谐振荡器,以产生符合要求的振荡脉冲。
方案二:
采用由石英晶体与逻辑门及RC组成的多谐振荡电路,以产生符合要求的振荡脉冲。
方案二采用石英晶体振荡器产生的脉冲频率稳定度高且精度很高,适宜于作为要求高精度的时钟基准脉冲,作为振荡器电路。
方案一产生的脉冲频率稳定度相对不高,但在要求不是很高的情况,可以采用方案一。
考虑到市场方面的原因,石英晶体震荡不宜采用,这里我们采用方案一。
原理图如图2
图2振荡器原理图
这里选用由555构成反对多谐震荡器,震荡频率为fo=1KHZ
由
f=
;
假定C1=0.1uf,
得到R1=2K;R2=5.1K;
为了能使得到的频率更精确,再加一个阻值为10K的可调电阻。
1.2分频器的设计方案
分频器的主要功能有两个:
一是产生标准秒脉冲信号,二是提供扩展电路所需信号,仿广播电台报时用的1KHz的高音频信号和500Hz的低音频信号等。
选用3片中规模集成电路,计数器74LS90可以完成上述功能。
因每片为1/10分频,3片级联则可获得所需要的频率信号,即第一片的Q0输出频率为500Hz,第二片的Q3端输出为10Hz,第三片的Q3端输出为1Hz。
74LS90是二——五——十进制计数器,它有两个时钟输入端CP0和CP1。
其中CP0和Q0组成一位二进制计数器,CP1和Q3Q2Q1组成五进制计数器。
若将Q0和CP1相连接,时钟脉冲从CP0输入,则构成十进制计数器,74LS90有两个清零端Ro
(1),Ro
(2)和两个置9端R9
(1),R9
(2),它的功能表和管脚示意图如表1所示。
Ro
(1)
Ro
(2)
R9
(1)
R9
(2)
Q3
Q2
Q1
Q0
1
1
0
*
0
0
0
0
1
1
*
0
0
0
0
0
*
*
1
1
1
0
0
1
*
0
*
0
计数
0
*
0
*
0
*
*
0
*
0
0
*
表174LS90功能表
原理图如图3所示,仿真波形如图4所示
图3分频器原理图
图4分频器仿真图
1.3校时电路的设计方案
当数字钟接通电源或者计时出现误差时,需要校正时间。
校时是数字钟应具备的基本功能。
这里只进行分和小时校时。
对校时电路的要求是,在小时校正时不影响分和秒的正常计数;在分校正时不影响秒和小时的正常计数。
通过门电路实现对进位和校时信号的选择,用RS触发器做开关,可以通过控制RS触发器开关来选择是正常计时模式或是校时模式。
校时电路是由门电路构成的组合逻辑电路,可以完全使校时电路能稳定地工作。
图4所示校“时”、校“分”电路。
其中S1为校“时”用的控制开关,S2为校“分”用的控制开,他们的控制功能表如表2.3.1所示。
校时脉冲采用采用分频器输出的1Hz脉冲。
校时电路原理图如图5所示,仿真图如图6所示。
S1
R1
S2
R2
功能
0
×
0
×
计数
0
×
1
0
校分
1
0
0
×
校时
表2
图5校时电路原理图
图6校时电路仿真图
1.4时分秒计数器的设计方案
由于考虑到采用各种计数器集成块组成时序逻辑电路,虽然原理简单,但连线繁多,占用芯片非常多的I/O口,电路稳定性较差,而采用VHDL语言构建的模块稳定性好,而且连线少,节省了芯片的I/O口,因此采用VHDL语言构建模块的方法。
小时计数原理图如图7所示,仿真图如图8所示
图7小时计数器原理图
图8小时计数器仿真图
分计数原理图如图9所示,仿真图如图10所示
图9分计数器原理图
图10分计数器仿真图
秒计数原理图如图11所示,仿真图如图12所示
图11秒计数器原理图
图12秒计器数仿真图
1.5扫描显示模块的设计方案
在这里我们采用动态扫描显示方法。
通过信号选通器选通计数器的某一位经译码器到相应的那个数码管显示出来,其他各位不显示,在下一选通脉冲到来时选择下一位到数码管显示,如此循环。
当这个选通脉冲频率足够大时人眼就感觉不出六个数码管的交替亮灭,从而实现六位数的显示。
我们选用的七段译码驱动器(74LS48)和数码管(LED)是共阴极接法(需要输出高电平有效的译码器驱动)。
译码显示电路如图13所示。
图13译码显示电路
扫描信号电路原理图如图14,仿真图如图15
图14扫描信号电路原理图
图15扫描信号电路仿真图
译码驱动电路原理图如图16,仿真图如图17
图16译码驱动电路原理图
图17译码驱动电路仿真图
整点报时及LED灯花样显示模块原理图如图18,仿真图如图19所示。
图18整点报时及LED灯花样显示电路原理图
图19整点报时及LED灯花样显示电路仿真图
1.6总原理图
各模块设计确定后,得数字钟总原理图如图20
图20数字钟总原理图
数字钟总原理仿真图如图21
图21数字钟总原理仿真图
二、系统安装与调试
2.1输入与输出端接口
(1)SETMIN,SETHOUR、RESET分别接按键开关;
(2)A、B、C、D、E、F、G分别与数码管的a,b,c,d,e,f,g输入端相连;
(3)LAMP0,LAMP1,LAMP2分别和LED相接;
(4)时钟信号CLK接1HZ,扫描信号CLKDSP接32HZ以上频率信号(含32HZ);
(5)扫描片地址信号SEL0,SEL1,SEL2分别和字符点阵显示模块的四位扫描驱动地址SEL0~SEL3的低三位相连,最高位地址接“0”,也可以悬空;
(6)接口SPEAKER同实验箱的SPEAKER相接;
2.2性能测试与分析
电路编译完成后下载到Altera公司的EPM7128SLC84-15芯片中.数码显示管显示正常,说明扫描显示模块正确。
数码管显示数字从000000开始,秒、分、时显示正确,在输入为1Hz的时钟脉冲下经与标准表对照,秒计时的周期为1秒钟。
为了在短时间内测试秒、分、时进位是否正确,加大输入脉冲频率。
显示管显示秒、分、时进位正确。
数字从000000一直进位到235959后回到0000000,在每小时的59分的51、53、55、57、秒蜂鸣器鸣低音,59秒鸣高音,同时LED灯循环显示,完全符合设计要求中的“仿广播电台整点报时”这一要求。
按动SETMIN,SETHOUR分别实现对分和时的调整,手动校时功能正确,两者不相影响。
按下RESET键,时间回归到000000,说明计时清零功能正常。
整个性能测试结束,各项要求都已达到。
这次课程设计取得圆满成功。
2.3结论心得与体会
1、本次课程设计中主要用到的是24进制和60进制。
计数器需要我们能充分掌握同步和异步之间的区别,以及置数和清零的区别。
对它们有了透彻的了解才能够充分的把所需要的进制给弄出来。
2、方案确定后,才开始设计。
设计时多实用已学的方法,如列真值表,化简逻辑表达式,要整体考虑,不可看一步,做一步。
在整个设计都正确后,再寻求简化的方法。
首先在设计的过程中把每一个部分需要实现的功能都具体想好,再结合与之相关的部分进行整体设计。
3、通过此次课程设计也让我充分的了解的扫描显示电路的用法,及具体的实现过程。
。
由于本数字钟有6位数字需要显示,如果用普通的一个输出对应一个译码驱动器和一个数码管的静态显示方法,那么仅七端码输出就需要多达42个I/O口和数码管连线,显然这将占据大量I/O口,连线也很麻烦。
而采用动态扫描显示的方法仅需7根数码管连线就能实现多位显示需求,通过本设计深刻感受到动态扫描显示方法的优越性。
4、通过这次数字钟的设计,让我深深感受到了数字电路的重要性和实用性,也加深了对数字钟内部电路的认识,大大提高了我们的逻辑思维能力,使我们在逻辑电路的分析与设计上有了很大的进步。
加深了我们对组合逻辑电路与时序逻辑电路的认识,进一步增进了对一些常见逻辑器件的了解。
通过这次课程设计,更让我了解了合作精神的重要性。
共同研究在学习生活中是很重要的。
5、总的来说,通过这次的课程设计,不仅加深了我们对组合逻辑电路和时序逻辑电路的应用,对数字钟知识的认识,还加深了我们对EDA技术的应用,让我们体会到了构建模块对于数字电路分析带来的方便。
还让我们深深得感受到数字电子技术的奥妙,使我们发现数字电子技术原来离我们的生活竟然是如此的近。
虽然在设计的过程中出现了许许多多的挫折麻烦,但是经过独立思考,查阅资料和跟同学讨论研究后,总能解决问题并提出最佳方案,或对原有方案最优化。
所以通过这次设计,不仅加强了我们对课本知识应用到实际生活中的能力,还学到了不少新知识,锻炼了独立思考与合作处理问题的能力,积累了新经验,这些都无疑使我受益深远。
参考文献:
[1]赣南师范学院物理与电子信息学院编数字电路实验指导书
[2]谢自美主编电子线路设计●实验●测试第3版,武汉:
华中科技大学出版社,2006年
[4]曹昕燕周风原聂春燕编EDA技术实验与课程设计北京:
清华大学出版社,2006年
[5]阎石主编数字电子技术基础第4版北京:
高等教育出版社,1998年
附录:
程序清单
1.整点报时及LED花样显示模块VHDL源程序(ALERT)
LIBRARYieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
ENTITYalertIS
PORT(
clk:
INSTD_LOGIC;
dain:
INSTD_LOGIC_VECTOR(6DOWNTO0);
speak:
OUTSTD_LOGIC;
lamp:
OUTSTD_LOGIC_VECTOR(2DOWNTO0));
ENDalert;
ARCHITECTUREfunOFalertIS
signalcount:
std_logic_vector(1downto0);
signalcount1:
std_logic_vector(1downto0);
BEGIN
speaker:
process(clk)
begin
speak<=count1
(1);
if(clk'eventandclk='1')then
if(dain="000000")then
if(count1>="10")then
count1<="00";
else
count1<=count1+1;
endif;
endif;
endif;
endprocessspeaker;
lamper:
process(clk)
begin
if(rising_edge(clk))then
if(count<="10")then
if(count="00")then
lamp<="001";
elsif(count="01")then
lamp<="010";
elsif(count="10")then
lamp<="100";
endif;
count<=count+1;
else
count<="00";
endif;
endif;
endprocesslamper;
ENDfun;
2.小时计数模块VHDL源程序(HOUR)
LIBRARYieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
ENTITYhourIS
PORT(
clk,reset:
INSTD_LOGIC;
daout:
outstd_logic_vector(5downto0));
ENDentityhour;
ARCHITECTUREfunOFhourIS
SIGNALcount:
STD_LOGIC_VECTOR(5downto0);
BEGIN
daout<=count;
process(clk,reset)
begin
if(reset='0')then
count<="000000";
elsif(clk'eventandclk='1')then
if(count(3downto0)="1001")then
if(count<16#24#)then
count<=count+7;
else
count<="000000";
endif;
elsif(count<16#24#)then
count<=count+1;
else
count<="000000";
endif;
endif;
endprocess;
ENDfun;
3.分计数模块VHDL源程序(MINUTE)
LIBRARYieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
ENTITYminuteIS
PORT(
clk,clk1,reset,sethour:
INSTD_LOGIC;
enhour:
OUTSTD_LOGIC;
daout:
outstd_logic_vector(6downto0));
ENDentityminute;
ARCHITECTUREfunOFminuteIS
SIGNALcount:
STD_LOGIC_VECTOR(6downto0);
BEGIN
daout<=count;
process(clk,reset,sethour)
begin
if(reset='0')then
count<="0000000";
elsif(sethour='0')then
enhour<=clk1;
elsif(clk'eventandclk='1')then
if(count(3downto0)="1001")then
if(count<16#60#)then
if(count="1011001")then
enhour<='1';
count<="0000000";ELSE
count<=count+7;
endif;
else
count<="0000000";
endif;
elsif(count<16#60#)then
count<=count+1;
enhour<='0'after100ns;
else
count<="0000000";
endif;
endif;
endprocess;
ENDfun;
4.秒计数模块VHDL源程序(SECOND)
LIBRARYieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
ENTITYsecondIS
PORT(
clk,reset,setmin:
INSTD_LOGIC;
enmin:
OUTSTD_LOGIC;
daout:
outstd_logic_vector(6downto0));
ENDentitysecond;
ARCHITECTUREfunOFsecondIS
SIGNALcount:
STD_LOGIC_VECTOR(6downto0);
BEGIN
daout<=count;
process(clk,reset,setmin)
begin
--enmin<=k;
if(reset='0')then
count<="0000000";
elsif(setmin='0')then
enmin<=clk;
elsif(clk'eventandclk='1')then
if(count(3downto0)="1001")then
if(count<16#60#)then
if(count="1011001")then
enmin<='1';
count<="0000000";ELSE
count<=count+7;
endif;
else
count<="0000000";
endif;
elsif(count<16#60#)then
count<=count+1;
enmin<='0'after100ns;
else
count<="0000000";
endif;
endif;
endprocess;
ENDfun;
5.时间设置模块VHDL源程序(SELTIME)
LIBRARYieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
useieee.std_logic_arith.all;
ENTITYseltimeIS
PORT(
clk1,reset:
INSTD_LOGIC;
sec,min:
INSTD_LOGIC_VECTOR(6downto0);
hour:
instd_logic_vector(5downto0);
daout:
OUTSTD_LOGIC_vector(3downto0);
sel:
outstd_logic_vector(2downto0));
ENDseltime;
ARCHITECTUREfunOFseltimeIS
SIGNALcount:
STD_LOGIC_vector(2downto0);
BEGIN
sel<=count;
process(clk1,reset)
begin
if(reset='0')then
count<="000";
elsif(clk1'eventandclk1='1')then
if(count>="101")then
count<="000";
else
count<=count+1;
endif;
endif;
casecountis
when"000"=>daout<=sec(3downto0);
when"001"=>daout(3)<='0';
daout(2downto0)<=sec(6downto4);
when"010"=>daout<=min(3downto0);
when"011"=>daout(3)<='0';
daout(2downto0)<=min(6downto4);
when"100"=>daout<=hour(3downto0);
whenothers=>daout(3downto2)<="00";
daout(1downto0)<=hour(5downto4);
endcase;
endprocess;
endfun;
6.译码驱动模块AHDL源程序(DELED)
SUBDESIGNdeled
(
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;
ENDTABLE;
END;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 多功能 数字