24小时计数器
- 格式:doc
- 大小:47.50 KB
- 文档页数:6
普通本科毕业设计题目:自动打铃系统的EDA设计和仿真学院软件与通信工程学生姓名学号专业电子信息工程届别09级指导教师职称二〇一三年五月普通本科生毕业论文(设计)诚信承诺书摘要自动打铃系统可以为学校上下课时间的准确控制提供方便,并且也可以在办公室、工厂等一些场合起到提醒人们时间的作用,因此打铃器的设计有一定的实际意义。
本次设计模拟学校的打铃系统,是在Quartus II软件平台上使用硬件描述语言(HDL)语言进行设计和仿真,系统包括了24小时的计时功能、时分秒数字显示功能、时间设置功能和基本打铃等功能。
系统由时钟模块、定时模块、选择模块、闹铃模块、打铃模块、显示模块组成,由按键进行时钟的校准、复位、启用等。
本文在介绍电子设计自动化(EDA)技术的基础上,着重阐述了如何使用EDA技术进行系统的开发,以及如何实现学校打铃系统。
通过仿真验证,打铃器具有正常计时、定时报警、报警时长设定等功能,可为日常作息提供准确、便捷的提醒。
系统运行稳定,设计方法可行。
【关键词】打铃系统硬件描述语言电子自动化AbstractThe system of automatically bell provides great convenience for student to control the accurate bell-time in school, and also plays an important role in the work and life in offices, factories,and many other occasions. So it is of great practical significance for us.This design is based on the Software platforms of Quartus using hardware description language (HDL) to carry on the design and simulation. The system includes calculating displaying and setting the right time in hour, minute and second and so on. This system is made of five modules,including the clock module, time decoding module, alarm clock, control module, ringing the bell module,display module, etc. You can press the keys to start or stop the clock and correct or clean the time. Based on describing devices of EDA,this article focuses on the development method and the way to implement a school bell system.Through simulation and practical test, this system has the function of normal timing, alarming, alarming-time setting, which can provide convenient and accurate remind of daily routine.It is proved that the operation of this system is stable, and the design method is possible.【Key words】Alarm Clock System;Hardware Description Language;Electronic Design Automation目录1 绪论 (1)1.1 研究背景与意义 (1)1.2 本文的主要研究内容和任务 (2)1.2.1 EDA的发展历程 (2)1.2.1 EDA技术的优点 (2)1.3 器件及工具介绍 (3)1.3.1 QuartusⅡ设计步骤 (3)1.3.2 VHDL语言特点 (3)2.1 时钟模块 (6)2.1.1 六十进制计数器模块 (7)2.1.2 二十四进制计数器模块 (7)2.2 定时模块 (8)2.3 选择模块 (8)2.4 闹钟模块 (9)2.5 打铃模块 (10)2.5.1 打铃时间设置 (10)2.5.2 打铃时长设置 (12)2.7 电源模块 (12)2.8 本章小结 (13)3 设计结果与仿真分析 (14)3.1 时钟模块仿真分析 (14)3.1.1 六十进制计数器仿真分析 (14)3.1.2 二十四进制计数器仿真分析 (14)3.1.3 时钟计时器器仿真分析 (14)3.2 定时模块的仿真分析 (15)3.3 选择模块仿真分析 (15)3.4 闹钟模块仿真分析 (15)3.5 打铃模块仿真分析 (16)3.5.1 打铃时间仿真分析 (16)3.5.2 打铃时长仿真分析 (16)3.6 本章小结 (16)致谢 (19)参考文献 (20)附录 (21)1 绪论1.1 研究背景与意义二十一世纪的今天,电子技术的发展已经到非常成熟的阶段,并且我们也体会到了电子技术是一个永不衰败的行业,因为电子技术的广泛应用和不断的发展,现在已经遍及到了各个行业及不同领域。
[数电课程设计数字电子时钟的实现] 电子时钟课程设计课程设计报告设计题目:数字电子时钟的设计与实现班级:学号:姓名:指导教师:设计时间:摘要钟表的数字化给人们生产生活带来了极大的方便,大大的扩展了原先钟表的报时。
诸如,定时报警、按时自动打铃、时间程序自动控制等,这些,都是以钟表数字化为基础的。
功能数字钟是一种用数字电路实现时、分、秒、计时的装置,与机械时钟相比具有更高的准确性和直观性,且无机械装置,具有更长的使用寿命,因此得到了广泛的使用。
从原理上讲,数字钟是一种典型的数字电路,其中包括了组合逻辑电路和时序电路。
因此,此次设计与制作数字钟就是为了了解数字钟的原理,从而学会制作数字钟,而且通过数字钟的制作进一步的了解各种在制作中用到的中小规模集成电路的作用及使用方法。
通过此次课程设计可以进一步学习与各种组合逻辑电路与时序电路的原理与使用方法。
通过仿真过程也进一步学会了Multisim7的使用方法与注意事项。
本次所要设计的数字电子表可以满足使用者的一些特殊要求,输出方式灵活,如可以随意设置时、分、秒的输出,定点报时。
由于集成电路技术的发展,,使数字电子钟具有体积小、耗电省、计时准确、性能稳定、维护方便等优点。
关键词:数字钟,组合逻辑电路,时序电路,集成电路目录摘要 (1)第1章概述············································3第2章课程设计任务及要求·······························42.1设计任务············································42.2设计要求············································4第3章系统设计··········································63.1方案论证············································63.2系统设计············································63.2.1结构框图及说明·································63.2.2系统原理图及工作原理···························73.3单元电路设计········································83.3.1单元电路工作原理·······························83.3.2元件参数选择···································14第4章软件仿真·········································154.1仿真电路图··········································154.2仿真过程············································164.3仿真结果············································16第5章安装调试··········································175.1安装调试过程········································175.2故障分析············································17第6章结论···············································18第7章使用仪器设备清单··································19参考文献·················································19收获、体会和建议·········································20第1章概述数字集成电路的出现和飞速发展,以及石英晶体振荡器的广泛应用,使得数字钟的精度稳定度远远超过了老式的机械表,用数字电路实现对“时”、“分”、“秒”数字显示的数字钟在数字显示方面,目前已有集成的计数、译码电路,它可以直接驱动数码显示器件,也可以直接采用才COMS--LED光电组合器件,构成模块式石英晶体数字钟。
课程设计(大作业)报告课程名称:数字电子技术课程设计设计题目:多功能数字时钟的设计、仿真院系:信息技术学院班级:二班设计者:张三学号:79523指导教师:张延设计时间:2011年12月19日至12月23日信息技术学院昆明学院课程设计(大作业)任务书一、设计目的为了熟悉数字电路课程,学习proteus软件的使用,能够熟练用它进行数字电路的仿真设计,以及锻炼我们平时独立思考、善于动手操作的能力,培养应对问题的实战能力,提高实验技能,熟悉复杂数字电路的安装、测试方法,掌握关于多功能数字时钟的工作原理,掌握基本逻辑们电路、译码器、数据分配器、数据选择器、数值比较器、触发器、计数器、锁存器、555定时器等方面已经学过的知识,并能够将这些熟练应用于实际问题中,我认真的动手学习了数字时钟的基本原理,从实际中再次熟悉了关于本学期数字电路课程中学习的知识,更重要的是熟练掌握了关于proteus软件的使用,收获颇多,增强了自己的工程实践能力。
另外,数字钟是一种用数字电路技术实现时、分、秒计时的装置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更更长的使用寿命,因此得到了广泛的使用。
数字钟从原理上讲是一种典型的数字电路,其中包括了组合逻辑电路和时序电路。
因此,我们此次设计数字钟就是为了了解数字钟的原理,从而学会制作数字钟。
而且通过数字钟的制作进一步的了解各种在制作中用到的中小规模集成电路的作用及实用方法。
且由于数字钟包括组合逻辑电路和时叙电路。
通过它可以进一步学习与掌握各种组合逻辑电路与时序电路的原理与使用方法。
二、设计要求和设计指标设计一个数字时钟,具有“秒”、“分”、“时”计时和显示功能。
小时以24小时计时制计时;具有校时功能,能够对“分”、“时”进行调整;能够进行整点报时,报时规则为:在59Min51s后隔秒发出500Hz的低音报时信号,在59min59s时发出1kHz的高音报时信号,声响持续1s。
4位同步二进制加法计数器是一种常见的数字电路,用于实现二进制计数。
它可以将二进制数字表示为电信号,并且在每次输入脉冲时进行递增。
下面将详细介绍4位同步二进制加法计数器及其计数的最大值。
一、4位同步二进制加法计数器的原理1. 4位同步二进制加法计数器由4个触发器组成,每个触发器对应一个二进制位。
当输入一个脉冲时,每个触发器根据前一位的状态以及输入脉冲的信号进行状态转换。
这样就实现了二进制数的递增。
2. 触发器之间通过门电路连接,用于控制触发器状态的变化。
这些门电路可以根据具体的设计选择不同的逻辑门,常见的有AND门、OR 门、NOT门等。
3. 4位同步二进制加法计数器是同步计数器,即所有触发器同时接收输入脉冲,确保计数的同步性。
二、4位同步二进制加法计数器的计数最大值1. 4位二进制数的表示范围是0~15,因此4位同步二进制加法计数器的计数最大值为15。
2. 在计数到15后,再输入一个脉冲,计数器将重新从0开始计数,即实现了循环计数。
三、4位同步二进制加法计数器的应用1. 4位同步二进制加法计数器常用于数字电子钟、信号发生器等数字电路中,用于实现计数和定时功能。
2. 它还可以作为其他数字电路的组成部分,用于构建更复杂的逻辑功能。
3. 在数字系统中,计数器是十分重要的组件,它能够实现数字信号的计数和控制,广泛应用于各种数字系统中。
4位同步二进制加法计数器是一种重要的数字电路,通过它可以实现对二进制数的递增计数。
其计数的最大值为15,应用领域广泛。
希望本文内容能够对读者有所启发。
四、4位同步二进制加法计数器的工作原理4位同步二进制加法计数器是一种晶体管数字集成电路,它利用触发器和逻辑门等基本元件构成,能够实现二进制数字的加法计数。
在4位同步二进制加法计数器中,每个触发器代表一个二进制位,通过输入脉冲的控制,能够实现对二进制数的递增计数。
具体来说,当输入一个脉冲信号时,4位同步二进制加法计数器会根据触发器之间的连线和逻辑门的作用,根据之前的状态和输入脉冲的信号进行状态转换,从而实现二进制数的递增。
XXXXXX课程设计报告电子线路设计课程设计报告[24小时时钟电路设计]小组成员:XXXXXXXXXXXXXX 院(系):电气信息工程学院年级专业:20XX级电子信息工程指导老师:XX XX XX 联系电话:XXXXXXXXX二〇XX年XX月摘要本设计为24小时时钟设计,具有时、分、秒计数显示功能,以24小时循环计时的时钟电路;具有时、分校准以及清零的功能。
本设计采用EDA技术,以硬件描述语言VHDL为系统逻辑描述手段设计文件,在QUARTUSⅡ工具软件环境下,采用自顶向下的设计方法,由各个基本模块共同构建了一个基于FPGA的数字钟。
系统由主控模块、分频模块、译码模块以及显示组成。
经编译和仿真所设计的程序,在可编程逻辑器件上下载验证,本系统能够完成时、分、秒的分别显示,由按键输入进行数字钟的清零功能。
关键词时钟,QUARTUSⅡ,VHDL,FPGAAbstractThe design for the 24-hour clock design, with hours, minutes, seconds count display, a 24-hour cycle of the clock timing circuit; with hours, minutes, and cleared the calibration function.This design uses EDA technology to hardware description language VHDL description of the means for the system logic design documents, software tools in QUARTUSⅡenvironment, using top-down design approach, from the various modules together to build a basic FPGA-based digital clock.System by the control module, frequency module, decoding module and display components. The compilation and simulation of the design process, in the download validation of programmable logic devices, the system can complete the hours, minutes, seconds, respectively, indicated by the key input for clear digital clock function.Keywords clock,QUARTUSⅡ,VHDL,FPGA目录摘要 (Ⅰ)ABSTRACT (Ⅱ)1 绪论 (1)1.1 题目意义 (1)1.2 设计要求 (1)2 设计的基本原理 (2)2.1 设计原理 (2)2.2 设计流程 (3)3 设计方案 (4)3.1 设计思路 (4)3.2 模块图和功能 (4)3.2.1 分频模块 (4)3.2.2 主控模块 (5)3.2.3 译码模块 (8)3.2.4 顶层模块 (10)4 测试 (11)4.1 模块仿真 (11)4.1.1 分频模块 (12)4.1.2 主控模块 (13)4.1.3 译码模块 (14)4.2 顶层模块仿真 (15)5 结论 (16)6 参考文献 (17)1 绪论1.1 题目意义现在是一个知识爆炸的新时代。
电子制作实训报告题目:数字电子钟班级:09电信姓名:苏欣欣指导教师:赵欣湖北轻工职业技术学院完成日期:2011年4月16日目录第一章概述 3第二章数字电子钟的电路原理 4 第三章电路调试与制作12第四章总结与体会12第五章附录13第一章概述数字钟是采用数字电路实现对.时,分,秒.数字显示的计时装置,广泛用于个人家庭,车站, 码头办公室等公共场所,成为人们日常生活中不可少的必需品,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,运运超过老式钟表, 钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。
诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。
因此,研究数字钟及扩大其应用,有着非常现实的意义。
虽然市场上已有现成的数字集成电路芯片出售,价格便宜,使用方便,这里所制作的数字电子可以随意设置时,分的输出,是数字电子中具有体积小、耗电省、计时准确、性能稳定、维护方便等优点。
设计目的(1)加强对电子制作的认识,充分掌握和理解设计个部分的工作原理、设计过程、选择芯片器件、电路的焊接与调试等多项知识。
(2)把理论知识与实践相结合,充分发挥个人与团队协作能力,并在实践中锻炼。
(3)提高利用已学知识分析和解决问题的能力。
(4)提高实践动手能力。
第二章数字电子钟的电路原理数字电子钟的设计与制作主要包括:数码显示电路、计数器与校时电路、时基电路和闹铃报时电路四个部分。
1.数码显示电路译码和数码显示电路是将数字钟的计时状态直观清晰地反映出来。
显示器件选用FTTL-655SB双阴极显示屏组。
在计数电路输出信号的驱动下,显示出清晰的数字符号。
2.计数器电路LM8560是一种大规模时钟集成电路它与双阴极显示屏组可以制成数字钟钟控电路。
3.校时电路数字钟电路由于秒信号的精确性和稳定性不可能做到完全准确无误,时基电路的误差会累积;又因外部环境对电路的影响,设计产品会产生走时误差的现象。
一、任务技术指标设计一个数字电子钟(1)能显示小时、分钟和秒;(2)能进行24小时和12小时转换;(3)具有小时和分钟的校时功能。
二、总体设计思想1.基本原理该数字钟由振荡器、分频器、计数器、译码器、显示器和校时电路等六部分组成。
振荡器产生的钟标信号送到分频器,分频电路将时标信号分成每秒一次的方波秒信号。
秒信号送入计数器进行计数,计数到60秒后向分进位,同理计数到60分后向小时进位,并将计数的结果以BCD-七段显示译码器显示出来。
计数选用十进制计数器74LS760D,校时电路通过选通开关对“时”和“分”进行校时。
二十四小时和十二小时的转换也可以用开关进行选择。
2.系统框图如图1:振荡器产生的钟标信号送到分频器,分频电路将时标信号送至计数器。
计数器通过译码显示把累计的结果以“时”、“分”、“秒”的数字显示出来。
整个过程中可选择用校时电路进行校时。
图1 系统框图三、具体设计1.总体设计电路该数字钟由振荡器、分频器、计数器、显示器和校时电路组成。
振荡器产生的钟标信号送到分频器,分频电路将时标信号分成每秒一次的方波秒信号。
秒信号送入计数器进行计数,计数到60秒后向分进位,同理分计数器计数到60分后向小时进位,并将计数的结果以BCD-七段显示译码器显示出来。
计数选用十进制计数器74LS760D,校时电路通过选通开关对“时”和“分”进行校时。
二十四小时和十二小时的转换可以用开关进行选择。
图2 总体电路图2.模块设计(1)振荡器的设计振荡器是数字钟的核心。
振荡器的稳定度及频率的精确度决定了数字钟计时的准确程度,通常选用石英晶体构成振荡器电路。
石英晶体振荡器的作用是产生时间标准信号。
因此,一般采用石英晶体振荡器经过分频得到这一时间脉冲信号。
电路中采用的是将石英晶体与对称式多谐振荡器中的耦合电容串联起来,就组成了如图3所示石英晶体多谐振荡器。
图3振荡器电路图和仿真波形图(2)分频器的设计对于分频器的设计选定74LS90集成芯片。
引言数字电子钟是采用数字电路实现对时,分,秒数字显示的计时装置。
数字钟是人们生活中不可少的用品,随处可见,如车站,码头,剧院,办公室等公众场合,可以说给人们的生活,工作,娱乐带来不少方便,又因为数字集成电路的发展采用了先进的石英技术,使数字钟具有走时准确,性能稳定,携带方便等优点。
虽然现在市场上又现成的数字钟集成电路芯片卖,但这里所写的自制电子钟可以满足一些特殊需要,列如可以随意设置时,分,秒的输出,改变显示数字的大小等。
又因为现在科技使得集成电路技术发展迅速,尤其是中规模集成电路技术的发展,使电子钟变得更加体积小,省电,计时准确,因此,在这里设计制作一个数字电子钟有着一定的意义,同时也兼顾了我们在学校所学的数字电路知识。
关键词:数字电子钟走时准确设计制作目录述论一.数字电路基本组成框图二.组成部分及各部分作用2.1 单元电路2.1.1 振荡电路2.1.2 时分秒显示电路2.1.3 译码显示电路2.1. 4 校时电路2.2 进制电路2.3 基本逻辑门电路三.电子钟触发器四.脉冲信号的产生五.调试六.结论七.参考文献述论多功能数字电子钟是由晶体振荡器、计数器、译码和数码显示电路、校时电路等组成。
该电子钟可以满足使用者的一些特殊要求,输出方式灵活,如可以随意设置时、分、秒的输出,改变显示数字的大小等等。
并且由于集成电路技术的发展,特别是MOS集成电路技术的发展,使数字电子钟具有体积小、耗电省、计时准确、性能稳定、维护方便等优点。
此次设计运用了学院中所学的数电、模电等知识,利用元器件等工作原理,制成了具有校时功能的数字电子钟。
电路主要采用中规模CMOS集成电路.本系统的设计电路由脉冲逻辑电路模块、时钟脉冲模块、电源模块、时钟译码显示电路模块、校时模块等部分组成。
采用电池作电源,采用低功耗的CMOS芯片及液晶显示器,有效的解决了功耗问题,能更好地为人们的生活带来便利。
一数字电子钟的基本组成框图二组成部分及各部分作用数字钟是一个将‚时‛、‚分‛、‚秒’’显示于人的视觉器官的计时装置。
60进制计数器原理60进制计数器是一种特殊的计数器,它可以用来对60进制数字进行计数和显示。
在我们的日常生活中,60进制计数器被广泛应用于时间、角度和地理坐标等领域。
本文将介绍60进制计数器的原理及其应用。
首先,我们来了解一下60进制计数器的基本原理。
60进制计数器是一种多位计数器,它由60个计数单元组成,每个计数单元可以表示0到59之间的数字。
当一个计数单元的数值达到最大值59时,它会向高位进位,并将自身的数值清零,然后继续计数。
这样,就可以实现对60进制数字的计数和显示。
在实际应用中,60进制计数器通常被用来表示时间。
我们知道,一小时有60分钟,一天有24小时,因此可以用60进制计数器来表示小时和分钟。
例如,当时间为13时30分时,可以用13:30来表示,其中13表示小时,30表示分钟。
这种表示方法非常直观和方便,能够准确地表达时间信息。
除了时间,60进制计数器还可以被应用于角度的表示。
在几何学和航海导航中,经常会用到角度的概念。
60进制计数器可以很好地表示角度,例如360度可以表示为6:00。
这种表示方法也非常直观和易于理解,有利于几何计算和导航定位。
此外,60进制计数器还可以用来表示地理坐标。
在地图上,经度和纬度通常用度、分、秒来表示,而度、分、秒又可以用60进制计数器来表示。
例如,经度120度30分可以表示为120:30,纬度30度15分可以表示为30:15。
这种表示方法简洁明了,方便人们在地图上查找和标注位置。
总之,60进制计数器是一种特殊的计数器,它可以用来对60进制数字进行计数和显示。
在时间、角度和地理坐标等领域,60进制计数器都有着重要的应用价值。
通过本文的介绍,相信读者对60进制计数器的原理和应用有了更深入的了解。
希望本文能够对大家有所帮助,谢谢阅读!。
桂林电子科技大学信息科技学院《EDA技术与应用》实训报告学号姓名指导教师:2012 年6 月20 日数字日历电路的设计1.系统设计1.1 设计要求①通过编程下载至实训箱实现万年历的设计制作;②数字日历能够显示年、月、日和时、分和秒;③用EDA实训仪上的8只八段数码管显示年、月、日和时、分、秒,每过8秒分别现实两个时间段能自动倒换;④数字日历具有复位和校准年、月、日、时、分、秒的按钮,有锁定时分秒的按键,同时加了一个现实闹钟的程序,即在设置的时间,LED显示一分钟,按键可以暂停。
1.1.1 设计任务设计并制作一台数字日历,添加闹钟功能。
1.1.2 技术要求基于Verilog HDL 编写电路设计2.总体思路根据学校EDA实验设备的输入/输出接口的容限,本设计采用8只七断数码管分时完成时,分,秒,年,月,日的显示。
设计电路的计时器模块用于完成一天中24小时计时;年月日模块接受24小时计时器模块送来的“天”脉冲进行计数,得到日,月,年的显示结果;控制模块产生控制信号K,控制数码显示器显示年月日,和时分秒的显示或自动切换显示。
校时选择模块在k信号的控制下,选择将j1,j2,j3这三个校时按钮产生的信号是送到计时器模块的校秒,校时,校分的输入端,还是送到年月诶模块的校天,校月,校年输入端;显示选择模块在k信号的控制下,选择是将24小时模块信号,还是将年月日模块信号送到数码显示器显示。
闹钟模块用于在设置时间用LED代替真正的闹钟,灯光一闪一闪表示闹钟响,加一按键,用于控制闹钟的灭。
24小时计数器电路图分频模块控制模块控制模块24小时计时模块 年月日模块闹钟模块校时模块显示模块译码器系统流程图整个系统电路里模块有主要有年月日模块,24小时计数器模块,闹钟模块,显示模块,信号k控制模块,校时选择模块,还原选择模块;而24小时计数器模块中又分有分频模块,六十进制计数器模块,二十四进制计数器模块。
2.1 设计方案2.1.1各个模块程序的设计1:分频器module gen (clk,cout);input clk;reg[24:0] q;output reg cout;always @(posedge clk) beginif(q==20000000-1) q=0; else q=q+1;if(q==20000000-1) cout=1; else cout=0;endendmodule module gen_mb(clk,cout); input clk;reg[24:0] q;output reg cout;always @(posedge clk) beginif(q==200000-1) q=0; else q=q+1;if(q==200000-1) cout=1; else cout=0;endendmodule2:六十进制计数器模块module cnt60(clk,clrn,j,q,cout);input clk,clrn,j;2千万分频20万分频output reg[7:0] q;output reg cout;always @(posedge clk^j or negedge clrn) beginif(~clrn) q=0;else beginif(q=='h59) q=0;else q=q+1;if(q[3:0]=='ha)beginq[3:0]=0; q[7:4]=q[7:4]+1;endif(q=='h59) cout=1;else cout=0;endendendmodule3:二十四进制计数器模块module cnt24(clk,clrn,j,q,cout);input clk,clrn,j;output reg[7:0] q;output reg cout;always @(posedge clk^j or negedge clrn) beginif(~clrn) q=0;else beginif(q=='h23) q=0;else q=q+1;if(q[3:0]=='ha)beginq[3:0]=0; q[7:4]=q[7:4]+1;endif(q=='h23) cout=1;else cout=0;endendendmodule4:100进制计数器模块module cnt100(clk,clrn,j,q,cout);input clk,clrn,j;output reg[7:0] q;output reg cout;reg[7:0] flay;always @(j)beginif(j) flay=0;else flay=1;endalways @(posedge clk or negedge clrn) beginif(~clrn) q=0;else if(flay==0) beginif(q==99) q=0;else q=q+1;if(q[3:0]=='hff)beginq[3:0]=0; q[7:4]=q[7:4]+1;endif(q==99) cout=1;else cout=0;endendendmodule5:年月日模块module nyr2009(clrn,clk,jn,jy,jr,qn,qy,qr); input clrn,clk,jn,jy,jr;output [15:0] qn;output [7:0] qy,qr;reg [15:0] qn;reg [7:0] qy,qr;reg clkn,clky;reg [7:0] date;reg clkn1,clkn2,clkn3;initial begin clkn1=1;clkn2=1;clkn3=1;endinitial begin qn='h2000;qy=1;qr=1;endalways @(posedge (clk^jr) or negedge clrn)beginif (~clrn) qr=1;else beginif (qr==date) qr=1;else qr=qr+1;if (qr[3:0]=='ha) beginqr[3:0]=0; qr[7:4]=qr[7:4]+1;endif (qr==date) clky = 1;else clky = 0;endendalways @(posedge clky^jy or negedge clrn)beginif (~clrn) qy=1;else beginif (qy=='h12) qy=1;else qy=qy+1;if (qy[3:0]=='ha) beginqy[3:0]=0;qy[7:4]=qy[7:4]+1;endif (qy=='h12) clkn = 1;else clkn = 0;endendalwaysbegincase (qy)'h01: date='h31;'h02: beginif ((qn%4==0)&(qn%100 != 0)|(qn%400==0)) date='h29;else date='h28; end'h03: date='h31;'h04: date='h30;'h05: date='h31;'h06: date='h30;'h07: date='h31;'h08: date='h31;'h09: date='h30;'h10: date='h31;'h11: date='h30;'h12: date='h31;default :date='h30;endcaseendalways @(posedge (clkn^jn) or negedge clrn ) beginif (~clrn) qn[3:0]=0;else begin if(qn[3:0]==9) qn[3:0]=0;else qn[3:0]=qn[3:0]+1;if (qn[3:0]==9) clkn1=0;else clkn1=1;endendalways @(posedge clkn1 or negedge clrn ) beginif (~clrn) qn[7:4]=0;else begin if(qn[7:4]==9) qn[7:4]=0;else qn[7:4]=qn[7:4]+1;if (qn[7:4]==9) clkn2=0;else clkn2=1;endendalways @(posedge clkn2 or negedge clrn ) beginif (~clrn) qn[11:8]=0;else begin if(qn[11:8]==9) qn[11:8]=0;else qn[11:8]=qn[11:8]+1;if (qn[11:8]==9) clkn3=0;else clkn3=1;endendalways @(posedge clkn3 or negedge clrn ) beginif (~clrn) qn[15:12]=2;else if(qn[15:12]==9) qn[15:12]=0;else qn[15:12]=qn[15:12]+1;endendmodule6:信号k控制模块module contr(clk,k1,k2,k);input clk,k1,k2;output reg k;reg [3:0] qc;reg rc;always @(posedge clk)begin qc=qc+1;if (qc<8) rc=0;else rc=1;case ({k1,k2})0:k=rc;1:k=0;2:k=1;3:k=rc;endcaseendendmodule7:校时选择模块module mux_4(k,jm,jf,js,jr,jy,jn,j1,j2,j3,); input j1,j2,j3;input k;output reg jm,jf,js,jr,jy,jn;alwaysbeginif(k==0) {jm,jf,js}={j1,j2,j3};else {jr,jy,jn}={j1,j2,j3};endendmodule8:24小时计数器module cnt24(clrn,clk,q,j,cont);input clrn,clk,j;output reg [7:0] q;output reg cont;always @(posedge clk^j or negedge clrn)beginif(~clrn) q=0;else beginif(q=='h23) q=0;else q=q+1;if(q[3:0]=='ha) begin q[3:0]=0;q[7:4]=q[7:4]+1;end if(q=='h23) cont=1;else cont=0;endendendmodule9:.显示器选择器module mux_16(k,qm,qf,qs,qr,qy,qn,q);input k;input[7:0] qm,qf,qs,qr,qy;input[15:0] qn;output reg [31:0] q;alwaysbeginif(k==0) beginq[31:24]=0;q[23:0]={qs,qf,qm};endelse q={qn,qy,qr};endEndmodule10:闹钟模块naozhong(qs,qf,led,zt);input zt;input[7:0] qs,qf;output led;reg led;alwaysbeginif (qs=='h06&&qf=='h01)led=1;elseled=0;if(zt==1) led=0;endendmodule3.制作与调试过程在实验中参考上课中学的万年历,在原有的基础上添加了一个闹钟功能,用LED代替实际的闹钟,在设置的时间内闪烁1分钟,又添加姨暂停按键,实现闹钟关闭功能,由于能力有限,没能加上其他功能的创新,是此次实训设计的缺憾,在调试过程中也比较顺利,在经过一段时间的调试后,基本就能实现功能,而主要时间用在了对原来的程序理解上。
小时计时 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity hour24 is port(clk,reset: in std_logic; up: out std_logic; bcd_l: out std_logic_vector(3 downto 0); bcd_h: out std_logic_vector(3 downto 0)); end hour24; architecture one of hour24 is signal bcd_l_r: std_logic_vector(3 downto 0); signal bcd_h_r: std_logic_vector(3 downto 0); signal upxs: std_logic; begin process(clk,reset) begin if reset='0' then bcd_l_r<="0000";bcd_h_r<="0000"; upxs<='0'; else if clk'event and clk='1' then if(bcd_h_r="0010" and bcd_l_r="0011") then bcd_h_r<="0000"; bcd_l_r<="0000"; upxs<='1'; else if (bcd_l_r(3 downto 0)="1001") then bcd_l_r(3 downto 0)<="0000"; bcd_h_r(3 downto 0)<=bcd_h_r(3 downto 0)+1; upxs<='0'; else bcd_l_r(3 downto 0)<=bcd_l_r(3 downto 0)+1; upxs<='0'; end if; end if; end if; end if; end process; bcd_l<=bcd_l_r; bcd_h<=bcd_h_r; up<=upxs; end one; 分计时 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity fen60 is port(clk,reset: in std_logic; up: out std_logic; bcd_l: out std_logic_vector(3 downto 0); bcd_h: out std_logic_vector(3 downto 0)); end fen60; architecture one of fen60 is signal bcd_l_r: std_logic_vector(3 downto 0); signal bcd_h_r: std_logic_vector(3 downto 0); signal upxs: std_logic; begin process(clk,reset) begin if reset='0' then bcd_l_r<="0000";bcd_h_r<="0000"; upxs<='0'; else if clk'event and clk='1' then if(bcd_h_r="0101" and bcd_l_r="1001") then bcd_h_r<="0000"; bcd_l_r<="0000"; upxs<='1'; else if (bcd_l_r(3 downto 0)="1001") then bcd_l_r(3 downto 0)<="0000"; bcd_h_r(3 downto 0)<=bcd_h_r(3 downto 0)+1; upxs<='0'; else bcd_l_r(3 downto 0)<=bcd_l_r(3 downto 0)+1; upxs<='0'; end if; end if; end if; end if; end process; bcd_l<=bcd_l_r; bcd_h<=bcd_h_r; up<=upxs; end one; 秒计时 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity miao60 is port(clk,reset: in std_logic; up: out std_logic; bcd_l: out std_logic_vector(3 downto 0); bcd_h: out std_logic_vector(3 downto 0)); end miao60; architecture one of miao60 is signal bcd_l_r: std_logic_vector(3 downto 0); signal bcd_h_r: std_logic_vector(3 downto 0); signal upxs: std_logic; begin process(clk,reset) begin if reset='0' then bcd_l_r<="0000";bcd_h_r<="0000"; upxs<='0'; else if clk'event and clk='1' then if(bcd_h_r="0101" and bcd_l_r="1001") then bcd_h_r<="0000"; bcd_l_r<="0000"; upxs<='1'; else if (bcd_l_r(3 downto 0)="1001") then bcd_l_r(3 downto 0)<="0000"; bcd_h_r(3 downto 0)<=bcd_h_r(3 downto 0)+1; upxs<='0'; else bcd_l_r(3 downto 0)<=bcd_l_r(3 downto 0)+1; upxs<='0'; end if; end if; end if; end if; end process; bcd_l<=bcd_l_r; bcd_h<=bcd_h_r; up<=upxs; end one; LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_Arith.ALL; USE IEEE.STD_LOGIC_Unsigned.ALL;
ENTITY scan_led IS PORT( clk_1k: IN STD_LOGIC; d: IN STD_LOGIC_VECTOR(31 DOWNTO 0); --输入要显示的数据 dig: OUT STD_LOGIC_VECTOR(7 DOWNTO 0); --数码管选择输出引脚 seg: OUT STD_LOGIC_VECTOR(7 DOWNTO 0) --数码管段输出引脚 ); END ENTITY;
ARCHITECTURE one OF scan_led IS SIGNAL seg_r: STD_LOGIC_VECTOR(7 DOWNTO 0); --定义数码管输出寄存器 SIGNAL dig_r: STD_LOGIC_VECTOR(7 DOWNTO 0); --定义数码管选择输出寄存器 SIGNAL disp_dat: STD_LOGIC_VECTOR(3 DOWNTO 0); --定义显示数据寄存器 SIGNAL count: STD_LOGIC_VECTOR(2 DOWNTO 0); --定义计数寄存器 BEGIN dig<=dig_r; seg<=seg_r; PROCESS(clk_1k) BEGIN IF RISING_EDGE(clk_1k) THEN count<=count+1; END IF; END PROCESS;
PROCESS(clk_1k) BEGIN IF RISING_EDGE(clk_1k) THEN CASE count IS WHEN "000"=> disp_dat<=d(31 DOWNTO 28); --第一个数码管 WHEN "001"=> disp_dat<=d(27 DOWNTO 24); --第二个数码管 WHEN "010"=> disp_dat<=d(23 DOWNTO 20); --第三个数码管 WHEN "011"=> disp_dat<=d(19 DOWNTO 16); --第四个数码管 WHEN "100"=> disp_dat<=d(15 DOWNTO 12); --第五个数码管 WHEN "101"=> disp_dat<=d(11 DOWNTO 8); --第六个数码管 WHEN "110"=> disp_dat<=d(7 DOWNTO 4); --第七个数码管 WHEN "111"=> disp_dat<=d(3 DOWNTO 0); --第八个数码管 END CASE;