资源描述
摘 要基于单片机的定时和控制装置在许多行业有着广泛的应用,而数字钟是其中最基本,也是最具有代表性的一个例子。在基于单片机系统的数字钟电路中,除了基本的单片机系统和外围电路外,还需要外部的控制和显示装置。在本设计系统中,输入装置是按键开关,由于控制数字钟的运行模式,显示装置是LED 七段数码管,显示时间。通过数字钟的设计这个实例,可以使单片机系统的初步入门设计者很好地了解单片机的结构及其系统开发的设计方法。关键字:数字钟;单片机;LED显示电路;定时目 录第一章 引言1.1单片机简介11.1.1单片机的特点11.1.2 单片机的应用 1第二章 总体方案设计2.1 系统分析32.2 单片机的选择4第三章 系统硬件设计3.1 硬件系统设计53.2单片机结构及其引脚63.2.1 端口线73.2.2 电源线73.2.3 控制线73.3 定时器/计数器83.3.1 MCS-51对内部定时器/计数器的控制83.3.2 工作方式83.4 晶振和复位电路113.4.1 晶振电路113.4.2 复位电路113.5 校时(功能切换)电路133.6 LED显示电路133.6.1 LED显示的基本原理133.7 音频驱动143.8 系统整体电路14第四章 软件设计4.1 汇编语言的构成154.1.1 汇编语言的格式154.1.2 常用伪指令164.2 主要指令的介绍174.3 几个主要的子程序17第五章 结论5.1毕业设计所做的工作185.2 系统存在问题及改进方案18致谢19参考文献20附录120附录223电路图24第一章 单片机11 单片机简介在一片集成电路芯片上集成微处理器、存储器、I/O接口电路,从而构成了单芯片微型计算机,即单片机。单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。概括的讲:一块芯片就成了一台计算机。它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。同时,学习使用单片机是了解计算机原理与结构的最佳选择。单片机内部也用和电脑功能类似的模块,比如CPU,内存,并行总线,还有和硬盘作用相同的存储器件,不同的是它的这些部件性能都相对我们的家用电脑弱很多,不过价钱也是低的,一般不超过10元即可.用它来做一些控制电器一类不是很复杂的工作足矣了。我们现在用的全自动滚筒洗衣机、排烟罩、VCD等等的家电里面都可以看到它的身影!.它主要是作为控制部分的核心部件。它是一种在线式实时控制计算机,在线式就是现场控制,需要的是有较强的抗干扰能力,较低的成本,这也是和离线式计算机的(比如家用PC)的主要区别。 单片机是靠程序的,并且可以修改。通过不同的程序实现不同的功能,尤其是特殊的独特的一些功能,这是别的器件需要费很大力气才能做到的,有些则是花大力气也很难做到的。一个不是很复杂的功能要是用美国50年代开发的74系列,或者60年代的CD4000系列这些纯硬件来搞定的话,电路一定是一块大PCB板!但是如果要是用美国70年代成功投放市场的系列单片机,结果就会有天壤之别!只因为单片机的通过你编写的程序可以实现高智能,高效率,以及高可靠性!1.1.1 单片机的特点一、 控制性能和可靠性能高单片机是为满足工业控制而设计的,所以实时控制功能特别强,其CPU可以对I/O端口直接进行操作,位操作能力更是其他计算机无法比拟的。另外,由于CPU 、存储器I/O接口集成在同一芯片内,各部件间的连接紧凑,数据在传送时受干扰的影响较小,且不易受环境条件的影响,所以单片机可靠性非常高。 二、体积小、价格低、易于产品化 每片单片机芯片即是一台完整的微型计算机,对于批量大的专用场合,一方面可以在众多的单片机品种间进行匹配选择,同时还可以专门进行芯片设计,使芯片功能与应用具有良好的对应关系。在单片机产品的引脚封装方面,有的单片机引脚已减少到8个或更少,从而使应用系统的印制板减小、接插件减少、安装简单方便。 1.1.2 单片机的应用1.在智能仪器仪表上的应用单片机具有体积小、功耗低、控制功能强、扩展灵活、微型化和使用方便等优点,广泛应用于 仪器仪表中,结合不同类型的传感器,可实现诸如电压、功率、频率、湿度、温度、流量、速度、 厚度、角度、长度、硬度、元素、压力等物理量的测量。采用单片机控制使得仪器仪表数字化、智 能化、微型化,且功能比起采用电子或数字电路更加强大。例如精密的测量设备(功率计,示波器,各种分析仪)。2.在工业控制中的应用 用单片机可以构成形式多样的控制系统、数据采集系统。例如工厂流水线的智能化管理,电梯智能化控制、各种报警系统,与计算机联网构成二级控制系统等。3.在家用电器中的应用可以这样说,现在的家用电器基本上都采用了单片机控制,从电饭褒、洗衣机、电冰箱、空调机、彩电、其他音响视频器材、再到电子秤量设备,五花八门,无所不在。4.在计算机网络和通信领域中的应用现代的单片机普遍具备通信接口,可以很方便地与计算机进行数据通信,为在计算机网络和通信设备间的应用提供了极好的物质条件,现在的通信设备基本上都实现了单片机智能控制,从手机,电话机、小型程控交换机、楼宇自动通信呼叫系统、列车无线通信、再到日常工作中随处可见的移动电话,集群移动通信,无线电对讲机等。5.单片机在医用设备领域中的应用单片机在医用设备中的用途亦相当广泛,例如医用呼吸机,各种分析仪,监护仪,超声诊断设备及病床呼叫系统等等。此外,单片机在工商,金融,科研、教育,国防航空航天等领域都有着十分广泛的用途。第二章 总体方案设计2.1 系统分析基于单片机系统的数字钟的基本结构如下图 所示。从图中可以看出, 对于一个最简单的数字钟而言,除了输入控制方法具备数字钟自身的特点之外,LED 显示模块和其它的操作均是单片机的通用方法。由上图可以看出数字钟的主要功能模块分为3 类: 1. 输入控制是指在一定要求下,采取按键的控制方式来实现数字钟不同功能的转换,以及控制指令以汇编语言方式传送到单片机。2. LED 数码显示是指单片机将需要显示的数据发送到LED 显示模块,并控制LED 显示模块按照一定的格式显示的功能。3. 其它功能是指在实现数字钟的计时和显示的基本功能的基础上通过输入控制功能的切换来实现倒计时、秒表和闹钟定时等功能。而晶振电路都是所有单片机系统的必备部分,复位电路则在很多的时候也经常用到,极少的特殊情况下可以不用复位电路,其作用是在系统运行有问题的时候可以通过人工复位的办法进行初始化,使之能够重新从头开始执行程序,使系统运行再进入正常的状态。 2.2 单片机的选择一个完整的数字钟电路相当于一个简单的单片机系统,该系统由输入脉冲电路、单片机、晶振和复位电路、LED 显示电路几大部分组成。当中除了单片机是集成的IC 芯片,而其它的几个部分则需根据应用要求而自行设计。单片机又分为带有片内存储器和不带片内存储器两种,由片内存储器的容量十分有限,往往都比较小,在一些简单的系统应用里可能会绰绰有余,要是设计的是稍为复杂一点的系统就会显得捉襟见肘,此时就需要对存储器进行片外的扩展,到底选用哪一种芯片则由用户根据需要和成本来进行衡量和选定。对于本设计系统而言,选择带有片内RAM 和ROM 的MSC-8051/8752 已经足够应付对所有数据的读取应用,也可选用容量稍为大一点的8752 来设计,以便今后可以增加其它的控制功能,便于扩展。第三章 系统硬件设计3.1 硬件系统设计一个单片机微处理器的硬件电路设计包括两部分:一是系统扩充,即单片机内部如ROM、RAM、I/O 口、计数器中断系统等容量不够用时,必须在外部进行扩充,选择适当的扩充IC,设计相容的电路。二是系统装置,即按照系统功能要求配备外围设备,如键盘、显示器、打印机、A/D 转换器、D/A 转换器、串行通信接口,设计合适的接口电路。硬件设计需要考虑下列几点: 1. 硬件结构应结合应用软件一并考虑。软件有执行的功能尽可能由软件来执行,以简化硬件结构。但必须注意,由软件执行硬件的功能,其响应时间比直接使用硬件要长,且占用CPU 时间。2. 整个系统器件尽可能做到性能匹配。例如选用石英振荡器频率较高时,应选择存取速度较快的IC;选择CMOS 单片机构成低功耗系统时,系统所有的IC 都应该选择低功耗的IC。3. 可靠性及抗干扰设计是硬件设计极其重要的部分,包括器件选择、电路板布线、通道隔离等。3.2 单片机结构及其引脚80C51单片机由微处理器(含运算器和控制器)、存储器、I/O口以及特殊功能寄存器SFR(图中加黑方框和相应的标识符表示)等构成,内部逻辑结构如下图所示。80C51系列单片采用双列直插式(DIP),QFP44(Quad Flat Pack)和LCC(Leaded Chip Carrier)形式封装。这里仅介绍常用的总线型DIP40封装和非总线型DIP20封装,如下图所示。3.2.1端口线80C51共有4个8位并行I/O端口:P0、P1、P2、P3口,共32个引脚。P3口还具有第二功能,用于特殊信号输入输出和控制信号(属控制总线)。3.2.2 电源线电源: 1. VCC - 芯片电源,接+5V;2. VSS - 接地端;3.2.3 控制线控制线:控制线共有4根,1. ALE/PROG:地址锁存允许/片内EPROM编程脉冲 ALE功能:用来锁存P0口送出的低8位地址 PROG功能:片内有EPROM的芯片,在EPROM编程期间,此引脚输入编程脉冲。2. PSEN:外ROM读选通信号。3. RST/VPD:复位/备用电源。 ST(Reset)功能:复位信号输入端。 VPD功能:在Vcc掉电情况下,接备用电源。4. EA/Vpp:内外ROM选择/片内EPROM编程电源。 EA功能:内外ROM选择端。 Vpp功能:片内有EPROM的芯片,在EPROM编程期间,施加编程电源Vpp。3.3定时器/计数器80C51单片机片内集成有两个可编程的定时/计数器:T0和T1。它们即可以工作于定时模式,也可以工作于外部事件计数模式。此外,T1还可以作为串行接口的波特率发生器。3.3.1 80C51对内部定时器/计数器的控制80C51单片机定时/计数器的工作由两个特殊功能寄存器控制。TMOD用于设置其工作方式,TXON用于控制其启动和中断申请 。一、工作方式寄存器TMOD工作方式寄存器TMOD用于设置定时/计数器的工作方式,低4位用于T0,高4位用于T1GATE:门控位。GATE=0时,只要用软件使TCON中的TRO或TR1为1,就可以启动定时/计数器工作:GATA=1时,要用软件使TR0或TR1为1,同时外部中断引角INTO或INT1也为高电平时,才能启动定时/计数器工作。 即此时定时器的启动条件,加上了INT0或INT1引脚为高电平这一条件。C/T:定时/计数模式选择位。C/T=0为定时模式;C/T=1为计数模式。M1M01:工作方式设置位。定时/计数器有4种工作方式,由M1M0进行设置。如下表:表 定时/计数器工作方式设置表M1MO工作方式说明00方式013位定时/计数器01方式116位定时/计数器10方式28位自动重装定时/计数器11方式3T0分成两个独立的8位定时/计数器;T1此方式停止计数应注意的是,由于TMOD不能进行位寻址,所以只能用字节指令设置定时/计数器的工作方式。CPU复位时TMOD所有位清0,一般应重新设置。二、 控制寄存器TCONTCON的低4位用于控制外部中断,已在前面介绍。TCON的高4位用于控制定时/计数器的启动和中断申请。TF1(TCON.7):定时/计数器T1益处中断请求标志位。定时/计数器T1计数益处时由硬件自动置TF1为1。CPU响应中断后TF1由硬件自动清0。T1工作时,CPU可随时查询TF1的状态。所以,TF1可用作查询测试的标志。TF1也可以用软件置1或清0,同硬件置1或清0的效果一样。TR1(TCON.6):定时/计数器T1运行控制位。TR1置1时,定时/计数器T1开始工作;TR1置0时,定时/计数器T1停止工作。TR1由软件置1或清0。所以,用软件可控制定时/计数器的启动与停止。TF0(TCON.5):定时/计数器T0益处中断请求标志位,其功能 与TF1类同。TR0(TCON.4):定时/计数器T0运行控制位,其功能与TR1类同。3.3.2工作方式80C51单片机定时/计数器T0有4种工作方式(方式0、1、2、3),T1有3种工作方式(方式0、1、2)。前3种工作方式,T0和T1除了所使用的寄存器、有关控制位、标志位不同外,其他操作完全相同。为了简化叙述,下面以定时/计数器T0为例进行介绍。一、方式0当TMOD的M1M0为00时,定时/计数器工作于方式0方式0为13位计数,有TL0的低5位(高3位未用)和TH0的高8位组成。TL0的低5位溢出时向TH0进位,TH0溢出时,位置TCON中的TF0标志,向CPU发出中断请求。C/T-=0时为定时器模式,且有N=t/Tcy式中t为定时时间,N为计数个数,Tcy为机器周期。通常,在定时/计数器的应用中要根据计数个数求出送入TH1、TL1和TH0中的计数初值。计数初值计算的公式为X=213-N式中X为计数初值,计数个数为1时,初值X为8191,计数个数为8192时,初值X为0。即初值在81910范围时,计数范围为18192。另外,定时器的初值还可以采用计数个数数直接取补法获得。C/T=1时为计数模式,计数脉冲是T0引角上的外部脉冲。门控位GATE具有特殊的作用。当GATE=0时,经反相后使或门输出为1,此时仅由TR0控制与门的开启,与门输出1时,控制开关接通,计数开始;当GATE=1时,由INT0控制或门的输出,此时控制与门的开启由INT0和TR0共同控制。当TR0=1时,INT0引脚的高电平启动计数,INT0引脚的低电平停止计数。这种方式可以用来测量INT0引脚上正脉冲的宽度。应说明的是,方式0采用13位计数器是为了早期的产品兼容,计数初值的高8为和低5为的确定比较麻烦,所以在实际应用中常由16位的方式1取代。二、方式1当M1M0为01时,定时/计数器工作于方式1,其电路结构和操作方法与方式0基本相同,它们的差别仅在于计数的位数不同。方式1的计数位数是16位,由TL0作为低8位、TH0作为高8位,组成了16位加1计数器。计数个数与计数初值的关系为X=216-N可见,计数个数为1时,初值X为65535,计数个数为65536时,初值X为0。即初值在655350范围时,计数范围为165536。三、 方式2当M1M0为10时,定时/计数器工作方式2。方式2为自动重装初值的8位计数方式。TH0为8位初值寄存器。当TL0寄满溢出时,由硬件使TF0置1,向CPU发出中断请求,并将TH0中的计数初值自动送入TL0。TL0从初值重新进行加1计数。周而复始,直至TR0=0才会停止。计数个数与计数初值的关系为X=28-N可见,计数个数为1时,初值X为255;计数个数为256时,初值X为0。即初值在2550范围时,计数范围为1256。由于工作方式2时省去了用户软件中重装常数的程序,所以特别适合于用作较精确的脉冲信号发生器。 四、 方式3方式3只适用于定时/计数器T0,定时器T1处于方式3时相当于TR1=0,停止计数。当T0的方式字段中的M1M0为11时,T0被设置为方式3。方式3时,T0分成为两个独立的8位计数器TL0和TH0,TL0使用T0的所有控制位:C/T、GATE、TR0、TF0和INT0。当TL0计数溢出时,由硬件使TF0置1,向CPU发出中断请求。而TH0固定为定时方式(不能进行外部计数),并且借用了T1的控制位TR1、TF1。因此,TH0的启、停受TR1控制,TH0的溢出将置位TF1。在T0方式3时,因T1的控制位C/T、M1M0并未交出,原则上T1仍可按方式0、1、2工作,只是不能使用运行控制位TR1和溢出标志位TF1,也不能发出中断请求信号。方式设定后,T1将自动运行,如果要停止工作,只需将其定义为方式3即可。在单片机的串行通信应用中,T1常作为串行接口波特率发生器,且工作于方式2。这时将T0设置成方式3,可以使单片机的定时/计数器资源得到充分利用。34晶振和复位电路一个单片机系统的运行必须要有稳定的时钟脉冲来作为前提条件,而其可靠地运行则必须要有可靠的复位电路来作为保证。3.4.1 晶振电路晶振的连接电路图如下图所示。石英晶振起振后要能在XTAL2 线上输出一个3V 左右的正弦波,以便使MSC-51 片内的OSC 电路按石英晶振相同频率自激振荡。通常,OSC 的输出时钟频率fosc 为0.5M-16MHz,典型值为12M 或11.0592MHz,在本设计系统中采用12M 的晶振。电容C01 和C02 可以帮助起振,典型值为30pF, 在本设计系统中选用20pF,调节它们可以达到微调fosc 的目的。3.4.2 复位电路复位电路的基本功能是:系统上电时提供复位信号,直至系统电源稳定后,撤销复位信号。 35校时(功能切换)电路校时电路,同时也是功能切换电路,一般都是由按键的输入来完成,而在单片机的内部执行的过程中对按键的响应又可以分为查询和中断两种方式,采用查询的方式按键的连线通常可以接到通用I/O 口(P0.0-P2.7)的任意一个口上面(P3 口一般作为第二种控制功能来使用),而采用中断的方式则按键的连线只能连到/INT0(P3.2)或是/INT1(P3.3)上面去。本设计系统采用的是查询方式,其电路图如下图所示。36 LED显示电路在单片机系统中,LED 数码管显示是反映系统输出和操纵输入的有效器件。数码管具备数字接口,可以很方便地和单片机系统连接;数码管的体积小、重量轻,并且功耗低,是一种理想的显示单片机数据输出的器件。361 LED显示的基本原理用单片机驱动LED 数码管有很多种方法,按显示分,有静态显示和动态显示,按译码方式可分为硬件和软件译码。静态显示是显示驱动电路具有输出锁存功能,单片机将要显示的数据送出后不再控制LED,直到下次显示时再传送一次新的显示数据。静态显示的数据稳定,占用的CPU 时间少。动态显示要CPU 时刻对显示器件进行数据刷新,显示数据有闪烁感,占用CPU 时间多。这两种显示方式各有利弊:静态显示虽然数据显示稳定,占用很少的CPU 时间,但每个显示单元都需要单独的显示驱动电路,使用的电路硬件较多;动态显示虽然有闪烁感,占用的CPU 时间多,但使用的硬件少,能节省线路板空间。 37 音频驱动在本设计系统中有定时闹钟的功能,在闹钟功能启动并且定时时间到的时候会自动启动,喇叭可以发出一段音乐的铃声。由于单片机的I/O 输出口的驱动能力不足以驱动喇叭发出足够大的声音,所以要用一片功率放大芯片(LM386)来作为外部的驱动。38 系统整体电路(附录2)第四章 软件设计41汇编语言的构成411汇编语言的格式80C51单片机汇编语言的语句行由四个字段组成,汇编程序能对这种格式正确地进行识别。这四个字段的格式为:标号:操作码 操作数;注释括号内的部分可以根据实际情况取舍。每个字段之间要用分隔符分隔,可以用作分隔符分隔,可以用作分隔符的符号有空格、冒号、逗号、分号等。如:LOOP:MOV A,#7FH;A7FH一、标号标号是语句地址的标志符号,用于引导对该语句的非顺序访问。有关标号的规定为:(1)标号由18个ASCII字符组成。第一个字符必须是字母,其余字符可以是字母、数字或其他特定字符;(2)不能使用该汇编语言已经定义了的符号作为标号。如指令助记符、寄存器符号名称等;(3)标号后边必须跟冒号。二、操作码操作码用语规定语句执行的操作。它是汇编语句中唯一不能空缺的部分。它用指令助记符表示。三、操作数操作数用于给指令的操作提供数据或地址。在一条汇编语句中操作数可能是空缺的,也可能包括一项,还可能包括两项或三项。各操作数间以逗号分隔。操作数字段的内容可能包括以下几种情况:(1)工作寄存器名(2)特殊功能寄存器名(3)标号名(4)常数(5)符号“”,表示程序计数器PC的当前值(6)表达式四、注释注释不属于汇编语句的功能部分,它只是对语句的说明。注释字段可以增加程序的可读性,有助于编程人员的阅读和维护。注释字段必须以分号“;”开头,长度不限,当一行书写不下时,可以换行接着书写,但换行时应注意在开头使用分号“;”。五、数据的表示形式80C51汇编语言的数据可以与以下几种表示形式:(1)二进制数,末尾以字母B标识。(2)十进制数,末尾以字母D标识或将字母D省略。(3)十六进制数,末尾以字母H标识。(4)ASCII码,以单引号括起来标识。412常用伪指令伪指令是汇编程序能够识别并对汇编过程进行某种控制的汇编命令。常用的有以下几种:一、起始地址设定伪指令ORG格式为:ORG 表达式该指令的功能是向汇编程序说明下面紧接的程序段或数据段存在的起始地址。表达式通常为十六进制地址,也可以是已定义的标号地址。在每一个汇编语言源程序的开始,都要设置一条ORG伪指令来指定该程序在存储器中存放的起始位置。若省略ORG伪指令,则该程序段从000H单元开始存放。在一个源程序中,可以多次使用ORG伪指令规定不同程序段或数据段存放的起始地址,但要求地址值由小到大依序排列。不允许空间重叠。二、汇编结束伪指令END格式为:END该指令的功能是结束汇编。汇编程序遇到END伪指令后即结束汇编。处于END之后的程序,汇编程序将不处理。三、字节数据定义伪指令DB格式为:标号:DB 字节数据表功能是从标号指定的地址单元开始,在程序存储器中定义字节数据。四、字数据定义伪指令DW格式为:标号: DW 字数据表功能是从标号指定的地址单元开始,在程序存储器中定义字数器。五、空间定义伪指令DS格式为:标号: DS 表达式功能是从标号指定的地址单元开始,在程序存储器中保留由表达式所指定的个数的存储单元作为备用的空间,并都填以零值。六、赋值伪指令EQU格式为:符号名 EQU 表达式功能是将表达式的值或特定的某个汇编符号定义为一个指定的符号名。七、为地址符号定义伪指令 BIT格式为:符号名 BIT 为地址表达式功能是将位地址赋给指定的符号名。42 主要指令的介绍MOV direct, #data;其功能是把立即数data 送入direct 存储单元中; MOV A, derect;其功能是把direct 存储单元中的值送入累加器A 中; ADD A,#data;其功能是把立即数和累加器A 中的值相加,并把两数之和保留在累加器A 中; INC Ri;这是一条加1 指令,用于使源地址为Ri 中的值的RAM 单元中的值加1; DIV AB;这是除法指令,其功能是把累加器A 中的8 位无符号数除以寄存器B 中的8 位无符号数,所得商的整数部分存放在累加器A 中,余数保留在B 中; CJNE A,#data,rel;其功能是把累加器A 的值和立即数data 进行比较:若累加器A 中的值和立即数相等,则程序不发生转移,继续执行原程序,若累加器A 中的值和立即数不相等,则程序发生转移; DJNZ direct,rel;其功能是先把direct 中的值减1,然后判断direct 中的值是否为零,若不为零,则程序发生转移,若为零则程序不转移,继续执行; LCALL addr16;其为程序调用指令,一般为调用子程序; SWAP A ;其功能是把累加器A 中的高4 位和低4 位相互交换; ORL A,Ri;其功能是把累加器A 中的值和源地址为Ri 中的值的RAM 单元中的值进行逻辑或运算,并把所得结果存入累加器A 中;43 几个主要的子程序(附录1)第五章 结论本课题“基于单片机的多功能数字钟设计” 要求有基本的时钟显示, 输入控制部分由按键输入来实现,可以实现校时和一些辅助功能的切换, 显示部分就用数码管LED 来显示,闹钟开启的话定时时间一到就发出一段音乐响声,还有倒计时和秒表的功能。通过上述的所做硬件和软件的设计工作,其要求功能可以实现,设计的任务业基本完成。在本次毕业设计的过程中,从查找资料开始,到整个系统整体方案的确定,到最后论文的撰写,基本上都是由我自己一个人独立完成的。虽然最后的整个系统还是比较简单,但毕竟也算是一个完整的单片机最小系统,而我所做的一切工作都是围绕着系统开发的这一中心来进行的, 也是我第一次完成一项设计性的工作,也让我学到了很多的经验,收获也颇多。51 毕业设计所做的工作(1)系统硬件电路的设计; (2)用汇编语言编写程序,实现计时显示和其他功能52 系统存在问题及改进方案由于自身水平有限,考虑问题也不是很全面,在整个系统的设计当中难免会有疏漏之处,最后的整个系统还不是很完善,有时候运行不是很稳定致谢在整个毕业设计的过程中,我的指导老师周江涛老师也给了我很大的帮助, 在这里我首先对周老师表示感谢,还有就是在编写的也有同学也给我很大的帮助并且解决了一些关键的细节问题我在这里对他也表示十分的感谢。最后我对所有曾经帮助过我的老师和同学们也表示衷心的感谢!参考文献:1 胡汉才.单片机原理及其接口技术. 北京:清华大学出版社, 2001.6 ,56-60; 80-113; 120-124 2 张振荣、晋明武、王毅平.80C51单片机原理及实用技术. 北京:人民邮电出版社,2000.8 1-5 3 求是科技、斳达.单片机应用系统开发实例导航. 北京:人民邮电出版社,2003.10 2-6 4 何立民.单片机应用技术选编(10).北京:北京航空航天大学出版社,2004.3 5 张洪润,易涛.单片机应用技术教程.北京:清华大学出版社,2003.12 6 赵晓安、耿恒山、杨鹏.80C51 单片机原理及应用. 天津:天津大学出版社,2001.3 7 高锋.单片微机应用系统设计及应用技术. 北京:机械工业出版社,2004.4 8 蒋力培、曹建树、付小美.单片微机系统实用教程.北京:机械工业出版社,2004.2 9 邓红、张越.单片机实验与应用设计教程. 北京:冶金工业出版社,2004.5 附录1:程序1.校时循环程序LOOP: JB P0.0,N2 ;k1(秒)按了?不是则跳至N2 检查P0.1 LCALL DELAY ;消除抖动MOV A,2CH ;将秒寄存器的值载入A ADD A,#01 ;A 的值加1 DA A ;做十进位调整MOV 2CH,A ;将A 的值存入秒寄存器CJNE A,#60H,N1 ;是否等于60 秒?不是则跳至N1 MOV 2CH,#00 ;是则清除秒寄存器为0 N1: JNB P0.0,$ ;k1(秒)放开了? LCALL DELAY ;消除抖动N2: JB P0.1,N4 ;k2(分)按下了?不是则跳至N4 检;查k3 LCALL DELAY ;消除抖动MOV A,2BH ;将分寄存器的值载入A ADD A,#01 ;A 的值加1 DA A ;做十进位调整MOV 2BH,A ;将A 的值存入分寄存器CJNE A,#60H,N3 ;是否等于60 分?不是则跳至N1 MOV 2BH,#00 ;是则清除分寄存器的值为0 N3: JNB P0.1,$ ;k2(分)放开? LCALL DELAY ;消除抖动N4: JB P0.2,LOOP ;k3(时)按下?不是则跳至LOOP LCALL DELAY ;消除抖动MOV A,2AH ;将时寄存器的值载入A ADD A,#01 ;A 的值加1 DA A ;做十进位调整MOV 2AH,A ;将A 的值存入时寄存器CJNE A,#24H,N5 ;是否等于24 小时?不是则跳至N5 MOV 2AH,#00 ;是则清除时寄存器的值为0 N5: JNB P0.2,$ ;k3(时)放开了? LCALL DELAY ;消除抖动JMP LOOP ;跳回循环2. 计时子程序CLOCK: MOV A,2CH ;(2CH)为秒寄存器ADD A,#1 ;加1 秒DA A ;做十进制调整MOV 2CH,A ;存入秒寄存器CJNE A,#60H,X4 ;是否超过60 秒?不是则跳至X4 MOV 2CH,#00 ;是则清除为0 MOV A,2BH ;(2BH)为分寄存器ADD A,#1 ;加1 分DA A ;做十进制调整MOV 2BH,A ;存入分寄存器CJNE A,#60H,X4 ;是否超过60 分?不是则跳至X4 MOV 2BH,#00 ;是则清除为0 MOV A,2AH ;(2AH)为时寄存器ADD A,#1 ;加1 小时DA A ;做十进制调整MOV 2AH,A ;存入时寄存器CJNE A,#24H,X4 ;是否超过24 小时?不是则跳至X4 MOV 2AH,#00 ;是则清除为0 X4: RET ; 计时子程序返回3. 扫描和显示子程序SCAN: MOV R0,#28H ;28H 为扫描指针INC R0 ;扫描指针加1 CJNE R0,#6,X3 ;扫描完6 个显示器?不是则跳至X3 MOV R0,#0 ;是则扫描指针为0 X3: MOV A,R0 ;扫描指针载入A ADD A,#20H ;A 加常数20H(显示寄存器地址)=个时间显示区;地址MOV R1,A ;存入R1=各时间显示地址MOV A,R0 ;扫描指针存入A SWAP A ;将A 高低4 位交换(P1 高4 位为扫描值,低4 ;位为显示数据值) ORL A,R1 ;扫描值+显示值MOV P1,A ;输出至P1 RET ;扫描子程序返回DISP: MOV R1, #20H ;20H)为显示寄存器,R1=20H MOV A, 2CH ;将秒寄存器的值存入A MOV B, #10H ;设置B 累加器的值为10H DIV AB ; A/B,商(十位数)存入A,余数(个位数)存入B MOV R1, B ;将B 的值存入(20H) INC R1 ;R1=21H MOV R1,A ;将A 的值存入(21H) INC R1 ;R1=22H MOV A, 2BH ;将分寄存器的值存入A MOV B, #10H ;设置B 累加器的值为10H DIV AB ;A/B,商(十位数)存入A,余数(个位数)存入BMOV R1, B ;将B 的值存入(22H) INC R1 ;R1=23H MOV R1, A ;将A 的值存入(23H) INC R1 ;R1=24H MOV A, 2AH ;将时寄存器的值存入A MOV B, #10H ;设置B 累加器的值为10H DIV AB ;A/B,商(十位数)存入A,余数(个位数)存入B MOV R1, B ;将B 的值存入(24H) INC R1 ;R1=25H MOV R1, A ;将A 的值存入(25H) RET ;显示子程序返回4. 中断子程序TIM0: MOV TH0,#0F0H ;重设计时初值MOV TL0,#60H PUSH ACC ;将A 的值暂存于堆栈PUSH PSW ;将PSW 的值暂存于堆栈DJNZ R4,X2 ;计时1 秒MOV R4,#250 ;重装中断此数LCALL CLOCK ;调用计时子程序CLOCK LCALL DISP ;调用显示子程序X2: LCALL SCAN ;调用扫描子程序POP PSW ;至堆栈取回PSW 的值POP ACC ;至堆栈取回ACC 的值RETI ;中断返回附录2:电路图系统整体电路图第 24 页 共 29 页
展开阅读全文