定时开关控制器设计

定时开关控制器设计

摘要:本次设计以STC89C51RC 芯片为核心,辅以必要的外围电路,设计了一个定时器,它由5V 直流电源供电。在硬件方面,除了CPU 外,使用四个七段LED 数码管来进行显示,LED 数码管采用的是动态扫描显示。数码管能够准确显示时、分。5个按键可以实现对定时时间的调整。软件方面采用C 语言编程。整个定时系统能完成时间的显示,调时,启闭负载电源等功能。

关键词:STC89C51RC ;定时器;数码管

Timer Switch Controller Design

Abstract :This design uses STC89C51RC chip as the core, with 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 achieved 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. 概述 . .......................................................... 1

2. 方案设计 . ...................................................... 1

2.1要求功能 .................................................. 1

2.2电路设计方案确定 .......................................... 2

2.3 STC89C51单片机介绍 ....................................... 2

2.3.1主要功能、性能参数 ................................... 2

2.3.2引脚分配 ............................................. 3

3. 硬件电路设计 . .................................................. 4

3.1单片机最小系统 ............................................ 4

3.1.1振荡电路 ............................................. 4

3.1.2复位电路 ............................................. 4

3.2数码管驱动电路 ............................................ 5

3.3按键电路 .................................................. 5

3.4中断触发电路 .............................................. 6

3.5继电器控制电路 ............................................ 7

3.6显示系统 .................................................. 7

3.7整机工作原理 .............................................. 8

4. 软件设计 . ...................................................... 8

5. 系统调试 . ..................................................... 10

5.1软件调试概述 ............................................. 10

5.2软件调试 ................................................. 10

5.3系统仿真测试 ............................................. 10

5.3.1仿真测试方法 ........................................ 10

5.3.2仿真测试结果 ........................................ 11

6. 结论 . ......................................................... 11

参考文献 . ....................................................... 13

致 谢 . ......................................................... 14

附录1:定时器源程序 ........................................... 15

附录2:定时器电路图 ............................................ 21

1.概述 随着产业结构的不断调整、生产工艺的飞速发展、人们生活水平的不断提高及家用电器的逐渐普及,市场对定时控制系统的需求越来越大. 如定时自动报警、定时自动打铃、定时开关烘箱、定时通断动力设备以及各种电气的定时启动等都属于定时控制系统。定时控制系统的实现方法很多, 本文主要介绍以80C51 系列单片机中的STC89C51为核心的智能定时控制系统的设计实现方式. 80C51 系列单片机进入市场时间早, 总线开放, 仿真开发设备多, 芯片及其开发价格低廉、速度较快、电磁兼容性较好。

本文所述定时开关控制系统主要包括时间设置,数码管显示,中断程序设置等功能。 硬件与软件方面的设计。硬件部分主要由STC89C51单片机,LED 显示电路,以及调时按键电路等组成,系统通过LED 显示数据,所以具有人性化的操作和直观的显示效果。软件方面主要包括中断程序、键盘程序,显示程序等。

本系统以单片机的C 语言进行软件设计,为了便于扩展和更改,软件的设计采用模块化结构,使程序设计的逻辑关系更加简洁明了,以便更简单地实现调整时间及显示功能。所有程序编写完成后,在Keil 软件中进行调试,确定没有问题后,在Proteus 软件中嵌入单片机内进行仿真。在日新月异的21世纪里,家用电子产品得到了迅速发展。许多家电设备都趋于人性化、智能化,这些电器设备大部分都含有单片机控制器,具有操作简单的特点。

2. 方案设计

2.1要求功能

定时开关控制器广泛应用于日常生活及工业生产中负载电源的通断,达到方便用电和节电的目的。用单片机实现电源开关控制,可以由人通过按键来设定负载电源的开/关时间,并通过显示器观察时间,达到定时开关机的目的。本设计中4位数码管中前两位显示“小时”,后两位显示“分”,最大预约时间为12小时。

按键操作:

1. 开始键:按下该键,电源接通。或当调时结束后按下该键,电源将在设定时间到达后接通。

2. 关闭键:按下该键,切断电源。

3. 预约键:第一次按下该键,可以对电源的接通时间进行“小时”调整;第二次按下该键,可以对电源的接通时间进行“分钟”调整。

4. 加“1”键:按下该键,调“小时”时间加1,最可加到11;调“分钟”时加1,最大可加到59。即最长定时时间为11小时59分。

5. 减“1”键:按下该键,调“小时”时减1,最小值为0;调分钟时,“分钟”减1,最小值为0。

1

6. 预留键:在本设计中,无作用。

显示功能:

(1)按键指示灯D1:只要有按键被按下,指示灯会点亮。

(2)电源开关状态指示灯D3:当电源和负载接通时,该灯点亮。

7. 四位数码管:前两位为小时,后两位显示分。上电即显示“- - - -”;预约调时前两位闪烁,预约调分钟后两位闪烁。预约时间内,倒计时显示。

2.2电路设计方案确定 综上要求所述, 对此次设计的方案选定: 以单片机STC89C51为主控制器,采用单片机内部定时、独立式按键和动态LED 显示。

采用51单片机可以实现一些功能不多的控制环境,既节约经济又达到了我们所需的智能化控制。

本设计主要从以下三个方面入手:一是实现按键功能,可以接通和关闭电源并设定时间;二是实现显示功能,显示设定时间;三是实现定时功能,当时间到达设定值时可以通过继电器动作控制负载电源的启闭,并通过指示灯显示任务的完成。设计的总体方案如图2-1所示,由单片机最小系统、

LED 数码管显示电路、继电器控制电路、按键电路及5V 直流供电电路组成。为了实现智能控制和简化设计,选用了STC89C51集成芯片。

图2-1 基于STC89系列单片机的定时控制系统

2.3 STC89C51单片机介绍

STC系列单片机是最新推出的一种新型51内核的单片机。片内含有Flash 程序存储器、SRAM 、UART 、SPI 、A\D、PWM 等模块。该器件的基本功能与普通的51单片机完全兼容。 2.3.1主要功能、性能参数

1. 内置标准51内核;

2.工作频率范围:0~40MHZ,相当于普通8051的0~80MHZ;

3.STC89C5xRC 对应Flash 空间:4KB\8KB\15KB;

2

4. 内部存储器(RAM) :512B ;

5. 定时器\计数器:3个16位;

6. 通用异步通信口(UART )1

个;

7. 中断源:8个;

8. 有ISP(在系统可编程)\IAP(在应用可编程), 无需专用编程器\仿真器;

9. 通用I\O口:32\36个;

10. 工作电压:3.8~5.5V;

