课程设计(论文)基于VHDL数字电子钟的设计与实现.doc
目录1引言11.1课程设计的意义11.2课程设计的背景和目的11.3课程设计的内容22EAD与VHDL简介32.1EAD的介绍32.2VHDL介绍43数字电子钟的设计方案73.1系统总体设计73.2硬件电路的设计73.3软件电路的设计83.4各模块原理及程序93.5详细设计与步骤184系统仿真215结束语24参考文献25基于VHDL数字电子钟的设计与实现 学生: 指导老师: 摘 要:本设计以数字电子为主,实现对时、分、秒、星期数字显示的计时装置,周期为24小时,显示满刻度为23时59分59秒,并具有校时功能和报时功能的数字电子钟。电路主要采用中规模CMOS集成电路。电路由脉冲逻辑电路模块、时钟脉冲模块、电源模块、时钟译码显示电路模块、整点报时模块、校时模块、星期模块等几部分组成。通过VHDL编程实现,仿真结果表明实现了各项功能。关键词:电子钟;门电路及单次按键;VHDL1 引言1.1 课程设计的意义随着科学技术的不断发展,人们对时间计量的精度要求越来越高。数字电子钟走时精度高,稳定性好,使用方便,不需要经常调校,数字式电子钟用秒脉冲发生器的精度稳定保证了数字钟的质量,用74LS2901输入脉冲显示周期,这种表具有时、分、秒的显示功能,还可以进行时和分的校对。1.2 课程设计的背景和目的20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。 时间对人们来说总是那么宝贵,工作的忙碌性和繁杂性容易使人忘记当前的时间。忘记了要做的事情,当事情不是很重要的时候,这种遗忘无伤大雅。但是,一旦重要事情,一时的耽误可能酿成大祸。例如,许多火灾都是由于人们一时忘记了关闭煤气或是忘记充电时间。尤其在医院,每次护士都会给病人作皮试,测试病人是否对药物过敏。注射后,一般等待15分钟,一旦超时,所作的皮试试验就会无效。手表当然是一个好的选择,但是,随着接受皮试的人数增加,到底是哪个人的皮试到时间却难以判断。所以,要制作一个定时系统。随时提醒这些容易忘记时间的人。 钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、定时启闭电路、定时开关烘箱、通断动力设备,甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。因此,研究数字钟4及扩大其应用,有着非常现实的意义。 掌握用VHDL语言5编制简单的小型模块,学会数字钟的设计方法,熟悉集成电路的使用方法,初步掌握电子钟的设计方法并实现时间的显示和校对,以及报时的功能,并能对数字电子钟进行扩展。数字钟是一种用数字电路技术实现时、分、秒计时的装置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更更长的使用寿命,因此得到了广泛的使用。 数字钟从原理上讲是一种典型的数字电路,其中包括了组合逻辑电路和时序电路2。因此,此次设计与制作数字钟就是为了了解数字钟的原理,从而学会制作数字钟。通过数字钟的制作进一步的了解各种在制作中用到的中小规模集成电路的作用及实用方法。通过它可以进一步学习与掌握各种组合逻辑电路与时序电路的原理与使用方法。1.3 课程设计的内容本次设计以数字电子为主,实现对时、分、秒、星期数字显示的计时装置,周期为24小时,显示满刻度为23时59分59秒,并具有校时功能和报时功能的数字电子钟。电路主要采用中规模CMOS集成电路。本系统的设计电路由脉冲逻辑电路模块、时钟脉冲模块、电源模块、时钟译码显示电路模块、整点报时模块、校时模块、星期模块等几部分组成。采用电池作电源,采用低功耗的CMOS芯片及液晶显示器,发生器使用晶体振荡、计数振荡器CD4060及双JK触发器CD4027,将标准秒信号送入“秒计数器”;计数器采用“可予制四位二进制异步清除”计数器来实现,分别组成两个六十进制(秒、分)、一个二十四进制(时)的计数器;整点报时电路以门电路、触发器及扬声器构成,要求在离整点差5秒时,每1秒钟鸣叫一次,共响5次,前四次为低音512Hz,最后一声为高音1024Hz;星期计数器是用四个D触发器组成;校时电路是由与非门构成的双稳态触发器,用来对“星期”、“时”、“分”、“秒”显示数字进行调整的;译码显示电路选用BCD-7段锁存译码驱动器CC4511构成,再经过设计一个电子钟,具有时、分、秒显示功能,在计时过程中具有报时功能,同时能对时、分进行校对,在使用74LS290输入脉冲时能够显示一周的星期,具有一分钟闹铃功能.所需仪器: 74LS161(7片),74LS48(BCD_7段译码器), 74LS29(4片),门电路及单次按键,琴键开关2 EAD与VHDL简介2.1 EAD的介绍EDA技术是在电子CAD技术基础上发展起来的计算机软件系统,是指以计算机为工作平台,融合了应用电子技术、计算机技术、信息处理及智能化技术的最新成果,进行电子产品的自动设计。利用EDA工具,电子设计师可以从概念、算法、协议等开始设计电子系统,大量工作可以通过计算机完成,并可以将电子产品从电路设计、性能分析到设计出IC版图或PCB版图的整个过程在计算机上自动处理完成。现在对EDA的概念或范畴用得很宽。包括在机械、电子、通信、航空航天、化工、矿产、生物、医学、军事等各个领域,都有EDA的应用。目前EDA 技术已在各大公司、企事业单位和科研教学部门广泛使用。例如在飞机制造过程中,从设计、性能测试及特性分析直到飞行模拟,都可能涉及到EDA技术。本文所指的EDA技术,主要针对电子电路设计、PCB设计和IC设计。EDA 设计可分为系统级、电路级和物理实现级。(1)EDA常用软件 EDA工具层出不穷,目前进入我国并具有广泛影响的EDA软件有:EWB、PSPICE、OrCAD、PCAD、Protel、Viewlogic、Mentor、Graphics、Synopsys、LSIlogic、Cadence、MicroSim等等。这些工具都有较强的功能,一般可用于几个方面,例如很多软件都可以进行电路设计与仿真,同时以可以进行PCB自动布局布线,可输出多种网表文件与第三方软件接口。下面按主要功能或主要应用场合,分为电路设计与仿真工具、PCB设计软件、 (2)电子电路设计与仿真工具 电子电路设计与仿真工具包括SPICE/PSPICE;EWB;Matlab;SystemView;MMICAD等。下面简单介绍前三个软件。SPICE(Simulation Program with Integrated Circuit Emphasis) 是由美国加州大学推出的电路分析仿真软件,是20世纪80年代世界上应用最广的电路设计软件,1998年被定为美国国家标准。1984年,美国MicroSim公司推出了基于SPICE的微机版PSPICE(PersonalSPICE)。现在用得较多的PSPICE6.2, EWB(Electronic Workbench)软件 是Interactive ImageTechnologies Ltd 在20世纪90年代初推出的电路仿真软件。目前普遍使用的是EWB5.2,相对于其它EDA软件,它是较小巧的软件(只16M)。但它对模数电路的混合仿真功能却十分强大,几乎100%地仿真出真实电路的结果,并且它在桌面上提供了万用表、示波器、信号发生器、扫频仪、逻辑分析仪、数字信号发生器、逻辑转换器和电压表、电流表等仪器仪表。它的界面直观,易学易用。MATLAB产品族 它们的一大特性是有众多的面向具体应用的工具箱和仿真块,包含了完整的函数集用来对图像信号处理、控制系统设计、神经网络。(3)PCB设计软件PCB(PrintedCircuit Board)设计软件种类很多,如Protel; OrCAD;Viewlogic; PowerPCB; Cadence PSD;MentorGraphices的Expedition PCB;Zuken CadStart; Winboard/Windraft/Ivex-SPICE;PCB Studio; TANGO等等。目前在我国用得最多应属Protel。2.2 VHDL介绍VHDL语言超高速集成电路硬件描述语(VHSIC Hardware Deseription Language,简称VHDL),是IEEE的一项标准设计语言。它源于美国国防部提出的超高速集成电路(Very High Speed Integrated Circuit,简称VHSIC)计划,是ASIC设计和PLD设计的一种主要输入工具。1987年底,VHDL被IEEE和美国国防部确认为标准硬件描述语言。自IEEE公布了VHDL的标准版本,IEEE-1076(简称87版)之后,各EDA公司相继推出了自己的VHDL设计环境,或宣布自己的设计工具可以和VHDL接口。此后VHDL在电子设计领域得到了广泛的接受,并逐步取代了原有的非标准的硬件描述语言。1993年,IEEE对VHDL进行了修订,从更高的抽象层次和系统描述能力上扩展VHDL的内容,公布了新版本的VHDL,即IEEE标准的1076-1993版本,(简称93版)。现在,VHDL和Verilog作为IEEE的工业标准硬件描述语言,又得到众多EDA公司的支持,在电子工程领域,已成为事实上的通用硬件描述语言。有专家认为,在新的世纪中,VHDL于Verilog语言将承担起大部分的数字系统设计任务。VHDL主要用于描述数字系统的结构,行为,功能和接口。除了含有许多具有硬件特征的语句外,VHDL的语言形式和描述风格与句法是十分类似于一般的计算机高级语言。VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可是部分,及端口)和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分。在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。这种将设计实体分成内外部分的概念是VHDL系统设计的基本点。应用VHDL进行工程设计的优点是多方面的。 (1)与其他的硬件描述语言相比,VHDL具有更强的行为描述能力,从而决定了他成为系统设计领域最佳的硬件描述语言。强大的行为描述能力是避开具体的器件结构,从逻辑行为上描述和设计大规模电子系统的重要保证。 (2)VHDL丰富的仿真语句和库函数,使得在任何大系统的设计早期就能查验设计系统的功能可行性,随时可对设计进行仿真模拟。 (3)VHDL语句的行为描述能力和程序结构决定了他具有支持大规模设计的分解和已有设计的再利用功能。符合市场需求的大规模系统高效、高速的完成必须有多人甚至多个代发组共同并行工作才能实现。(4)对于用VHDL完成的一个确定的设计,可以利用EDA工具进行逻辑综合和优化,并自动的把VHDL描述设计转变成门级网表。 (5)VHDL对设计的描述具有相对独立性,设计者可以不懂硬件的结构,也不必管理最终设计实现的目标器件是什么,而进行独立的设计。VHDL的主要特点:(1)作为硬件描述语言的第一个国际标准,VHDL具有很强的可移植性。(2)具有丰富的模拟仿真语句和库函数,随时可对设计进行仿真模拟,因而能将设计中逻辑上的错误消灭在组装之前,在大系统的设计早期就能查验设计系统功能的可行性。(3)设计层次较高,用于较复杂的计算时,能尽早发现存在的问题,从而缩短设计周期。(4)VHDL的设计不依赖于特定的器件,方便了工艺的转换。(5)支持大规模设计的分解和已有设计的再利用。(6)对于用VHDL完成的一个确定的设计,可以利用EDA工具进行逻辑综合和优化,并自动地把VHDL描述设计转变成门级网表。(7)VHDL用源代码描述来进行复杂控制逻辑的设计,灵活又方便,同时也便于设计结果的交流、保存和重用。VHDL的开发流程: (1)文本编辑:用任何文本编辑器都可以进行,也可以用专用的HDL编辑环境。通常VHDL文件保存为.vhd文件。 (2)功能仿真:将文件调入HDL仿真软件进行功能仿真,检查逻辑功能是否正确(也叫前仿真,对简单的设计可以跳过这一步,只在布线完成以后,进行时序仿真)。 (3)逻辑综合:将源文件调入逻辑综合软件进行综合,即把语言综合成最简的布尔表达式和信号的连接关系。逻辑综合软件会生成.edf(edif)的EDA工业标准文件。 (4)布局布线:将.edf文件调入PLD厂家提供的软件中进行布线,即把设计好的逻辑安放到PLD/FPGA内。 (5)编程下载:确认仿真无误后,将文件下载到芯片中。3 数字电子钟的设计方案3.1 系统总体设计系统的工作原理:振荡器产生稳定的分频脉冲信号,作为数字钟的时间基准,然后经过分频器输出标准秒脉冲。秒计数器满60分向分计数器进位,分计数器满60后向小时计数器进位,小时计数器按照“24翻1”规律计数。计数器的输出分别由译码器送显示器显示。计时出现误差时,可以用校时电路校时、校分。数字电子钟的电路组成方框图片如3.1图:图3.1电路组成方框图3.2 硬件电路的设计 如图3.2所示,以74LS161作为控制部件。47LS161被接成十进制计数器,其置数输入端A、B、C、D(3脚4脚5脚6脚)接低电平,LD、EP、ET(9脚10脚7脚)接高电平,秒脉冲由CP(2脚)端输入。计数器的输出端QA、QB、QC、QD(14脚13脚12脚11脚)接译码电路CD4511的输入端D、C、B、A。用74LS290做一个七进制的加法计数器,将时的十位的进位脉冲接到显示星期的74LS290的输入脉冲就可以了。硬件电路图如下:74LS48时钟基准74LS290晶体振荡器LED数码管74LS161图3.2 硬件电路图3.3 软件电路的设计考虑到实用性,在该电子钟的设计中修改定时或调整时间时采用了闪烁。在编程上,首先进行了初始化定义了程序的入口地址以及中断的入口地址,在主程序的开始定义了一组固定单元用来存储计数的秒,分,时等。在显示程序段中主要进行了闪烁的处理,采用定时器中断置标志位,再与位选相互结合的方法来控制调时或定时中的闪烁。时、分、秒的显示则是用了软件译码 (查表 )的方式,再用了一段固定的程序段进行进制转化。初始化之后,用中断方式对其计数,计数的同时采用了定时器比较的方法,比较当前计数时间与定时时间是否相等,若相等则将闹铃标志位置数。为了避免响铃影响显示定时,选时或调时程序段。对当前时间或定时时间修改后又返回到最初的显示程序段,如此循环下去。程序流程图如图3.3所示。响铃结束显示初始化TF读键有无闹钟?是否为调时、定时?开始TT定时FF调时TF调时?是否修改?图3.3 程序流程图3.4 各模块原理及程序(1)秒脉冲发生器秒脉冲发生器是数字钟的重要部分,它的精度稳定度决定了数字钟的质量,通常用晶体振荡器发生的脉冲经过整形、分频获得1Hz的秒脉冲。如晶振为32768Hz,通过15次二分频后可获得1Hz的脉冲输出。(本设计中实验箱上已经有1hz脉冲)。按键由琴键或拨码开关发出脉冲或电平信号,控制整个系统工作。原理图如图3.4所示:图3.4秒脉冲发生器其程序代码如下:ORG 0000H AJMP MAIN ORG 000BH AJMP TIME ORG 0300H MAIN: mov 20h,#00h MOV 21H,#00H MOV 22H,#00H MOV 23H,#00H MOV IP,#02H ;IP,IE初始化 MOV IE,#82H MOV TMOD,#01H ;设定定时器工作方式? MOV TL0,#0B0H MOV TH0,#3CH SETB TR0 ;启动定时? MOV SP,#40H ;重设堆栈指针 NEXT: LCALL DISP ;调用显示子程序? LCALL KEY ;调用按键检测子程序 JZ NEXT ; LCALL ANKEY ;调用按键处理子程序 SJMP NEXT ;重新循环 NOP NOP NOP (2)可调时钟模块有了时间标准“秒”信号后,就可以根据60秒为1分、60分为1小时、24小时为1天的计数周期,分别组成两个六十进制(秒、分)、一个二十四进制(时)的计数器。将这些计数器适当连接,就可以构成秒、分、时的计数,实现计时功能。其程序流程图如图3.5所示。(3)74LS161构成秒、分的六十进制计数器 数字钟的“秒”、“分”信号产生电路都是由六十进制计数器构成,“时”信号产生电路为二十四进制计数器。它们都可以用两个“可予制四位二进制异步清除”计数器来实现。利用74LS161芯片的预置数功能,也可以构成不同进制的计数器。因为一片74LS161内含有一个四位二进制异步清除计数器,因此需用两片74LS161就可以构成六十进制计数器了。集成电路74LS161芯片的电路其中(如图3)CP为时钟脉冲输入端,P0、P1、P2、P3为预置数输入端, 为置数控制端, 为异步复位端,二者均为低电平有效;Q0、Q1、Q2、Q3为计数器的输出端。该计数器能同步并行预置数据,具有清零置数,计数和保持功能,具有进位输出端,可以串接计数器使用。4位二进制同步计数器74LS161引脚图它的管脚排列如图3.6所示:a:计数功能:当 = =CTP=CTT=1,CP=CP时,实现计数功能。b:同步并行置数功能:当 =1时,预置控制端 =0,并且 CP=CP时,Q3Q2Q1Q0= P3P2P1P0,实现同步预置数功能。c:保持功能:当 = =1且CTP·CTT=0时,输出Q3Q2Q1Q0保持不变。d:异步清零功能:当复位端 =0时,输出Q3Q2Q1Q0全为零,实现异步清零功能(又称复位功能)。秒个位计数器图3.5 程序流程图图3.6 74LS161管脚排列图 74LS161被接成十进制计数器,其置数输入端A、B、C、D(3脚4脚5脚6脚)接低电平,LD、EP、ET(9脚10脚7脚)接高电平,秒脉冲由CP(2脚)端输入。计数器的输出端QA、QB、QC、QD(14脚13脚12脚11脚)接译码电路CD4511的输入端D、C、B、A。当秒脉冲输入时,电路状态按二进制自然序列依次递增1,QA、QB、QC、QD输出为0000、0001、0010、0011、0100、0101、0110、0111、1000、1001,当输出为1010也就是10时,QA、QC输出都为1,经过一个与非门后一路经反相后送入或非门的一个输入端,输出送往计数器的清零端RD使秒计数器清零,另一路经反相后作为进位脉冲送入秒十位计数器的脉冲输入端。(4)秒十位计数器 在这里74LS161被接成六进制计数器,接法与秒个位计数器相同,秒个位计数器送来的进位脉冲送入秒使位计数器的脉冲输入端,使其按二进制自然序依次递增1,QA、QB、QC、QD端输出为0000、0001、0010、0011、0100、0101,当输出为0110也就是6时,QB、QC输出为1,QA、QD输出为0,QB、QC经过一个与非门后一路先送往秒十位计数器的清零端,然后取反接或非门的另一个输入端后送入秒个位计数器的清零端,将整个秒计数器清零,另一路经反相后作为进位脉冲送入分个位计数器的脉冲输入端。分计数器的连接方法与秒计数器相同,分计数器向时计数器送进位脉冲。秒、分的六十进制计数器如图3.7所示:图3.7 六十进制计数器其程序代码如下:;定时中断处理程序: TIME: PUSH ACC ;保护现场 PUSH PSW MOV TL0,#0B4H ;赋定时初值 MOV TH0,#3CH INC 20H ; MOV A,20H CJNE A,#20,RETI1 MOV 20H,#00H ;一秒钟时间到 MOV A,21H ADD A,#01H DA A MOV 21H,A CJNE A,#60H,RETI1 MOV 21H,#00H ;一分钟时间到 MOV A,22H ADD A,#01H DA A MOV 22H,A CJNE A,#60H,RETI1 MOV 22H,#00H ;一小时时间到 (5)74LS161构成二十四进制计数器 二十四进制计数器,也是用两个74LS161集成块来实现的,方法与二十四进制计数器大同小异,但其要求个位是十进制,状态变化在00001001间循环,十位是二进制,状态变化在00000010间循环,显示为023时。原理: 由分计数器送来的进位脉冲送入时个位计数器,电路在分进位脉冲的作用下按二进制自然序依次递增1,当计数到24,这时小时个位输出0100(也就是4),小时十位输出0010(也就是2),小时十位计数器只有QC端有输出,小时个位计数器只有QB端有输出,将QC、QB端接一个二输入与非门,与非门输出一路先送入十位计数器的清零端然后取反送入或非门的另一个输入端,输出接小时个位计数器的清零端,其每10小时清零并向小时十位计数器送进位脉冲,当十位输出为二,小时个位输出为四时,将整个电路清零,另一路取反后作为星期进位脉冲送入星期显示电路的脉冲输入端,完成24小时的显示及向星期电路送星期进位脉冲的功能。二十四进制计数器的构成如图3.8所示:图3.8 二十四进制计数器(6)闹铃功能:一分钟整点报时功能。其电路如图3.9所示:本设计使用LED发光。 图3.9 LED发光(7)日历系统:星期显示。74LS48的内部逻辑如图3.10所示图3.10 74LS48 为显示星期,本设计只用到前面的七中状态,只要满足,则可以显示从期一到星期日。用74LS290做一个七进制的加法计数器电路图如图3.11所示。图3.11七进制的加法计数器数字钟总电框图如图3.12所示:图 3.12数字钟总电框图3.5 详细设计与步骤根据设计原理,将所需要的各部分做好,在将起接在一起就得到了所需的电路图,如图3.13所示。图3.13 详细设计电路图其程序代码如下:MOV A,23HCJNE A,#24H,RETI1 MOV 23H,#00H ;到时间达到24小时,清零. RETI1: POP PSW ;恢复现场 RETI ;中断返回? NOP ;显示子程序 DISP: ANL 2FH,#10H ;处理小数点 MOV A,21H ;处理秒21H->2DH,2EH MOV A,22H ;处理分钟22H->2CH,2DH MOV A,23H ;处理小时23H->2AH,2BH MOV R0,#2FH ;显示偏移量 MOV P0,a ;送显示 MOV R2,#80H ;延时 DJNZ R3,LOOP1 ;循环显示 TABLE: db 28h,7eh,0a2h,62h,74h,61h,21h ;不带小数点 DB 7ah,20h,60h,00,00,00,00,00,00 DB 8H,5eH,82H,42H,54H,41H,1H,5aH ;带小数点 DB 00H,40H,00,00,00,00,00,00 ;按键判断程序 JZ RETX ;无键按下则返回 JZ RETX ;键盘去抖动。 MOV R6,A ;将键值存入R6。 JNZ LOOP2 ;等待键释放 ANKEY: CLR EA ;关中断 LX: MOV A,R6 JB ACC.2,L1 ;是功能键转L1 JB ACC.3,L2 ;是确认键转L2 JB ACC.4,L3 ;是减1键转L3 JNB ACC.5,L12 ;不是增1键,转L12 JB 2BH.4,L6 ;判断使哪一位(时、分、秒)的值加1 LCALL KEY ;判断有无键按下。 L2: MOV 25H,#00H ;确认键处理程序 L3: JB 2BH.4,L61 ;增一键处理程序 L1: MOV A,25H ;功能键处理程序 LB1: MOV 25H,#01H ;25H单元是标志位,(25H)=01H调节时单元的值 LB3: MOV 25H,#04H ;25H单元是标志位,(25H)=01H调节秒单元的值LB2: MOV 25H,#02H ;25H单元是标志位,(25H)=01H调节分单元的值 L6: MOV A,23H ;时加一 L8:MOV A,22H ;分加一 L9: MOV A,21H ;秒加一 ADD A,#01H DA A 4 系统仿真该电子钟对源程序进行编译,自动地把VHDL描述转变成门级电路,进而完成各种测试工作。软件平台自动对设计结果进行编译,检查连接,给出错误报告并进行逻辑综合,同时将产生编程文件和用于时序仿真用的输出文件,最后给出实现此项目最适合的器件。经过编译, EDA软件平台报告电路连接没有错误。图4.1 顶层设计仿真图由图4.1可知,当遇到上升沿时发一个信号,在高电位时有效,而在低电位时无效。在遇到上升沿时计数器进位加一,当计数器不为零时不发信号,只有当计数器为零时才发一个信号。单片机时间基准振荡电路中振荡晶体频率的选择必须要和程序中的时间基准相一致,也就是说要采用振荡频率为12M的振荡晶体,否则若采用了11.59M的振荡晶体就会使得单个振荡周期变长,故而使单个时间间隔变长,最终会导致实际上的电子钟走时变“慢”。由于单片机处理数据过程中要响应中断等原因,而中断服务程序所花费的时间必须在中断返回后在计时单元中扣除掉,否则实际上制作出来的电子钟会变“慢”。在本次程序设计中将中断服务程序所花费的时间直接从定时间隔 (50ms) 中扣除,也就是说将定时间隔设置得比50ms小一些,必须不断地通过软件调试该时间间隔,这样才能使得电子钟的走时误差达到最小。在调试每个数码管的发光时间时,必须反复修改程序中的给定的时间,直到整体上的显示效果较好,不会有闪烁的现象产生。图4.2 数字钟计数器仿真图本设计中,由定时器T0每50ms一次中断产生时钟基准,中断服务程序中校正了中断产生的误差。主程序中循环调用显示程序完成显示。显示初始为:120000。没有功能键。 显示部分采用7片74LS161级联控制,由单片机的p2.0-p2.2向显示器发出数据。显示格式为:XXXXXX,分别代表小时,分钟,秒。为24小时制。仿真效果如上图调试优化(1)单片机时间基准振荡电路中振荡晶体频率的选择必须要和程序中的时间基准相一致,也就是说要采用振荡频率为12M的振荡晶体,否则若采用了11.59M的振荡晶体就会使得单个振荡周期变长,故而使单个时间间隔变长,最终会导致实际上的电子钟走时变“慢”。在本次程序设计中将中断服务程序所花费的时间直接从定时间隔 (50ms) 中扣除,也就是说将定时间隔设置得比50ms小一些,必须不断地通过软件调试该时间间隔,这样才能使得电子钟的走时误差达到最小。(2)在调试每个数码管的发光时间时,必须反复修改程序中的给定的时间,直到整体上的显示效果较好,不会有闪烁的现象产生。5 结束语此次基于数字式电子钟的设计与制作的独特之处在于采用了动态显示的形式,将6个数码管串联起来,这一点与一般的电子钟采用静态显示的方法不同,这样的设计使得单片机的管脚得到了充分的利用,也使得本设计中的电路显得小巧,省去了相应的芯片,节约了成本。本系统基本的实现了时钟计时、显示、闹钟及温度和电压测量及过欠压频率的测量。实际运行效果良好,并可进行进一步的扩展。参考文献1 朱正伟.EDA技术及应用M.北京:清华大学出版社,2005.2 王辅春.电子电路CAD与OrCAD教程M.北京:机械工业出版社,2004.3 于枫,张丽英.ALTERA可编程逻辑器件应用技术M.北京:科学出版 社,2004.4 梁祥.基于PC/104总线与CPLD的SPI接口设计J.嵌入式计算机应用,2006,25(1):532-535.5 朱春森.硬件编程接口与系统软件实现M.北京:北京大学出版社,2005.6 徐爱钧,彭秀华.KeilCx51V7.0单片机高级语言编程与uVision2应用实M.北京:电子工业出版社,2004.7 喻咏泉.80X86微机原理与接口技术M.西安:西安电子科技大学出版社,2005.8 刘佩林,谭志明.MIPS体系结构与编程M.北京:科学出版社,2008.9 江思敏.VHDL数字电路及系统设计M.北京:机械工业出版社,2006.10林容益.CPU/SOC及外围电路应用设计:基于FPGA/CPLDM.北京:北京航空航天大学出版社,2004.