大连理工大学数字电路课程设计报告:多功能数字时钟设计

合集下载

多功能数字时钟的设计报告

多功能数字时钟的设计报告

多功能数字时钟的设计引言现代社会科技飞速发展,人们生活节奏加快,时间就是金钱,时间就是生命。

时间对人们来说总是那么宝贵,工作的忙碌性和繁杂性容易使人忘记当前的时间。

忘记了要做的事情,当事情不是很重要的时候,这种遗忘无伤大雅。

但是,一旦重要事情,一时的耽误可能酿成大祸。

20世纪末,电子技术得到飞速发展,各类电子产品相继出现在市场,电子产品主要朝着CMOS化、低功耗、小体积、大容量、高性能、低价格和外围电路内装化等几个方面发展。

数字化电子产品已渗入到人类生活的方方面面。

单片计算机即单片微型计算机(Single-Chip Microcomputer ),是集CPU ,RAM ,ROM ,定时,计数和多输入输出口于一体的微控制器。

它体积小,成本低,功能强,广泛应用于智能产品和工业自动化上。

而52 单片机是51单片机的升级版,功能更强大。

单片机应用的重要意义还在于,它从根本上改变了传统的控制系统设计思想和设计方法。

从前必须由模拟电路或数字电路实现的大部分功能,现在已能用单片机通过软件方法来实现了。

这种软件代替硬件的控制技术也称为微控制技术,是传统控制技术的一次革命。

基于以上发展与现实需要本次设计课题就是基于单片机的设计-----基于单片机的多功能数字钟。

数字钟是采用数字电路实现对时,分,秒,数字显示的计时装置,广泛用于个人家庭,车站, 码头办公室等公共场所,成为人们日常生活中不可少的必需品,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表, 钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。

诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。

因此,研究数字钟及扩大其应用,有着非常现实的意义。

一、设计目的:1.了解数字时钟的组成及工作原理2.熟悉数字钟的设计与制作:1).由晶振电路产生1HZ标准秒信号。

多功能电子时钟数字系统课程设计设计实验报告

多功能电子时钟数字系统课程设计设计实验报告

多功能电子时钟数字系统课程设计设计实验报告数字系统课程设计设计实验报告———多功能电子时钟目录一、电子时钟的功能及工作介绍 01、本设计电子时钟具有的功能 02、本设计电子时钟工作介绍 0二、设计思路 0三、各模块具体介绍 (1)计数器模块: (1)控制模块: (3)四、仿真 (6)五、实验成果 (6)六、实验总结和感想 (6)1、实验错误排查和解决 (6)2、实验感想 (7)七、各模块代码 (8)1、计数器模块 (8)2、控制模块 (20)一、电子时钟的功能及工作介绍1、本设计电子时钟具有的功能1)具有显示时、分、秒的功能,能准确显示时间2)能够手动设置时间3)具有闹钟功能,可以设置闹钟的时间,然后再实际时间与设定时间相等是闹钟响,并有闹钟开关,可控制其是否响4)具有秒表功能,可以累计计时2、本设计电子时钟工作介绍此电子时钟开机后即会显示时间,其中后两位数码管显示秒,前两位数码管显示分,还可以通过拨盘开关S1来使得前两位数码管显示小时。

(开机后,按下按键1一次,会继续显示时间。

)此后,每按下按键1一次,会显示设置小时界面,按下按键1两次会显示设置分钟界面,按下按键1三次会显示闹钟设置小时界面,按下按键1四次会显示闹钟设置分钟界面,按下按键1五次会显示秒表界面。

而在每一个界面,按下按键2相应的位会开始跳动,在按下按键2时,跳动停止,此时按下按键3,即确认键,则会返回时间显示状态。

二、设计思路设计一个电子时钟,必然要用到计时器,而需要设置时间和闹钟,又需要控制器来控制系统所处的状态。

我们采用外部一个按键来切换系统的状态,用另一个按键来调整时间和启动秒表,再有一个按键来确认操作,并返回显示状态,继续等待命令。

在控制器中,需要接受外部信号,并给出信号给计时器,使其做出相应的动作。

电子技术课程设计报告---多功能数字时钟

电子技术课程设计报告---多功能数字时钟

电子技术课程设计数字钟的设计一、设计任务与要求1.能直接显示“时〞、“分〞、“秒〞十进制数字的石英数字钟。

2.可以24小时制或12小时制。

3.具有校时功能。

可以对小时和分单独校时,对分校时的时候,停顿分向小时进位。

校时时钟源可以手动输入或借用电路中的时钟。

4.整点能自动报时,要求报时声响四低一高,最后一响为整点。

5.走时精度高于普通机械时钟〔误差不超过1s/d〕。

二、方案设计与认证1、课题分析数字时钟一般由6个局部组成,其中振荡器和分频器组成标准的秒信号发生器,由不同进制的计数器,译码器和显示器组成计时系统。

秒信号送入计数器进展计数,把累计的结果以“时〞、“分〞、“秒〞的十进制数字显示出来。

“时〞显示由二十四进制计数器、译码器和显示器构成,“分〞、“秒〞显示分别由六十进制计数器、译码器构成。

其原理框图如图1所示。

2、方案认证〔1〕振荡器振荡器是计时器的核心,主要用来产生时间标准信号,也叫时基信号。

数字钟的精度,主要取决于时间标准信号的频率及稳定度。

振荡器的频率越高,计时的精度就越高,但耗电量将增大。

一般采用石英晶体振荡器经过分频后得到这一信号,也可采用由555定时器构成的多谐振荡器作为时间标准信号。

