EDA数字时钟课程设计Word下载.docx
- 文档编号:16143186
- 上传时间:2022-11-20
- 格式:DOCX
- 页数:11
- 大小:96.37KB
EDA数字时钟课程设计Word下载.docx
《EDA数字时钟课程设计Word下载.docx》由会员分享,可在线阅读,更多相关《EDA数字时钟课程设计Word下载.docx(11页珍藏版)》请在冰豆网上搜索。
(1)时间以24小时为一个周期;
(2)显示时、分、秒;
(3)有校时功能,可以分别对时及分进行单独校时,使其校正到标准时间;
(4)计时过程具有报时功能,当时间到达整点前5秒进行蜂鸣报时。
2.设计要求
(1)画出电路原理图(或仿真电路图);
(2)元器件及参数选择;
(3)电路仿真与调试
二、设计原理
设计思路
根据系统设计要求,系统设计采用自顶向下设计方法,由时钟分频部分、计时部分、按键部分调时部分和显示部分五个部分组成。
这些模块都放在一个顶层文件中。
1)时钟计数:
首先下载程序进行复位清零操作,电子钟从00:
00:
00计时开始。
sethour可以调整时钟的小时部分,setmin可以调整分钟,步进为1。
由于电子钟的最小计时单位是1s,因此提供给系统的内部的时钟频率应该大于1Hz,这里取100Hz。
CLK端连接外部10Hz的时钟输入信号clk。
对clk进行计数,当clk=10时,秒加1,当秒加到60时,分加1;
当分加到60时,时加1;
当时加到24时,全部清0,从新计时。
用6位数码管分别显示“时”、“分”、“秒”,通过OUTPUT(6DOWNTO0)上的信号来点亮指定的LED七段显示数码管。
2)时间设置:
手动调节分钟、小时,可以对所设计的时钟任意调时间,这样使数字钟真正具有使用功能。
我们可以通过实验板上的键7和键4进行任意的调整,因为我们用的时钟信号均是1HZ的,所以每LED灯变化一次就来一个脉冲,即计数一次。
3)清零功能:
reset为复位键,低电平时实现清零功能,高电平时正常计数。
可以根据我们自己任意时间的复位。
总体结构图
三、系统设计
1)时、分、秒计时器
时计时器为一个24进制计数器,分、秒计时器均为60进制计数器。
当秒计时器接受到一个秒脉冲时,秒计数器开始从1计数到60,此时秒显示器将显示00、01、02、...、59、00;
每当秒计数器数到00时,就会产生一个脉冲输出送至分计时器,此时分计数器数值在原有基础上加1,其显示器将显示00、01、02、...、59、00;
每当分计数器数到00时,就会产生一个脉冲输出送至时计时器,此时时计数器数值在原有基础上加1,其显示器将显示00、01、02、...、23、00。
即当数字钟运行到23点59分59秒时,当秒计时器在接受一个秒脉冲,数字钟将自动显示00点00分00秒。
2)校时电路
当开关拨至校时档时,电子钟秒计时工作,通过时、分校时开关分别对时、分进行校对,开关每按1次,与开关对应的时或分计数器加1,当调至需要的时与分时,拨动reset开关,电子钟从设置的时间开始往后计时。
四、参考程序
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:
BEGIN
speaker:
PROCESS(clk)
--speak<
=count1
(1);
IF(clk'
eventandclk='
1'
)THEN
IF(dain="
"
speak<
IF(count1>
="
10"
count1<
00"
;
--count1为三进制加法计数器
ELSE
=count1+1;
--speak<
=count1(0);
ENDIF;
ENDIF;
ENDPROCESSspeaker;
lamper:
IF(rising_edge(clk))THEN
IF(count<
IF(count="
lamp<
001"
--循环点亮三只灯
ELSIF(count="
01"
010"
100"
ENDIF;
count<
=count+1;
ENDIF;
ENDPROCESSlamper;
ENDfun;
Hour模块
useIEEE.STD_LOGIC_1164.ALL;
ENTITYhourIS
PORT(clk,reset:
daout:
outSTD_LOGIC_VECTOR(5DOWNTO0));
ENDENTITYhour;
ARCHITECTUREfunOFhourIS
SIGNALcount:
STD_LOGIC_VECTOR(5DOWNTO0);
daout<
=count;
PROCESS(clk,reset)
IF(reset='
0'
)THENcount<
--若reset=0,则异步清零
ELSIF(clk'
)THEN--否则,若clk上升沿到
IF(count(3DOWNTO0)="
1001"
)THEN--若个位计时恰好到"
即9
16#23#)THEN--23进制
=count+7;
--若到23D则
else
--复0
ELSIF(count<
16#23#)THEN--若未到23D,则count进1
ELSE--否则清零
--ENDIF(count(3DOWNTO0)="
)
--ENDIF(reset='
ENDPROCESS;
Minute模块
ENTITYminuteIS
PORT(clk,clk1,reset,sethour:
enhour:
OUTSTD_LOGIC_VECTOR(6DOWNTO0));
ENDENTITYminute;
ARCHITECTUREfunOFminuteIS
SIGNALcount:
STD_LOGIC_VECTOR(6DOWNTO0);
SIGNALenhour_1,enhour_2:
STD_LOGIC;
--enmin_1为59分时的进位信号
BEGIN--enmin_2由clk调制后的手动调时脉冲信号串
enhour_2<
=(sethourandclk1);
--sethour为手动调时控制信号,高电平有效
enhour<
=(enhour_1orenhour_2);
PROCESS(clk,reset,sethour)
BEGIN
)THEN--若reset为0,则异步清零
IF(count(3DOWNTO0)="
)THEN--若个位计时恰好到"
IF(count<
16#60#)THEN--又若count小于16#60#,即60
)THEN--又若已到59D
enhour_1<
='
--则置进位为1
--count复0
ELSE
--若count未到59D,则加7,即作"
加6校正"
--使前面的16#60#的个位转变为8421BCD的容量
--count复0(有此句,则对无效状态电路可自启动)
--ENDIF(count<
16#60#)
ELSIF(count<
16#60#)THEN
--若count<
16#60#则count加1
after100ns;
--没有发生进位
--否则,若count不小于16#60#count复0
ENDprocess;
Second模块
ENTITYsecondIS
PORT(clk,reset,setmin:
STD_LOGIC;
enmin:
ENDENTITYsecond;
ARCHITECTUREfunOFsecondIS
STD_LOGIC_VECTOR(6DOWNTO0);
SIGNALenmin_1,enmin_2:
--enmin_1为59秒时的进位信号
BEGIN--enmin_2由clk调制后的手动调分脉冲信号串
enmin_2<
=(setminandclk);
--setmin为手动调分控制信号,高电平有效
enmin<
=(enmin_1orenmin_2);
--enmin为向分进位信号
PROCESS(clk,reset,setmin)
--若reset为0,则异步清零
ELSIF(clk'
)t
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- EDA 数字 时钟 课程设计