1、定时开关控制器设计摘要:本次设计以 STC89C51RC 芯片为核心,辅以必要的外围电路,设计了一个定时器,它由5V直流电源供电。在硬件方面,除了 CPU 外,使用四个七段 LED 数码管来进行显示,LED 数码管采用的是动态扫描显示。数码管能够准确显示时、分。5个按键可以实现对定时时间的调整。软件方面采用 C 语言编程。整个定时系统能完成时间的显示,调时,启闭负载电源等功能。关键词:STC89C51RC;定时器;数码管Timer Switch Controller DesignAbstract:This design uses STC89C51RC chip as the core, wit
2、h the necessary peripheral circuits, designed a timer, which is powered by 5V DC power supply.In terms of hardware, in addition to CPU, the use of four LED seven segment digital tube display, LED digital tube by using dynamic scanning display. The digital tube can display, divided. 5 keys can be ach
3、ieved on the timing adjustment. Software using C programming language. The timing system can achieve time display, timing, opening and closing load power function. Keywords: STC89C51; timer; Digital tube目 录1.概述 .12.方案设计 .12.1 要求功能 .12.2 电路设计方案确定 .22.3 STC89C51 单片机介绍 22.3.1 主要功能、性能参数 22.3.2 引脚分配 33.硬
4、件电路设计 .43.1 单片机最小系统 .43.1.1 振荡电路 43.1.2 复位电路 43.2 数码管驱动电路 .53.3 按键电路 .53.4 中断触发电路 .63.5 继电器控制电路 .73.6 显示系统 .73.7 整机工作原理 .84.软件设计 .85.系统调试 105.1 软件调试概述 105.2 软件调试 105.3 系统仿真测试 105.3.1 仿真测试方法 .105.3.2 仿真测试结果 .116.结论 11参考文献 13致 谢 14附录 1: 定 时 器 源 程 序 15附录 2:定时器电路图 .2111.概述随着产业结构的不断调整、生产工艺的飞速发展、人们生活水平的不断
5、提高及家用电器的逐渐普及,市场对定时控制系统的需求越来越大. 如定时自动报警、定时自动打铃、定时开关烘箱、定时通断动力设备以及各种电气的定时启动等都属于定时控制系统。定时控制系统的实现方法很多, 本文主要介绍以80C51 系列单片机中的 STC89C51为核心的智能定时控制系统的设计实现方式. 80C51 系列单片机进入市场时间早, 总线开放, 仿真开发设备多, 芯片及其开发价格低廉、速度较快、电磁兼容性较好。 本文所述定时开关控制系统主要包括时间设置,数码管显示,中断程序设置等功能。硬件与软件方面的设计。硬件部分主要由 STC89C51单片机,LED 显示电路,以及调时按键电路等组成,系统通
6、过 LED 显示数据,所以具有人性化的操作和直观的显示效果。软件方面主要包括中断程序、键盘程序,显示程序等。本系统以单片机的 C 语言进行软件设计,为了便于扩展和更改,软件的设计采用模块化结构,使程序设计的逻辑关系更加简洁明了,以便更简单地实现调整时间及显示功能。所有程序编写完成后,在 Keil 软件中进行调试,确定没有问题后,在 Proteus 软件中嵌入单片机内进行仿真。在日新月异的21世 纪 里 , 家 用 电 子 产 品 得 到 了 迅 速 发 展 。许 多 家 电 设 备 都 趋 于 人 性 化 、 智 能 化 , 这 些 电 器 设 备 大 部 分都含有单片机控制器,具有操作简单的
7、特点。2.方案设计2.1 要求功能定时开关控制器广泛应用于日常生活及工业生产中负载电源的通断,达到方便用电和节电的目的。用单片机实现电源开关控制,可以由人通过按键来设定负载电源的开/关时间,并通过显示器观察时间,达到定时开关机的目的。本设计中 4 位数码管中前两位显示“小时” ,后两位显示“分” ,最大预约时间为 12 小时。按键操作:1.开始键:按下该键,电源接通。或当调时结束后按下该键,电源将在设定时间到达后接通。2.关闭键:按下该键,切断电源。3.预约键:第一次按下该键,可以对电源的接通时间进行“小时”调整;第二次按下该键,可以对电源的接通时间进行“分钟”调整。4.加“1”键:按下该键,
8、调“小时”时间加 1,最可加到 11;调“分钟”时加 1,最大可加到 59。即最长定时时间为 11 小时 59 分。5.减“1”键:按下该键,调“小时”时减 1,最小值为 0;调分钟时, “分钟”减 1,最小值为 0。26.预留键:在本设计中,无作用。显示功能:(1)按键指示灯 D1:只要有按键被按下,指示灯会点亮。(2)电源开关状态指示灯 D3:当电源和负载接通时,该灯点亮。7.四位数码管:前两位为小时,后两位显示分。上电即显示“- - - -”;预约调时前两位闪烁,预约调分钟后两位闪烁。预约时间内,倒计时显示。2.2 电路设计方案确定综 上 要 求 所 述 ,对 此 次 设 计 的 方 案
9、 选 定 : 以 单 片 机 STC89C51为 主 控 制 器 , 采 用 单片 机 内 部 定 时 、 独 立 式 按 键 和 动 态 LED 显 示 。采用 51 单片机可以实现一些功能不多的控制环境,既节约经济又达到了我们所需的智能化控制。本设计主要从以下三个方面入手:一是实现按键功能,可以接通和关闭电源并设定时间;二是实现显示功能,显示设定时间;三是实现定时功能,当时间到达设定值时可以通过继电器动作控制负载电源的启闭,并通过指示灯显示任务的完成。设计的总体方案如图 2-1 所示,由单片机最小系统、LED 数码管显示电路、继电器控制电路、按键电路及 5V 直流供电电路组成。为了实现智能
10、控制和简化设计,选用了 STC89C51 集成芯片。图 2-1 基于 STC89 系列单片机的定时控制系统2.3 STC89C51 单片机介绍STC 系列单片机是最新推出的一种新型51内核的单片机。片内含有 Flash 程序存储器、SRAM、UART、SPI、AD、PWM 等模块。该器件的基本功能与普通的51单片机完全兼容。2.3.1 主要功能、性能参数1.内置标准51内核;32.工作频率范围:040MHZ,相当于普通8051的080MHZ;3.STC89C5xRC 对应 Flash 空间:4KB8KB15KB;4.内部存储器(RAM):512B;5.定时器计数器:3个16位;6.通用异步通信
11、口(UART)1个; 7.中断源:8个;8.有 ISP(在系统可编程)IAP(在应用可编程),无需专用编程器仿真器;9.通用 IO 口:3236个; 10.工作电压:3.85.5V; 11.外形封装:40脚 PDIP、44脚 PLCC 和 PQFP 等。2.3.2 引脚分配STC89C51RC 单片机引脚图如图 2-2 所示。图2-2 STC89C51RC 引脚图根据设计要求,选用 STC89C51RC 作为电路的控制核心,电路中包含了时钟电路,复位电路作为单片机的最小系统。晶体振荡器频率为 12MHz,P0.0P0.7 作为四位七段数码管的段码输出端,P1.0P1.3 作为四位数码管(共阴极
12、)的位码输出端。P2.0P2.5 作为键盘信号的输出端。P3.6 作为控制端信号的输出,控制继电器吸合与释放。43.硬件电路设计3.1 单片机最小系统3.1.1 振荡电路STC89C51 是内部具有振荡电路的单片机,只需在 18 脚和 19 脚之间接上石英晶体,给单片机加工作所需的直流电源,振荡器就开始振荡起来。振荡电路为单片机工作提供了所需要的时钟脉冲信号,单片机开始执行程序。振荡电路不工作,整个单片机电路都不能正常工作。本设计中 STC89C51 外接 12MHz 的石英晶体,单片机的机器周期恰好为1us。18 脚和 19 脚分别对地接了一个 30pF 的电容,目的是防止单片机自激。若从
13、18 脚输入外部时钟脉冲,则 19 脚接地。振荡电路如图 3-1 所示。图 3-1 单片机内部晶振电路连接图3.1.2 复位电路复位电路就是在 RST 端(9 脚)外接的一个电路,目的是使单片机上电开始工作时,内部寄存器进行初始化,让单片机从初始状态开始工作。在时钟电路工作的情况下,只要复位引脚高电平保持在两个机器周期以上的时间,STC89C51 便能完成系统初始化工作,使得内部特殊功能寄存器的内容均被设置成已知状态,并且从 ROM 中地址 0000H 处读入程序代码而执行程序。复位电路如图 3-2 所示。图 3-2 复位电路53.2 数码管驱动电路由于 P0 口的输出端为漏极开路门,必须通过
14、外接上拉电阻和+5V 电源连接,输出高电平。本设计中上拉电阻的值为 10k。由于 P0 口输出电流有限,为减轻单片机的负担,在 P0 口外接了一个 8 路同相三态双向驱动器 74LS245(起电流放大作用) 。19 脚是它的片选端,低电平有效,1 脚是输入/输出端口转换用,当该引脚接高电平时,信号由“A”端传向“B”端,该引脚接低电平时,信号由“B”端传向“A”端。P1 口通过一个六反相器 74LS04 和数码管的位码输入端相连,故 P1.0P1.3 输出高电平时,相应的数码管才能点亮。驱动电路如图 3-3 所示。图 3-3 驱动电路3.3 按键电路按键的开关状态通过一定的电路转换为高、低电平
15、状态。按键闭合过程在相应的 I/O端口形成一个负脉冲。闭合和释放过程都要经过一定的过程才能达到稳定。这一过程是处于高、低电平之间的一种不稳定状态,称为抖动。抖动的持续时间长短与开关的机械特性有关,一般在 510ms 之间。为了避免 CPU 多次处理按键的一次闭合,应采用软件法去抖动消除抖动。本设计采用的是独立式按键,直接用 I/O 口线构成独立按键电路,每个按键占用一条 I/O 口线,每个按键的工作状态不会产生相互影响。6 个独立按键分别和 P2.0P2.5 口相连接,通过上拉电阻和电源相连接,当按键没有按下时,P2.0P2.5 端口输出为“1”,表示无信号输入。6 个按键只要有 1 个按键按
16、下,相应的引脚变为低电平,表示有信号输入,执行相应的按键命令。6P2.0 口表示开始键;P2.1 口表示关闭键;P2.2 口表示预约键;P2.3 口表示数字加1 键;P2.4 口表示数字减 1 键;P2.5 口表示预留键,在本任务中该键预留。按键电路如图 3-4 所示。图 3-4 按键电路3.4 中断触发电路中断触发电路主要由 8 输入与非门 74HC30 及非门 74LS04 构成,当六个按键中只要有一个按键按下,8 输出与非门 74HC30 的输出端必然输出高电平(它的逻辑功能为:全1 出 0,有 0 出 1) ,经非门电路 74LS04 倒相后,按键按下时输出为负脉冲,该负脉冲信号接单片
17、机的外部中断信号输入端 INTO(即 P3.2 引脚),从而引起单片机中断,停止执行正在执行的程序,转而去执行中断服务程序。电路图如图 3-5 所示。图 3-5 中断触发电路73.5 继电器控制电路继电器控制电路如图 3-6 所示。由于单片机 I/O 口输出电流小驱动能力有限,从图中可以看出我们利用三极管来控制,通过如图的连接方式,可以提高驱动负载的能力,利用三极管截止和饱和导通去控制继电器的闭合/断开。因为 P3.6 口作为控制信号的输出口,控制继电器吸合与释放,所以当定时时间未到时,P3.6 引脚输出的是高电平,三极管处于截止状态,继电器无动作,开关不会闭合,负载不工作。当定时时间到,P3
18、.6 引脚输出的是低电平,三极管饱和导通,继电器动作,开关闭合,负载得电运行。电路如图 3-6 所示。图 3-6 继电器控制电路3.6 显示系统LED 显示器由多位数码管组成,各段 LED 显示器需要由驱动电路驱动。七段 LED 数码管显示器通常将各段发光二极管的阴极或阳极连在一起作为公共端。将各段发光二极管阳极连在一起的叫共阳极显示器,用低电平驱动;将阴极连在一起的叫共阴极显示器,用高电平驱动。静态显示就是每一个显示器各笔画段都要独占具有一个锁存功能的输出口线,CPU 把要显示的字形代码送到输出口上,就可以使显示器上显示所需的数字或符号,此后,即使 CPU 不再去访问它,因为各笔画段接口具有
19、锁存功能,显示的内容也不会消失。动态显示是指显示器显示某一字符时,相应段的发光二极管恒定地导通或截止。在本系统中为共阴极数码管,采用动态扫描显示。如图 3-7 所示。8图 3-7 时间显示电路3.7 整机工作原理定时器电路图如附录 2 所示。开启仿真开关后,按下开始,电源接通。通过设置按钮,我们可以很方便的设置时间。我们调整好时间后,按开始键,当时间到达所定时时间时,通过控制继电器的动作接通电源,电源接通指示灯亮。4.软件设计整套系统的运行都是基于 8051 内核指令控制运行的。由任务目标分析,采用中断处理方式设计程序流程图,如下图所示,主要程序见附录 1。程序开始首先对按键变量和小时、分钟变
20、量进行定义,对共阴极数码管的段码(字型码)以一维数组方式定义。另外对延时函数、定时器初始化子函数、求按键子函数、按键处理子函数、计时子函数、显示子函数进行声明。图 4-1 主函数框图9在定时器 T0、T1 初始化和外部中断 0( INTO)子函数中,规定定时器 T0、T1 的工作模式为方式 1,定时时间为 50ms。外部中断 0 采用下降沿触发方式。定时器工作在中断方式,即定时时间到,立即停止执行主函数,转而去执行中断服务函数。图 4-2 定时器 T0 中断函数框图 图 4-3 定时器 T1 中断服务函数框图图 4-4 外部中断 0 中断服务函数框图 10在显示子函数中,上电复位后 4 位数码
21、管显示“- - - -” 。其中包括走时转换函数,负责将定时器走时数据转换为分钟的十位和个位,超过 60 分钟的数据再转换为小时的十位和个位。在计时子函数中,设置每 50ms 中断 1 次,分钟计数器中计数值为 1200 时,时间为1 分钟。小时计数器计数值为 60 时,时间为 1 小时.预约时间到,单片机 P3.6 引脚输出低电平,驱动三极管饱和导通,继电器的线圈中有电流经过,而产生吸合动作,接通电源,用电器开始工作。 5.系统调试 5.1 软件调试概述单片机系统经过总体设计,完成了硬件和软件设计开发。通过软件和硬件相结合系统即可运行。但编制好的程序或焊接好的线路不能按预计的那样正常工作是常
22、见的事,经常会出现一些硬件、软 件 上 的 错 误 , 这是软件和硬件开发者经常遇见的,这就需要通过调试来发现错误并加以改正。调试可分为硬件调试和软件调试。本设计系统的已经在PC 机上用模拟开发软件进行了检测和调试,并 运 行 成 功 , 最后进行实物图的硬件组装与调试,这样就给开发者在提供了方便。5.2 软件调试本设计是在 Proteus 软件和 Keil 软件相结合调试的,完全用仿真软件在 PC 机上对目标电路原理图和程序进行检测和调试。调试过程中单片机相应输入端由通用键盘鼠标设定,运行状态、各寄存器状态、端口状态等都可以在指定的窗口区域显示出来,以确定程序运行有无错误。目标程序纠错:该阶
23、段工作通常在目标程序编辑时就完成。一 般 来 说 , 仿 真 软 件 能为 用户输入的程序指令纠错,包括书写格式、标号未定义或多重定义、转移地址溢出等错误。整体程序调试:即把各子程序整体连起来进入到综合电路调试,看是否能实现预计的功能显示。在 这 阶 段 若 发 生 故 障 , 可以考虑各子程序在运行时是否破坏现场,数 据 缓冲 单 元是否发生冲突,标志位的建立和清除在设计上是否失误,堆 栈 是 否 溢 出 , 输入输出状态是否正常等。 5.3 系统仿真测试5.3.1 仿真测试方法系统测试内容包括能否正常设定时间、数码管是否正常显示、是否能正常定时及继电器电路是否正常工作,具体测试方法如表 5
24、-1 所示。11表 5-1 系统测试项目与测试方法5.3.2 仿真测试结果系统测试结果如表 5-2 所示。表 5-2 系统测试结果结果:整个系统能按照预定的计划运行,此次制作圆满成功。6.结论整个设计所实现的功能非常简单,归结为四个字:定时开关。所谓定时就是实现STC89C51 的定时器精确定时到 1 秒的功能,整个显示部分实现了时显示和分显示两部分,同时实现了键盘的相关键值功能,实现了负载电源定时启闭的功能,同时在设定定时时间值的时候,实现了当前设定位的闪烁效果,当启动预约以后,也实现了所设定时间值不闪烁的效果,同时也实现了对设定时间值的保存。最后,当负载电源启动或关闭后,按下键盘当中的预约
25、键,实现再次定时开关的功能。硬件系统关系到所要设计的电子产品好怀,如系统抗干扰性等,所以要合理的安排尽量减少干扰,提高性能。单片机是很容易受干扰的控制器,当采用外部晶振时,应 尽 量让 其 靠近单片机减少对其干扰,防止程序乱飞现象。同时还可以采用隔离等方式减少干扰,硬件系统设计的好坏很大部分来源于经验,所以我们要有动手的好习惯。序号 测试项目 测试方法1是否能正常设置时间数码管是否正常显示1、打开仿真开关,通过预约键进入时间设置;2分别设置小时,分钟,观察是否正常。2 是否能准确定时1、通过预约设置按钮进入定时设置;2、按下开始键,等待时间到点,观察继电器是否工作。3指示灯及继电器电路是否正常
26、工作1、观察当项目 2 中定时到点时,电源接通指示灯是否亮,及继电器是否工作,是否接通电源。序号 测试项目 测试结果1是否能正常设置时间数码管是否正常显示能很好的设置和保存所设置的时间,且正常工作。2 是否能准确定时 能够准确定时。3指示灯及继电器电路是否正常工作指示灯能正常工作,定时结束后继电器动作,接通电源。12软件设计是核心部分,具有多样化,灵活性高,易移植等优点,要深深理会各指令的含义才能更加熟练应用,中断的合理利用可以减少 CPU 利用资源,具有执行效率高等优点,本设计用到定时器中断以减少对 CPU 的占用,更好的处理其他功能。软件的设计大部分采用模块化设计的方法以方便调试,并使其可
27、读性大大增强,方便更改和移植。在本次毕业设计当中,自己深深的明白了理论知识一定要和实践相结合的道理,只有把理论知识贯穿到实践当中,才能真正的学到有用的知识,自己在这次毕业设计中也学到了很多新的知识。13参考文献1王静霞主编.单片机应用技术(C 语言版).北京:电子工业出版社,2012.5 2胡辉主编.单片机应用系统设计与训练.北京:中国水利水电出版社,2004.93戴佳.戴卫.51 单片机 C 语言应用程序设计实例精讲.电子工业出版社,2006 4王幸之主编.AT89 系列单片机原理与接口技术.高等教育出版社,2004.7 5何宏主编.单片机原理与接口技术北京国防工业出版社,2006.7 6李
28、光.单片机基础.北京:北京航空航天大学出版社,1994 7倪晓军.单片机原理与接口技术教程.北京:清华大学出版社,2009 8姚年春.向华 Protel99SE 基础教程.北京:人民名邮电出版社,2009 9韩 颖.Proteus 在单片机技术实训中的应用J;中国科教创新导刊,2008,31 期 10李贵庭.单片机应用技术及项目化训练.西南交通大学出版社,200914致 谢不知不觉,毕业设计结束了。我的毕业论文已整理完毕,电路调试进展良好。毕业设计的完成意味着我的大学学习生活即将结束,从此我将进入一个新的人生旅途、开始一段崭新的生活 工作。在此,我衷心地感谢所有在我做毕业设计期间帮助过我人。首
29、先我要感谢李学明老师的大力帮助和支持。在整个设计过程当中,为我的毕业设计带来了很大方便。同时在我完成毕业设计的过程中提供了很多指导性的意见使我受益匪浅。在此,我衷心感谢老师给予我的帮助和教育。此外,还要衷心感谢其他所有对本课题的研究和论文撰写有过帮助的同学。最后,我要感谢我的母校 江苏农林职业技术学院,在校期间,这里给我留下了美好的回忆。特别是在我即将踏上工作岗位的同时,毕业设计整个过程给了我这样一个锻炼的机会,使我加深了对以前知识的理解和巩固,拓宽了知识面,也提高了我对所学知识的综合应用能力。祝愿母校的将来更美好!15附录 1: 定 时 器 源 程 序#include#define ucha
30、r unsigned char#define uint unsigned intsbit KEYON =P20; /开始键sbit KEYOFF=P21; /关闭键 sbit KEYSET=P22; /预约键sbit KEYINC=P23; /加 1 键sbit KEYDEC=P24; /减 1 键sbit KEYFREE=P25; /预留键sbit POWER=P36; /电源开关指示灯sbit LED=P33 ; /按键指示灯uchar code dispcode=0x3f,0x06,0x05b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40; /0-9 的
31、字型码uchar data disbuf=0,0,0,0; /显示缓冲区uchar hour,min ; /小时、分变量bit Onflag,flag;uchar Setflag;void delay(uchar); /延时子函数void init(void); /定时器初始化子函数uchar GetKeyNum(); /求按键号void Keyprocess(uchar); /按键处理子函数void calculate(); /计时子函数void display(); /显示子函数/-主函数-void main(void)init();P1=0x00;while(1)display();/-
32、定时器 TO、T1 初始化,外部中断 0 初始化子函数-void init()TMOD=0x11; /TO、T1 作定时器、工作方式 1TH0=(65536-50000)/256; /定时 50msTL0=(65536-50000)%256;TH1=(65536-50000)/256; TL1=(65536-50000)%256;IT0=1; /选择外部中断 0 为下降沿触发方式EX0=1; /开外部中断 016ET1=1; /开定时器 1ET0=1; /开定时器 0EA =1; /开总中断TR0=1; /-显示子函数-void display()uchar i,j=0x08;if(Setfl
33、ag=0)i2) /不显示前面的 0P0=0;elseP0=disbufi;if(Setflag=1) P1=j /调时,关断前两位位码else P1=j /调分,关断后两位位码delay(5); /延时 2.5msP1=0x00;j=j1;else /数码管正常显示for(i=0;i2) P0=0; /不显示前面的 0else P0=disbufi;P1=j; /位选通delay(5); /延时 2.5ms17P1=0X00;j=j1;/-外部中断 0 中断函数-void int0()interrupt 0 using 0uchar keynum;display(); /动态显示程序作为去抖
34、动if(INT0=0) /判断是否有按键按下keynum=GetKeyNum(); /有效键,获取键值while(INT0=0); /等待按键释放Keyprocess(keynum); /按键处理/-定时器 0 中断子函数-void time0() interrupt 1 /处理调时、显示器闪烁static uchar ledcnt,num; /设置静态变量TH0=(65536-50000)/256; /定时 50msTL0=(65536-50000)%256;if(Onflag if(ledcnt=10) / 10 X 50mS=0.5Sledcnt=0;LED=LED;if(Setflag
35、!=0) /调时闪烁num+;if(num=5)num=0;flag=flag;/-定时器 1 中断子函数-18void time1() interrupt 3TH1=(65536-50000)/256;TL1=(65536-50000)%256;calculate(); /计时/-求按键号-uchar GetKeyNum()uchar temp;if(KEYON=0) temp=1;if(KEYOFF=0) temp=2;if(KEYSET=0) temp=3;if(KEYINC=0) temp=4;if(KEYDEC=0) temp=5;if(KEYFREE=0) temp=6;retur
36、n(temp);/-按键处理函数-void Keyprocess (uchar x)switch(x)case 1: /KEYON 处理函数Onflag=1; /开 Onflag 标志Setflag=0; /关(Setflag)调时标志if(!Setflag)LED=0;elseTR1=1; /定时器 1 运行、执行计时程序break;case 2 : /KEYOFF,关处理,标志清 0Onflag=0;Setflag=0;hour=0;min=0;POWER=1;LED=1;break;case 3: /预约调时/调分键,处理调时标志19if(Onflag=0)Setflag+;if(Set
37、flag=3) Setflag=1;break;case 4: /加 1 键if(Setflag=1) /调时键,最大只能调到 11hour+;if(hour=12)hour=0;if(Setflag=2) /调分键,最大只能调到 59min+;if(min=60)min=0;break;case 5: /减 1 键if(Setflag=1) /调时键,减小时处理,最小 0hour- ; if(hour=-1)hour=12;if(Setflag=2) /调分键,减分处理,最小 0min-; if(min=-1)min=59;break; /-计算时间-void caculate()static uint tcount; /tcount 为定时次数if(hour | min)!=0)tcount+; /1 次 50ms 到,改变定时次数20if(tcount=1200) /1200*50ms=1 分钟tcount=0; /初始化定时次数if(min=0)min=60;hour-;min-;if(min=0) /继电器接通LED=0;TR1=0;/-定时 0.5ms-void delay(uchar x)uchar j,k;for(j=x;j0;j-)for(k=249;k0;k-);21附录 2:定时器电路图