〔2〕分频器振荡器产生的时基信号通常频率都很高,要使它变成能用来计时的“秒〞信号,需由分频器来完成。

分频器的级数和每级的分频次数要根据时基频率来定。

例如,目前石英电子钟多采用32768 Hz的标准信号,将此信号经过15级二分频即可得到周期为1s的“秒〞信号。

也可选用其他频率的时基信号,确定好分频次数后再选择适宜的集成电路。

〔3〕计数器数字钟的“秒〞、“分〞信号产生电路都由六十进制计数器构成,“时〞信号产生电路由二十四进制计数器构成。

“秒〞和“分〞计数器用两块十进制计数器来实现是很容易的,它们的个位为十进制,十位为六进制,这样,符合人们通常计数习惯。

“时〞计数也可以用两块十进制计数器实现,只是做成二十四进制。

数电课设大作业数字钟

数电课设大作业数字钟

大连理工大学本科实验报告题目:数字钟课程名称:数字电路课程设计学院(系):电信专业:电气班级: 1201学生姓名:学号:完成日期: 2014.11.23成绩:2014 年 11 月 23 日课程设计得分表一、数字钟课程设计要求:1、设计一个具有‘时’、‘分’、‘秒’的十进制数字显示(小时从00~23)计时器。

2、整点报时。

两种方法任选其一:⑴发出仿中央人民广播电台的整点报时信号,即从59分50秒起,每隔2秒钟发出一次低音“嘟”的信号,连续5次,最后一次要求高音“嘀”的信号,此信号结束即达到整点。

“嘟”是500Hz左右的频率输出,“嘀”是1000Hz左右的频率输出⑵通过LED闪烁实现,闪烁频率及花型可自己设计并在这里说明。

3、手动校时、校分、校秒。

4、定时与闹钟功能,能在设定的时间发出闹铃声。

5、设计一个秒表,显示1%秒到60秒、手动停止。

6、设计一个倒计时,显示小时、分钟、秒。

7、其他创新。

第1题25分,其他每题5分二、课程设计考试(40分,每题分):考试题目:1、实体名□2、计数器□3、异步清零□4、进位输出□5、仿真图□6、数码管输出□7、分频□8、元件例化□9、引脚分配□10、下载□题目:数字钟(1.大连理工大学电信学院,辽宁大连,116023;2. 大连理工大学电工电子实验中心,辽宁大连,116023;)1.设计要求一、电子表部分:(1)由晶振电路产生1HZ的校准秒信号。

(2)设计一个具有‘时’、‘分’、‘秒’的十进制数字显示(小时从00~23)计时器具有手动校时、校分,校秒和清零的功能。

(3)整点报时功能,通过LED闪烁实现,此实验LED灯亮一秒。

二、秒表部分:(1)有晶振产生100HZ的校准0.01秒信号。

(2)设计一个有“时”、“分”、“秒”、“0.1秒”、“0.01秒”(23小时59分59秒99)显示功能(3)具有开始计时暂停计时功能和清零功能三、具有电子表和秒表状态切换。

四、划出框图和逻辑电路图,写出设计。

《数字电子技术》课程设计说明书多功能数字钟电路设计

《数字电子技术》课程设计说明书多功能数字钟电路设计

学号:课程设计题目多功能数字钟电路设计学院信息工程学院专业通信工程班级通信0804班姓名指导教师2010 年7 月 6 日课程设计任务书学生姓名:专业班级:通信工程0804班指导教师:工作单位:题目: 多功能数字钟电路设计初始条件:数字电子技术基础知识、模拟电子技术基础知识、电子技术实验室、NE555、74LS90、74LS48、7段数码管。

要求完成的主要任务:1、电路原理图设计和相关参数的确定。

2、电路仿真3、设计报告的撰写时间安排:指导教师签名:年月日系主任(或责任教师)签名:年月日摘要本设计是基于555定时器产生脉冲的多功能数字钟,能够分别显示时、分、秒,还能够对时钟做校时操作,本设计时钟还具有整点报时功能。

从555定时器输出1KHZ的脉冲经过三个串联计数器分频分别为100HZ、10HZ和1HZ的时间脉冲,其中1HZ脉冲作为秒脉冲输入,10HZ作为校时电路输入。

秒脉冲输入时间计数部分,计数部分由六个计数器组成,每两个分别计数秒、分和时。

计数器输出输到到7端数码管译码器,再书到数码管进行显示出时间。

校时电路工作时,封锁计数器的进位信号,由10HZ给出计数信号,方便校时。

当分计数部分要向时计数部分进位时,给出的欲进位信号驱动扬声器,发出进位信号,到达报时的目的。