11. 外形封装:40脚PDIP 、44脚PLCC 和PQFP 等。

2.3.2引脚分配

STC89C51RC 单片机引脚图如图2-2所示。

图2-2 STC89C51RC引脚图

根据设计要求,选用STC89C51RC 作为电路的控制核心,电路中包含了时钟电路,复位电路作为单片机的最小系统。

晶体振荡器频率为12MHz ,P0.0~P0.7作为四位七段数码管的段码输出端,P1.0~P1.3作为四位数码管(共阴极)的位码输出端。P2.0~P2.5作为键盘信号的输出端。P3.6作为控制端信号的输出,控制继电器吸合与释放。

3

3. 硬件电路设计

3.1单片机最小系统

3.1.1振荡电路

STC89C51是内部具有振荡电路的单片机,只需在18脚和19脚之间接上石英晶体,给单片机加工作所需的直流电源,振荡器就开始振荡起来。振荡电路为单片机工作提供了所需要的时钟脉冲信号,单片机开始执行程序。振荡电路不工作,整个单片机电路都不能正常工作。本设计中STC 89C51外接12MHz 的石英晶体,单片机的机器周期恰好为1us 。18脚和19脚分别对地接了一个30pF 的电容,目的是防止单片机自激。若从18脚输入外部时钟脉冲,则19脚接地。振荡电路如图3-1所示。

图3-1 单片机内部晶振电路连接图

3.1.2复位电路

复位电路就是在RST 端(9脚)外接的一个电路,目的是使单片机上电开始工作时,内部寄存器进行初始化,让单片机从初始状态开始工作。在时钟电路工作的情况下,只要复位引脚高电平保持在两个机器周期以上的时间,STC89C51便能完成系统初始化工作,使得内部特殊功能寄存器的内容均被设置成已知状态,并且从ROM 中地址0000H 处读入程序代码而执行程序。复位电路如图3-2所示。

图3-2 复位电路

4

3.2数码管驱动电路

由于P0口的输出端为漏极开路门,必须通过外接上拉电阻和+5V电源连接,输出高电平。本设计中上拉电阻的值为10k Ω。由于P0口输出电流有限,为减轻单片机的负担,在P0口外接了一个8路同相三态双向驱动器74LS245(起电流放大作用)。19脚是它的片选端,低电平有效,1脚是输入/输出端口转换用,当该引脚接高电平时,信号由“A ”端传向“B ”端,该引脚接低电平时,信号由“B ”端传向“A ”端。P1口通过一个六反相器74LS04和数码管的位码输入端相连,故P1.0~P1.3输出高电平时,相应的数码管才能点亮。驱动电路如图3-3所示。

图3-3 驱动电路

3.3按键电路 按键的开关状态通过一定的电路转换为高、低电平状态。按键闭合过程在相应的I/O端口形成一个负脉冲。闭合和释放过程都要经过一定的过程才能达到稳定。这一过程是处于高、低电平之间的一种不稳定状态,称为抖动。抖动的持续时间长短与开关的机械特性有关,一般在5—10ms 之间。为了避免CPU 多次处理按键的一次闭合,应采用软件法去抖动消除抖动。本设计采用的是独立式按键,直接用I/O口线构成独立按键电路,每个按键占用一条I/O口线,每个按键的工作状态不会产生相互影响。6个独立按键分别和P2.0~P2.5口相连接,通过上拉电阻和电源相连接,当按键没有按下时,P2.0~P2.5端口输出为“1”,表示无信号输入。6个按键只要有1个按键按下,相应的引脚变为低电平,表示有信号输入,执行相应的按键命令。

5

P2.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出

行的程序,转而去执行中断服务程序。电路图如图3-5所示。

图3-5 中断触发电路

6

3.5继电器控制电路

继电器控制电路如图3-6所示。

由于单片机I/O口输出电流小驱动能力有限,从图中可以看出我们利用三极管来控制,通过如图的连接方式,可以提高驱动负载的能力,利用三极管截止和饱和导通去控制继电器的闭合/断开。因为P3.6口作为控制信号的输出口,控制继电器吸合与释放,所以当定时时间未到时,P3.6引脚输出的是高电平,三极管处于截止状态,继电器无动作,开关不会闭合,负载不工作。当定时时间到,P3.6引脚输出的是低电平,三极管饱和导通,继电器动作,开关闭合,负载得电运行。电路如图3-6所示。

图3-6 继电器控制电路

3.6显示系统

LED 显示器由多位数码管组成,各段LED 显示器需要由驱动电路驱动。七段LED 数码管显示器通常将各段发光二极管的阴极或阳极连在一起作为公共端。将各段发光二极管阳极连在一起的叫共阳极显示器,用低电平驱动;将阴极连在一起的叫共阴极显示器,用高电平驱动。静态显示就是每一个显示器各笔画段都要独占具有一个锁存功能的输出口线,CPU 把要显示的字形代码送到输出口上,就可以使显示器上显示所需的数字或符号,此后,即使CPU 不再去访问它,因为各笔画段接口具有锁存功能,显示的内容也不会消失。动态显示是指显示器显示某一字符时,相应段的发光二极管恒定地导通或截止。在本系统中为共阴极数码管,采用动态扫描显示。如图3-7所示。

7

图3-7 时间显示电路

3.7整机工作原理

定时器电路图如附录2所示。

开启仿真开关后,按下开始,电源接通。通过设置按钮,我们可以很方便的设置时间。我们调整好时间后,按开始键,当时间到达所定时时间时,通过控制继电器的动作接通电源,电源接通指示灯亮。

4. 软件设计

整套系统的运行都是基于8051内核指令控制运行的。由任务目标分析,采用中断处理方式设计程序流程图,如下图所示,主要程序见附录1。

程序开始首先对按键变量和小时、分钟变量进行定义,对共阴极数码管的段码(字型码)以一维数组方式定义。另外对延时函数、定时器初始化子函数、求按键子函数、按键处理子函数、计时子函数、显示子函数进行声明。

8

图4-1 主函数框图

在定时器T0、T1初始化和外部中断0(INTO )子函数中,规定定时器T0、T1的工作模式为方式1,定时时间为50ms 。外部中断0采用下降沿触发方式。定时器工作在中断方式,即定时时间到,立即停止执行主函数,转而去执行中断服务函数。

图4-2 定时器T0中断函数框图

图4-3 定时器T1中断服务函数框图

图4-4 外部中断0中断服务函数框图

9

在显示子函数中,上电复位后4位数码管显示“- - - -”。其中包括走时转换函数,负责将定时器走时数据转换为分钟的十位和个位,超过60分钟的数据再转换为小时的十位和个位。

