基于单片机的多功能电子钟的设计_第1页
基于单片机的多功能电子钟的设计_第2页
基于单片机的多功能电子钟的设计_第3页
基于单片机的多功能电子钟的设计_第4页
基于单片机的多功能电子钟的设计_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

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

文档简介

目录1.绪论 21.1引言 21.2数字电子表总体方案的论证 31.2.1采用数字逻辑电路 31.2.2采用时钟芯片 31.2.3采用单片机控制 41.3单片机实现数字电子钟方案论证 41.3.1基于8255的单片机软件控制方案 41.3.2基于8279的单片机软件控制方案 51.3.3基于单片机并行口的数字电子钟的设计 51.4本次设计的总体框图和工作原理 6数字电子表的总体框图 61.4.2数字电子表的工作原理 62.硬件单元电路的设计 72.1显示接口电路 82.2键盘接口电路 92.3时钟振荡电路 102.4复位电路 102.5电源电路工作原理介绍 112.5.1直流稳压电路的介绍 112.5.2电源变压器 112.5.3整流滤波电路 122.5.4稳压电路 122.5.5稳压电源的性能指标 122.6下载线电路 133软件单元电路的设计 133.1单片机AT89S52,驱动器74LS244与8255芯片 133.1.1AT89S52的介绍 133.1.2驱动器74LS244的介绍 153.1.38255基本结构及工作方式 163.1.3存储单元的分配 173.1.4硬件资源的分配 183.2软件程序流程框图 183.2.1资源分配 183.2.2电子钟的P.流程框图 193.2.3显示子程序流程框图 203.2.4加1子程序流程框图 203.2.5中断子程序 213.2.5键扫描程序流程框图 223.2.6B键功能程序流程框图 233.2.7主程序流程框图 254 调试 264.1硬件调试 264.2软件调试 26结束语 271、电子钟的使用说明 272、误差分析及解决办法 273、设计体会 29参考文献 30附录 31附录一、电子表原理图 31附录二、电子表PCB图 32附录三、元件清单 33附录四、程序清单 341.绪论1.1引言单片机具有功能强、体积小、可靠性好和价格便宜等独特优点,已成为传统工业技术改造和新产品更新换代的理想机种,具有广泛的发展前景。单片机技术的应用,使得许多领域的技术水平和自动化程度得以大大提高。电子钟的飞速发展则是单片机技术应用的一个典型例子。电子钟作为智能仪器的一种,已广泛应用于工业、农业和日常生活等领域。与传统的用单纯的数字逻辑电路来实现的钟表相比,现在的电子钟在体积上是变得越来越小巧玲珑,具有很好的灵活性,精确度是变得越来越高,价格是变得相对越来越便宜,给人们的生活和工作带来很多的便利。本次设计课题为——基于Intel多功能电子表设计。制作好的电子钟能正确反映实际时间值,只能完成时、分、秒的显示与时、分、秒的调整。硬件设计采用的是目前应用最广泛的芯片AT89S52,它是一种低功耗,高性能,采用CHMOS工艺的位单片机,并且与MCS-51产品完全兼容,片内存储器包含8KB的Flash,可在线编程,给我们实际操作带来了很大的帮助。1.2数字电子钟总体方案的论证数字电子钟的设计有多种方法,可以用纯数字电路,可以用时钟芯片,也可以通过单片机控制来实现.下面就介绍几种主要设计的方案并进行简单的论证。采用数字逻辑电路1.电路结构及原理:由555构成多谐振荡器产生稳定的高频脉冲信号,作为数字钟的时间基准,在经分频器输出标准秒脉冲后,由两个74LS90级联构成两个60进制计数器和一个24进制计数器,满60后向分计数器进位,分计数器满60后向小时计数器进位,小时计数器按照“24翻1”2.优缺点:此方案是由纯硬件电路实现的,优点是省略了软件部分的设计,但此方案因为是纯硬件实现的,成本较高,误差较大,不灵活,时间不可调。采用时钟芯片1.电路结构及原理:采用实时时钟集成电路,如DS1287、DS12887等。这些实时时钟芯片具备年、月、日、时、分、秒计时功能和多点定时功能,计时数据的更新每秒自动进行一次,不需程序干预。2.优缺点:采用这种方案的优点是计时程序简单,时钟芯片多数带有锂电池做后备电源,具备永不停止的计时功能,具有可编程方波输出功能,可用做实时测控系统的采样信号等;有的实时时钟芯片内部还带有非易失性RAM,可用来存放需长期保存,但有时也需变更的数据。采用这种方案虽然简单而经济,但是不符合毕业设计任务书要求,并且不能体现专业知识水平。采用单片机控制1.电路结构及原理:利用MCS-51内部的定时/计数器进行中断定时,配合软件延时实现时、分、秒的计时;配合软件监控实现运行,停止,调时,调分,调秒。2.优缺点:该方案节省硬件成本,且能够使人在定时/计数器的使用、中断及程序设计方面得到锻炼与提高,时间可调,具有很好的灵活性,并且误差小。综上所叙,本次设计选择第三个方案:采用单片机控制来实现数字电子钟的功能。这里简单的阐述数字电子钟的基本功能:数字电子钟用六个数码管分别显示时、分、秒,其中时采用24小时制。由四个按键控制,分别是A、B、C、D,其中A键控制数字电子钟的启\停;B键调整时;C键调整分;D键调整秒;而S1键作为手动复位。1.3单片机实现数字电子钟方案论证因为单片机实现数字电子钟的方法有多种,主要是由于不同的芯片有着不同的内部结构,功能就有所不同,所以有必要对不同的方案进行选择论证。下面就介绍几种常见的方案:基于8255的单片机软件控制方案1.如下图所示,方案是利用单片机内部的定时/计数器进行中断定时,配合软件延时实现时、分、秒的计时。其核心是89S52单片机,其内部带有4KB的FLASHROM,系统配备6位LED显示和键盘,采用8255作键盘/显示接口电路。利用8255的C口为6位LED显示的位控口,其中,PA0~PA5分别对应LED0~LED5,A口则作为段控口,B口低4位为键盘输入口。由于采用共阴极数码管,因此B口输出底电平选中相应的位,而A口输出高电平相应数码管就会点亮。键盘电路8255AT89S52键盘电路8255AT89S52时钟电路显示接口电路时钟电路显示接口电路复位电路复位电路图1.1基于8255单片机原理框图基于8279的单片机软件控制方案1.8279是Intel公司为8位处理器设计的通用键盘/显示器接口芯片,其功能是:接收来自键盘的输入数据并作预处理,并可以完成数据显示的管理和数据显示器的控制。单片机采用8279管理键盘和显示器,软件编程极为简单,显示稳定,显示输出时,它有一个16×8位显示RAM,其内容通过自动扫描,可由8或16位LED数码管显示,减少了主机的负担。2.优缺点:此方案对单片机的口线利用较少,对于以后我们进行其它的扩展留了很大的空间,大大减少了我们为键盘按键的消抖编程的时间,缩短了开发时间,由它构成的标准键盘、显示接口电路在单片机应用系统中使用越来越广泛。但是8279内部结构比较复杂实现起来比较麻烦,而且其价格也比较高。图1-2基于8279单片机原理框图基于单片机并行口的数字电子钟的设计1.利用AT89S52内部的定时/计数器进行中断定时,配合软件延时实现时、分、秒的计时。AT89S52由于能够直接下载,给用户带来了很大的方便,所以被广泛使用,使单片机的价格大大下降。在本人设计的系统中,将89S52设计为多功能可编程接口,其相关程序固化在片内的FlashROM中。该芯片具有如下功能:①有1个专用的键盘/显示接口;②有1个全双工异步串行通信接口;③有2个16位定时/计数器。AT89S52的P0口和P2口外接由六个LED数码管(LED5~LED0)构成的显示器,用P0口作LED的段控码输出口(P0.0~P0.7对应于LED的a~dp),P2.5~P2.0作LED的位控输出线(P2.5~P2.0对应于LED5~LED0),P1口外接四个按键A、B、C、D(对应于P1.0~P1.3)。2.优缺点:1片89S52芯片承担了3个专用接口芯片的工作,所以制作起来也比较方便简单,它能够直接下载,不仅使成本大大下降,而且优化了硬件结构和软件设计,该方案节省硬件成本.综上所述:由于单片机89S52单片机外部I/O口有限,因此为了以后的扩展的需要,我们这里设计方案选择方案二。因为8255具有很强的功能,它不仅能提供并行接口所需要的各种路之外,还包括RAM存储器和定时器/计数器。这样为将来的扩展也带来了许多的方便。1.4本次设计的总体框图和工作原理数字电子钟的总体框图本次设计的电子钟由单片机、时钟电路、复位电路、按键电路和显示电路构成。其总体框图1-2基于8255单片机原理框图:数字电子表的工作原理电子钟电路的核心为AT89S51单片机和8255,89S51内部有4KB的ROM,无须外扩程序储存器。系统配备6位LED显示,8255的PC口通过74LS244作为6位LED的位选口,PA口通过74LS244作为6位LED的段选口。PB口的PB0—PB3作为独立式键盘的扫描口。由于采用共阴极数码管,因此PB口输出低电平时选中相应的位,而PA口输出高电平时点亮相应的段。下面以时钟计时为例来说明AT89S51单片机如何来实现时钟计数:(1).计数初值的计算定时器选用工作方式一,最大定时时间为65536μS。设使用T/C0,方式1,晶振的频率fosc=6MHz。定时时间为125mS初值为X则(216-X)×1/12×10-6×6=125×10-3(S)=125000(μS)X=3036→→0CDCH(2).秒的实现定时器定时采用中断方式完成,通过中断服务程序进行次数的累计,计满8次即得到秒计时。通过在程序中的数值累加和数值比较来实现从秒到分和分到时的计时。(3).数字电子表的计时显示设置时钟显示及显示缓冲区。定时时钟时间在8位LED数码管上进行显示(时,分,秒)。为此,要在内部RAM中设置显示缓冲区,共8个单元,与数码管的对应关系如下:表1-1缓冲区与数码管的对应关系LED7LED6LED5LED4LED3LED2LED1LED07FH7EH7DH7CH7BH7AH79H78H显示缓冲区从左向右依次存放时、分、秒的数值。2.硬件单元电路的设计2.1显示接口电路单片机应用系统最常用的显示器是LED(发光二极管显示器)、LED(液晶显示器)。这两种显示器可显示数字、字符及系统的状态。它们的驱动电路简单、易于实现且价格低廉,因此,得到了广泛应用。本次设计只要显示6位数字,不需显示图形或字符,因而采用七段数码管做显示器。LED显示器有共阴极与共阳极两种结构,如图2.1所示。共阴极LED显示块的发光二极管阴极并接,如图中(a)所示,当某个发光二极管的阳极为高电平时,发光二极管点亮;共阳极LED显示块的发光二极管则阳极并接,如图中(b)所示,当某个发光二极管的阴极为低电平时,发光二极管点亮,次设计选用供阳数码管。图2.1七段LED显示器通常的七段LED显示器块中有八个发光二极管,也有人叫做八段显示器,其中七个发光二极管构成七笔字形“8”,一个发光二极管构成小数点。七段显示块与单片机接口非常容易。只要将一个8位并行输出口与显示块的发光二极管引脚相连即可。8位并行输出口输出不同的字节数据即可获得不同的数字或字符。通常将控制发光二极度管的8位字节数据称为段选码。显示接口电路如图所示。LED显示工作方式可分为静态显示和动态显示。在静态显示方式下,共阴极应固定接地,共阳极应固定接高电平。我们采用的是利用8051芯片I/O口构成键盘/显示接口电路,为简化电路,降低成本,显示将采用动态显示。在动态显示中将所有相同位的段控线并联在一起,由一个I/O口线控制,8段由8个I/O口控制,而共阴极点或共阳极点分别由相应的I/O口线控制。LED动态显示电路只需要两个8位I/O口。其中一个8位I/O口控制段控码,另一个8位I/O口控制位选。由于所有段控码都由一个8位I/O控制,因此,在同一瞬间,6只LED都会显示相同的字符。要想每位显示不同的字符,必须采用扫描显示方式。即在每一瞬间只使某一位显示相应字符。在此瞬间,段选控制I/O口输出相应字符段选码,位选控制I/O口在该显示位送入选通电平(共阴极送低电平,阳极送高电平)以保证该位显示相应字符。如此循环,使每位显示该位应显示字符,并保持延时一段时间,以造成视觉暂留效果。图2.2显示接口电路2.2键盘接口电路独立式按键是直接用I/O口线构成的单个按键电路,其特点是每个按键占用一根I/O口线,每个按键的工作不会影响其他I/O口线的状态,其结构如图3.2所示,该方案硬件连线简单,各按键之间相互独立,但占用I/O口较多,动态扫描方式需占用CPU较多的时间,在单片机没有太多实时测控任务的情况下可以采用。因本系统按键较少,此方式硬件电路较简单,所以本系统采用此种方式。如图3.2中按键输入均采用低电平有效,此外,上拉电阻保证了按键断开时,I/O口线有确定的高电平.独立式按键的软件常采用查询式结构,先逐位查询每根I/O口线的输入状态,如某一跟I/O口线输入为低电平,则可确定该口线所对应的按键已按下,然后,再转向该键的功能处理程序。图2.3键盘接口电路2.3时钟振荡电路在AT89S51芯片内部有一个高增益的反相放大器,其输入端为引脚X1,输出端为引脚X2,X1和X2之间跨接晶体振荡器和微调电容从而构成一个稳定的自激振荡器,这就是时钟电路。一般地,电容C1,C2取30PF左右,晶体的振荡频率范围是1.212MHz。晶体震荡频率高,则系统运行速度也越快。图2.4时钟电路振荡电路2.4复位电路在图3.4中该电路除了可以利用电容充电来实现复位以外,还可以按图中的E键,此时电源VCC经电阻R5,R6分压,在E端产生一个复位高点平。图中R5取200欧,R6取1000欧,电容取22μF。图2.5复位电路2.5电源电路工作原理介绍直流稳压电路的介绍本电源电路采用采用单相桥式整流电路,电路图如图4.1所示。图中的D1~D4四个整流二极管接成电桥形式,故称为桥式整流。设变压器的原边电压为220V工频交流电,经整流桥整流后为直流7V。后半部分为集成稳压电路。三端固定输出集成稳压器通用产品有CW7800系列(正电源)和CW7900系列(负电源)。集成稳电路的确输出主要取决于集成稳压器,由于本电路所采用的集成器为CW7805所以输出的确电压为+5V,额定输出电流为1.5A。其中C2可以起抵消电感效应,以防止起自激振荡,还可以抑制电源高频脉冲干扰,一般取0.1~1uF。输出端电容C3,C4用以改善负载的瞬态响应,消除电路的高频噪声,同时也具有消振作用,二级管是用来防止输入端短路时输出电容C4所储存电荷通过稳压器放电而损坏器件。图2.6直流稳压电路原理图电源变压器电源PCB电压变压器的作用是将220V的交流电压V1变换成整流滤波电路所需的交流电压V2。变压器副边与原边的功率比为:P2/P1=η………………2.1式中,η为变压器的效益。整流滤波电路整流二极管D1~D4组成单相桥式整流电路,将交流电压V2变成脉动的直流电压,再经滤波电容C滤除纹波,输出直流电压Vi。Vi与交流电压V2的有效值V2的关系为:Vi=(1.1-1.2)V2………………2.2每只整流二极管承受的最大反向电压:VRM=V2……2.3通过每只二极管的平均电流:ID=1/2IR=0.45V2/R………………2.4式中,R为整流滤波电路的负载电阻。它为电容C提供放电回路,RC放电时间常数应满足:RC>(3-5)T'/2式中T为50Hz交流电压的周期,即20ms。稳压电路调整管U1与负载电阻RL相串联,组成串联,式稳压电路,U1与稳压管D5组成采样比较放大电路,当稳压器的输出负载变化使,输出电压VO应保持不变。稳压电源的性能指标最大输出电流:指稳压电源正常工作使能输出的最大电流,用Io<Iomax,稳压电路内部应用保护电路,以防止Io>Iomax使损坏稳压器输出电压:指稳压电源的输出电压↓,用Vo表示。采用如图4.5所示的测试电路,可以同时测量VO与Iomax测试过程是:输出端接负载电阻RL,输入端接220V的交流电压,数字电压表的测量即为Vo。再使RL逐渐减小,直到Vo的值下降5%,此时流经负载RL的电流为Iomax。纹波电压:指叠加输出电压Vo上的交流分量,一般为mv级。可将其放大后,用示波器观测其峰-峰植也可以用交流电压表测试量其有效值,由于纹波电压不是正弦波,所以有效值衡量存在一定误差。稳压系数:指负载电流Io、环境温度T不变的情况下,输入电压的相对变化引起输出电压的相对变化,即稳压系数………………2.52.6下载线电路下载线的接口选用AT89S52的P1口中的P1.5、P1.6、P1.7。接口中的J1要加电源,如果没有加电源,经过测试只有0-3V的变化。而且此电路中数据线不能用的太长,否则会检测不到器件。而且电源必须稳定,否则可以检测到器件但是不可以下载或者下载到一半就会效验数据出错。如图2-9:图2-7下载线电路3软件单元电路的设计3.1单片机AT89S52,驱动器74LS244与8255芯片3.1.1AT89S52的介绍AT89S52单片机兼容标准MCS-51指令系统。使用ATMEL公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。AT89S52单片机是一个低电压,高性能CMOS8位单片机,片内含8kbytes的可反复擦写的只读程序存储器(PEROM)和256bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,片内置通用8位中央处理器和Flash存储单元。AT89S52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2个读写口线,AT89S52可以按照常规方法进行编程,也可以在线编程。其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。(1)AT89S52的封状形式及管脚:(如图3-1)(2)管脚、引线与功能引脚信号介绍:P00~P07P0口8位双向口线P10~P17P0口8位双向口线P20~P27P0口8位双向口线P30~P37P0口8位双向口线ALE地址锁存控制信号:在系统扩展时,ALE用于控制把P0口输出低8位地址送锁存器锁存起来,以实现低位地址和数据的隔离。此外由于ALE是以晶振六分之一的固定频率输出的正脉冲,因此可作为外部时钟或外部图3-1AT89S52芯片定时脉冲作用。/EA访问程序存储器控制信号:当/EA信号为低电平时,对ROM的读操作限定在外部程序存储器;而当/EA信号为高电平时,则对ROM的读操作是从内部程序存储器开始,并可延至外部程序存储器。RST复位信号:当输入的复位信号延续2个机器周期以上高电平时即为有效,用以完成单片机的复位初始化操作。XTAL1和XTAL2外接晶体引线端:当使用芯片内部时钟时,此二引线端用于外接石英晶体和微调电空;当使用外部时钟时,用于拉外部的时钟脉冲信号。VSS:地线VCC:+5V电源(3)信号引脚的第二功能:由于工艺及标准化等原因,芯片的引脚数目是有限制的,例如MCS—51系列把芯片引脚数目限定为40条,但单片机为实现其功能所需要的信号数目却远远超过此数,因此就出现了需要与可能的矛盾。因此,给一些信号引脚赋以双重功能。P3口线的第二功能:P3的8条口线都定义有第二功能,详见表3-1:表3-1P3口线的第二功能口线第二功能替代的专用功能P3.0RXDRXD(串行输入口)P3.1TXDTXD(串行输出口)P3.2/INT0INT0(外部中断0)P3.3/INT1INT1(外部中断1)P3.4T0T0(定时器0的外部输入)P3.5T1T1(定时器1的外部输入)P3.6/WR/WR(外部数据存储器写选通)P3.7/RD/RD(外部数据存储器读选通)(4)总线结构:AT89S52的管脚除了电源、复位、时钟接入、用户I/O口部分P3外,其余管脚都是为实现系统扩展而设置的。这些管脚构成了三总线形式,即:1)地址总线(AB):地址总线宽度为16位,因此,其外部存储器直接地址外围为64K字节。16位地址总线由P0经地址锁存器提供低8位地址(A0~A7);P2口直接提供高8位地址(A8~A15)。2)数据总线(DB):数据总线宽度为8位,由P0口提供。3)控制总线(CB):由部分P3口的第二功能状态和4根独立控制线RESET、/EA、ALE、/PSEN组成。驱动器74LS244的介绍图3-274LS244芯片外部管脚图常用的单向总线驱动器有74LS240(带反向输出)、74LS241和74LS244。如图3-11为它的外部管脚图。它可以扩展一个8位输入口,使用时有1,2图3-274LS244芯片外部管脚图做为选通信号。两个输入端分别是由1A1~1A4和2A1~2A4组成。两个输出端分别由1Y1~1Y4和2Y1~2Y4组成。也只有当1、2为低电平时,1Y1~1Y4和2Y1~2Y4的输出反映输入电平的高低。而当1、2为高电平时,输出1Y1~1Y4和2Y1~2Y4为高阻态。输入的有用信号被缓冲后,输出的信号驱动能力更大。3.1.38255基本结构及工作方式可编程并行I/O接口芯片8255,具有40个引脚,DIP封装,内部含有三个可编程并行I/O口(PA、PB、PC口),它们都是8位口。其中A,B口是单纯数据口,供数据I/O口使用。而C口则既可以作数据口,又可以作控制口使用,用于实现A口和B口的控制功能。C口的高四位控制A口,低四位控制B口。(1)数据总线缓冲器数据总线缓冲器为8位双向三态缓冲器,可以直接和单片机数据线想连,与I/O操作有关的数据、控制字和状态信息都是通过该缓冲器进行传送的。(2)读写控制逻辑CS——片选信号(低电平有效)。RD——读信号(低电平有效)。WR——写信号(低电平有效)。A0、A1——端口选择信号。8255共有四个可寻址的端口(即A、B、C口和控制寄存器)RESET——复位信号(高电平有效)。读写控制逻辑用于实现8255的硬件管理,其内容包括:芯片的选择,口的寻址以及规定各端口和单片机之间的数据传送方向。详见如下表3.2:表3.2读写控制逻辑用于实现8255的硬件管理CSA1A0RDWR所选端口操作00001A口读端口A0101B口读端口B01001C口读端口C00010A口写端口A00110B口写端口B01010C口写端口C01110控制寄存器写控制字1××××/数据总线缓冲器输出高阻抗(3)工作方式8255A共有3种工作方式,即方式0,方式1,方式2。本设计主要运用工作方式0,故在这里只介绍工作方式0。方式0是基本输入,输出方式,可供使用的是两个8位口(A口和B口)及两个4位口(C口高位部分和低位部分)。4个口可以是输入和输出的任何组合。方式0适用于无条件数据传送,也可以把C口的某一位作为状态位,实现查询方式的数据传送。(4)初始化8255的初始化就是向控制字寄存器写入工作方式控制字和C口位置位/复位控制字,由于这两个控制字标志位的状态不同(当控制字的最高位为1时,此时为工作方式控制字,当最高位为0时,为C口位置位/复位控制字),8255自身能加以区别。为此,两个控制字可按同一地址写入且不受先后顺序限制。存储单元的分配单片机AT89S52引脚有与各内部存储单元地址的分配,其分配如下表3.3存储单元的分配表内容存储器地址单元显示缓冲单元77H7EH堆栈起始单元60H秒单元个位的存储单元77H秒单元十位的存储单元78H分单元个位的存储单元7AH分单元十位的存储单元7BH小时单元个位的存储单元7DH小时单元十位的存储单元7EH秒计数的循环次数46H硬件资源的分配(1).定时器/计数器的使用定时器/计数器0,定时功能,工作方式1,提供125毫秒的定时时间。(2).中断源的使用定时器/计数器中断0,计满8次即得到秒计时单位。(3).按键的使用A键(启动/暂停)接P1.0;B键(时加1)接P1.1;C键(分加1)接P1.2;D键(秒加1)接P1.3(4).数码管的使用P0.7-P0.0段控线,接LED的显示段dp,g,f,e,d,c,b,aP2.7-P2.0位控线,左至右(LED0,LED1,LED2,LED3,LED4,LED5,LED6,LED7)。3.2软件程序流程框图资源分配本程序采用定时/计数器T/C0:定时功能,工作方式为方式1,定时50mS。由于本程序是采用C语言设计方法,在C语言设计中,缓冲区的空间由软件自行分配,只要把它定义低128单元就可以了.具体如下:#include"absacc.h"#include"reg51.h"//调用库函数;#defineucharunsignedchar#definePAXBYTE[0xfdf9]//预定义PA口地址#definePBXBYTE[0xfdfa]//预定义PA口地址#definePCXBYTE[0xfdfb]//预定义PA口地址#defineCOMXBYTE[0xfdf8]//预定义命令字的口地址;Ucharcodetab[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0xf3};//在ROM中定义数字转换码;uchardatab[6]={0,0,0,0,0,10};//在89S52的RAM的前128个单元中定义数组用于存放时钟,分别存放时,分,秒,的个位,十位.在初始化时,在数组中存放显示“.0.0”的,这样电子钟刚上电就可以显示“P.”。uchardatacount=0;voiddisp(ucharidata*p);//显示函数;voiddeltime(uchars);//延时函数;voiddiskey(void);//键扫描函数;voidchap1(void);//开始/停止键单独扫描函数;voidadd(void);//定时器0中断函数;voidsss(void);//电子钟运行时,秒,分,时加1函数;voidadd1(void);//调时时,秒加1函数;voidadd2(void);//调时时,分加1函数;voidadd3(void);//调时时,时加1函数;电子钟的P.流程框图先将堆栈,程序状态字及数据储存器进行初始化,再将显示“P。”的字形代码送入显示缓冲区内,然后调显示子程序进行“P。”的循环显示。其框图如图3-3所示。图3-4图3-4显示子程序流程框图图图显示子程序流程框图图3-3“P.”显示程序流程框图显示子程序流程框图转中断服务程序之前把单片机中各有关寄存单元的内容保存起来改变寄存器组号,通过P0口送到段控码再通过P2口送入位控码中,延时点亮LED。并使缓冲地址加1,同时使位控码左移,直到每位都显示完。其框图上如3-4所示。加1子程序流程框图先取十位数存于A的高半子节,再取个位数存于A的低半字节,将A的内容加1,再通过DAA指令进行十进制调整,再将A的低半字节存于个位缓冲单元,再通过SWAPA指令调换A的低/高半子节,并将低半字节存于十位缓冲单元。其框图如图3-5所示。图3.5加1子程序流程图3.5加1子程序流程框图中断子程序在转中断服务程序之前把单片机中各有关寄存单元的内容保存起来重新记载初值直到满8次1S,然后进行秒加1直到达到60秒,接着对秒存储单元清0后进行分加1直到达到60分,达到后再对分存储单元清0进行时加1直到达到24时最后对时储存单元清0。其框图如上图3-6所示图3.6中断服务程序流程框图键扫描程序流程框图先给P1口#0FFH的输出,再采样P1口的值存于A中并取反,屏闭其高半字节,判断有无键,若无键按下则返回主程序,若有键按下,则调显示子程序进行延时消抖,再次采样P1口的值,若仍有键按下,则存储键值。其框图如图3-7所示:图3.7键扫描程序流程框图B键功能程序流程框图若B键按下,调延时子程序,“时”缓冲单元地址送R0中,调加一子程序对“时”进行加一。接着判断是否已达到“24时”,若达到则对时缓冲单元清0,若未达到“24时”则返回。其框图如上图3-8所示。其中C键与D键的功能程序流程图与B键相似,所以在此不再累述。图3.8B键功能程序流程框图