AbstractThe design is based on the pulse 555 timing produce multifunctional digital clock, can show, minutes and seconds on the clock, also can make the operation, the school also has the clock strike on the design. From 1KHZ 555 timing of pulse output by three series counter frequency respectively, 10HZ 100HZ 1HZ and the time pulse, including 1HZ pulse as seconds, 10HZ as input pulses at school input circuit. Seconds count part time input pulses, count by six counter composition, every two seconds, and were counting. To counter the output lost 7 digital tube decoder, book to digital tube show time. When school work, blockade circuit, signal by the binary counter counts, convenient 10HZ given signal when the school. When points to count part when, is part of binary counter to carry signals, a binary signals drive the speaker, arrive the strike.目录1.引言 (1)2、多功能数字钟 (2)任务 (2)、要求 (2)基本要求 (2)2.2.2 扩展功能 (2)数字钟电路系统的组成原理框图 (2)3、方案设计与选择 (3)3.1 振荡器的设计 (3)3.1.1 振荡器的选择 (3)3.1.2 参数确定 (4)3.2 分频设计 (5)3.3 时分秒计数器的设计 (5)3.3.1 时计数部分设计 (5)3.3.2 分、秒计数部分设计 (6)校时电路设计 (7)3.5 整点报时电路设计 (7)显示部分 (8)3.7 总体设计电路图 (9)4、元器件的选择 (11)振荡器NE555 (11)4.1.1. NE555的特点 (11)4.1.2 NE555引脚位配置说明 (11)4.2 计数器74LS90 (12)4.3 译码器74LS48 (13)5、电路仿真 (15)5.1 振荡器部分的仿真 (15)5.1.1 NE555输出结果仿真 (15)5.1.2 NE555输出和电容C1波形 (15)5.2 分频器的仿真 (16)5.3 时间显示仿真 (17)5.4 整点报时、校时电路仿真 (18)6总结 (19)附录元件清单 (20)参考文献 (21)1.引言时钟是现在最基本最常见的生活用品,随着现代人们的忙碌,似乎每一个角落都装上时钟才能满足人们对知晓时间的需求,现在很多宿舍楼,商场等都装上了时钟。

大连理工大学数电实验报告

大连理工大学数电实验报告

大连理工大学本科实验报告题目:数字钟课程名称:数字电路课程设计学院(系):电子信息工程专业:电子班级:电子1301班学生姓名:陈冠谋学号:201383022完成日期:2015年7月18日成绩:2014 年7 月18 日注意:本页要求放在实验报告第一页课程设计得分表考勤课程设计50分考试40分作业合计最后得分一、数字钟课程设计要求:1、设计一个具有‘时’、‘分’、‘秒’的十进制数字显示(小时从00~23)计时器。

2、整点报时。

两种方法任选其一:⑴发出仿中央人民广播电台的整点报时信号,即从59分50秒起,每隔2秒钟发出一次低音“嘟”的信号,连续5次,最后一次要求高音“嘀”的信号,此信号结束即达到整点。

“嘟”是500Hz左右的频率输出,“嘀”是1000Hz左右的频率输出⑵通过LED闪烁实现,闪烁频率及花型可自己设计并在这里说明。

3、手动校时、校分、校秒。

4、定时与闹钟功能,能在设定的时间发出闹铃声。

5、设计一个秒表,显示1%秒到60秒、手动停止。

6、设计一个倒计时,显示小时、分钟、秒。

7、其他创新。

第1题25分,其他每题5分二、课程设计考试(40分,每题分):考试题目:1、实体名□2、计数器□3、异步清零□4、进位输出□5、仿真图□6、数码管输出□7、分频□8、元件例化□9、引脚分配□10、下载□一、设计要求1、设计一个数字钟,能够显示当前时间,分别用6个数码管显示小时、分钟、秒钟的时间,秒针的计数频率为1Hz ,可由系统脉冲分频得到。

2、整点报时,可通过LED 闪烁实现,闪烁频率及花型可自己设计。

3、能够调整小时和分钟的时间,调整的形式为通过按键进行累加。

4、具有闹钟功能,闹钟时间可以任意设定(设定的形式同样为通过按键累加),并且在设定的时间能够进行提示,提示同样可以由LED 闪烁实现。

二、设计分析及系统方案设计数字计时器一般都由振荡器、分频器、计数器、译码器、显示器等几部分组成。

其中振荡器和分频器组成标准秒信号发生器,由不同进制的计数器、译码器和显示器组成计时系统。

多功能数字时钟课程设计

多功能数字时钟课程设计

多功能数字时钟课程设计多功能数字时钟是一种十分常见且使用广泛的计时工具,随着数字化的推进,数字时钟在人们的日常生活中扮演着越来越重要的角色。

针对数字时钟的课程设计就显得尤为重要。

在下面的文章中,我们将针对多功能数字时钟的课程设计分步骤地进行阐述。

第一步:课程目标的制定在开展数字时钟课程的设计之前,需要明确该课程的教学目标。

数字时钟涉及到的知识点比较多,目标制定的准确性和明确性可以使得教学更加高效。

该课程目标的一些重要的方面包括:1. 了解数字时钟的组成和工作原理。

2. 掌握数字时钟的常用功能和操作方式。

3. 能够利用数字时钟进行实际生活中的计时操作。

4. 学会数字时钟的基本维护和保养。

第二步:课程内容的选择数字时钟涉及到的内容很多,但是每个人的知识背景在一个不同的水平,一些学生可能只知道数字时钟的基本概念。

在选择课程内容时,要根据学生的背景进行选择,使得课程设计具有一定的针对性。

一些重要的课程内容有:1. 数字时钟的结构。

2. 常见数字时钟的类型。

3. 如何使用数字时钟进行计时操作。

4. 数字时钟的维护和保养。

第三步:课程教学方法的选择在数字时钟的课程教学中,教学方法是非常重要的。

如果教学方法不当,即使内容选择恰当,也可能使得学生无法真正理解和掌握数字时钟的重要性和使用方法。

一些教学方法有:1. 讲解式教学方法:教师直接讲解数字时钟的相关知识和技能。

2. 实验式教学方法:由学生亲自操作数字时钟,从而掌握使用方法。

3. 讨论式教学方法:教师引导学生进行交流和探讨。

第四步:课程评价方法的选择在数字时钟课程结束后,教学评价是必不可少的一件事。

这对于学生学习的效果检验和课程的改进都具有重要意义。