在计时子函数中,设置每50ms 中断1次,分钟计数器中计数值为1200时,时间为1分钟。小时计数器计数值为60时,时间为1小时. 预约时间到,单片机P3.6引脚输出低电平,驱动三极管饱和导通,继电器的线圈中有电流经过,而产生吸合动作,接通电源,用电器开始工作。

5. 系统调试

5.1软件调试概述

单片机系统经过总体设计,完成了硬件和软件设计开发。通过软件和硬件相结合系统即可运行。但编制好的程序或焊接好的线路不能按预计的那样正常工作是常见的事,经常会出现一些硬件、软件上的错误,这是软件和硬件开发者经常遇见的,这就需要通过调试来发现错误并加以改正。调试可分为硬件调试和软件调试。本设计系统的已经在PC 机上用模拟开发软件进行了检测和调试,并运行成功,最后进行实物图的硬件组装与调试,这样就给开发者在提供了方便。

5.2软件调试

本设计是在Proteus 软件和Keil 软件相结合调试的,完全用仿真软件在PC 机上对目标电路原理图和程序进行检测和调试。调试过程中单片机相应输入端由通用键盘鼠标设定,运行状态、各寄存器状态、端口状态等都可以在指定的窗口区域显示出来,以确定程序运行有无错误。

目标程序纠错:该阶段工作通常在目标程序编辑时就完成。一般来说,仿真软件能为用户输入的程序指令纠错,包括书写格式、标号未定义或多重定义、转移地址溢出等错误。

整体程序调试:即把各子程序整体连起来进入到综合电路调试,看是否能实现预计的功能显示。在这阶段若发生故障,可以考虑各子程序在运行时是否破坏现场,数据缓冲单元是否发生冲突,标志位的建立和清除在设计上是否失误,堆栈是否溢出,输入输出状态是否正常等。

5.3系统仿真测试

5.3.1仿真测试方法

系统测试内容包括能否正常设定时间、数码管是否正常显示、是否能正常定时及继电器电路是否正常工作,具体测试方法如表5-1所示。

10

表5-1 系统测试项目与测试方法

5.3.2仿真测试结果

系统测试结果如表5-2所示。

表5-2 系统测试结果

结果:整个系统能按照预定的计划运行,此次制作圆满成功。

6. 结论

整个设计所实现的功能非常简单,归结为四个字:定时开关。所谓定时就是实现STC89C51的定时器精确定时到1秒的功能,整个显示部分实现了时显示和分显示两部分,同时实现了键盘的相关键值功能,实现了负载电源定时启闭的功能,同时在设定定时时间值的时候,实现了当前设定位的闪烁效果,当启动预约以后,也实现了所设定时间值不闪烁的效果,同时也实现了对设定时间值的保存。最后,当负载电源启动或关闭后,按下键盘当中的预约键,实现再次定时开关的功能。

硬件系统关系到所要设计的电子产品好怀,如系统抗干扰性等,所以要合理的安排尽量减少干扰,提高性能。单片机是很容易受干扰的控制器,当采用外部晶振时,应尽量让其靠近单片机减少对其干扰,防止程序乱飞现象。同时还可以采用隔离等方式减少干扰,硬件系统设计的好坏很大部分来源于经验,所以我们要有动手的好习惯。

软件设计是核心部分,具有多样化,灵活性高,易移植等优点,要深深理会各指令的含义才能更加熟练应用,中断的合理利用可以减少CPU 利用资源,具有执行效率高等优点,

11

本设计用到定时器中断以减少对CPU 的占用,更好的处理其他功能。软件的设计大部分采用模块化设计的方法以方便调试,并使其可读性大大增强,方便更改和移植。

在本次毕业设计当中,自己深深的明白了理论知识一定要和实践相结合的道理,只有把理论知识贯穿到实践当中,才能真正的学到有用的知识,自己在这次毕业设计中也学到了很多新的知识。

12

参考文献

[1]王静霞主编. 单片机应用技术(C 语言版). 北京:电子工业出版社,2012.5 [2]胡辉主编. 单片机应用系统设计与训练. 北京:中国水利水电出版社,2004.9 [3]戴佳. 戴卫.51单片机C 语言应用程序设计实例精讲. 电子工业出版社,2006 [4]王幸之主编.AT89系列单片机原理与接口技术. 高等教育出版社,2004.7 [5]何宏主编. 单片机原理与接口技术北京国防工业出版社,2006.7 [6]李光. 单片机基础. 北京:北京航空航天大学出版社,1994

[7]倪晓军. 单片机原理与接口技术教程. 北京:清华大学出版社,2009 [8]姚年春. 向华Protel99SE 基础教程. 北京:人民名邮电出版社,2009

[9]韩 颖.Proteus 在单片机技术实训中的应用[J];中国科教创新导刊,2008,31期 [10]李贵庭. 单片机应用技术及项目化训练. 西南交通大学出版社,2009

13

致 谢

不知不觉,毕业设计结束了。我的毕业论文已整理完毕,电路调试进展良好。毕业设计的完成意味着我的大学学习生活即将结束,从此我将进入一个新的人生旅途、开始一段崭新的生活——工作。在此,我衷心地感谢所有在我做毕业设计期间帮助过我人。

首先我要感谢李学明老师的大力帮助和支持。在整个设计过程当中,为我的毕业设计带来了很大方便。同时在我完成毕业设计的过程中提供了很多指导性的意见使我受益匪浅。在此,我衷心感谢老师给予我的帮助和教育。

此外,还要衷心感谢其他所有对本课题的研究和论文撰写有过帮助的同学。 最后,我要感谢我的母校——江苏农林职业技术学院,在校期间,这里给我留下了美好的回忆。特别是在我即将踏上工作岗位的同时,毕业设计整个过程给了我这样一个锻炼的机会,使我加深了对以前知识的理解和巩固,拓宽了知识面,也提高了我对所学知识的综合应用能力。祝愿母校的将来更美好!

14

附录1:定时器源程序

#include

#define uchar unsigned char #define uint unsigned int

sbit KEYON =P2^0; //开始键 sbit KEYOFF=P2^1; //关闭键 sbit KEYSET=P2^2; //预约键 sbit KEYINC=P2^3; //加1键 sbit KEYDEC=P2^4; //减1键 sbit KEYFREE=P2^5; //预留键

sbit POWER=P3^6; //电源开关指示灯 sbit LED=P3^3 ; //按键指示灯 uchar code dispcode[]={0x3f,0x06,0x05b,0x4f,0x66,

0x6d,0x7d,0x07,0x7f,0x6f,0x40}; //0-9的字型码 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(); }

