应用电子毕业设计(论文)-基于单片机控制的数字钟.doc_第1页
应用电子毕业设计(论文)-基于单片机控制的数字钟.doc_第2页
应用电子毕业设计(论文)-基于单片机控制的数字钟.doc_第3页
应用电子毕业设计(论文)-基于单片机控制的数字钟.doc_第4页
应用电子毕业设计(论文)-基于单片机控制的数字钟.doc_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

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

文档简介

扬 州 市 职 业 大 学毕 业 设 计(论 文)设计(论文)题目:基于单片机控制的数字钟 系 别: 电子工程系 1专 业: 应用电子 班 级: 08电子(2) 1姓 名: 1学 号: 指导教师: 完成时间: 11年4月30日 目 录摘要2第1章 绪论31.1课题简介3 1.2系统功能要求3第2章 方案设计4 第3章 硬件设计63.1 最小系统设计7 3.2 时间调整电路设计103.3 显示电路设计113.4整点报时电路设计123.5电路相关参数的计算12第4章 软件设计144.1主程序设计144.2显示子程序设计154.3定时器中断服务子程序设计15第5章 检测与调试17 5.1硬件调试17 5.2软件调试17总结 19附录21参考文献32基于单片机控制的数字钟 摘要:近年来随着计算机在社会领域的渗透和大规模集成电路的发展,单片机的应用正在不断地走向深入,由于它具有功能强,体积小,功耗低,价格便宜,工作可靠,使用方便等特点,因此特别适合于与控制有关的系统,越来越广泛地应用于自动控制,智能化仪器,仪表,数据采集,军工产品以及家用电器等各个领域,单片机往往是作为一个核心部件来使用,在根据具体硬件结构,以及针对具体应用对象特点的软件结合,以作完善。本次毕业设计中做的数字钟是以单片机(at89c51)为核心,结合相关的元器件(led数码显示器、时钟芯片等功能模块),再配以相应的软件。其硬件电路设计主要包括中央处理单元电路、时钟电路、信号处理电路等几部分组成。数字钟是采用数字电路实现时、分、秒数字显示的计时装置,广泛应用于个人家庭,车站,码头等公共场所,成为人们日常生活中不可缺少的必需品。在本次的毕业设计中,实现以单片机为核心,由led数码管显示时、分、秒的数字钟,并具有按键修改时钟参数和闹铃的功能。关键字:单片机;数字钟;at89c51;按键修改;闹铃第1章 绪 论1.1 课题简介该产品介绍一个采用at89c51单片机芯片制作的“数码显示电子钟”,该led数码管时钟电路采用24小时计时方式,时、分、秒用六位数码管显示。该电路采用at89c51单片机,结合相关的元器件,具有电路简单、制作容易、设置方便、使用灵活等优点。1.2 系统功能要求1.本电路采用的内部振荡器方式,晶体振荡器频率为6mhz,具有较高的频率稳定性,且延时采用数字计数的方式进行,因而对时间的控制、精度较高,可有效地控制时间不准、不可靠的问题出现。2.初始加电时,显示初始状态,本电路的6位数码显示管将自动显示出程序默认的时间,只要不进行新的时间设置,数码管将从初始状态起计时。本程序的初始状态设为00:00:00。3.本电路允许用户随时通过调时按键自行输入设置新的时间参数,其范围可在1s-24h之间任意调试,使用户可以根据自身的需要来进行不同的时间设置。4.当调时进行完毕后,数码管显示将根据程序的要求自动加1s,秒位累计到60s,向分位进1,分位累计到60分,向时位进1,当时位累计到23,且秒位为59秒,分位为59分时,时位、分位、秒位自动归零,即24小时(一天)结束,进入下一工作日计时。5.本电路的外接电源可用5v直流电池电源,亦可将交流电压转变为直流电,简单方便。使用中应谨慎,避免硬件设施被烧坏。6.在进行时间参数设置和整个显示过程中,系统采用6位数码管做“时位、分位、秒位”计时显示(省电模式下除外),直观、准确。第2章 方案设计随着社会科技文化的发展,电子、电脑技术的不断提高,许多电路都有了不同的设计方案及连接方法。相同的产品用不同的系统也能用不同的原理去制成。数字钟作为一个普通的生活用品,有多种不同的制作方案。虽然数字钟比较简单,但作为我初次实验设计方案,对于我们初学者来说还是很有帮助的。在制作数字钟电路时,我选择了二种使用设计方案。第一种主要是用jk触发器制作的。第二种是用上述所说的单片机(at89c51)制作的。方案一:用数字电路设计。数字电路设计的可分模块组建,一个模块一个功能看起来易于理解,也由于这个原因使得在设计数字钟时所用到的元器件较多。如下图所示:24进制时计数器60进制分计数器60进制秒计数器jkjk1khz脉冲源10分频器10分频器q1 10分频器 图2-1 用数字电路设计的数字钟第一种方案的设计思路:首先,应有一种秒脉冲产生器,由石英体振荡器产生的基准信号,经过整形和分频获得。秒脉冲经过秒计数器(60进制)可以累计秒脉冲数,而秒计数器输出的分脉冲计数器(60进制)累计分钟数。同样,分计数器输出的脉冲经计数器(24进制)可累计时分数。这些时分秒计数通过数码管显示。方案二:用单片机设计。单片机设计分为硬件设计和软件设计,清晰明了。一个元件有几个功能。硬件上有不足处可在软件上解决,软件上不能完成的功能又可在硬件解决。使用方便,软硬件的可变化性很大,方法也很多。同时它也具有如下的优点:(1)可靠性高 (2)性能价格比高 (3)操作简便 (4)电路简单两种电路方案相比较之下,前者的方案虽然价格不是很贵,也比较实用、精确。但其电子元件相对多了很多(例如仅是触发器就有13个之多)。使得电路的焊接就显得非常困难。在短期的实践中就会显得比较仓促。更重要的一点就是当今社会的发展趋势是更趋向于高度的集成化。所以我选择了后者,即单片机控制数码管显示电路。这个方案不仅电路简单,也更符合发展的趋势,将高度的集成化融入实践中,更具实际意义。第3章 硬件设计硬件框图cpu8051复位电路按键闪烁和加1蜂鸣器时间显示图3-1 硬件框图 图3-2 电路原理图cpu是单片机内部的核心部件,它决定了单片机的主要功能特性。它由运算部件和控制部件两大部分组成。其中包括振荡电路和时钟电路,主要完成单片机的运算和控制控制功能;3.1 最小系统设计最小系统主要由6mhz晶振、2个30pf和1个10uf的电容,1个200, 1个10k电阻和开关组成。它的功能是使单片机能方便的与各种扩展芯片连接。只要将单片机接上时钟电路和复位电路即可。同时ea接高电平ale、psen信号系统不用,系统就可以工作。3.1.1 at89c51性能介绍由于at89系列单片机所有的cpu核心均为8051技术,下面来介绍at89系列单片机的性能和结构如图(四)所示。 图3-3 at89c51引脚at89c51单片机的封装形式有双列直插封装(pdip)方式对其引脚的主要功能简要说明如下:1)主电源引脚(1)vcc:电源端。(2)gnd:接地端。2)外接晶体引脚xtal1和xtal2(1)xtal1:接外部晶体一个引脚。(2)xtal2:接外部晶体管的另一个引脚。3)控制信号引脚(1)ale/prog:地址锁存允许/编程信号端。当访问片外存储器时,该引脚信号为地址锁存信号ale。ale的输出用于锁存地址的低8位字节。即使不访问片外存储器,ale端仍以不变的频率(此频率为振荡器频率的确良1/6)周期性地出现正脉冲信号。因此,ale也可用作对外输出时钟,或用于定时等目的。(2)/psen:外部程序存储器读选通信号。当单片机访问外部程序存储器时(取指令或常数),每个机器周期psen两次有效(即输出2个脉冲)。当访问外部数据存储器时,将不出现psen信号。(3)ea/vpp:外部程序存储器访问允许/编程电压输入端。要使cpu只访问外部程序存储器(地址范围为0000hffffh),则ea端必须保持低电平(接地)。 当ea端保持高电平(接vcc端)时,cpu则执行内部程序存储器中的程序。(4)rst:复位信号输入端。当振荡器运行时,若在该引脚上出现两个机器周期的高电平信号,将使单片机复位。4)输入/输出引脚(i/o口线) (1)p0端口(p0.0p0.7):p0口是一个8位漏极开路型双向i/o端口。 (2)p1端口(p1.0p1.7):p1口是一个带有内部上拉电阻的8位双向i/o端口。 (3)p2端口(p2.0p2.7):p2口是一个带有内部上拉电阻的8位双向i/o端口。p2口的输出缓冲器可驱动(吸收或输出电流方式)4个lsttl负载。 (4)p3端口(p3.0p3.7):p3口是一个带内部上拉电阻的8位双向i/o端口。p3口的输出缓冲器可驱动(吸收或输出电流方式)4个lsttl负载。在at89c51中,p3端口可作一般的通用i/o使用,也可用于一些复用功能。复用功能如下表p3各端口的复用功能表p3口复用功能p3.0口rxd串行输入口p3.1p3.2p3.3p3.4p3.5p3.6p3.7txdint0int1t0t1wrrd串行输出口外部中断0输入端外部中断1输入端定时/计数器0的外部输入端定时/计数器1的部输入端外部数据存储器写选通外部数据存储器读选通3.1.2 复位电路:与at89c51的reset 脚相连,复位电路如图:图3-4 复位电路at89c51单片机复位是使cpu和系统中其他功能部件都处在一个确定的初始状态,无论在单片机刚开始接上电源时,还是断电后或者发生故障后都要考虑。单片机的复位条件是rst引脚加上持续两个机器周期(即24个振荡周期)的高电平,单片机常见的复位电路如图(五)所示。单片机的rst引脚为主机提供一个外部复位信号输入端口。复位以后,单片机内各部件恢复到初始状态,单片机从rom的0000h开始执行程序。单片机的复位方式有上电复位和手动复位两种,上电复位要求接通电源后,单片机自动实现复位操作。上电瞬间reset引脚获得高电平,随着电容的充电,rerst引脚的高电平将逐渐下降。rerst引脚的高电平只要能保持足够的时间(2个机器周期),单片机就可以进行复位操作。上电与按键均有效的复位电路不仅在上电时可以自动复位,而且在单片机运行期间,利用按键也可以完成复位操作。所以本设计选用第二种上电复位与按键均有效的复位电路,即手动复位电路。在图3-4中,r1=10k,r2=200,c3=10uf。rst按键可以选择专门的复位按键,也可以选择轻触开关。3.1.3 时钟电路:由6mhz的晶振和两个30pf的电容接at89c51的x1x2构成,保证系统正常工作。图3-5 时钟电路时钟电路用于产生单片机工作所需要的时钟信号,而时序所研究的是指令执行中各信号之间的相互关系。单片机本身就如一个复杂的同步时序电路,为了保证同步工作方式的实现,电路应在唯一的时钟信号控制下严格地作。at89c51内部有一个用于构成振荡器的高增益反相放大器,引脚xtal1和xtal2分别是此放大器的输出端和输入端。这个放大器与片外石英晶体和陶瓷谐振器一起构成了一个自激振荡器,如图3-5所示。一般情况下电容c1和c2取30pf左右,晶体的振荡频率范围是1.212mhz。晶体振荡频率越高,则系统的时钟频率越高,单片机运行速度也越快。一般情况下,单片机使用的振荡频率为6mhz或者说12mhz。在任何情况下,振荡器时钟驱动内部时钟发生器向主机提供时钟信号。时钟发生器是个2分频触发器,它向芯片提供一个两相的时钟信号。单片机工作的时间基准是由时钟电路提供的。在单片机的xtal1和xtal2两个引脚间,接一只晶振及两只电容就构成了单片机的时钟电路,在图3-5中,xtal1和xtal2脚接到6mhz的晶体振荡器上,与两个30pf的电容并联,并接低电平。电容对振荡频率有微调作用。3.2 时间调整电路设计按键电路是由开关s1,s2,上拉电阻r1=r2=10k,接在p3.2,p3.3口上,两个按键分别是加一和闪烁功能。当对时间进行调整时,当led数码管对应的显示时、分、秒的位闪烁时,可按键s2,对时间进行调整。图3-6 时间调整电路3.3 显示电路设计数码显示运用了led数码管。led数码显示器就是由发光二极管组合而成的1种新型显示器件,在单片机系统中应用非常普遍。在设计中我运用了共阳极法,当阴极端输入低电平时,断发光二极管就导通点亮,输入高电平不点亮,并运用了动态显示,逐个循环点亮数码管。led数码管显示电路:段码输出是由8个510欧姆的限流电阻,6个led共阳极的数码管,通过p0口输出的。位码控制是由6个4.7k的电阻,6个pnp(8550)极,通过p2口的p2.0,p2.1,p2.2,p2.3,p2.4,p2.5来控制的。图3-7 显示电路led采用共阳极连接方式,公共端接+5v电源,8个口分别和at89c51的p0口对应的8个引脚相连。3.4 整点报时电路设计电路图如下图3-8 整点报时电路本次设计中使用到一个蜂鸣器,当数码管显示到整点的时候蜂鸣器会进行整点报时,会发出“滴”的响声。3.5 相关电路参数的计算3.5.1 led数码管与p0口之间的电阻选择:由于led数码管是由七段发光二极管组成。发光二极管发光时的压降为1.8v,发光电流位312ma, 5v-1.8v=3.2v,可取电阻为510,则电流就为3.2v510,得到约为6.3ma,则电阻上的阻值应取位510。3.5.2 pnp三极管与p2口之间的电阻选择:假设led数码显示器八段全亮,则集电极电流ics为80ma.基极与发射极之间的电压为0.7伏,则基极电流ib=u/r即为(5-0.7)/r,又因为集电极电流为共射电流放大系数与基极电流之积,即ic=ib,当(5-0.7)/r80ma/b时,pnp工作在饱和区,即r(5-0.7)*b/80.因此,在此电路中,我们取电阻阻值为4.7k,使pnp工作在饱和区。具体计算如下u1=0.7v;ics=80ma; ib=u/r=(5-0.7)/r;ic=ib; ibic/(5-0.7)/r80ma/r(5-0.7)*/80=100;选取三极管8550的放大倍数为100r=4.7k;实际取4.7k3.5.3 开关与p3口之间的电阻选择:由于开关端的电阻接+5v电源,导线本身的电流是非常微小的,可选择了10k的电阻来完成硬件电路的连接。第4章 软件设计显示缓冲单元在70h75h,70h71h显示秒,72h73h显示分,74h75h显示时时间计数单元在70h71h(秒),76h77h(分),78h79h(时),74h单元放熄灭符(#0ah)计数单元采用bcd码计数,定时器t0设置为50ms溢出中断,为秒计数用,定时器t1为调整时闪烁用p3.7为调整按钮,p2口为字符输出口,采用共阳显示管。4.1 主程序设计从本设计的主程序流程图中可以看出,当按下复位开关set时,显示单元开始清零,将t0、t1设为16位计数器模式。此时允许t0中断,然后调用子程序,如果此时p3.7口为零,即输入为低电平,表示此时复位键set已经按下,即可进入调时程序进行时间设置。如若p3.7口不为零,为1,即高电平,则程序返回到显示子程序,继续执行,进行时间加1s,如此循环。图4-1 主程序框图4.2 显示子程序设计数码管的显示的数据存放在内存单元70h75h中,其中70h71h存放秒数据,72h73h存放分数据,74h75h存放时数据。每一单元内均为十进制bcd码。由于采用软件动态扫描实现数据显示功能,显示用十进制bcd码数据的对应码段存放在rom表中。显示时,先取出70h75h某一地址中的数据,然后查它的对应的显示用码段从p1口输出。p3口将对应的数码管选种供电,这样就能显示地址单元的数据值。4.3 定时器中断服务子程序设计这是本次时钟设计的关键,也是重中之重。定时器t0的作用是用来进行时间计时。定时溢出中断周期设为50ms ,中断累计达20次,即1s钟时对秒计时单元的数据进行加1操作。在执行t0中断服务程序时采用了bcd码计数,满60进位。具体分析见下图:图4-2 中断服务子程序框图源程序见附录一。第5章 检测与调试系统调试包括硬件调试和软件调试。硬件调试的任务是排除系统的硬件系统的硬件电路故障包括设计性错误和工艺故障。软件调试是利用开发工具进行在线防真调试,除发现和解决程序错误外,也可以发现硬件故障校时电路。本次设计中需要的调试如下:5.1 硬件的调试5.1.1 排除逻辑故障 这类故障往往由于设计和加工制板过程中工艺性错误所造成的,主要包括错线、开路、短路。排除的方法是首先将加工的印制板认真对照原理图,看两者是否一致。应特别注意电源系统检查,以防止电源短路和极性错误,并重点检查系统总线(地址总线、数据总线和控制总线)是否存在相互之间短路或与其它信号线路短路。必要时利用数字万用表的短路测试功能,可以缩短排错时间。5.1.2 排除元器件失效 造成这类错误的原因有两个:一个是元器件买来时就已坏了;另一个是由于安装错误,造成器件烧坏。可以采取检查元器件与设计要求的型号、规格和安装是否一致。在保证安装无误后,用替换方法排除错误。5.1.3 排除电源故障 在通电前,一定要检查电源电压的幅值和极性,否则很容易造成集成块损坏。加电后检查各插件上引脚的电位,一般先检查vcc与gnd之间电位,若在5v48v之间属正常。若有高压,联机仿真器调试时,将会损坏仿真器等,有时会使应用系统中的集成块发热损坏。5.2 软件调试软件调试的主要任务是排查错误,软件错误大致分为两类:5.2.1 逻辑错误 逻辑错误主要是语法错误,这些错误有显性和隐性的。显性比较容易发现通过仿真开发系统一般都能发现并加以改正。隐性错误不容易发现,必须排查。5.2.2 功能错误 功能错误主要是指在没有语法错误的基础上,由于设计思想或计算错误的原因导致不能实现软件功能的一类错误,仿真开发系统一般不能直接发现这类错误,必须借助于开发系统的寄存器数据和ram数据的查看/设置及断点运行等功能。通过入口和出口的比较等方法才能定位。1 指令疏漏 若设计中采用两位led数码显示,高低位显示要有时间的延时,要调用lcall ys程序。 2 指令错误本设计中显示程序有指令movc a,a+dptr,往往容易写成mov a,a+dptr 总之,单片机系统的硬件调试和软件调试是不能分开的,许多硬件错误是在软件调试中被发现和纠正的。但通常是先排除明显的硬件故障以后,再和软件结合起来调试以进一步排除故障。可见硬件的调试是基础,如果硬件调试不通过,软件设计则是无从做起。总 结伴随着毕业设计的完成,三年的大学生活即将结束,回首三年来通过自己踏实的学习,今天终于以合格的成绩完成了三年的学业。首先在此,我真诚感谢学校的领导以及老师对我三年来的教导。感谢我的毕业设计指导老师许志鸿在毕业设计这段时间里对我的指导和关心。千言万语化作一句话“老师,您们辛苦了!”。感谢您们这三年来对我的辛苦的教导。我这次选的毕业设计课题是“基于单片机控制的数字钟”。在此之前的实训中也接触过数字钟方面的设计,不过那时用的是数电方面的知识,这次老师要求我们单片机来做。经过几周的奋战我的毕业设计终于完成了。在没有做毕业设计以前觉得毕业设计只是对这几年来所学知识的单纯总结,但是通过这次做毕业设计发现自己的看法有点太片面,自己原来的知识也比较欠缺,自己要学的大学还有很多。首先在对电路图进行仿真时就遇到了难题,在使用proteus这个软件画图时,发现所需要的好多元器件找不到,还有总线的画法也不太清楚,这是由于对软件的使用不熟练,以后要多画图,常画图,才能熟练掌握它的使用方法。毕业设计不仅是对前面所学知识的一种检验,而且也是对自己能力的一种提高。通过这次毕业设计使我明白了自己原来知识还比较欠缺。自己要学习的东西还太多,以前老是觉得自己什么东西都会,什么东西都懂,有点眼高手低。通过这次毕业设计,我才明白学习是一个长期积累的过程,在以后的工作、生活中都应该不断的学习,努力提高自己知识和综合素质。前期得准备课题设计方案,做策划,还要收集资料等等,这些都是不能马虎的,要慎重。有了自己的设计方案之后就拟定电路草图,电路草图拟定好以后,就通过万用表等仪器,不断的制定元件的参数,选取元件。有时候元件的选取还要考虑它的经济性和实用性。因为元件的使用都是有条件的,所以自己要到图书馆或网上查找资料。有时候元件选好后,还要考虑是不是可以用比较便宜的元件代替才能达到一定的经济实惠的目的。总的来说,这次的毕业设计做得很成功。对我的启发也很大。从选择到定稿、从查找资料到电路图设计、再从理论到实践,整个过程中包含了很多知识,我学到了不少以前没接触的东西,同时也巩固了以前所学的知识。课程设计给了我一个教训,要有缜密的思维,扎实的专业基础加以灵活利用。本次设计让我领会到,理论与实践相结合。光有设想与理论是不行的,还要把它们转化成实践。这次的毕业设计让我把单片机的理论知识用在实践中,实现了理论和实践相结合,从中更懂得理论的是实践的基础,实践有能检验理论的正确性,对我以后参加工作或者继续学习。通过本次设计,我对单片机有了更深入的了解,对于程序的编写也有了很大的提高。而在这个过程中难免会出现不少问题,所以在整个过程中都要按部就班,细心的对待每个环节每个步骤。在获取知识的同时我也发现了自身的缺点与不足,以后要更用心的去对待每件事,用心去理解吸收。刚开始做毕业设计时真的好茫然,不知道该如何入手,真是万事开头难。不过,在老师的指导和同学的帮助之下,最后终于完称了,有种如释重负的感觉。此外,还得出一个结论:知识必须通过应用才能实现其价值!有些东西以为学会了,但真正到用的时候才发现是两回事,所以我认为只有到真正会用的时候才是真的学会了。 在设计过程中,我通过查阅大量有关资料,与同学交流经验和自学,并向老师请教等方式,使自己学到了不少知识,也经历了不少艰辛,但收获同样巨大。在这次毕业设计中,也使我们的同学关系更进一步了,同学之间互相帮助,有什么不懂的大家在一起商量,听听同学们不同的看法,有利于我们更好的理解知识,所以在这里,我要感谢那些帮助过我的同学,谢谢你们。在整个设计中我懂得了许多东西,也培养了我独立工作的能力,树立了对自己工作能力的信心,相信会对今后的学习工作生活有非常重要的影响。而且大大提高了动手的能力,使我充分体会到了在创造过程中探索的艰难和成功时的喜悦。虽然这个设计做的也不太好,还有好多方面的东西可以改进,比如整点报时的声音可以设计成一段自己喜欢的音乐,可以修改初始时间和设定报时时间等,但是限于现有的条件和我自身的知识能力,都没有实施成功,淡我会继续努力,如果将来有条件,我会再深入去了解,研究。总之在这次设计过程中所学到的东西是我此次毕业设计的最大收获和财富,使我终身受益。附录一:源程序; 中断入口程序 ; org 0000h ;程序执行开始地址 ljmp start ;跳到标号start执行 org 0003h ;外中断0中断程序入口 reti ;外中断0中断返回 org 000bh ;定时器t0中断程序入口 ljmp intt0 ;跳至intto执行 org 0013h ;外中断1中断程序入口 reti ;外中断1中断返回 org 001bh ;定时器t1中断程序入口 ljmp intt1 ;跳至intt1执行 org 0023h ;串行中断程序入口地址 reti ;串行中断程序返回;主 程 序;start: mov r0,#70h ;清70h-7ah共11个内存单元 mov r7,#0bh ;cleardisp: mov r0,#00h ; inc r0 ; djnz r7,cleardisp ; mov 20h,#00h ;清20h(标志用) mov 7ah,#0ah ;放入熄灭符数据 mov tmod,#11h ;设t0、t1为16位定时器 mov tl0,#0b0h ;50ms定时初值(t0计时用) mov th0,#3ch ;50ms定时初值 mov tl1,#0b0h ;50ms定时初值(t1闪烁定时用) mov th1,#3ch ;50ms定时初值 setb ea ;总中断开放 setb et0 ;允许t0中断 setb tr0 ;开启t0定时器 mov r4,#14h ;1秒定时用初值(50ms20) start1: lcall display ;调用显示子程序 jnb p3.7,setmm1 ;p3.7口为0时转时间调整程序 sjmp start1 ;p3.7口为1时跳回start1setmm1: ljmp setmm ;转到时间调整程序setmm; 1秒计时程序 ;t0中断服务程序 intt0: push acc ;累加器入栈保护 push psw ;状态字入栈保护 clr et0 ;关t0中断允许 clr tr0 ;关闭定时器t0 mov a,#0b7h ;中断响应时间同步修正 add a,tl0 ;低8位初值修正 mov tl0,a ;重装初值(低8位修正值) mov a,#3ch ;高8位初值修正 addc a,th0 ; mov th0,a ;重装初值(高8位修正值) setb tr0 ;开启定时器t0 djnz r4, outt0 ;20次中断未到中断退出addss: mov r4,#14h ;20次中断到(1秒)重赋初值 mov r0,#71h ;指向秒计时单元(71h-72h) acall add1 ;调用加1程序(加1秒操作) mov a,r3 ;秒数据放入a(r3为2位十进制数组合) clr c ;清进位标志 cjne a,#60h,addmm ;addmm: jc outt0 ;小于60秒时中断退出 acall clr0 ;大于或等于60秒时对秒计时单元清0 mov r0,#77h ;指向分计时单元(76h-77h) acall add1 ;分计时单元加1分钟 mov a,r3 ;分数据放入a clr c ;清进位标志 cjne a,#60h,addhh ; addhh: jc outt0 ;小于60分时中断退出 acall clr0 ;大于或等于60分时分计时单元清0 mov r0,#79h ;指向小时计时单元(78h-79h) acall add1 ;小时计时单元加1小时 mov a,r3 ;时数据放入a clr c ;清进位标志 cjne a,#24h,hour ; hour: jc outt0 ;小于24小时中断退出 acall clr0 ;大于或等于24小时小时计时单元清零outt0: mov 72h,76h ;中断退出时将分、时计时单元数据移 mov 73h,77h ;入对应显示单元 mov 74h,78h ; mov 75h,79h ; pop psw ;恢复状态字(出栈) pop acc ;恢复累加器 setb et0 ;开放t0中断 reti ;中断返回; 闪动调时 程 序 ;t1中断服务程序,用作时间调整时调整单元闪烁指示intt1: push acc ;中断现场保护 push psw ; mov tl1, #0b0h ;装定时器t1定时初值 mov th1, #3ch ; djnz r2,intt1out ;0.3秒未到退出中断(50ms中断6次) mov r2,#06h ;重装0.3秒定时用初值 cpl 02h ;0.3秒定时到对闪烁标志取反 jb 02h,flash1 ;02h位为1时显示单元熄灭 mov 72h,76h ;02h位为0时正常显示 mov 73h,77h ; mov 74h,78h ; mov 75h,79h ;intt1out: pop psw ;恢复现场 pop acc ; reti ;中断退出flash1: jb 01h,flash2 ;01h位为1时,转小时熄灭控制 mov 72h,7ah ;01h位为0时,熄灭符数据放入分 mov 73h,7ah ;显示单元(72h-73h),将不显示分数据 mov 74h,78h ; mov 75h,79h ; ajmp intt1out ;转中断退出flash2: mov 72h,76h ;01h位为1时,熄灭符数据放入小时 mov 73h,77h ;显示单元(74h-75h),小时数据将不显示 mov 74h,7ah ; mov 75h,7ah ; ajmp intt1out ;转中断退出; 加1子 程 序 ; add1: mov a,r0 ;取当前计时单元数据到a dec r0 ;指向前一地址 swap a ;a中数据高四位与低四位交换 orl a,r0 ;前一地址中数据放入a中低四位 add a,#01h ;a加1操作 da a ;十进制调整 mov r3,a ;移入r3寄存器 anl a,#0fh ;高四位变0 mov r0,a ;放回前一地址单元 mov a,r3 ;取回r3中暂存数据 inc r0 ;指向当前地址单元 swap a ;a中数据高四位与低四位交换 anl a,#0fh ;高四位变0 mov r0,a ;数据放入当削地址单元中 ret ;子程序返回 ; 清零程序 ;对计时单元复零用 clr0: clr a ;清累加器 mov r0,a ;清当前地址单元 dec r0 ;指向前一地址 mov r0,a ;前一地址单元清0 ret ;子程序返回; 时钟调整程序 ;当调时按键按下时进入此程序 setmm: clr et0 ;关定时器t0中断 clr tr0 ;关闭定时器t0 lcall dl1s ;调用1秒延时程序 jb p3.7,closedis ;键按下时间小于1秒,关闭显示(省电) mov r2,#06h ;进入调时状态,赋闪烁定时初值 etb et1 ;允许t1中断 setb tr1 ;开启定时器t1 set2: jnb p3.7,set1 ;p3.7口为0(键未释放),等待 setb 00h ;键释放,分调整闪烁标志置1

温馨提示

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

评论

0/150

提交评论