一些评价方法有:1. 笔试方式:通过让学生考试,检查学生对数字时钟的理解程度。

2. 实际操作方式:让学生在数字时钟的操作过程中检查他们是否真正理解。

3. 交流方式:从学生的角度出发,从而更好地了解数字时钟课程的情况。

多功能数字钟电路设计实验报告

多功能数字钟电路设计实验报告

多功能数字钟电路设计实验报告实验目的:设计一个多功能数字钟电路,能够显示当前时间,并具备闹钟、秒表和计时等功能。

实验原理:1. 数码管显示:使用4位共阴极数码管进行显示,采用BCD码方式输入。

2. 按键输入:使用按键进行时间的调节和选择功能。

3. 时钟频率:使用晶体振荡器提供系统时钟,通过分频电路控制时钟频率。

实验器材:1. 4位共阴极数码管2. 按键开关3. 74LS90分频器4. 时钟晶体振荡器5. 耐压电容、电阻等元件6. 电路连接线实验步骤:1. 连接电路:根据电路原理图,将数码管、按键开关、74LS90分频器、晶体振荡器等连接起来,注意接线正确。

2. 编写程序:根据实验要求,编写相应的程序,实现时钟、闹钟、秒表和计时等功能。

3. 调试电路:将电路通电并运行程序,观察数码管的显示情况和按键功能是否正常。

4. 测试功能:分别测试多功能数字钟的时钟、闹钟、秒表和计时等功能,确保功能正常。

5. 完善实验报告:根据实验结果和观察情况,完善实验报告,并附上电路原理图、程序代码等。

实验结果:经过调试和测试,多功能数字钟电路能够正常显示时间,并具备时钟、闹钟、秒表和计时功能。

使用按键进行时间调节和功能选择,数码管根据不同功能进行相应的显示。

实验总结:通过本次实验,我掌握了多功能数字钟电路的设计原理和实现方法,并且了解了数码管显示、按键输入、时钟频率控制等相关知识。

实验过程中,我发现电路连接正确性对功能实现起到关键作用,同时合理编写程序也是确保功能正常的重要环节。

通过实验,我对数字电路的设计和实现有了一定的了解,并且培养了动手实践和解决问题的能力。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

大连理工大学本科实验报告题目:多功能数字时钟设计课程名称:数字电路与系统课程设计学院(系):信息与通信工程学院专业:电子信息工程班级:学生姓名:学号:完成日期:2014年7月16日2014 年7 月16 日题目:多功能数字时钟设计1 设计要求1) 具有“时”、“分”、“秒”及“模式”的十进制数字显示功能;2) 具有手动校时、校分功能,并能快速调节、一键复位(复位时间12时00分00秒);3) 具有整点报时功能,从00分00秒起,亮灯十秒钟;4) 具有秒表功能(精确至百分之一秒),具有开关键,可暂停、可一键清零;5) 具有闹钟功能,手动设置时间,并可快速调节,具有开关键,可一键复位(复位时间12时00分00秒),闹钟时间到亮灯十秒钟进行提醒;6) 具有倒计时功能(精确至百分之一秒),可手动设置倒计时时间,若无输入,系统默认60秒倒计时,且具有开关键,计时时间到亮灯十秒钟进行提醒,可一键复位(复位时间默认60秒)。

2 设计分析及系统方案设计2.1 模式选择模块:按键一进行模式选择,并利用数码管显示出当前模式。

模式一:时钟显示功能;模式二:时钟调节功能;模式三:闹钟功能;模式四:秒表功能;模式五:倒计时功能。

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

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

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

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

具有复位按键1,在时钟模式下按下复位键后对时钟进行复位,复位时间12时00分00秒。

进入手动调时功能时,通过按键调节时间,每按下依次按键2,时钟时针加一,按下按键2一秒内未松手,时钟时针每秒钟加十;按键1对分针进行控制,原理与时针相同并通过译码器由七位数码管显示。

从00分00秒开始,数字钟进入整点报时功能(本设计中以一个LED灯代替蜂鸣器,进行报时),亮灯10秒钟进行提示。

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

可由复位键0异步清零,并由开关1控制计时开始与停止。

将DE2硬件中的50MHZ晶振经过分频获得周期为0.01秒的时钟脉冲,将信号送入计数器进行计算,并把累计结果通过译码器由七位数码管显示2.4多功能数字钟的闹钟功能部分:进入闹钟功能模式后,通过按键2(设定小时)和按键1(设定分钟)设定闹钟时间,当按下按键一秒内未松手时,可进行快速设定时间。

当时钟进入闹钟设定的时间(判断时钟的时信号时针,分针分别与闹钟设定的时信号时针、分针是否相等),则以LED灯连续亮10秒钟进行提示,并由开关0控制闹钟的开和关。

2.5 多功能数字钟的倒计时功能部分:可通过按键3(设定分针)和按键2(设定秒针)设定倒计时开始,当按下按键一秒内未松手时,可进行快速设定时间。

当没有手动时间设定时,系统默认为60秒倒计时。

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

计数器减至00时,分钟位、秒钟位保持为00。

倒计时结束时(即00分00秒),倒计时信号灯亮10秒钟进行提示,并由开关2控制倒计时的开始于停止。

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

当mode=“000”时,时钟功能,则对时钟信号进行译码,数码管显示时钟数据; 当mode=“001”时,时间校准功能,则对时钟信号进行译码,数码管显示闹钟数据; 当mode=“010”时,闹钟功能,则对闹钟信号进行译码,数码管显示闹钟信号数据; 当mode=“011”时,秒表功能,则对秒表信号进行译码,数码管显示秒表信号数据。