//-------------定时器TO 、T1初始化,外部中断0初始化子函数-----

void init() {

TMOD=0x11; //TO、T1作定时器、工作方式1 TH0=(65536-50000)/256; //定时50ms TL0=(65536-50000)%256;

TH1=(65536-50000)/256; TL1=(65536-50000)%256;

IT0=1; //选择外部中断0为下降沿触发方式 EX0=1; //开外部中断0

15

ET1=1; //开定时器1 ET0=1; //开定时器0 EA =1; //开总中断 TR0=1; }

//----------显示子函数-------------------------- void display() {

uchar i,j=0x08;

if((Setflag==0)&&!(min|hour)) //数码管显示“- - - -” {

for(i=0;i

else //正常显示时间 {

disbuf[0] = dispcode[min%10]; //分个位 disbuf[1] = dispcode[min/10]; //分十位 disbuf[2] = dispcode[hour%10]+0x80; //小时个位 disbuf[3] = dispcode[hour/10]; //小时十位 }

if((Setflag!=0)&flag) //如果调时,数码管闪烁显示 {

for(i=0;i

if((disbuf[i]==0x3f)&&(i>2)) //不显示前面的0 P0=0; else

P0=disbuf[i];

if(Setflag==1) P1=j&0xfc; //调时,关断前两位位码 else P1=j & 0xf3; //调分,关断后两位位码 delay(5); //延时2.5ms P1=0x00; j=j>>1; } }

else //数码管正常显示 {

for(i=0;i

if((disbuf[i]==0x3f)&&(i>2)) P0=0; //不显示前面的0 else P0=disbuf[i];

P1=j; //位选通 delay(5); //延时2.5ms

16

P1=0X00;

j=j>>1;

}

}

}

//--------------外部中断0中断函数--------------------------------- void int0()interrupt 0 using 0

{

uchar keynum;

display(); //动态显示程序作为去抖动 if(INT0==0) //判断是否有按键按下

{

keynum=GetKeyNum(); //有效键,获取键值

while(INT0==0); //等待按键释放

Keyprocess(keynum); //按键处理

}

}

//-----------------定时器0中断子函数---------------------------- void time0() interrupt 1 //处理调时、显示器闪烁 {

static uchar ledcnt,num; //设置静态变量

TH0=(65536-50000)/256; //定时50ms

TL0=(65536-50000)%256;

if((Onflag && ((hour | min)!=0)) |! Onflag)//指示灯每隔0.5s 闪烁 {

ledcnt++;

if(ledcnt==10) // 10 X 50mS=0.5S

{

ledcnt=0;

LED=~LED;

}

}

if(Setflag!=0) //调时闪烁

{

num++;

if(num==5)

{

num=0;

flag=~flag;

}

}

}

//-------------定时器1中断子函数-------------------

17

void time1() interrupt 3

{

TH1=(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;

return(temp);

}

//--------------------按键处理函数----------------------------

void Keyprocess (uchar x)

{

switch(x)

{

case 1: //KEYON处理函数

Onflag=1; //开Onflag 标志

Setflag=0; //关(Setflag )调时标志

if((!Setflag)&&!(hour | min)) //没有调时且未处于预约,继电器通 {

POWER=0;

LED=0;

}

else

TR1=1; //定时器1运行、执行计时程序 break;

case 2 : //KEYOFF,关处理,标志清0

Onflag=0;

Setflag=0;

hour=0;

min=0;

POWER=1;

LED=1;

break;

case 3: //预约调时/调分键,处理调时标志 18

if(Onflag==0)

{

Setflag++;

if(Setflag==3) Setflag=1;

}

break;

case 4: //加1键

if(Setflag==1) //调时键,最大只能调到11

{

hour++;

if(hour==12)

hour=0;

}

if(Setflag==2) //调分键,最大只能调到59

{

min++;

if(min==60)

min=0;

}

break;

case 5: //减1键

if(Setflag==1) //调时键,减小时处理,最小0 {

hour-- ;

if(hour==-1)

hour=12;

}

if(Setflag==2) //调分键,减分处理,最小0

{

min--;

if(min==-1)

min=59;

}

break;

}

}

//---------------------计算时间--------------------------------- void caculate()

{

static uint tcount; //tcount为定时次数

if((hour | min)!=0)

{

tcount++; //1次50ms 到,改变定时次数

19

if(tcount==1200) //1200*50ms=1分钟

{

tcount=0; //初始化定时次数

if(min==0)

{

min=60;

hour--;

}

min--;

}

if((min==0)&(hour==0)) //预约时间到

{

POWER=0; //继电器接通

LED=0;

TR1=0;

}

}

}

//-----------------------定时0.5ms------------------------

void delay(uchar x)

{

uchar j,k;

for(j=x;j>0;j--)

for(k=249;k>0;k--);

}

20

附录2:定时器电路图

21

定时开关控制器设计

摘要:本次设计以STC89C51RC 芯片为核心,辅以必要的外围电路,设计了一个定时器,它由5V 直流电源供电。在硬件方面,除了CPU 外,使用四个七段LED 数码管来进行显示,LED 数码管采用的是动态扫描显示。数码管能够准确显示时、分。5个按键可以实现对定时时间的调整。软件方面采用C 语言编程。整个定时系统能完成时间的显示,调时,启闭负载电源等功能。

关键词:STC89C51RC ;定时器;数码管

Timer Switch Controller Design

Abstract :This design uses STC89C51RC chip as the core, with 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 achieved 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. 概述 . .......................................................... 1

2. 方案设计 . ...................................................... 1

2.1要求功能 .................................................. 1

2.2电路设计方案确定 .......................................... 2

2.3 STC89C51单片机介绍 ....................................... 2

2.3.1主要功能、性能参数 ................................... 2

2.3.2引脚分配 ............................................. 3

3. 硬件电路设计 . .................................................. 4

3.1单片机最小系统 ............................................ 4

3.1.1振荡电路 ............................................. 4

3.1.2复位电路 ............................................. 4

3.2数码管驱动电路 ............................................ 5

3.3按键电路 .................................................. 5

3.4中断触发电路 .............................................. 6

3.5继电器控制电路 ............................................ 7

3.6显示系统 .................................................. 7

3.7整机工作原理 .............................................. 8

4. 软件设计 . ...................................................... 8

5. 系统调试 . ..................................................... 10

5.1软件调试概述 ............................................. 10

5.2软件调试 ................................................. 10

5.3系统仿真测试 ............................................. 10

5.3.1仿真测试方法 ........................................ 10

5.3.2仿真测试结果 ........................................ 11

6. 结论 . ......................................................... 11

