数字电路课程设计-花样报时数字钟.doc_第1页
数字电路课程设计-花样报时数字钟.doc_第2页
数字电路课程设计-花样报时数字钟.doc_第3页
数字电路课程设计-花样报时数字钟.doc_第4页
数字电路课程设计-花样报时数字钟.doc_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

赣南师院物理与电子信息学院课程设计报告书姓名:熊可捷 班级:电子科学与技术06级 学号:060803044 时间:2008年12月25日 论文题目花样报时数字钟课程论文要 求设计一数字钟,实现以下功能:1具有时、分、秒计数显示功能,以24小时循环计时;2具有校时功能,可以分别对时及分进行单独校时,使其校正到标准时间,并能对计时清零;3具有仿广播电台整点报时的功能,整点报时的同时led灯花样显示。一、 系统方案选择和论证1、数字钟系统方案选择和论证本设计的总体组成框图如图1所示:数字钟电路系统由主体电路和拓展电路两大部分组成。其中,主体电路完成数字钟的基本功能,拓展电路完成电路的拓展功能。该系统的工作原理是:震荡器产生的稳定高频脉冲信号,完成数字钟的时间基准,再经分频器输出标准秒脉冲。秒计数器计满60后向分计数器进位,分计数器计满60后向小时计数进位,小时计数器按“12翻1”规律计数。计数器的输出经译码器送显示器。计时出现误差时可以用校时电路进行校时、校分、校秒。拓展电路必须在主体电路正常运行的情况下才能进行功能拓展。采用译码器接到分计数器和秒计数器相应的输出端,使计数器运行到差十秒整点报时,利用分频器输出的500hz和1000hz的信号加到音响电路中,用于模仿电台报时:每当数字钟计时快要正点时发出声响,按照4低音一高音的顺序发出间断声响,以最后一声高音的时刻为正点时刻。led灯也依次轮流显示。在eda实验室可以直接通过实验箱上的频率脉冲给该电路图添加所需要的频率,而不需要我们自己设计。下面通过硬件中数字钟所需要的频率来设计电路。实验中需要的是1hz的脉冲,通过该脉冲使数字钟达到秒信号所需要的频率设计过程振荡器分频器校时电路时计数器分计数器秒计数器led灯花样显示扫描选位信号译码驱动电路时钟显示整点报时图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和q3 q2 q1组成五进制计数器。若将q0和cp1相连接,时钟脉冲从cp0输入,则构成十进制计数器,74ls90有两个清零端ro(1),ro(2)和两个置9端r9(1),r9(2),它的功能表和管脚示意图如表1所示。ro(1)ro(2)r9(1)r9(2)q3q2q1q0110*000011*00000*111001*0*0计数0*0*0*0*00*表1 74ls90功能表原理图如图3所示,仿真波形如图4所示 图3分频器原理图仿真图如图4:图4分频器仿真图1.3校时电路的设计方案当数字钟接通电源或者计时出现误差时,需要校正时间。校时是数字钟应具备的基本功能。这里只进行分和小时校时。对校时电路的要求是,在小时校正时不影响分和秒的正常计数;在分校正时不影响秒和小时的正常计数。通过门电路实现对进位和校时信号的选择,用rs触发器做开关,可以通过控制rs触发器开关来选择是正常计时模式或是校时模式。校时电路是由门电路构成的组合逻辑电路,可以完全使校时电路能稳定地工作。图4所示校“时”、校“分”电路。其中s1为校“时”用的控制开关,s2为校“分”用的控制开,他们的控制功能表如表2.3.1所示。校时脉冲采用采用分频器输出的1hz脉冲。校时电路原理图如图5所示,仿真图如图6所示。s1r1s2r2功能00计数010校分100校时表2图5校时电路原理图图6校时电路仿真图1.4时分秒计数器的设计方案由于考虑到采用各种计数器集成块组成时序逻辑电路,虽然原理简单,但连线繁多,占用芯片非常多的i/o口,电路稳定性较差,而采用ahdl语言构建的模块稳定性好,而且连线少,节省了芯片的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分别和字符点阵显示模块的四位扫描驱动地址sel0sel3的低三位相连,最高位地址接“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,说明计时清零功能正常。整个性能测试结束,各项要求都已达到。这次课程设计取得圆满成功。电路调试:在计算机上编译好电路图后,通过与eda实验箱上的芯片来实现功能。1、 首先在计算机上进行仿真,看是否能实现功能。2、 通过软件上编译出来的图,再在硬件上进行实现。本试验中将clk接在硬件实验箱上的频率脉冲1khz上,reset,setmin、sethour接在按键开关上,其中,reset是为了清零,使数字钟可以回到00 00 00的状态。而setmin是给分校时,每按一下键增加一分钟,sethour是给时校时,每按一下键就增加一小时。clkdsp是给秒提供频率的脉冲。接在硬件的频率脉冲那,给它固定1hz的脉冲。speaker接在硬件的扬声器接口,lamp2.0接在硬件实验箱上的3个led指示灯上,sel2.0接在实验箱上的sel0、sel1、sel2三个接口上。而led6.0接在数码管旁边的a b c d e f g上。通过扫描显示的方法使六个数码管以人的肉眼看过去全亮的方式进行数码显示。3、 按上面接好线后,通过计算机上的运行程序,观察实验的结果。4、 经测试,电路可以正常计时,并显示,调整无误。实验结果分析与讨论实验结果:在数码管上的后六个数码管上依次显示了时、分、秒。led指示灯在每走一秒就循环亮一个,三个灯一直循环亮下去,每次都只有一个亮着。扬声器在59的时候都低声响一下,然后到整点的时候就开始持续响,一直延续到10秒后。分析讨论:该数字钟虽然实现了功能,但是只能进行加的调整,要进行减调整几乎不可能在现有的电路基础上改进,只能重新设计,这是一开始就没考虑到的。并且分和秒实现的功能是一样的,如果都用同一模块,就可以简化设计,但对秒计时来说,该模块有较多不需要的功能,在实际生产的时候,应该分开设计。不过总的来说此次课程设计还是达到了目的,满足了它所需的要求。所以课程设计基本上成功。实验心得体会:本次课程设计中主要用到的是24进制和60进制。计数器需要我们能充分掌握同步和异步之间的区别,以及置数和清零的区别。对它们有了透彻的了解才能够充分的把所需要的进制给弄出来。通过此次课程设计也让我充分的了解的扫描显示电路的用法,及具体的实现过程。由于本数字钟有6位数字需要显示,如果用普通的一个输出对应一个译码驱动器和一个数码管的静态显示方法,那么仅七端码输出就需要多达42个i/o口和数码管连线,显然这将占据大量i/o口,连线也很麻烦。而采用动态扫描显示的方法仅需7根数码管连线就能实现多位显示需求,通过本设计深刻感受到动态扫描显示方法的优越性。起初设计的时候是考虑用硬件实现,但是真正等到电路设计好开始焊接的时候就发现,这个电路过于复杂,光芯片就多达20多快,还有6个数码管,考虑到大量芯片集成于一块电路板,电路内部易产生干扰;电路过于复杂,在焊接的过程中难免会产生虚焊等焊接错误,所以最终决定软件实现。这就给了我一个教训:做设计之前一定要先从总体上构思电路,电路包含哪些分电路,这些电路要如何实现,需要用到哪些芯片,以及这些芯片在市场上是否易于购买等问题都应该有个整体的把握。通过这次数字钟的设计,让我深深感受到了数字电路的重要性和实用性,也加深了对数字钟内部电路的认识,大大提高了我们的逻辑思维能力,使我们在逻辑电路的分析与设计上有了很大的进步。加深了我们对组合逻辑电路与时序逻辑电路的认识,进一步增进了对一些常见逻辑器件的了解。通过这次课程设计,更让我了解了合作精神的重要性。共同研究在学习生活中是很重要的。总的来说,通过这次的课程设计,不仅加深了我们对组合逻辑电路和时序逻辑电路的应用,对数字钟知识的认识,还加深了我们对eda技术的应用,让我们体会到了构建模块对于数字电路分析带来的方便。还让我们深深得感受到数字电子技术的奥妙,使我们发现数字电子技术原来离我们的生活竟然是如此的近。虽然在设计的过程中出现了许许多多的挫折麻烦,但是经过独立思考,查阅资料和跟同学讨论研究后,总能解决问题并提出最佳方案,或对原有方案最优化。让我们深深得体会到了合作精神的重要性。所以通过这次设计,不仅加强了我们对课本知识应用到实际生活中的能力,还学到了不少新知识,锻炼了独立思考与合作处理问题的能力,积累了新经验,这些都无疑使我受益深远。参考文献:5 赣南师范学院物理与电子信息学院编 数字电路实验指导书1 阎石主编 数字电子技术基础第4版 北京:高等教育出版社,1998年2 谢自美主编 电子线路设计实验测试 第3版,武汉:华中科技大学出版社,2006年4 曹昕燕 周风原 聂春燕编 eda技术实验与课程设计 北京:清华大学出版社,2006年5电子技术实验与课程设计 赵淑范、王宪伟编著 清华大学出版社6综合电子设计与实践 王振红、张常年编著 清华大学出版社附录:程序清单1整点报时及led花样显示模块ahdl源程序(alert)library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity alert isport(clk : instd_logic;dain : instd_logic_vector(6 downto 0);speak: outstd_logic;lamp : out std_logic_vector(2 downto 0);end alert ;architecture fun of alert issignal count : std_logic_vector( 1 downto 0);signal count1: std_logic_vector( 1 downto 0);beginspeaker:process (clk)begin speak =10) then count1=00;elsecount1 = count1 + 1;end if; end if;end if;end process speaker;lamper:process(clk)beginif (rising_edge(clk)then if (count = 10) thenif (count =00) thenlamp = 001 ;elsif (count = 01) thenlamp = 010 ;elsif(count=10) then lamp = 100 ;end if;count = count + 1;else count = 00;end if; end if; end process lamper;end fun ;2小时计数模块ahdl源程序(hour)library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity hour isport(clk,reset: instd_logic;daout: out std_logic_vector (5 downto 0);end entity hour;architecture fun of hour issignal count: std_logic_vector( 5 downto 0);begin daout = count; process ( clk,reset) begin if (reset=0) then count = 000000; elsif (clk event and clk=1) then if (count(3 downto 0)=1001) then if (count 16#24#) then count=count + 7; else count=000000; end if; elsif(count 16#24#) then count = count + 1; else count=000000; end if; end if; end process;end fun;3分计数模块ahdl源程序(minute)library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity minute isport(clk, clk1,reset,sethour : instd_logic;enhour : outstd_logic;daout: out std_logic_vector (6 downto 0);end entity minute;architecture fun of minute issignal count: std_logic_vector( 6 downto 0);begin daout = count; process ( clk,reset,sethour) begin if (reset=0) then count = 0000000; elsif (sethour=0) then enhour = clk1; elsif (clk event and clk=1) then if (count(3 downto 0)=1001) then if (count 16#60#) then if (count=1011001) then enhour=1; count=0000000; else count=count+7; end if; else count=0000000; end if; elsif(count 16#60#) then count = count + 1; enhour=0 after 100 ns; else count=0000000; end if; end if; end process;end fun;4秒计数模块ahdl源程序(second)library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity second isport(clk, reset,setmin : instd_logic;enmin : outstd_logic;daout: out std_logic_vector (6 downto 0);end entity second;architecture fun of second issignal count: std_logic_vector( 6 downto 0);begin daout = count; process ( clk , reset , setmin) begin - enmin=k; if (reset=0) then count = 0000000; elsif (setmin=0) then enmin = clk; elsif (clk event and clk=1) then if (count(3 downto 0)=1001) then if (count 16#60#) then if (count=1011001) then enmin=1; count=0000000; else count=count+7; end if; else count=0000000; end if; elsif (count 16#60#) then count = count+1; enmin=0 after 100 ns; else count=0000000; end if; end if; end process;end fun;5时间设置模块ahdl源程序(seltime)library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity seltime isport(clk1, reset: instd_logic;sec,min : instd_logic_vector(6 downto 0);hour : in std_logic_vector (5 downto 0);daout: outstd_logic_vector (3

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论