主程序流程框图图3-9主程序流程框图调试4.1硬件调试硬件调试的主要任务是排除硬件故障,其中包括设计错误和工艺性故障。 1、脱机检查。用万用表逐步按照电路原理图检查印制电路板中所有器件的各引脚,尤其是电源的连接是否正确;检查数据总线、地址总线和控制总线是否有短路等故障,顺序是否正确;检查各开关按键是否能正常开关,是否连接正确;各限流电阻是否短路等。为了保护芯片,应先对各IC座(尤其是电源端)电位进行检查,确定其无误后再插入芯片 2、联机调试。可以通过一些简单的测试软件来查看接口工作是否正常。可当我们刚通电试验时,结果发现有两段总是亮的,后来经过认真的检查发现还有两根线短路了。经修改后,再设计一个使所有LED全显示“0.”的静态显示程序来检验时已经没问题了。4.2软件调试软件调试的任务是利用开发工具进行在线仿真调试,发现和纠正程序错误,同时也能发现硬件故障。程序的调试应一个模块一个模块地进行,首先单独调试各功能子程序,检验程序是否能够实现预期的功能,最后逐步将各子程序连接起来总调。联调需要注意的是,各程序模块间能否正确传递参数,寄存器组是否有冲突,特别要注意各子程序的现场保护与恢复。总体来说,软件调试较顺利。结束语1、电子表的使用说明数字电子表主要功能是时、分、秒的显示。它主要由A、B、C、D这几个按键控制。A键是数字电子钟启动/停止;B键用于数字电子钟在校时过程中的时加1;C键用于数字电子钟在校时过程中的分加1;D键用于数字电子钟在校时过程中的秒加1。具体操作如下:1.当数字电子表刚开始上电时,数码管的最高位(LED7)显示提示符“P.”。2.然后按下A键数字电子表便显示“00”时“00”分“3.如果因为时间不标准,想要调整时间。那么:第一次按下A键,数字电子表运行停止,按下B键对简易数字电子表的时进行调整;按下C键对简易数字电子表的分进行调整;按下D键对简易数字电子表的秒进行调整。如果时间调整好或是不需要调整后,再次按下A键则数字电子表启动,进入运行状态。2、误差分析及解决办法在单片机应用系统中,一般都是按晶振的标称值来设定定时器固定的时间常数,对ALE信息分频,再通过对中断信号(由定时器溢出产生)计数获得秒信号。由于晶体实际频率并不与标称值相符(最大误差达万分之三以上),故导致定时信号存在误差。解决办法一般是先测出晶体的实际频率,再针对实测频率设定两个时间常数,对分频余数进行补偿,达到精确定时的目的。(具体如下)设晶体实测频率为fi,选单片机T0为定时器,其定时输入为ALE信号。精确定时设定的两个时间常数:主常数和补偿常数TCC(余数)。为方便起见,设主常数为65536(相当于0,好溢出后不用重装),在该常数下,T0溢出次数为n-1.在补偿常数TCC(余数),T0只溢出一次,溢出后即将常数改为65536(主常数,65536相当于0,只需记中断次数而不用重装)。如要定出秒信号,则由下式解出TCC及n(正整数):0≤TCC=65536×n-INT(fi/12+0.5)<65536其中INT(x)表示对x取整,即对fi/12的小数部分四舍五入。初始化时,在T0内写入TCC,某内存单元内写n。定时器溢出产生中断,n减1,减至0时得到秒信号。这时T0内重新写入TCC,内存中重新写入n(为下一秒信号定时做准备);否则直接中断返回,不写T0,那么T0即以65536为时间常数。除以上的误差外,在程序执行过程中也会产生误差。具体如下:中断执行误差:单片机最短的响应时间为3个机器周期。其中中断请求标志位查询占1个机器周期。在这个机器周期结束后,中断即被响应,产生LCALL指令。而执行这条长调用指令需2个机器周期。中断响应的最长时间为8个机器周期。该情况发生在中断标志查询时,刚好是开始执行RET,RETI等指令,则需把当前指令执行完再继续执行一条指令后,才能进行中断响应。一般中断响应时间都是在大于3个机器周期而小于8个机器周期的两种极端情况之间。定时器溢出后,定时器继续运行亦会带来误差:由于定时器计数溢出后,计数器会置“0”。故在循环初值重置之前,定时器依旧运行,影响定时精度。以上两种误差的解决办法要根据实际情况更改预设初值,这样可降低误差,提高时间的准确度。如能在硬件上解决频率稳定(采用恒温槽),则定时效果将达到高度精确。也可以采用实时时钟芯片如(典型的DS1302,DS12C887)。以上就是通过软件,硬件方法解决时间误差的方法。3、设计体会本此设计完成了基于单片机的电子表的设计,该电子表钟精确度较高,因为在程序的执行过程中,任何指令都不影响定时器的正常计数。从而,使电子表的精度仅仅取决于单片机的产生机器周期电路和定时器TO硬件电路的精确度;另外,程序较为简洁,具有可靠性和较好的可读性。如果我们想将它应用于实时控制之中,只要对上述程序和硬件电路稍加修改,便可以得到实时控制的实用系统,从而应用到实际工作与生产中去。本次基于Intel8255单片机电子钟的精妙之处在于它节约了单片机的口资源,便于以后扩展。本次设计的难点是软件部分的设计,硬件部分越简单,软件则越复杂,作为一个小型的单片机系统,软件是其中的灵魂,软件决定了其功能是否能够实现,所以这次设计的关键也在于软件的设计。总之,这次设计让我受益非浅,一方面增强了自身的实践能力、对单片机有了更深入的了解,同时也发现自己有很多不足之处,在理论与实践相结合方面有待进一步的锻炼和提高。这次能完成设计最要感谢王韧参考文献[1]、刘守义,单片机应用技术[M],西安:西安电子科技大学出版社。[2]、清源计算机工作室,机械工业出版社。[3]、马家辰,MCS-51单片机原理与接口技术[M],哈尔滨:哈尔滨工业大学出版社。[4]、孙江宏、李良玉编著,Protel99电路设计与应用.机械工业出版社,2001.7[5]、李广弟编著,单片机基础[M],北京:北京航空航天大学出版社,2001.12;[6]、孙江宏、李良玉编写,电路设计与应用[M],北京:机械工业出版社,2001.7[7]、胡宴如主编,胡宴如、耿苏燕编写,模拟电子技术基础[M],北京:高等教育出版社,1993.10;[8]、何立民编著,MCS-51系列单片机应用系统设计系统配置与接口技术[M]北京:北京航空航天大学出版社,1990.1;[9]、赵秀珍编著,单片微型计算机原理及其应用[M],北京:中国水利水电出版社,2001.8;[10]、张洪润编著,单片机应用技术教程[M],北京:清华大学出版社,1997.11;[11]、张毅刚主编,MCS-51单片机应用设计[M],哈尔滨:哈尔滨工大学出版社,1990.8;[12]、李全利主编,单片机原理及应用技术[M],北京:高等教育出版社,2002.9[13]、何立民编著,单片机高级教程(应用与设计)[M],北京:北京航空航天大学出版社,2001.6附录附录一、电子表原理图附录二、电子表PCB图附录三、元件清单表1电源清单序号名称大小数量备注1、变压器无1个~220V-~9V2、开关无1个K13、整流桥无1个无4、极性电容1000nF1个C15、极性电容10nF2个C2、C36、CW7805芯片无1个无7、二极管无1个无表2电子钟清单序号名称大小数量备注1、AT89S52芯片无1块单片机2、74LS244芯片无2块驱动3、晶振6MHz6MHz1个无4、数码管无2个四位一体5、瓷片电容33pF2个无6、上拉电阻5.1KΩ4个无7、限流电阻200Ω9个无8、电解电容22UF1个无9、按键无5个无10、敷铜板(30cm×20cm)1块无11、下载线无1套无12、限流电阻1K1个无13、芯片插座40脚1个保护芯片14、芯片插座20脚2个同上附录四、程序总清单如下:/*设计者:朱双平*//*程序功能说明:本程序是用89S52和8255设计的电子钟*//*硬件功能说明:本设计是用8255的PA口作为数码管显示的段控,PB口作为数码管显示的位控,PC口用于按键控制,其中PB的第0口用于控制电子钟的开始和停止,当按一下电子钟开始工作,再按一下就停止工作,等待调时,再按一下就又开始工作.第1口用于调秒,按一下,就加1,第2口用于调分,当按一下分就加1,第3口用于调时,当按一下,分就加1.*/#include"absacc.h"#include"reg51.h"//调用库函数;#defineucharunsignedchar#definePAXBYTE[0x0000]//预定义PA口地址#definePBXBYTE[0x0100]//预定义PB口地址#definePCXBYTE[0x0200]//预定义PC口地址#defineCOMXBYTE[0x0300]//预定义命令字的口地址;ucharcodetab[12]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x0c,0xbf};//在ROM中定义数字转换码;uchardatab[]={0,0,11,0,0,11,0,10};//在89S52的RAM的前128个单元中定义数组用于存放时钟uchardatacount=0;voiddisp(ucharidata*p);//显示函数;voiddeltime(uchars);//延时函数;voiddiskey(void);//键扫描函数;voidchap1(void);//开始/停止键单独扫描函数;voidadd(void);//定时器0中断函数;voidsss(void);//电子钟运行时,秒,分,时加1函数;voidadd1(void);//调时时,秒加1函数;voidadd2(void);//调时时,分加1函数;voidadd3(void);//调时时,时加1函数;/*定时器初始化设置以及调用显示P.和键扫程序*/voidmain(void){TMOD=0x01;//定时器工作方式设定,设定为工作方式1,选定时器0TH0=0x3c;//定时器初始值设计 TL0=0xb0; TR0=0; EA=1;//开总中断 ET0=1;//开定时器0中断 disp(b);//调显示“P”函数 diskey();//调键扫描函数 }/*显示程序,数码管从左边第一位开始逐位向右移动显示*/voiddisp(ucharidata*p){uchardatasel,i;COM=0x89;//8255口命令字设置,PA口,PB口为输出,PC口为输入;sel=0x01; for(i=0;i<8;i++) {PA=tab[*p];PB=sel; deltime(1);PB=0x00; p++; sel=sel<<1;} }/*延时程序,使数码管每次点亮的时间足够长*/voiddeltime(uchars) { uchardataj; while(s--) {for(j=0;j<=125;j++);}}/*对开始/停止键单独扫描,当按下时即跳出此函数*/voidchap1(void){for(;;){while((PC&0x01)==1)//当开始/停止键按下时,跳出while循环,否则一直调用显示函数{disp(b);}disp(b);//调显示函数作为去键抖动延时 disp(b); if((PC&0x01)==0)break;} for(;;) {while((PC&0x01)==0)//当开始/停止键释放时,跳出while循环; {disp(b);} disp(b);//调显示函数作为去键抖动延时disp(b); if((PC&0x01)==1)break;}}/*键扫描程序*/voiddiskey(void){uchardatan;chap1();//等待开始/停止健按下;b[7]=0;Loop:TR0=1;//开始计时;chap1();//等待开始/停止键按下;TR0=0;//停止计时,进入调时程序;for(;;){while(1){whil

温馨提示

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

评论

0/150

提交评论