参考文献 . ....................................................... 13

致 谢 . ......................................................... 14

附录1:定时器源程序 ........................................... 15

附录2:定时器电路图 ............................................ 21

1.概述 随着产业结构的不断调整、生产工艺的飞速发展、人们生活水平的不断提高及家用电器的逐渐普及,市场对定时控制系统的需求越来越大. 如定时自动报警、定时自动打铃、定时开关烘箱、定时通断动力设备以及各种电气的定时启动等都属于定时控制系统。定时控制系统的实现方法很多, 本文主要介绍以80C51 系列单片机中的STC89C51为核心的智能定时控制系统的设计实现方式. 80C51 系列单片机进入市场时间早, 总线开放, 仿真开发设备多, 芯片及其开发价格低廉、速度较快、电磁兼容性较好。

本文所述定时开关控制系统主要包括时间设置,数码管显示,中断程序设置等功能。 硬件与软件方面的设计。硬件部分主要由STC89C51单片机,LED 显示电路,以及调时按键电路等组成,系统通过LED 显示数据,所以具有人性化的操作和直观的显示效果。软件方面主要包括中断程序、键盘程序,显示程序等。

本系统以单片机的C 语言进行软件设计,为了便于扩展和更改,软件的设计采用模块化结构,使程序设计的逻辑关系更加简洁明了,以便更简单地实现调整时间及显示功能。所有程序编写完成后,在Keil 软件中进行调试,确定没有问题后,在Proteus 软件中嵌入单片机内进行仿真。在日新月异的21世纪里,家用电子产品得到了迅速发展。许多家电设备都趋于人性化、智能化,这些电器设备大部分都含有单片机控制器,具有操作简单的特点。

2. 方案设计

2.1要求功能

定时开关控制器广泛应用于日常生活及工业生产中负载电源的通断,达到方便用电和节电的目的。用单片机实现电源开关控制,可以由人通过按键来设定负载电源的开/关时间,并通过显示器观察时间,达到定时开关机的目的。本设计中4位数码管中前两位显示“小时”,后两位显示“分”,最大预约时间为12小时。

按键操作:

1. 开始键:按下该键,电源接通。或当调时结束后按下该键,电源将在设定时间到达后接通。

2. 关闭键:按下该键,切断电源。

3. 预约键:第一次按下该键,可以对电源的接通时间进行“小时”调整;第二次按下该键,可以对电源的接通时间进行“分钟”调整。

4. 加“1”键:按下该键,调“小时”时间加1,最可加到11;调“分钟”时加1,最大可加到59。即最长定时时间为11小时59分。

5. 减“1”键:按下该键,调“小时”时减1,最小值为0;调分钟时,“分钟”减1,最小值为0。

1

6. 预留键:在本设计中,无作用。

显示功能:

(1)按键指示灯D1:只要有按键被按下,指示灯会点亮。

(2)电源开关状态指示灯D3:当电源和负载接通时,该灯点亮。

7. 四位数码管:前两位为小时,后两位显示分。上电即显示“- - - -”;预约调时前两位闪烁,预约调分钟后两位闪烁。预约时间内,倒计时显示。

2.2电路设计方案确定 综上要求所述, 对此次设计的方案选定: 以单片机STC89C51为主控制器,采用单片机内部定时、独立式按键和动态LED 显示。

采用51单片机可以实现一些功能不多的控制环境,既节约经济又达到了我们所需的智能化控制。

本设计主要从以下三个方面入手:一是实现按键功能,可以接通和关闭电源并设定时间;二是实现显示功能,显示设定时间;三是实现定时功能,当时间到达设定值时可以通过继电器动作控制负载电源的启闭,并通过指示灯显示任务的完成。设计的总体方案如图2-1所示,由单片机最小系统、

LED 数码管显示电路、继电器控制电路、按键电路及5V 直流供电电路组成。为了实现智能控制和简化设计,选用了STC89C51集成芯片。

图2-1 基于STC89系列单片机的定时控制系统

2.3 STC89C51单片机介绍

STC系列单片机是最新推出的一种新型51内核的单片机。片内含有Flash 程序存储器、SRAM 、UART 、SPI 、A\D、PWM 等模块。该器件的基本功能与普通的51单片机完全兼容。 2.3.1主要功能、性能参数

1. 内置标准51内核;

2.工作频率范围:0~40MHZ,相当于普通8051的0~80MHZ;

3.STC89C5xRC 对应Flash 空间:4KB\8KB\15KB;

2

4. 内部存储器(RAM) :512B ;

5. 定时器\计数器:3个16位;

6. 通用异步通信口(UART )1

个;

7. 中断源:8个;

8. 有ISP(在系统可编程)\IAP(在应用可编程), 无需专用编程器\仿真器;

9. 通用I\O口:32\36个;

10. 工作电压:3.8~5.5V;

11. 外形封装:40脚PDIP 、44脚PLCC 和PQFP 等。

2.3.2引脚分配

STC89C51RC 单片机引脚图如图2-2所示。

图2-2 STC89C51RC引脚图

根据设计要求,选用STC89C51RC 作为电路的控制核心,电路中包含了时钟电路,复位电路作为单片机的最小系统。

晶体振荡器频率为12MHz ,P0.0~P0.7作为四位七段数码管的段码输出端,P1.0~P1.3作为四位数码管(共阴极)的位码输出端。P2.0~P2.5作为键盘信号的输出端。P3.6作为控制端信号的输出,控制继电器吸合与释放。

3

3. 硬件电路设计

3.1单片机最小系统

3.1.1振荡电路

STC89C51是内部具有振荡电路的单片机,只需在18脚和19脚之间接上石英晶体,给单片机加工作所需的直流电源,振荡器就开始振荡起来。振荡电路为单片机工作提供了所需要的时钟脉冲信号,单片机开始执行程序。振荡电路不工作,整个单片机电路都不能正常工作。本设计中STC 89C51外接12MHz 的石英晶体,单片机的机器周期恰好为1us 。18脚和19脚分别对地接了一个30pF 的电容,目的是防止单片机自激。若从18脚输入外部时钟脉冲,则19脚接地。振荡电路如图3-1所示。

图3-1 单片机内部晶振电路连接图

3.1.2复位电路

复位电路就是在RST 端(9脚)外接的一个电路,目的是使单片机上电开始工作时,内部寄存器进行初始化,让单片机从初始状态开始工作。在时钟电路工作的情况下,只要复位引脚高电平保持在两个机器周期以上的时间,STC89C51便能完成系统初始化工作,使得内部特殊功能寄存器的内容均被设置成已知状态,并且从ROM 中地址0000H 处读入程序代码而执行程序。复位电路如图3-2所示。