当mode=“100”时,则倒计时功能,对倒计时钟信号进行译码,数码管显示倒计时信号数据。

系统总体结构框图如下所示:3系统以及模块硬件电路设计3.1分频电路参数计算:666150100010001501015010001000.150101501000100.015010T sT sT s=⨯⨯⨯=⨯=⨯⨯⨯=⨯=⨯⨯⨯=⨯3.2系统硬件电路设计系统硬件模拟图:50MHZ KEY[0] KEY[1] KEY[2] KEY[3] Sw[0] Sw[1] LED[djs] LED[nz]分别与数码管相连Sw[2]LED[bs]4 系统的VHDL设计4.1顶层设计library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity liyabin is --实体声明,及系统输入与输出port(clk,rst,add,dec,selectmode,startmb,startnz,startdjs:in std_logic;qgs,qgg,qss,qsg,qfs,qfg,qms,qmg:buffer std_logic_vector(6 downto 0);ledbs,lednz,leddjs:out std_logic);end;architecture data of liyabin iscomponent mode --模式循环模块元件例化port(selectmode:in std_logic;mode:buffer std_logic_vector(2 downto 0));end component;component gnxz --功能选择模块元件例化port(zt:in std_logic_vector(2 downto 0);sz1,sz2,sz3,sz4,sz5,sz6:in std_logic_vector(3 downto 0);--时钟显示信号mb1,mb2,mb3,mb4,mb5,mb6:in std_logic_vector(3 downto 0);--秒表显示信号nz3,nz4,nz5,nz6:in std_logic_vector(3 downto 0);--闹钟显示信号djs1,djs2,djs3,djs4,djs5,djs6:in std_logic_vector(3 downto 0);--倒计时显示信号s1,s2,s3,s4,s5,s6,s7,s8:out std_logic_vector(3 downto 0)--输出,送入显示模块用数码管进行显示);end component;component fp --分频模块元件例化port(clk,rst:in std_logic;clk10ms,clk100ms,clk1s:out std_logic);end component;component sz --时钟模块元件例化port(zt:in std_logic_vector(2 downto 0);clk,clk100ms,rst,add,dec:in std_logic;sz1,sz2,sz3,sz4,sz5,sz6:buffer std_logic_vector(3 downto 0);ledbs: out std_logic);end component;component nz --闹钟模块元件例化port(startnz,add,dec,rst,clk,clk100ms:in std_logic;zt:in std_logic_vector(2 downto 0);sz2,sz3,sz4,sz5,sz6:in std_logic_vector(3 downto 0);--时钟显示信号nz3,nz4,nz5,nz6:buffer std_logic_vector(3 downto 0);--闹钟显示信号]lednz:out std_logic --闹钟提示灯输出);end component;component mb --秒表模块元件例化port(zt:in std_logic_vector(2 downto 0);clk,rst,startmb:in std_logic;mb1,mb2,mb3,mb4,mb5,mb6:buffer std_logic_vector(3 downto 0));end component;component djs --倒计时模块元件例化port(rst,startdjs,add,dec,clk,clk100ms:in std_logic;zt:in std_logic_vector(2 downto 0);djs1,djs2,djs3,djs4,djs5,djs6:buffer std_logic_vector(3 downto 0);leddjs:out std_logic);end component;component xs --显示模块元件例化port(xsin:in std_logic_vector(3 downto 0);--xsout:out std_logic_vector(6 downto 0));end component;signal clk10ms,clk100ms,clk1s,clk1m,clk1h :std_logic; --分频脉冲信号级进位脉冲信号signal sz1,sz2,sz3,sz4,sz5,sz6,sz33,sz55:std_logic_vector(3 downto 0);--时钟显示信号signal nz3,nz4,nz5,nz6:std_logic_vector(3 downto 0);--闹钟显示信号signal mb1,mb2,mb3,mb4,mb5,mb6:std_logic_vector(3 downto 0);--秒表显示信号signal djs1,djs2,djs3,djs4,djs5,djs6:std_logic_vector(3 downto 0);--倒计时显示信号signal s1,s2,s3,s4,s5,s6,s7,s8:std_logic_vector(3 downto 0);--显示信号signal zt:std_logic_vector(2 downto 0);begin --结构体------------------------------模式循环模块------------------------------u1:mode port map(selectmode,zt);------------------------------功能选择模块-----------------------------u2:gnxz port map(zt,sz1,sz2,sz3,sz4,sz5,sz6,mb1,mb2,mb3,mb4,mb5,mb6,nz3,nz4,nz5,nz6,djs1,djs2,djs3,djs4,s1,s2,s3,s4,s5,s6,s7,s8);--------------------------------分频模块--------------------------------u3:fp port map(clk,rst,clk10ms,clk100ms,clk1s);--------------------------------时钟模块--------------------------------u4:sz port map(zt,clk1s,clk100ms,rst,add,dec,sz1,sz2,sz3,sz4,sz5,sz6,ledbs); --------------------------------闹钟模块-------------------------------u5:nz port map(startnz,add,dec,rst,clk1s,clk100ms,zt,sz2,sz3,sz4,sz5,sz6,nz3,nz4,nz5,nz6,lednz);--------------------------------秒表模块--------------------------------u6:mb port map(zt,clk10ms,rst,startmb,mb1,mb2,mb3,mb4,mb5,mb6);--------------------------------倒计时模块------------------------------u7:djs port map(rst,startdjs,add,dec,clk10ms,clk100ms,zt,djs1,djs2,djs3,djs4,djs5,djs6,leddjs);--------------------------------------显示模块-----------------------------------------show1: xs port map(s1,qmg);show2: xs port map(s2,qms);show3: xs port map(s3,qfg);show4: xs port map(s4,qfs);show5: xs port map(s5,qsg);show6: xs port map(s6,qss);show7: xs port map(s7,qgg);show8: xs port map(s8,qgs);end; --结束4.2 分频模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity fp isport(clk,rst:in std_logic;clk10ms,clk100ms,clk1s:out std_logic);end;architecture data of fp isbegin--50兆分频,产生clk1s,作为始时钟的秒计时脉冲process(clk,rst)variable num:integer range 0 to 49999999;beginif rst='0' thennum:=0;elsif rising_edge(clk) thenif num=49999999 thennum:=0;clk1s<='1';elsenum:=num+1;clk1s<='0';end if;end if;end process;--5兆分频,产生clk100ms(即clk0.1s),作为快速调整时间的脉冲信号process(clk,rst)variable num:integer range 0 to 4999999;beginif rst='0' thennum:=0;elsif rising_edge(clk) thenif num=4999999 thennum:=0;clk100ms<='1';elsenum:=num+1;clk100ms<='0';end if;end if;end process;--5兆分频,产生clk10ms(即clk0.01s)作为秒表计时脉冲process(clk,rst)variable num:integer range 0 to 499999;beginif rst='0' thennum:=0;elsif rising_edge(clk) thenif num=499999 thennum:=0;clk10ms<='1';elsenum:=num+1;clk10ms<='0';end if;end if;end process;end;4.3模式循环模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity mode is --实体声明port(selectmode:in std_logic;mode:buffer std_logic_vector(2 downto 0));end;architecture data of mode isbeginprocess(selectmode)beginif rising_edge(selectmode) then --模式循环计数器if mode="100" thenmode<="000";else mode<=mode+1;end if;end if;end process;end;4.4功能选择模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity gnxz is --实体声明port(zt:in std_logic_vector(2 downto 0);sz1,sz2,sz3,sz4,sz5,sz6:in std_logic_vector(3 downto 0);--时钟显示信号mb1,mb2,mb3,mb4,mb5,mb6:in std_logic_vector(3 downto 0);--秒表显示信号nz1,nz2,nz3,nz4,nz5,nz6:in std_logic_vector(3 downto 0);--闹钟显示信号djs1,djs2,djs3,djs4,djs5,djs6:in std_logic_vector(3 downto 0);--倒计时显示信号s1,s2,s3,s4,s5,s6,s7,s8:out std_logic_vector(3 downto 0)--输出,送入显示模块用数码管进行显示);end;architecture data of gnxz isbeginprocess(zt,sz1,sz2,sz3,sz4,sz5,sz6, --选择译码器数日信号nz3,nz4,nz5,nz6,mb1,mb2,mb3,mb4,mb5,mb6,djs1,djs2,djs3,djs4,djs5,djs6)beginif zt="000" then--1时钟显示s1<=sz1;s2<=sz2;s3<=sz3;s4<=sz4;s5<=sz5;s6<=sz6;s7<="0001";s8<="1111";elsif zt="001" then--2调整s1<=sz1;s2<=sz2;s3<=sz3;s4<=sz4;s5<=sz5;s6<=sz6;s7<="0010";s8<="1111";elsif zt="010" then--3闹钟s1<="0000";s2<="0000";s3<=nz3;s4<=nz4;s5<=nz5;s6<=nz6;s7<="0011";s8<="1111";elsif zt="011" then--4秒表s1<=mb1;s2<=mb2;s3<=mb3;s4<=mb4;s5<=mb5;s6<=mb6;s7<="0100";s8<="1111";elsif zt="100" then--5倒计时s1<=djs1;s2<=djs2;s3<=djs3;s4<=djs4;s5<=djs5;s6<=djs6;s7<="0101";s8<="1111";else s1<=sz1;s2<=sz2;s3<=sz3;s4<=sz4;s5<=sz5;s6<=sz6;s7<="0001";s8<="1111";end if;end process;end;4.5显示模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity xs isport(xsin:in std_logic_vector(3 downto 0);xsout:out std_logic_vector(6 downto 0));end;architecture data of xs isbeginprocess(xsin) --显示译码器begincase xsin iswhen "0000"=>xsout<="1000000";when "0001"=>xsout<="1111001";when "0010"=>xsout<="0100100";when "0011"=>xsout<="0110000";when "0100"=>xsout<="0011001";when "0101"=>xsout<="0010010";when "0110"=>xsout<="0000010";when "0111"=>xsout<="1111000";when "1000"=>xsout<="0000000";when "1001"=>xsout<="0010000";when others=>xsout<="1111111";end case;end process;end;4.6 时钟及其调整模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity sz is --实体声明port(zt:in std_logic_vector(2 downto 0);clk,clk100ms,rst,add,dec:in std_logic;sz1,sz2,sz3,sz4,sz5,sz6:buffer std_logic_vector(3 downto 0);ledbs: out std_logic);end;architecture data of sz issignal clk1m,clk1h,clk1m0,clk1h0:std_logic; --进位脉冲信号signal js,js1:std_logic_vector(0 downto 0); --按键计时信号beginprocess(zt,js,clk100ms,clk1m0,add,dec)--时间校准选择脉冲分针部分beginif zt="001" and js="1" thenclk1m<=clk100ms;elsif zt="001" and js/="1" thenclk1m<=clk1m0 or not dec;else clk1m<=clk1m0;end if;end process;process(zt,js1,clk100ms,clk1h0)--时间校准选择脉冲时针部分beginif zt="001" and js1="1" thenclk1h<=clk100ms;elsif zt="001" and js1/="1" thenclk1h<=clk1h0 or not dec;else clk1h<=clk1h0;end if;end process;process(zt,clk,rst,add,dec) --时钟分针按键计时beginif zt="000" and rst='0' thensz2<="0000";sz1<="0000";elseif zt="001" and dec='0' thenif rising_edge(clk) thenjs<=js+1;if js="1" thenjs<="1";end if;end if;else js<="0";end if;if zt="001" and add='0' then --时钟时针按键计时if rising_edge(clk) thenjs1<=js1+1;if js1="1" thenjs1<="1";end if;end if;else js1<="0";end if;if rising_edge(clk) then --时钟秒针计数器if sz2="0101" and sz1="1001" thensz2<="0000";sz1<="0000";clk1m0<='1';elsif sz1="1001" thensz1<="0000";sz2<=sz2+1;clk1m0<='0';else sz1<=sz1+1;clk1m0<='0';end if;end if;end if;end process;process(zt,clk1m,rst) --时钟分针计数器beginif zt="000" and rst='0' thensz4<="0000";sz3<="0000";elsif rising_edge(clk1m) thenif sz4="0101" and sz3="1001" thensz4<="0000";sz3<="0000";clk1h0<='1';elsif sz3="1001" thensz3<="0000";sz4<=sz4+1;clk1h0<='0';else sz3<=sz3+1;clk1h0<='0';end if;end if;end process;process(clk1h,rst,zt) --时钟时针计数器beginif zt="000" and rst='0' thensz6<="0001";sz5<="0010";elsif rising_edge(clk1h) thenif sz6="0010" and sz5="0011" thensz6<="0000";sz5<="0000";elsif sz5="1001" thensz5<="0000";sz6<=sz6+1;else sz5<=sz5+1;end if;end if;end process;process(sz1,sz2,sz3,sz4) --整点报时beginif sz4="0000" and sz3="0000" and sz2="0000" then ledbs<='1';else ledbs<='0';end if;end process;end;4.7闹钟模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity nz isport(startnz,add,dec,rst,clk,clk100ms:in std_logic;zt:in std_logic_vector(2 downto 0);sz2,sz3,sz4,sz5,sz6:in std_logic_vector(3 downto 0);--时钟显示信号nz3,nz4,nz5,nz6:buffer std_logic_vector(3 downto 0);--闹钟显示信号]lednz:out std_logic);end;architecture data of nz issignal js,js1:std_logic_vector(0 downto 0);--按键计时信号signal clkd,clkg:std_logic; --进位脉冲信号beginprocess(js,clk100ms,dec)beginif js="1" then --分针按键计时clkd<=clk100ms;else clkd<=not dec;end if;end process;process(js1,clk100ms,add) --时针按键计时beginif js1="1" thenclkg<=clk100ms;else clkg<=not add;end if;end process;process(zt,add,dec,rst,clk,clkg,clkd) --闹钟时间手动设置beginif zt="010" thenif rst='0' thennz6<="0001";nz5<="0010";nz4<="0000";nz3<="0000"; --闹钟复位12:00:00elseif dec='0' thenif rising_edge(clk) thenjs<=js+1;if js="1" thenjs<="1";end if;end if;else js<="0";end if;if add='0' thenif rising_edge(clk) thenjs1<=js1+1;if js1="1" thenjs1<="1";end if;end if;else js1<="0";end if;if falling_edge(clkd) then --闹钟手动设置分钟if nz4="0101" and nz3="1001" thennz4<="0000";nz3<="0000";elsif nz3="1001" thennz3<="0000";nz4<=nz4+1;else nz3<=nz3+1;end if;end if;if falling_edge(clkg) then --闹钟手动设置时钟if nz6="0010" and nz5="0011" thennz6<="0000";nz5<="0000";elsif nz5="1001" thennz5<="0000";nz6<=nz6+1;else nz5<=nz5+1;end if;end if;end if;end if;end process;process(startnz,nz6,nz5,nz4,nz3,sz2,sz3,sz4,sz5,sz6) ----闹钟判断及提示beginif startnz='1' thenif nz6=sz6 and nz5=sz5 and nz4=sz4 and nz3=sz3 and sz2="0000" then lednz<='1';else lednz<='0';end if;else lednz<='0';end if;end process;end;4.8秒表模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity mb is --实体声明port(zt:in std_logic_vector(2 downto 0);clk,rst,startmb:in std_logic;mb1,mb2,mb3,mb4,mb5,mb6:buffer std_logic_vector(3 downto 0) );end ;architecture data of mb issignal clk10ms,clk1s,clk1m:std_logic; --进位脉冲信号beginprocess(zt,clk,startmb,rst) --秒表脉冲计数器beginif zt="011" and rst='0' thenmb2<="0000";mb1<="0000";elsif startmb='1' thenif rising_edge(clk) thenif mb2="1001" and mb1="1001" thenmb2<="0000";mb1<="0000";clk1s<='1';elsif mb1="1001" thenmb1<="0000";mb2<=mb2+1;clk1s<='0';else mb1<=mb1+1;clk1s<='0';end if;end if;end if;end process;process(zt,clk1s,rst) --秒表分针计数器beginif zt="011" and rst='0' thenmb4<="0000";mb3<="0000";elsif rising_edge(clk1s) thenif mb4="0101" and mb3="1001" thenmb4<="0000";mb3<="0000";clk1m<='1';elsif mb3="1001" thenmb3<="0000";mb4<=mb4+1;clk1m<='0';else mb3<=mb3+1;clk1m<='0';end if;end if;end process;process(zt,clk1m,rst) --秒表时针计数器if zt="011" and rst='0' thenmb6<="0000";mb5<="0000";elsif rising_edge(clk1m) thenif mb6="0101" and mb5="1001" thenmb5<="0000";mb6<="0000";elsif mb5="1001" thenmb5<="0000";mb6<=mb6+1;else mb5<=mb5+1;end if;end if;end process;end;4.9 倒计时模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity djs is --实体声明port(rst,startdjs,add,dec,clk,clk100ms:in std_logic; --按键及脉冲输入zt:in std_logic_vector(2 downto 0); --状态输入djs1,djs2,djs3,djs4,djs5,djs6:buffer std_logic_vector(3 downto 0);--倒计时显示输出leddjs:out std_logic --倒计时提示灯);end;architecture data of djs issignal clk1s,clk1m,clkd,clkg:std_logic; --进位脉冲signal js,js1:std_logic_vector(0 downto 0); --按键计时信号signal s1,s2,s3,s4,s5,s6,ss1,ss2,ss3,ss4,ss5,ss6:std_logic_vector(3 downto 0); --倒计时设置时间信号和倒计时减法器时间信号begin --结构体process(js,clk100ms,dec)--分针按键计时beginif js="1" thenclkd<=clk100ms;else clkd<=not dec;end if;end process;process(js1,clk100ms,add)--时针按键计时if js1="1" thenclkg<=clk100ms;else clkg<=not add;end if;end process;process(zt,add,dec,rst,startdjs,clk,clkd,clkg)--倒计时设置时间beginif zt="100" and rst='0' then --异步复位s6<="0000";s5<="0000";s4<="0101";s3<="1001";elsif zt="100" and startdjs='0' thenif dec='0' thenif rising_edge(clk) thenjs<=js+1;if js="1" thenjs<="1";end if;end if;else js<="0";end if;if add='0' thenif rising_edge(clk) thenjs1<=js1+1;if js1="1" thenjs1<="1";end if;end if;else js1<="0";end if;if rising_edge(clkd) thenif s4="0101" and s3="1001" thens4<="0000";s3<="0000";elsif s3="1001" thens3<="0000";s4<=s4+1;else s3<=s3+1;end if;end if;if rising_edge(clkg) thenif s6="0101" and s5="1001" thens6<="0000";s5<="0000";elsif s5="1001" thens5<="0000";s6<=s6+1;else s5<=s5+1;end if;end if;end if;end process;process(zt,startdjs,clk,s1,s2,s3,s4,s5,s6,ss1,ss2,ss3,ss4,ss5,ss6)--倒计时减法器beginif zt="100" and startdjs='0' thenss1<="0000";ss2<="0000";elsif zt="100" and startdjs='1' thenif rising_edge(clk) thenif ss3="0000" and ss4="0000" and ss5="0000" and ss6="0000" then ss2<="0000" ;ss1<="0000";elsif ss2="0000" and ss1="0000" thenss2<="1001";ss1<="1001";clk1s<='1';elsif ss1="0000" thenss1<="1001";ss2<=ss2-1;clk1s<='0';else ss1<=ss1-1;clk1s<='0';end if;end if;end if;end process;process(zt,startdjs,clk1s,s3,s4)--倒计时减法器秒针部分beginif zt="100" and startdjs='0' thenss3<=s3;ss4<=s4;elsif rising_edge(clk1s) thenif ss3="0000" and ss4="0000" and ss5="0000" and ss6="0000" then ss3<="0000" ;ss4<="0000";elsif ss3="0000" and ss4="0000" thenss3<="1001";ss4<="0101";clk1m<='1';elsif ss3="0000" thenss3<="1001";ss4<=ss4-1;clk1m<='0';else ss3<=ss3-1;clk1m<='0';end if;end if;end process;process(zt,startdjs,clk1m,s5,s6)--倒计时减法器分针部分beginif zt="100" and startdjs='0' thenss5<=s5;ss6<=s6;elsif rising_edge(clk1m) thenif ss5="0000" and ss6="0000" thenss5<="0000";ss6<="0000";elsif s5="0000" thenss5<="1001";ss6<=ss6-1;else ss5<=ss5-1;end if;end if;end process;process(zt,startdjs,djs6,djs5,djs3,djs4) --倒计时时间到提示beginif zt="100" and startdjs='1' thenif djs6="0000" and djs5="0000" and djs4="0000" and djs3/="0000"thenleddjs<='1';elsif djs2="0000" and djs3="0000" and djs4="0000" and djs1="0000" thenleddjs<='0';else leddjs<='0';end if;else leddjs<='0';end if;end process;process(zt,startdjs,s1,s2,s3,s4,s5,s6,ss1,ss2,ss3,ss4,ss5,ss6) --设置时间与减法器时间切换进程beginif zt="100" and startdjs='1' thendjs5<=ss5;djs6<=ss6;djs3<=ss3;djs4<=ss4;djs2<=ss2;djs1<=ss1;else djs5<=s5;djs6<=s6;djs3<=s3;djs4<=s4;djs2<=s2;djs1<=s1;end if;end process;end;5 结论以及结果说明5.1 结论:本设计基于VHDL 硬件描述语言,在windows7(32bit)计算机上运行Quartus II Version 6.0进行编程及仿真,将程序下载带DE2实验平台,主芯片为Cyclone II EP2C35F672C6NK上运行。

相关文档
最新文档