下载
加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 多功能数字钟电路设计报告+程序+原理图

多功能数字钟电路设计报告+程序+原理图.doc

多功能数字钟电路设计报告+程序+原理图

liang宝熊
2017-10-15 0人阅读 举报 0 0 暂无简介

简介:本文档为《多功能数字钟电路设计报告+程序+原理图doc》,可适用于综合领域

多功能数字钟电路设计报告程序原理图实验设计报告项目名称:多功能数字钟电路设计作者姓名:指导教师:年级专业:所在学院:提交日期摘要世纪末电子技术获得了飞速的发展在其推动下现代电子产品几乎渗透了社会的各个领域有力地推动了社会生产力的发展和社会信息化程度的提高同时也使现代电子产品性能进一步提高产品更新换代的节奏也越来越快。现代生活的人们越来越重视起了时间观念可以说是时间和金钱划上了等号。对于那些对时间把握非常严格和准确的人或事来说时间的不准确会带来非常大的麻烦所以以数码管为显示器的时钟比指针式的时钟表现出了很大的优势。数码管显示的时间简单明了而且读数快、时间准确显示到秒。而机械式的依赖于机械震荡器可能会导致误差。数字钟是采用数字电路实现对“时”、“分”、“秒”数字显示的计时装置。数字钟的精度、稳定度远远超过老式机械钟。在这次设计中我们采用LED数码管显示时、分、秒以小时计时方式根据数码管动态显示原理来进行显示用MHz的晶振产生振荡脉冲定时器计数。在此次设计中电路具有显示时间的其本功能还可以实现对时间的调整。数字钟以其小巧价格低廉走时精度高使用方便功能多便于集成化而受广大消费的喜爱因此得到了广泛的使用。数字钟从原理上讲是一种典型的数字电路其中包括了组合逻辑电路和时序电路。因此我们此次设计与制做数字钟就是为了了解数字钟的原理从而学会制作数字钟而且通过数字钟的制作进一步的了解各种在制作中用到的中小规模集成电路的作用及实用方法。且由于数字钟包括组合逻辑电路和时叙电路。通过它可以进一步学习与掌握各种组合逻辑电路与时序电路的原理与使用方法。目录第一章:设计要求„„„„„„„„„„„„„„„第二章:方案论证„„„„„„„„„„„„„„„第三章:单元电路设计与计算„„„„„„„„„„第四章:软件设计„„„„„„„„„„„„„„„第五章:系统测试„„„„„„„„„„„„„„„第六章:结论„„„„„„„„„„„„„„„„„参考文献„„„„„„„„„„„„„„„„„„„附录„„„„„„„„„„„„„„„„„„„„„第一章:设计要求基本要求时钟功能设计一个具有时、分、秒计时的数字钟电路计时采用小时制。数字钟用位LED数码管显示时、分、秒的计时值。那么显然分、秒对应的两块LED数码管应分别设计为十进制和六进制以组成实际生活中的六十进制要求。而时对应的两块LED数码管则应当合在一起满足二十四进制的要求。准确性要求设计出的时钟电路要确保高精度的要求每天的误差不得超过秒。扩展要求快速校时设计出的电子钟应当具有快速校准时间的功能。要求能够快速的对时和分进行校准。整点报时每当电子钟走到整点时刻时候能够发出特定的声音讯号来进行整点报时。闹铃功能要求能设定起闹时刻响闹时间为min,超过min自动停止具有人工止闹功能止闹后不再重新操作将不再发生起闹。自创功能倒计时要求电路能够切换为倒计时状态倒计时的时间可以自行控制并且能够随时开启计时或者暂停计时。当倒计时为全零时保持不变。此功能不应该对正常的闹钟走时产生影响。二十四小时计时制与十二小时计时制转换要求设计电路能够快速的在二十四小时制和十二小时计时制之间转变并且在十二小时制状态设计一定的区分功能以便于区别是上午还是下午。第二章:方案论证数字钟的基本组成数字钟实际上是一个对标准频率(HZ)进行计数的计数电路其基本组成电路图如下所示:图中秒脉冲发生器产生秒脉冲作为图中各个计数器的脉冲信号。分、秒计数器要求设计为六十进制计数器时计数器则设计为二十四进制计数器。时、分、秒的计时结果分别送入译码器中经译码器翻译后共由六个LED数码管显示出结果。因此使用计数器作为计时电路是可以实现的。本次试验采用的是LS计数器。计数器不论想用计数器连接成多少进制的形式都有两种方案可以进行选择那就是同步连接方式和异步连接方式。同步连接方式同步连接方式就是把所有的计数器的CP端都接上统一的秒脉冲信号通过控制使能端等方法来实现控制进制的方法。由于计数器都带有使能端只有使能时后收到脉冲信号才能进行计时而非使能的时刻即使有脉冲信号也不能计时。因此通过低位信号来控制高位信号使能端的电位高低来决定高位信号是否计时就能够达到扩展技术范围达到预定进制要求的目的。下图分别为同步六十进制和二十四进制计数器的连接图:UAVCCUVCCUBVCCRSTSNLSNPETCCETVCCUCEPVCCVCCRSTCLKSNLSNUAPETCCETQPCEPQPUCCLKQPUBQPSNLSN高位使能QPQPGNDQPSNLSNSNLSANQPSNLSN秒脉冲GNDSNLSANUAUBVCCUVCCVCCRSTSNLSNPESNLSNTCCETVCCU时使能CEPVCCUAVCCRSTCLKUASNLSNPESNLSNTCCETQPCEPQPCLKQPQPQPQPGND时使能QP时使能SNLSANQP秒脉冲GNDSNLSAN异步连接方式而异步连接方式则是将不同的计数器CP端接上不同的脉冲信号通常只有最地位的CP端才会直接加上秒脉冲信号而高位CP端接低位的进位信号作为脉冲信号。此时不论高位还是低位使能端统一接为高电平使能当出现低位的进位信号时高位立即计数一次这样也能够达到拓展计数范围的目的。下面是异步方式连接的六十进制和二十四进制图:VCCUVCCVCCRSTPETCCETVCCUCEPVCC秒脉冲VCCRSTCLKPEUATCCETQPCEPQPCLKQPUBQPQPSNLSN分脉冲QPGNDQPSNLSANQPSNLSNGNDSNLSANUAUBSNLSNSNLSNVCCUVCCUVCCVCCRSTVCCVCCRSTPEPETCCETTCCETCEPUA时脉冲CEPCLKSNLSNCLKQPQPQPUAQPQPSNLSNQPQPQPGNDGNDSNLSANSNLSAN方案比较根据上面的电路图进行初步比较不难发现异步连接方式比同步连接方式连线要简单许多。但是异步连接相当于一种级联上一级的信号变化对下一级的输出信号有很大的依赖性并且很容易受到外接的干扰。也就是说其可靠性则比同步方式差很多。因此出于时钟准确度以及后续功能添加的考虑我决定所有计数器均连接为同步方式。而具体的六十进制和二十四进制的连线方法将在下一章仔细阐述。秒脉冲发生器振荡电路的选择可以产生周期性信号的振荡电路有很多种如RC振荡器、LC振荡器、石英晶体振荡器、集成运放组成的非正弦波发生器、集成门电路构成的非正弦波振荡电路以及利用集成定时器组成的波形发生电路等。但是在实验基本要求中有着要实现每天误差不超过秒这项指标的要求平均到每一秒钟精确度要求大致在次方数量级。这就决定了不能随便使用其他方法的振荡电路而只能使用精度最高的以晶体振荡器作参考的振荡电路。原因是晶振电路的振荡频率几乎与外界电路没有关系而只与晶体本身的形状、密度等状态相关联因此晶振电路能够有效地屏蔽掉外界干扰能够达到实验中对精度的要求。常见的晶体振荡器及低频振荡电路如下图所示:分频电路直接用晶体振荡器合成的电路频率很高没法达到秒脉冲的要求因此还需要分频电路来控制频率。分频电路其实与计数电路的原理几乎完全形同。观察下面的基本计数器的波形图就可以发现计数器的第n位就能够将原本的脉冲波形将为原来的的n次方分之一。这就是分频电路的基本原理。本次试验选择CD作为分频器使用它是一个级二进制计数器配合我们选择的晶振频率最低的晶振电路刚好能够将脉冲波形最终变为Hz此后只需要在可编程逻辑器件中再进行二分之一分频既能够达到电路的要求。基本的分频电路图如下所示:其具体设计方案会在下一章中详细讨论。校时电路作为一个时钟显然应当具有校时的功能。由于时钟电路中采用的是计数器来进行计时那么利用技术其引脚的功能可以选择采用快速脉冲法和置入数据法两种方法来进行时间的调整。(注:其中每一种方法里面同步连接方式和异步连接方式又会有一定的差别由于上面已经确定选择用同步连接方式因此下面都只会讨论同步连接方式中的电路内容。)快速脉冲法快速脉冲法顾名思义就是给时和分的计数器的CP端加上一个快速脉冲。由于设计的时钟电路是用计数器对脉冲计数来表示时间的进展因此如果加上一个比平时快得多的CP脉冲那么就能够让它们以比平时快得多的速度进行计时最终达到时间调整的目的。其基本电路图如下所示:VCC选选择器RVCCkXY分(时)计数器S分(时)使能XPBS置入数据法而置入数据法则是利用计数器本身自带的置数端利用外加的数据拨码盘将预先想调整的时间拨出当计数器的置数端收到相应的信号之后就把预定时间置入电路当中从而一次性改变电路显示的时间也能达到时间调整的目的。其基本电路图如下所示:VCCUURSTVCCRSTVCCPEPERCETTCCETTCkCEPCEP秒脉冲秒脉冲CLKCLKPQPQSPQPQPBPQPQPQPQGNDGNDSNLSANSNLSANSSSWDIPSWDIPR~RR~Rk×k×VCCVCC方案选择上面两种方案可以说各有利弊:置入数据法使得调整时间的过程比较简单和直接做到了用尽可能短的时间来调整但是由于置入数据需要用拨码开关因此要把需要的时间转换为二进制输入而且电路连接也十分复杂。快速脉冲法连接简单并且校时的方法也比较直观通过两个按钮就能直接改变时或者分的数值。缺点是校时过程比较费时没有置入数据法那么直接。权衡利弊最终我选择了快速脉冲法来进行校时。整点报时电路连续五声报时电路连续五声报时电路即希望在整点到来之前能够发出五声的迅响信号在最后一次迅响信号结束的一瞬间即为整点的时刻。用波形图来表示即如下图:由波形图可以看出控制信号的一次脉冲响应应当能够引起报时电路的一些列响应毫无疑问需要用到触发器来实现。当控制信号使得触发器出发后报时信号随着秒脉冲的进行而开始了每秒钟的报时。当声报时结束后达到整点时刻也就是控制信号清零的时刻此时只需要用控制信号一对触发器清零就可以停止报时信号的响应最终达到五声报时的目的其连接电路图如下所示:一声报时电路一声报时电路原理比较简单只需要在整点的前后一秒中发出一次迅响信号即可。只需要将秒向分的进位信号以及分向时的进位信号用一个与门连接在一起就代表了整点的信号。将这个信号作为蜂鸣器的控制信号就可以方便的实现一声报时电路。其基本电路图如下所示:LSVCC单脉冲发生电路蜂鸣器RQ时脉冲CPINCPOUTkCLK秒脉冲方案选择关于整点报时电路的选择并没有特别大的影响其实选择哪种方案对与电子钟的功能都没有什么太大的改变。因此我主要是从实际出发感觉整点报时如果连续响五下的话时间长了必定会让人感到厌倦特别是晚上会影响人的休息。普通的电子表也全都是一次的整点报时。因此最终我选择的是一声整点报时的方案。闹钟电路作为一个多功能的数字钟闹钟应当是一个必备的功能。根据一般闹钟的原理应当能够控制闹钟是开还是关同时要能够准确的设定闹钟的时间闹钟走到这一时刻时会发出持续一分钟的信号时间过后闹钟应当自动停止报时。根据上述的要求首先闹钟应当有一个使能端来控制就是闹钟的总开关。同时应当有一个十六位的拨码开关用来输入想要预定的时间(八位设定时八位设定分)。而在电路内部无疑就要有一个十六位的数值比较器用来检测时间是否走到了预定的时间从而决定是否进行报时。其基本电路如下:数值比较器QALSVCCQAUBA=B蜂鸣器RQkDBSNLSNDB秒脉冲注:图中秒脉冲的作用是使蜂鸣器能够每秒迅响一下而不是一直不停的鸣响这样效果更好不会让人感到厌烦。译码器与显示电路上面已经阐述了计时电路的原理用了六只计数器来实现。但是每只计数器只有四个输出端且输出端的内容是用二进制的形式来代表每一位当前的时间信息。而作为一个数字钟自然希望能够直接方便的使用十进制方式用LED数码管来输出。这当然要考虑计数器与数码管之间的连接。译码器的工作原理所谓译码器就是将一种编码编译成为另一种特定编码的器件。其分类多种多样其中有一种是专门用于显示电路的称为显示译码器其译码结果能够作为LED等显示器件使用使显示器件显示出特定的结果。但是并非所有的显示译码器都能够直接作为显示器件的输入。因为显示器件显然是需要一定的功率驱动的如果译码器本身没有驱动能力虽然输出结果正确但是没办法让显示器件显示出想要的结果这就需要再加上特定的驱动器才能够最终连接显示器显示结果。为了简便起见本次试验使用自带驱动器的LS显示译码器。LS是一种中规模集成译码器电路它的输入是BCD码输出可用于驱动段LED共阳极数码管。其基本的引脚结构如下所示:LED数码显示器LED数码显示器的内外结构如下图所示:上面两图就是共阳极LED显示管的结构图。其内部有段发光二极管它们的公共端接上阳极那么当某一路接上低电平时对应的二极管就能够发光。这就是LED显示管的原理。而共阴极显示管的内部结构基本相同只是方向变变而已。动态显示法所谓动态显示法其实是一种利用人的视觉暂留效果进行轮流显示的一种显示方法。在整个电路中虽然有六个计数器以及分别与之对应的六个LED显示管但是只使用一个LS显示译码器进行译码。其基本思想就是用一个数据选择器轮流选择相应的计数器结果送入译码器译码然后再将译码结果送入相应的LED显示管显示不停地循环。当循环次数足够快时由于人眼的视觉暂留效果就能使得六位结果清晰地显示出来。其基本电路图如下所示:VCCRkENLEDQaAbAcdeVCCf显示扫描电路gDPQQVCCUVCCRkVCCQQBSENBIRBOVCCQQRBIQQLEDQLTRaaAQAbbAQAccQAddQAeeffQQYENGNDggQQYENRDPQQSNLSNVCCQQBSYENCPCPVCCRkENLEDQaAbAcdefgDPVCCBS静态显示法所谓静态显示法就是每一个计数器后面连接一个LS显示译码器此后再连接一个LED显示译码管。这种连接方法应当不用多做解释是最基本的连接方法。电路图如下所示:VCCUVCCBIRBOVCCRBILEDVCCLTRaaAQAbbAQAccQAddQAeeffGNDggRDPSNLSNVCCBSVCCUVCCBIRBOVCCRBILEDVCCLTRaaAQAbbAQAccQAddQAeeffGNDggRDPSNLSNVCCBS方案比较这两种方法也是各有利弊。动态法的内部连接更加复杂但是大量节约了外部零件有利于节约成本。静态法则耗费了外部零件使得电路简单易懂。另一方面在使用寿命上由于动态法采取了频闪的方法因此不论是译码器还是LED显示管的使用寿命都会大幅度削减因此我最终选择了使用静态显示电路。二十四小时制与十二小时制的转换这个功能实现起来其实比较容易在转变过程中只有小时的位数据可能会生一定的改变而分钟和秒钟则完全不需要变化。因此关于这个功能的实现方法基本的设计思路就是首先判断小时的八位数据化为十进制是否超过当超过时就要减去然后再次输出。但是考虑到前面的电路我都是用电路图连接方式搭成的因此虽然原理上简单但实际上想直接减去这个并不是那么容易。中间需要将八位独立的数据转化为进制减去后还要再次化为个独立数据。因此不如直接画卡诺图来进行逻辑运算。当确定了各个位的逻辑关系之后用Quartus中的Blocktool功能画出一个电路设置输入端和输出端口后用VHDL语言来实现。具体方法见下一章。倒计时电路倒计时功能首先需要的是一个置数端需要使用者能够方便的将想要的倒计时时间输入到电路当中。为了节省元器件我将闹钟电路中的位拨码开关共用同样也可以作为倒计时的数据输入端。同时倒计时一般比较精确因此这位拨码开关用来控制分钟、和秒钟的输入也就是说最大的倒计时间为分秒。其次要考虑的是如何在倒计时的过程中不影响正常的数字钟计时并且只有一个LED数码管显示屏要求能够在正常显示时间和倒计时之间切换。我的做法是在最终数据输出之前加一个数据选择器能够通过控制开关对正常走时的输出端和倒计时的输出端进行选择这样及解决了二者互不影响的问题同时能够方便的进行切换。至于数据选择器显然需要在很多的位之间进行选择用市场上通用的原件肯定要用很多块拼接才能够实现因此不如使用Blocktool功能自己用语言来编写。最后就是关于倒计时模块的主体部分可逆计数器。由于市场上的倒计时计数器使用起来已经很方便因此就不必自己来编写了。我选择的是集成可逆计数器LS其电路图及功能表如下图所示:与加法计数器的不同在于加法计数器在遇到进位时刻可以通过清零方式来进行处理但是加法计数器显然是不行的只能通过置数端来进行。也就是说除了刚开始时候由用户控制置入初始数据之外还需要连线使得作为秒钟的减法计数器在到达全的时候令分钟位减一同时其自身能够自动置数为秒。我设计的实现方案是:首先在用户置数阶段会一个专门的按钮来开启位拨动开关的置数。而用户置数阶段过后此按钮弹起将位拨动开关锁住不论其值是什么到达减法计数器的时候都为电路如下所示:图中x即为控制端此后就可以在减法计数器减为的时候更改特定的几位数据使之成为同时开启置数状态即可。因此一个进制减法计数器电路应如下图:第三章:单元电路设计与计算计数器电路前面已经分析时钟电路需要使用计数器连接为两个六十进制和一个二十四进制电路。因此下面分别对于两种电路的连接方案进行分析。六十进制计数器由于实验中所用的计数器LS的最大计数范围是进制两片计数器合在一起最大计数范围是因此不论是六十进制还是二十四进制都需要用两片LS才能满足要求。对于六十进制计数器同时要求LED数码管能够准确的显示从到的数据那么显然两片LS低位那一片应当连接成十进制计数高位那一片应当连接成六进制计数。低位的九进制计数可以采用清零法来实现。由于是同步清零方式因此在计数器输出时就要做好清零的准备当下一个脉冲上升沿到来的时候使得计数器清零就能够实现从到的十进制计数。因此连接好的电路图应如下所示:同理对于高位的六进制需要在出现的前一时刻准备好清零即可。但是要注意的是因为采用的是同步连接方式因此倘若像之前那样直接在时刻做好清零准备那么计时器计时到的瞬间就会发生高位清零这样显然是错误的结果。正确的方法应当是高位和地位同时对高位清零端进行控制在电路计数到的瞬间做好清零准备此后再收到一个秒脉冲同时发生高位和低位的清零就能够达到想要的结果了。因此六十进制计数器电路图如下:UAVCCUVCCUBVCCRSTSNLSNPETCCETVCCUCEPVCCVCCRSTCLKSNLSNUAPETCCETQPCEPQPUCCLKQPUBQPSNLSN高位使能QPQPGNDQPSNLSNSNLSANQPSNLSN秒脉冲GNDSNLSAN上图的电路是秒计时的六十进制计数器连接而分计数的计时器由于每一次变化都相当于扩大了六十倍因此除了上述基本的连线之外使能端都要加上秒计数器的进位信号进行控制。原本直接接电源的直接接上秒计数器进位信号原本就是由信号控制的应添加与门与秒计数器进位信号相与才能达到扩大六十倍的效果。六十进制计数器的连接和仿真结果如下图所示:二十四进制计数器其基本原理同六十进制计数器基本相同也都是采用清零法来实现的。唯一不同的是由于显示时间的需要因此二十四小时计数器不能采用整循环来计数低位仍然需要采用十进制计数高位前两次循环可以进行到底但当第三次循环即高位为二时低位计数到三就要发生整体的清零因此接线会更复杂一点。首先将低位仍然连接成十进制的形式同时根据六十进制计数器里面的分析过程当高位和低位达到时并且分、秒计数器都达到的一瞬间高位和低位都要做好清零的准备。因此不仅要将分计数器的进位信号引入并且低位的十进制计数器也需要做出一点改变将清零端的非门改变成或非门来应对两种清零状态的需要。其最终的连接电路图如下:UAUBVCCUVCCVCCRSTSNLSNPESNLSNTCCETVCCU时使能CEPVCCUAVCCRSTCLKUASNLSNPESNLSNTCCETQPCEPQPCLKQPQPQPQPGND时使能QP时使能SNLSANQP秒脉冲GNDSNLSAN注:其中的秒脉冲信号与前面的分、秒计数器都采用相同的脉冲信号而时使能端则是分计数器提供的进位信号。二十四进制电路的连接以及仿真结果如下图所示:校时电路在上一章里面我已经确定了要选择快速脉冲法来进行电路的校时。同时为了方便起见我希望能有两个按钮开关来分别控制时和分计数器能够使它们分别快速校时。又根据前面的电路连接情况不难发现在同步连接方式下让高位计数器计数缓慢的原因在于其使能端是否处于使能状态。倘若使能端总是处于使能状态那么高位的计数器也能够像低位计数器一样每一秒都会发生计数。从这个角度出发不难想出首先让按钮开关按下时能够产生一个高电位然后用连线将按钮开关与原本时和分计数器的是能控制端用一个或门连接起来。这样既不会影响到原本的计数器技术状态又能够在按下开关的时候快速的调整时间。整点报时上一章中已经决定使用一次迅响信号来进行报时报时电路的设计也非常简便只需要确定整点到来的那一个瞬间就好了。关于整点到来的位置确定最简便的方法就是利用计时电路中的进位端。由于是同步连接方式每当到达秒那一刻时秒计数器就会产生向分计数器的高电平进位信号而到达分时分计数器也会产生向时计数器的高电平进位信号。因此将秒和分的进位信号用一个与门连接起来其合成信号就是每一个小时的分秒即为整点时刻可以控制蜂鸣器进行整点报时。其整点报时的响时结果仿真如下:闹钟电路根据前面提到的闹钟持续一分钟的报时要求可以知道每次设定闹钟只需要设定时和分的时间当到达这一特定分钟时进行报时。因此首先需要的是一个十六位的拨码开关用来输入小时和分钟的时间到数字钟走时达此时间时就会开启闹钟响时。因此根据原理判断肯定需要一个三十二位的数值比较器来判断到底走时时间是否与闹钟设定时间相同。因为实际的数值比较器的位数都不能够达到如此之高因此我就自己画了一个数值比较器其图如下所示:关于这个数值比较器内部的程序书写我将在下一章里面详细解释。其功能就是用A到A口接收时钟电路的小时和分钟数位用B到B接收拨动开关提供的闹钟数位信息。当这两组信息按位相比较完全相同时输出端Z为高电平控制蜂鸣器响时。仿真结果如同下图所示:倒计时电路主体计数部分在上一章里面我已经对倒计时电路的实现方法做了详细的说明这一章里就着重分析一下电路的具体链接。由于我所用到的LS本身就是一个十进制可逆计数器也就是说在没有其他干扰的情况下计数就能够实现十进制。因此倒计时的秒钟和分钟的个位都无需什么特别的连接只需要让它正常倒计时即可。而十位方面则需要将原本的十进制改变为六进制。观察LS的功能表可以发现它是一个异步置数的逻辑器件因此需要在电路由变成的一瞬间发生置数使之变成即可。同时我前面也已经提到我已经用了一些列与门将拨码开关的置数端锁住因此中途产生置数状态时不加干涉的数位会自动清零。那么我只需要把第一位和第三位设置为就能够达到所需的结果了。连接好的六进制减法计数器如下图所示:把上面的电路图作为高位再把另一片LS作为地位并且将低位的借位输出端BO(BO=QQQQCP)连接到高位的CP作为使能端的控制就能够最终实现啊进制DU的减法计数器了。并且当四片计数器倒计时都达到时应当使CP由原来的时钟脉冲D变成高电平这样就能够使计数器保持不变不至于再次从变成分秒的状态。最终电路图及仿真结果如下所示:切换LED显示器由于只有一块LED显示器因此显然不能够同时显示倒计时和正常的数字钟计数因此还需要一个显示器切换模块。其工作原理就是一个数据选择器输入端包括正常数字钟的位数据和倒计时的位数据还要有几个控制端作为用户选择。而其输出端则就是位数据输出这位数据作为最终输出数据送到LED显示器上使其做出相应的显示。如此庞大的一个数据选择器用标准逻辑器件肯定是不容易实现的因此我采用Blocktool功能绘制一个数据选择器如下图所示:至于其内部的程序编写则十分的简单。只需要判断当正常走时控制端为高电平时输出数据选择计时电路的输入数据当倒计时控制端为高电平时输出数据选择倒计时电路的输入数据即可。具体程序在下一章列出。十二进制计时与二十四进制计时的转换前面已经分析了对于我这样连电路图的方法想要达成十二进制计时与二十四进制计时的转变需要画出卡诺图按位来进行转变因此先要画卡诺图。首先当小时的高位为时小时的第四位应发生如下变换:变换控变换前变换后制端HHHHHHHH不难发现H在变换后始终为因此只需做出,,,的卡诺图即可。做卡诺图如下:如果前面已经有了前提条件即是在小时高位为且变换控制端为的前提下那么图中空白处都是无关项不会造成影响。由卡诺图不难得出:H=HH*HH=HH*HH=H。在程序中写出此变换即可只要别忘记要将高位的H从变为即可。而当小时的高位为时低位只有、、、四种情况分别变换为、、、同时小时的高位在前两种情况应变为后两种情况变为即可十分简单。具体程序将在下一章里书写。同时为了不再继续增加前面编写的数据选择器的位数我决定将这个程序直接写在数据选择器的模块里面成为一个多功能的选择器。LED显示电路前面已经详细分析了LED显示器的工作原理在这里我就只说明一下关于电阻大小的计算。由于内部发光器件为放光二极管因此控制流经放光二极管中的电流大小是一件很重要的事情如果电流太小那么放光二极管可能亮度过低不容易分辨电流过大则容易将其烧坏。我在网上查找到LED数码管点亮时的电流应在A左右。同时当点亮时由于输出高电平在V左右减去数码管分到的电压(约为V)再除以电流大小最终应当串联的电阻大小为Ω左右。因此最终焊接的LED数码显示管如下图所示:第四章:软件设计数值比较器电路前面已经提到在闹钟电路中需要用到一个位数值比较器以便于确定到底什么时候应该响时用BlockTool画出的电路图就如下所示:程序流程图如下所示:按位判断位输入数据是否分别相再再次次同判判是否断断Z输出为高Z输出为低电电平平其内部程序为:ENTITYalarmISPORT(A:INSTDLOGICA:INSTDLOGICA:INSTDLOGICA:INSTDLOGICA:INSTDLOGICA:INSTDLOGICA:INSTDLOGICA:INSTDLOGICA:INSTDLOGICA:INSTDLOGICA:INSTDLOGICA:INSTDLOGICA:INSTDLOGICA:INSTDLOGICB:INSTDLOGICB:INSTDLOGICB:INSTDLOGICB:INSTDLOGICB:INSTDLOGICB:INSTDLOGICB:INSTDLOGICB:INSTDLOGICB:INSTDLOGICB:INSTDLOGICB:INSTDLOGICB:INSTDLOGICB:INSTDLOGICB:INSTDLOGICCAN:INSTDLOGICZ:OUTSTDLOGIC)ENDalarmArchitectureBodyARCHITECTUREalarmarchitectureOFalarmISBEGINPROCESS(CAN,A,A,A,A,A,A,A,A,A,A,A,A,A,A,B,B,B,B,B,B,B,B,B,B,B,B,B,B)BEGINIF(CAN='')THENZ<=(AXNORB)AND(AXNORB)AND(AXNORB)AND(AXNORB)AND(AXNORB)AND(AXNORB)AND(AXNORB)AND(AXNORB)AND(AXNORB)AND(AXNORB)AND(AXNORB)AND(AXNORB)AND(AXNORB)AND(AXNORB)ELSEZ<=''ENDIFENDPROCESSENDalarmarchitecture这个程序比较简单因此只作简单说明。首先可以发现在process中的敏感信号列表中罗列出了很多的信号。这是因为刚开始的时候我只将使能端CAN设置为敏感信号但是在编译过程中出现了很多很多的warning警告我说我对输入端口的数据进行了操作但是这些端口没有在敏感信号列表当中于是我将其添加进去就解决了问题。而程序的主体部分只是将A与B的所有对应位进行异或操作同时输出端是所有这些异或结果的与。这样只要有一位数据不对应那么Z输出端输出就为闹钟不会响。只有全部相同时输出才为。而CAN是闹钟的开关上述功能是在CAN为高电平时才能工作若CAN为低电平则闹钟永远不会响。至于CAN的控制端将在下一个模块中提到。数据选择器前面已经提到这个数据选择器已经经过了我的改造使得它成为了整个电路的显示控制模块通过控制两个总的控制开关可以控制数字钟显示正常的走时、倒计时、十二进制与二十四进制转换以及闹钟的功能之间的转变。其基本的流程图如下所示:根据两个总控制端的信息进行四选一twelve=twelve=twelve=twelve=CHAN=CHAN=CHAN=CHAN=显示倒计时。直显示闹钟调整。显示正常走时结采用进制计时接输出倒计时电直接输出位拨果。直接输出走显示。对正常走时路中的位结码开关的结果时电路的位数数据结果进行预果小时的位秒钟位输出始据。并控制按钮定的处理然后再输出始终为零。终为零。并控制开关A和B为快输出并控制按钮并控制按钮开关按钮开关A为闹速校时功能。开关A和B为快,和,为置数和钟的总开关速校时功能倒计时控制功能下面先列出它的引脚然后我会分模块对它的功能进行分析。LIBRARYieeeUSEieeestdlogicallENTITYchoiceIS{{ALTERAIOBEGIN}}DONOTREMOVETHISLINE!PORT(A:INSTDLOGICA:INSTDLOGICA:INSTDLOGICA:INSTDLOGICA:INSTDLOGICA:INSTDLOGICA:INSTDLOGICA:INSTDLOGICA:INSTDLOGICA:INSTDLOGICA:INSTDLOGICA:INSTDLOGICA:INSTDLOGICA:INSTDLOGICA:INSTDLOGICA:INSTDLOGICA:INSTDLOGICA:INSTDLOGICA:INSTDLOGICA:INSTDLOGICA:INSTDLOGICA:INSTDLOGICA:INSTDLOGICA:INSTDLOGICB:INSTDLOGICB:INSTDLOGICB:INSTDLOGICB:INSTDLOGICB:INSTDLOGICB:INSTDLOGICB:INSTDLOGICB:INSTDLOGICB:INSTDLOGICB:INSTDLOGICB:INSTDLOGICB:INSTDLOGICB:INSTDLOGICB:INSTDLOGICD:INSTDLOGICD:INSTDLOGICD:INSTDLOGICD:INSTDLOGICD:INSTDLOGICD:INSTDLOGICD:INSTDLOGICD:INSTDLOGICD:INSTDLOGICD:INSTDLOGICD:INSTDLOGICD:INSTDLOGICD:INSTDLOGICD:INSTDLOGICD:INSTDLOGICD:INSTDLOGICCHAN:INSTDLOGICtwelve:INSTDLOGICPUSHA:INSTDLOGICPUSHB:INSTDLOGICS:OUTSTDLOGICS:OUTSTDLOGICS:OUTSTDLOGICS:OUTSTDLOGICS:OUTSTDLOGICS:OUTSTDLOGICS:OUTSTDLOGICS:OUTSTDLOGICM:OUTSTDLOGICM:OUTSTDLOGICM:OUTSTDLOGICM:OUTSTDLOGICM:OUTSTDLOGICM:OUTSTDLOGICM:OUTSTDLOGICM:OUTSTDLOGICH:OUTSTDLOGICH:OUTSTDLOGICH:OUTSTDLOGICH:OUTSTDLOGICH:OUTSTDLOGICH:OUTSTDLOGICH:OUTSTDLOGICH:OUTSTDLOGICSETMINUTES:OUTSTDLOGICSETHOURS:OUTSTDLOGICOPENALARM:OUTSTDLOGICADVICE:OUTSTDLOGICDOWNIN:OUTSTDLOGICDOWNCAN:OUTSTDLOGIC)ENDchoiceArchitectureBodyARCHITECTUREchoicearchitectureOFchoiceISSIGNALa:STDLOGICSIGNALb:STDLOGICSIGNALc:STDLOGICBEGINPROCESS(CHAN,twelve,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,PUSHA,PUSHB,B,B,B,B,B,B,B,B,B,B,B,B,B,B,a,b,c)BEGIN这里面A到A这位数据是正常时钟的位数据输入端D到D这位数据是倒计时电路的位数据输入端B到B是拨码开关的其中位还有两位我作为了功能开关分别对应CHAN与twelveS到SM到MH到H是最终输出到LED显示器的位数据PUSHA与PUSHB则是两个按钮开关同样也属于控制开关SETMINUTES与SETHOURS是内部控制端控制是否快速校时。下面分模块对程序进行分析显示倒计时其基本流程如下图所示:倒计时模块小时位清零分钟和秒钟直接输出倒计时电路中的个输出结果如果按钮B为高如果按钮B始终为电平低电平发出置数信号产无操作生一次置数当接收到按钮A一次正跳变开始倒计时再次接收会暂停当倒计时到分秒保持不变程序如下:IF(CHAN=''ANDtwelve='')THEN当CHAN=twelve=开启倒计时ADVICE<=''S<=D此时显示器最高两位输出都为其他几S<=D位则分别输出倒计时计数器的位数据S<=DS<=DS<=DS<=DS<=DS<=DM<=DM<=DM<=DM<=DM<=DM<=DM<=DM<=DH<=''H<=''H<=''H<=''H<=''H<=''H<=''H<=''IF(PUSHB='')THEN用PUSHB作为用户的置数控制端当按下DOWNIN<=''PUSHB时就会发生置数操作ELSEDOWNIN<=''ENDIFIF(PUSHA'eventANDPUSHA='')THEN用PUSHA作为倒计时开始与暂停的控制端IF(c='')THENc<=''ELSEc<=''ENDIFENDIFIF(c='')THEN当倒计时结束都为时保持状态不DOWNCAN<=''变ELSIF(D=''ANDD=''ANDD=''ANDD=''ANDD=''ANDD=''ANDD=''ANDD=''ANDD=''ANDD=''ANDD=''ANDD=''ANDD=''ANDD=''ANDD=''ANDD='')THENDOWNCAN<=''ELSEDOWNCAN<=''ENDIF由于倒计时的主体部分已经在外边连接完毕在这个控制模块中仅仅用于控制其显示以及开始和暂停。因此这一部分的程序是比较简单的。十二进制计时与二十四进制计时转变其基本流程图如下所示:小时计时制制分钟和秒钟直接输出计时电路的结果其他如果小时的高位如果小时的高为且地位位为大于无需转换直按计算好的转换按计算好的方接输出小时位结果进行转换式转换的所有数据程序如下:ELSIF(twelve=''ANDCHAN='')THEN当twelve=CHAN=时切换到S<=A此模块S<=AS<=AS<=A首先秒钟和分钟都不需要变化因此S<=A输出都为原时钟计数器直接输出S<=AS<=AS<=AM<=AM<=AM<=AM<=AM<=AM<=AM<=AM<=AIF(A='')THEN根据上一章计算的卡诺图进行变换IF((A='')OR((A='')AND(A=''))OR((A='')AND(A='')))THENH<=''H<=''IF((A='')OR((A='')AND(A='')))THENH<=''ELSEH<=''ENDIFIF((A='')OR((A='')AND(A='')))THENH<=''ELSEH<=''ENDIFIF(A='')THENH<=''ELSEH<=''ENDIFIF(为了区分上午和下午我让时钟在进制计时状态下在下午时刻每到半点也会发出一声的报时信号。A=''ANDA=''ANDA=''ANDA=''ANDA=''ANDA=''ANDA=''ANDA=''ANDA=''ANDA=''ANDA=''ANDA=''ANDA=''ANDA=''ANDA=''ANDA='')THENADVICE<=''ELSEADVICE<=''ENDIFELSEH<=AH<=AH<=AH<=AH<=AH<=AH<=AH<=AENDIFELSIF(A='')THENH<=''IF((A='')AND(A='')AND(A=''))THENH<=''H<=''H<=''H<=''H<=AELSEH<=''H<=''H<=''H<=''H<=AENDIFIF(A=''ANDA=''ANDA=''ANDA=''ANDA=''ANDA=''ANDA=''ANDA=''ANDA=''ANDA=''ANDA=''ANDA=''ANDA=''ANDA=''ANDA=''ANDA='')THENADVICE<=''ELSEADVICE<=''ENDIFELSEH<=AH<=AH<=AH<=AH<=AH<=AH<=AH<=AENDIFIF(PUSHB='')THEN这是快速校时的控制当PUSHB=SETMINUTES<=''时能够快速对分钟校时ELSESETMINUTES<=''ENDIFIF(PUSHA='')THEN当PUSHA=时能对小时快速校时SETHOURS<=''ELSESETHOURS<=''ENDIF由于要对各个位分别进行逻辑运算因此程序十分复杂。在小时计时制用校时电路对小时进行快速校时得到的结果如下图所示:闹钟电路控制其基本流程图如下所示:显示闹钟秒钟输出全为分钟和小时直接输出位拨码开关结果检测到到一个按钮A正向跳变闹钟使能端设定为开并在A为高电平期间开启蜂鸣器响声如果再次检测到如果再次检测到A的正向跳变A的正向跳变闹钟使能端设定为关并在A为高电平期间关闭蜂鸣器响声程序如下所示:ELSIF(twelve=''ANDCHAN='')THEN当twelve和CHAN同时为时开启S<=''对闹钟的控制S<=''S<=''秒钟全部清零小时和分钟显示拨S<=''码开关的数值S<=''S<=''S<=''S<=''M<=BM<=BM<=BM<=BM<=BM<=BM<=BM<=BH<=BH<=BH<=BH<=BH<=BH<=BH<=''H<=''IF(PUSHA'eventANDPUSHA='')THEN用PUSHA来控制闹钟的总开关上IF(a='')THEN升沿有效a<=''ELSEa<=''ENDIFENDIFIF(a=''ANDPUSHA='')THEN当闹钟处于开启状态时长按PUSHAb<=''蜂鸣器会发声作为提醒。若闹钟关闭ELSE长按PUSHA蜂鸣器不会响b<=''ENDIFIF(a=''ANDb=''ANDPUSHA='')THENADVICE<=''ELSEADVICE<=''ENDIFIF(a='')THENOPENALARM<=''ELSEOPENALARM<=''ENDIF由于闹钟的主体电路在别处(前面已经详细讲解)因此此处也仅仅作为控制端程序也较简单。正常的时钟显示ELSE剩下一种情况用于显示正常走时ADVICE<=''S<=AS<=AS<=AS<=AS<=AS<=AS<=AS<=AM<=AM<=AM<=AM<=AM<=AM<=AM<=AM<=AH<=AH<=AH<=AH<=AH<=AH<=AH<=AH<=AIF(PUSHB='')THEN同样应当有校时的控制程序SETMINUTES<=''ELSESETMINUTES<=''ENDIFIF(PUSHA='')THENSETHOURS<=''ELSESETHOURS<=''ENDIFENDIFENDPROCESSENDchoicearchitecture这里基本不用做过多的解释只是完全输出计时电路的输出而已同时加上前面已经提到过的校时控制即可。二分频电路在设计秒脉冲电路的时候已经提到能够实现的频率最小的脉冲信号为Hz因此还需要在电路中设计一个虚拟的二分频电路。如下图:CP信号输入后先通过这个二分频电路最终可以得到Hz的信号。这个二分频电路里面的程序如下:LIBRARYieeeUSEieeestdlogicallENTITYftoISPORT(CP:INSTDLOGICCP:OUTSTDLOGIC)ENDftoARCHITECTUREftoarchitectureOFftoISSIGNALa:STDLOGIC为了方便描述定义一个内部信号aBEGINPROCESS(CP,a)BEGINIF(CP'eventANDCP='')THEN每一个输入CP的上升沿使IF(a='')THEN输出的信号波形翻转a<=''ELSEa<=''ENDIFCP<=aENDIFENDPROCESSENDftoarchitecture得到的结果如下图所示:第五章:系统测试在平常的实验室环境下对电路加上V的电压按照电路的各项功能进行下列测试。测试的顺序为控制电路的个总的控制端可以调整电路显示出种不同的状态(正常走时、小时制计时、倒计时、闹钟)按照顺序依次测试每个状态中的所有的功能。测试步骤和测试结果如下所示:测试内容测试结果编号测试内容一正常走时电路接上电源后电路接上电源的一瞬间时钟自动从时点分开始启动情况启动并能够按照每秒钟秒位加一的方式计时。启动正常。各个位的进位情经过观察发现秒钟低位每次计时到后下一秒况清零同时高位自动加一。当秒钟走时到时下一秒自动清为全同时会让分钟低位加一。分钟情况与秒钟相同。小时两位也都能够满足小时的要求时钟从小时分秒会自动变为全。因此各位进位都正常。快速校时功能在任一时刻长按按钮A就能够让小时位以每秒加一的速度进行校时长按按钮B能够让分钟位以每秒加一的速度进行校时。功能正常。整点报时功能将时钟调整到任意小时的分当秒钟也走到秒得时候会发出一声迅响信号。功能正常。二小时计时制观察走时是否正在电路进行小时计时制和小时计时制切换的常时候只有小时位会按照正确的方式变化分钟和秒钟位都没有受到任何影响功能正常。快速校时功能在小时计时制的状况下任意时刻长按按钮A或B也都能够得到与之前相同的快速校时功能正常。区分上午和下午当小时制显示为上午(点到点之间)时切换到小时制当时钟走时到半点时没有任何特殊情形发生。但当走时到下午时每到半点数字钟会发出一声迅响信号作为区分。功能正常。三倒计时电路置数的准确性调整拨码盘的拨码开关按下按钮BLED显示器上能够正确的显示出对应的分钟和秒钟而小时端显示全部为。由于拨码开关的最高两位被我用作总的功能按钮使用因此最大的置入数据为分秒。功能正常。开始和暂停倒计在进行置数后的任一时刻按下按钮A会开始正确时的倒计时。而在此按下按钮A倒计时可以暂停。倒计时的结束状不论从何时开始倒计时当倒计时计到全的时候态电路会保持不变。正常。对于正常走时电在倒计时的任意时刻切换回原来的走时电路发路的影响现走时电路没有收到任何干扰仍旧按照原本的走时规则进行走时。正确。四闹钟定时的显示在闹钟状态下显示器的小时位和分钟位时钟都会显示此时拨码开关所拨出的时间而秒钟位则显示为功能正常。闹钟的开关控制在闹钟状态下长按按钮A如果蜂鸣器发出响声表示闹钟为开此时当时钟走到预定时间时会产生报时如果长按按钮A没有警告声音则表示闹钟为关不会响时。但是由于按钮会产生抖动因此有时候想调整为开但是按钮抖动又会使其关闭。因此闹钟的开关控制功能不够理想。闹钟的响时在没有干扰的情况下闹钟到达预定时间会发出持续分钟的报警信号。同时在响时的任意时刻通过上述方法按按钮A也能够将其关闭。功能正常。五走时精度测量将振荡电路产生的方波信号直接接到示波器进行测量得到的结果为Hz证明其准确度至少在的负次方数量级达到了预定的要求第六章:结论最终设计出的数字钟电路经过测试具备了走时、快速校时、闹钟、整点报时、进制计时与进制计时转换、倒计时的功能。各项功能都可以由功能按钮来进行调整在不同的显示状态下相同的按钮会有不同的功能大大节省了元器件的使用量。各个功能之间也没有冲突和影响特别是对于闹钟的走时不会造成任何干扰最大限度保证了其走时的精确度。并且数字钟的精准度也达到了标准产生的振荡波形为准确的Hz。因此可以说这个多功能数字钟的最终成果是令人满意的。存在的不足之处有:快速校时的速度不够令人满意应当接上频率更高的方波从而做到真正的快速校时。没有整点报时功能的开关控制端。倒计时结束时虽然能够控制其保持全零状态不变但是没有更加有力的提醒措施最好能够再加上蜂鸣器报警等有力措施。以上是有待改进的方向。参考文献【】《电子技术综合实践》浙江大学电工电子基础实验教学中心阮秉涛樊伟敏【】《集成电子技术基础教程(下册)》高等教育出版社王小海阮秉涛【】《基于Quartus的FPGACPLD设计》电子工业出版社【】《EDA技术基础》湖南大学出版社【】《EDA技术及应用》清华大学出版社朱正伟【】《EDA技术及可编程器件应用实训》科学出版社沈明山【】《电子技术与课程设计》电子科技出版社高吉祥【】《电子技术基础数字部分(第四版)》高等教育出版社康华光附录元器件清单STALEDDISPRJPCB(静态显示板):品名型号参数数量备注独石电容uF独石电容uF电解电容uF电阻共阳数码管LGBSR用DIP插座插座DIP双排针×显示译码驱动器LS用DIP插座插座DIP连接线芯连接线芯线路板StaLedDisScanLedDisPRJPCB(动态显示板):品名型号参数数量备注独石电容uF电解电容uF电阻电阻k三极管共阳数码管LGBSR用DIP插座插座DIP单排针×显示译码驱动器LS用DIP插座插座DIP连接线芯连接线芯线路板ScanLedDisCPLDAPRJPCB(CPLDA板):品名型号参数数量备注CPLD板CPLDA成品秒脉冲电路:品名型号参数数量备注独石电容uF瓷片电容pF电阻M电阻k晶振k计数器CD用DIP插座插座DIP迅响电路:品名型号参数数量备注电阻k三极管蜂鸣器V校时与闹铃电路:品名型号参数数量备注电阻k按钮××排阻k×拨动开关DIP位用DIP插座插座DIP单排针×连接线芯实验板:品名型号参数数量备注实验板SiYanBanA单排针×单排座×导线×自取焊锡丝电路图图纸:最终成品图:使用说明电路中共有两个按钮开关记为A、B两个功能拨动开关记为a、b还有个拨动开关作为置数使用。功能如下:拨动开关a拨动开关b电路状态按钮A功能按钮B功能指数开关关关正常显示时对小时快速对分钟快速无用间小时校时校时计时制开关倒计时开始或者暂置入初始倒设定初始倒停倒计时计时数据计时的分钟和秒钟关开显示小时对小时快速对分钟快速无用计时制校时校时开开闹钟设定闹钟的无用设定闹钟的总开关小时和分钟位

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/58

多功能数字钟电路设计报告+程序+原理图

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利