图3-2 复位电路

4

3.2数码管驱动电路

由于P0口的输出端为漏极开路门,必须通过外接上拉电阻和+5V电源连接,输出高电平。本设计中上拉电阻的值为10k Ω。由于P0口输出电流有限,为减轻单片机的负担,在P0口外接了一个8路同相三态双向驱动器74LS245(起电流放大作用)。19脚是它的片选端,低电平有效,1脚是输入/输出端口转换用,当该引脚接高电平时,信号由“A ”端传向“B ”端,该引脚接低电平时,信号由“B ”端传向“A ”端。P1口通过一个六反相器74LS04和数码管的位码输入端相连,故P1.0~P1.3输出高电平时,相应的数码管才能点亮。驱动电路如图3-3所示。

图3-3 驱动电路

3.3按键电路 按键的开关状态通过一定的电路转换为高、低电平状态。按键闭合过程在相应的I/O端口形成一个负脉冲。闭合和释放过程都要经过一定的过程才能达到稳定。这一过程是处于高、低电平之间的一种不稳定状态,称为抖动。抖动的持续时间长短与开关的机械特性有关,一般在5—10ms 之间。为了避免CPU 多次处理按键的一次闭合,应采用软件法去抖动消除抖动。本设计采用的是独立式按键,直接用I/O口线构成独立按键电路,每个按键占用一条I/O口线,每个按键的工作状态不会产生相互影响。6个独立按键分别和P2.0~P2.5口相连接,通过上拉电阻和电源相连接,当按键没有按下时,P2.0~P2.5端口输出为“1”,表示无信号输入。6个按键只要有1个按键按下,相应的引脚变为低电平,表示有信号输入,执行相应的按键命令。

5

P2.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出

行的程序,转而去执行中断服务程序。电路图如图3-5所示。

图3-5 中断触发电路

6

3.5继电器控制电路

继电器控制电路如图3-6所示。

由于单片机I/O口输出电流小驱动能力有限,从图中可以看出我们利用三极管来控制,通过如图的连接方式,可以提高驱动负载的能力,利用三极管截止和饱和导通去控制继电器的闭合/断开。因为P3.6口作为控制信号的输出口,控制继电器吸合与释放,所以当定时时间未到时,P3.6引脚输出的是高电平,三极管处于截止状态,继电器无动作,开关不会闭合,负载不工作。当定时时间到,P3.6引脚输出的是低电平,三极管饱和导通,继电器动作,开关闭合,负载得电运行。电路如图3-6所示。

图3-6 继电器控制电路

3.6显示系统

LED 显示器由多位数码管组成,各段LED 显示器需要由驱动电路驱动。七段LED 数码管显示器通常将各段发光二极管的阴极或阳极连在一起作为公共端。将各段发光二极管阳极连在一起的叫共阳极显示器,用低电平驱动;将阴极连在一起的叫共阴极显示器,用高电平驱动。静态显示就是每一个显示器各笔画段都要独占具有一个锁存功能的输出口线,CPU 把要显示的字形代码送到输出口上,就可以使显示器上显示所需的数字或符号,此后,即使CPU 不再去访问它,因为各笔画段接口具有锁存功能,显示的内容也不会消失。动态显示是指显示器显示某一字符时,相应段的发光二极管恒定地导通或截止。在本系统中为共阴极数码管,采用动态扫描显示。如图3-7所示。

7

图3-7 时间显示电路

3.7整机工作原理

定时器电路图如附录2所示。

开启仿真开关后,按下开始,电源接通。通过设置按钮,我们可以很方便的设置时间。我们调整好时间后,按开始键,当时间到达所定时时间时,通过控制继电器的动作接通电源,电源接通指示灯亮。

4. 软件设计

整套系统的运行都是基于8051内核指令控制运行的。由任务目标分析,采用中断处理方式设计程序流程图,如下图所示,主要程序见附录1。

程序开始首先对按键变量和小时、分钟变量进行定义,对共阴极数码管的段码(字型码)以一维数组方式定义。另外对延时函数、定时器初始化子函数、求按键子函数、按键处理子函数、计时子函数、显示子函数进行声明。

8

图4-1 主函数框图

在定时器T0、T1初始化和外部中断0(INTO )子函数中,规定定时器T0、T1的工作模式为方式1,定时时间为50ms 。外部中断0采用下降沿触发方式。定时器工作在中断方式,即定时时间到,立即停止执行主函数,转而去执行中断服务函数。

图4-2 定时器T0中断函数框图

图4-3 定时器T1中断服务函数框图

图4-4 外部中断0中断服务函数框图

9

在显示子函数中,上电复位后4位数码管显示“- - - -”。其中包括走时转换函数,负责将定时器走时数据转换为分钟的十位和个位,超过60分钟的数据再转换为小时的十位和个位。

在计时子函数中,设置每50ms 中断1次,分钟计数器中计数值为1200时,时间为1分钟。小时计数器计数值为60时,时间为1小时. 预约时间到,单片机P3.6引脚输出低电平,驱动三极管饱和导通,继电器的线圈中有电流经过,而产生吸合动作,接通电源,用电器开始工作。

5. 系统调试

5.1软件调试概述

单片机系统经过总体设计,完成了硬件和软件设计开发。通过软件和硬件相结合系统即可运行。但编制好的程序或焊接好的线路不能按预计的那样正常工作是常见的事,经常会出现一些硬件、软件上的错误,这是软件和硬件开发者经常遇见的,这就需要通过调试来发现错误并加以改正。调试可分为硬件调试和软件调试。本设计系统的已经在PC 机上用模拟开发软件进行了检测和调试,并运行成功,最后进行实物图的硬件组装与调试,这样就给开发者在提供了方便。

5.2软件调试

本设计是在Proteus 软件和Keil 软件相结合调试的,完全用仿真软件在PC 机上对目标电路原理图和程序进行检测和调试。调试过程中单片机相应输入端由通用键盘鼠标设定,运行状态、各寄存器状态、端口状态等都可以在指定的窗口区域显示出来,以确定程序运行有无错误。

目标程序纠错:该阶段工作通常在目标程序编辑时就完成。一般来说,仿真软件能为用户输入的程序指令纠错,包括书写格式、标号未定义或多重定义、转移地址溢出等错误。

整体程序调试:即把各子程序整体连起来进入到综合电路调试,看是否能实现预计的功能显示。在这阶段若发生故障,可以考虑各子程序在运行时是否破坏现场,数据缓冲单元是否发生冲突,标志位的建立和清除在设计上是否失误,堆栈是否溢出,输入输出状态是否正常等。

