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