5.3系统仿真测试

5.3.1仿真测试方法

系统测试内容包括能否正常设定时间、数码管是否正常显示、是否能正常定时及继电器电路是否正常工作,具体测试方法如表5-1所示。

10

表5-1 系统测试项目与测试方法

5.3.2仿真测试结果

系统测试结果如表5-2所示。

表5-2 系统测试结果

结果:整个系统能按照预定的计划运行,此次制作圆满成功。

6. 结论

整个设计所实现的功能非常简单,归结为四个字:定时开关。所谓定时就是实现STC89C51的定时器精确定时到1秒的功能,整个显示部分实现了时显示和分显示两部分,同时实现了键盘的相关键值功能,实现了负载电源定时启闭的功能,同时在设定定时时间值的时候,实现了当前设定位的闪烁效果,当启动预约以后,也实现了所设定时间值不闪烁的效果,同时也实现了对设定时间值的保存。最后,当负载电源启动或关闭后,按下键盘当中的预约键,实现再次定时开关的功能。

硬件系统关系到所要设计的电子产品好怀,如系统抗干扰性等,所以要合理的安排尽量减少干扰,提高性能。单片机是很容易受干扰的控制器,当采用外部晶振时,应尽量让其靠近单片机减少对其干扰,防止程序乱飞现象。同时还可以采用隔离等方式减少干扰,硬件系统设计的好坏很大部分来源于经验,所以我们要有动手的好习惯。

软件设计是核心部分,具有多样化,灵活性高,易移植等优点,要深深理会各指令的含义才能更加熟练应用,中断的合理利用可以减少CPU 利用资源,具有执行效率高等优点,

11

本设计用到定时器中断以减少对CPU 的占用,更好的处理其他功能。软件的设计大部分采用模块化设计的方法以方便调试,并使其可读性大大增强,方便更改和移植。

在本次毕业设计当中,自己深深的明白了理论知识一定要和实践相结合的道理,只有把理论知识贯穿到实践当中,才能真正的学到有用的知识,自己在这次毕业设计中也学到了很多新的知识。

12

参考文献

[1]王静霞主编. 单片机应用技术(C 语言版). 北京:电子工业出版社,2012.5 [2]胡辉主编. 单片机应用系统设计与训练. 北京:中国水利水电出版社,2004.9 [3]戴佳. 戴卫.51单片机C 语言应用程序设计实例精讲. 电子工业出版社,2006 [4]王幸之主编.AT89系列单片机原理与接口技术. 高等教育出版社,2004.7 [5]何宏主编. 单片机原理与接口技术北京国防工业出版社,2006.7 [6]李光. 单片机基础. 北京:北京航空航天大学出版社,1994

[7]倪晓军. 单片机原理与接口技术教程. 北京:清华大学出版社,2009 [8]姚年春. 向华Protel99SE 基础教程. 北京:人民名邮电出版社,2009

[9]韩 颖.Proteus 在单片机技术实训中的应用[J];中国科教创新导刊,2008,31期 [10]李贵庭. 单片机应用技术及项目化训练. 西南交通大学出版社,2009

13

致 谢

不知不觉,毕业设计结束了。我的毕业论文已整理完毕,电路调试进展良好。毕业设计的完成意味着我的大学学习生活即将结束,从此我将进入一个新的人生旅途、开始一段崭新的生活——工作。在此,我衷心地感谢所有在我做毕业设计期间帮助过我人。

首先我要感谢李学明老师的大力帮助和支持。在整个设计过程当中,为我的毕业设计带来了很大方便。同时在我完成毕业设计的过程中提供了很多指导性的意见使我受益匪浅。在此,我衷心感谢老师给予我的帮助和教育。

此外,还要衷心感谢其他所有对本课题的研究和论文撰写有过帮助的同学。 最后,我要感谢我的母校——江苏农林职业技术学院,在校期间,这里给我留下了美好的回忆。特别是在我即将踏上工作岗位的同时,毕业设计整个过程给了我这样一个锻炼的机会,使我加深了对以前知识的理解和巩固,拓宽了知识面,也提高了我对所学知识的综合应用能力。祝愿母校的将来更美好!

14

附录1:定时器源程序

#include

#define uchar unsigned char #define uint unsigned int

sbit KEYON =P2^0; //开始键 sbit KEYOFF=P2^1; //关闭键 sbit KEYSET=P2^2; //预约键 sbit KEYINC=P2^3; //加1键 sbit KEYDEC=P2^4; //减1键 sbit KEYFREE=P2^5; //预留键

sbit POWER=P3^6; //电源开关指示灯 sbit LED=P3^3 ; //按键指示灯 uchar code dispcode[]={0x3f,0x06,0x05b,0x4f,0x66,

0x6d,0x7d,0x07,0x7f,0x6f,0x40}; //0-9的字型码 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(); }

//-------------定时器TO 、T1初始化,外部中断0初始化子函数-----

void init() {

TMOD=0x11; //TO、T1作定时器、工作方式1 TH0=(65536-50000)/256; //定时50ms TL0=(65536-50000)%256;

TH1=(65536-50000)/256; TL1=(65536-50000)%256;

IT0=1; //选择外部中断0为下降沿触发方式 EX0=1; //开外部中断0

15

ET1=1; //开定时器1 ET0=1; //开定时器0 EA =1; //开总中断 TR0=1; }

//----------显示子函数-------------------------- void display() {

uchar i,j=0x08;

if((Setflag==0)&&!(min|hour)) //数码管显示“- - - -” {

for(i=0;i

else //正常显示时间 {

disbuf[0] = dispcode[min%10]; //分个位 disbuf[1] = dispcode[min/10]; //分十位 disbuf[2] = dispcode[hour%10]+0x80; //小时个位 disbuf[3] = dispcode[hour/10]; //小时十位 }

if((Setflag!=0)&flag) //如果调时,数码管闪烁显示 {

for(i=0;i

if((disbuf[i]==0x3f)&&(i>2)) //不显示前面的0 P0=0; else

P0=disbuf[i];

if(Setflag==1) P1=j&0xfc; //调时,关断前两位位码 else P1=j & 0xf3; //调分,关断后两位位码 delay(5); //延时2.5ms P1=0x00; j=j>>1; } }

else //数码管正常显示 {

for(i=0;i

if((disbuf[i]==0x3f)&&(i>2)) P0=0; //不显示前面的0 else P0=disbuf[i];

P1=j; //位选通 delay(5); //延时2.5ms

16

P1=0X00;

j=j>>1;

}

}

}

//--------------外部中断0中断函数--------------------------------- void int0()interrupt 0 using 0

{

uchar keynum;

display(); //动态显示程序作为去抖动 if(INT0==0) //判断是否有按键按下

{

keynum=GetKeyNum(); //有效键,获取键值

while(INT0==0); //等待按键释放

Keyprocess(keynum); //按键处理

}

}

//-----------------定时器0中断子函数---------------------------- void time0() interrupt 1 //处理调时、显示器闪烁 {

static uchar ledcnt,num; //设置静态变量

TH0=(65536-50000)/256; //定时50ms

TL0=(65536-50000)%256;

if((Onflag && ((hour | min)!=0)) |! Onflag)//指示灯每隔0.5s 闪烁 {

ledcnt++;

if(ledcnt==10) // 10 X 50mS=0.5S

{

ledcnt=0;

LED=~LED;

}

}

if(Setflag!=0) //调时闪烁

{

num++;

if(num==5)

{

num=0;

flag=~flag;

}

}

}

//-------------定时器1中断子函数-------------------

17

void time1() interrupt 3

{

TH1=(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;

return(temp);

}

//--------------------按键处理函数----------------------------

void Keyprocess (uchar x)

{

switch(x)

{

case 1: //KEYON处理函数

Onflag=1; //开Onflag 标志

Setflag=0; //关(Setflag )调时标志

if((!Setflag)&&!(hour | min)) //没有调时且未处于预约,继电器通 {

POWER=0;

LED=0;

}

else

TR1=1; //定时器1运行、执行计时程序 break;

case 2 : //KEYOFF,关处理,标志清0

Onflag=0;

Setflag=0;

hour=0;

min=0;

POWER=1;

LED=1;

break;

case 3: //预约调时/调分键,处理调时标志 18

if(Onflag==0)

{

Setflag++;

if(Setflag==3) Setflag=1;

}

break;

case 4: //加1键

if(Setflag==1) //调时键,最大只能调到11

{

hour++;

if(hour==12)

hour=0;

}

if(Setflag==2) //调分键,最大只能调到59

{

min++;

if(min==60)

min=0;

}

break;

case 5: //减1键

if(Setflag==1) //调时键,减小时处理,最小0 {

hour-- ;

if(hour==-1)

hour=12;

}

if(Setflag==2) //调分键,减分处理,最小0

{

min--;

if(min==-1)

min=59;

}

break;

}

}

//---------------------计算时间--------------------------------- void caculate()

{

static uint tcount; //tcount为定时次数

if((hour | min)!=0)

{

tcount++; //1次50ms 到,改变定时次数

19

if(tcount==1200) //1200*50ms=1分钟

{

tcount=0; //初始化定时次数

if(min==0)

{

min=60;

hour--;

}

min--;

}

if((min==0)&(hour==0)) //预约时间到

{

POWER=0; //继电器接通

LED=0;

TR1=0;

}

}

}

//-----------------------定时0.5ms------------------------

void delay(uchar x)

{

uchar j,k;

for(j=x;j>0;j--)

for(k=249;k>0;k--);

}

20

附录2:定时器电路图

21


相关内容

  • 花式喷水池的PLC控制课程设计
  • 课 程 设 计 题 目 花式喷水池的PLC控制 系 (部) 班 级 姓 名 学 号 指导教师 2012 年 2 月 27 日至 3 月 9 日 共2 周 2012年 3 月 9 日 测控技术与系统课程设计任务书 课程设计成绩评定表 目 录 1 概述 ......................... ...

  • 数字式定时开关
  • 电子课程设计报告 题目名称: 数字式定时开关 姓 名: 段亚斌 专 业: 电子信息工程 班级学号: 088208108 同 组 人: 李巨元 指导教师: 程宜凡老师 摘 要 ①简述设计思路:本次课设是设计一个定时开关,通过拨码开关预置一个时间,通过计数器倒计时方式进行计数,当到达某一个时间时,发出一 ...

  • 四人抢答器
  • 一.设计内容及要求 1.设计内容 设计一台供4名选手参加比赛的数字抢答器 2.设计要求 (1).抢答器同时供4名选手比赛,分别用4个按钮S0 - S3表示. (2).设置一个系统清除和抢答控制开关S ,该开关由主持人控制. (3). 抢答器具有锁存与显示功能.即选手按动按钮,锁存相应的编号,并在LE ...

  • 具有定时功能的八路数显抢答器的设计
  • 具有定时功能的八路数显抢答器的设计 摘要: 本文介绍了一种用74系列常用集成电路设计的数码显示八路抢答器的电路组成.设计思路及功能.该抢答器除具有基本的抢答功能外,还具有定时.计时和报警功能.主持人通过时间预设开关预设供抢答的时间,系统将完成自动倒计时.若在规定的时间内有人抢答,则计时将自动停止:若 ...

  • 楼道触摸延时开关设计
  • 课程设计任务书 2014- 2015学年第二学期 专业: 电子信息工程 学号: 130XXXX013 姓名: 汪XX 课程设计名称: 电子技术课程设计 设计题目: 楼道触摸延时开关设计 完成期限:自 2015 年 6 月 15 日至 2015 年 6 月 28 日共 2 周 设计依据.要求及主要内容 ...

  • 交通灯设计实验
  • FPGA 实现交通灯控制系统的设计 一.实验目的与要求 掌握用FPGA 可编程逻辑器件实现交通灯控制系统的基本功能的设计方法. 熟悉交通灯控制系统的ASM 图和状态转换图的设计方法. 二.实验原理 1.设计要求 设计一个十字路口主干道和支干道的交通灯控制系统,其示意图如图1-1所示. 主干道 支干道 ...

  • 单片机控制下的坐姿矫正器
  • 本科毕业论文(设计) 题目: 单片机控制下的坐姿矫正器 学院: 物理与电子科学学院 班级: 2010级电子三班 姓名: 张嘉铭 指导教师: 张丽 职称: 副教授 完成日期: 2014 年 5 月 25 日 单片机控制下的坐姿矫正器 摘要:为改变传统坐姿矫正器存在的问题,本设计将智能化和人性化加入其控 ...

  • 8位数字抢答器(含电路图)
  • 天津职业大学 八路抢答器电路设计报告 学院:电子信息工程学院 专业:应用电子技术 班级:电子1班 姓名:吴凡 樊德帅 指导教师:李新 2014年6月30日 一.课程设计的内容 设计一个8位数字抢答器. 二.课程设计的要求与数据 设计要求包括: 1. 抢答器同时供8名选手或8个代表队比赛,分别用8个按 ...

  • 声光控楼道灯开关设计!
  • 目 录 摘 要...........................................................................................................................................1 第1 ...