基于51单片机的24小时定时控制系统.doc_第1页
基于51单片机的24小时定时控制系统.doc_第2页
基于51单片机的24小时定时控制系统.doc_第3页
基于51单片机的24小时定时控制系统.doc_第4页
基于51单片机的24小时定时控制系统.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

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

文档简介

基于51单片机的24小时定时控制系统 摘 要:定时开关控制器在工业方面的自动控制,办公场所的电器控制等有着极为广泛的用途;本文利用89C51单片机的定时器计数器时钟电路设计一套24小时范围内的定时控制系统;可方便的实现对家庭电器和工业方面的自动控制;该定时开关控制器具有简单易制、价格低廉、控制时间可精确到秒等优点,还可以实时显示时间,具有较高的应用价值。关键字:单片机 时钟 定时 控制 开关Timing Control System of 24h Designing Based on 51MCU Abstract:Automatic control timing controller has a very wide range of uses in the industry and office applicant control. In this paper, we designed the timing control system including a set of 24 hours within the scope of using the timer counter clock circuit based on mcs-51; It can realize the automatic control of household appliances and industrial aspects very conveniently; the timing switch controller has the very simple and easy preparation, and it is also very cheap, It can control the time very accurately to seconds. Also show the time on time. This application is of great value. Keywords: MCU; Clock; Timing; Control; Switch0 引言电子定时器在家用电器中经常用于延时自动关机、定时。延时自动关机可用于:收音机、电视机、录音机、催眠器、门灯、路灯、汽车头灯、转弯灯以及其他电器的延时断电及延时自停电源等。定时可用于:照相定时曝光、定时闪光、定时放大、定时调速、定时烘箱、冰箱门开定时报警、水位定时报警、延时催眠器、延时电铃、延时电子锁、触摸定时开关等。例如:空调中的定时器,在工作一段时间之后便能自动切断电源停止工作。夏季夜间使用,入睡前先顶好时间,等睡熟后到了预定时间,空调自动关机。方便节能。定时器除了应用于家用电器外,还广泛地用于工业农业生产和服务设施,甚至军事等。单片机的定时器是单片机里最“活跃”的部件之一,很多程序、应用系统都离不开定时器。由于定时器的应用与单片机的其他硬件相关,存在着一定的复杂性。而定时器也是单片机应用中解决某类复杂问题的最为有效的方法,应用非常广泛。本文设计了基于单片机系统的一个简单的定时开关控制系统。可以灵活的承载多方面有定时控制需求的设备的控制。1 整体方案设计整个系统由51单片机,时钟电路,复位电路,独立按键,显示电路,报警器以及继电器等部分组成1(结构图如图一)。定时开关控制系统设计主要以STC89C51单片机为核心2, 通过DS1302进行精准的时间控制3,独立按键控制设置实时时间以及定时开、关时间,由8个8段LED数码管显示实时的系统时间,并实现交互的设置开关定时时间。报警器用蜂鸣器当到定时时间时蜂鸣器发出十秒左右报警声以提示用户。继电器、 受控电器插座及受控电器组成一个执行机构, 当定时时间到时, 单片机向继电器输出一个高电平使继电器工作,继电器常开触点闭合接通受控电器插座, 使受控电器通电加以工作, 从而完成定时开关电器的功能。4图一 定时开关系统构成图2 硬件系统设计硬件系统设计采用所学习单片机开发板的设计电路做些简要的修改,并添加继电器电路,电路原理图见图二。独立按键与单片机K1,K2,K3,K4分别与51单片机的P30,P31,P32,P33口相接。K3采用中断方式按下切换实时时间的设置状态和运行状态;K4切换选择显示实时时间,定时开时间点,定时关时间点,在定时时间点图二 定时开关系统硬件结构图可进行设置改变定时时间;K1在设置状态下起作用,进行选择设置时分秒;K2在设置状态下起作用对设置项的值进行加一。显示时间的八个LED八段数码管通过一个74138译码器进行选择,数码管输入口通过74573与单片机P0口相连;138译码器的输入口为P22,P23,P24。本系统采用了两个LED灯区分设置选项,两灯都不亮数码管显示为实时时间,两灯亮一灯为开关关闭定时时间,两灯全亮为开关开启定时时间,占用P20,P21两个接口。蜂鸣器报警装置接单片机P15口,通过P15口的高低电平不断变化产生交流信号使蜂鸣器发声。继电器与单片机的P10口相接,输出1时继电器使电源接通控制电器正常工作,输出0时继电器使电源断开控制电器停止工作。3 软件系统设计定时开关控制软件实现较为简单,主程序主要是在单片机的控制下,对键盘的输入信息进行存储分析,驱动LED数码管显示出相关信息,并通过对比分析定时时间与时钟,控制继电器的通、断,从而达到控制电器通断电。在这个过程中,单片机首先进行初始化,显示值初始化、继电器断开、以及单片机振荡频率的校准等。单片机每执行一次循环对定时时间和时钟进行一次比较。5为了实现时钟走时与所在地时间一致和满足要求,设定了时钟设置和定时设置的功能。时钟设置和定时设置都在主函数里的while循环中实现,对于设置的按键采用扫面检测的方法,而进入设置状态是用中断方法进入设置状态。程序设计的流程图如图三。图三定时开关系统设计流程图程序初始化后,设置定时器T0工作在方式1用于计时,同时设置开关定时时间,执行显示程序。当定时时间设置好后,系统不断的查询定时时间到否,定时开关开时间到时P10=1,继电器闭合,受控电器工作,同时是控制蜂鸣器报警变量设置时间值,使蜂鸣器控制P15电平高低不断交替变化产生交流信号使蜂鸣器报警。在程序执行过程中中断0控制着定时器的启动和暂停,当暂停时可修改实时时钟的时间,程序查询检查K1和K2按键是否按下,K1选择设定位“时、分、秒”,K2设置当前选择的设定位数值加一。K4切换显示模式:实时时钟,定时关时间,定时开时间。在模式切换时对应LED1,LED0显示灯改变,实时时钟两灯都灭,定时关时间显示一个灯,定时开时间显示两个灯。在定时开关状态下即可由K1,K2键设置定时的时间值,K1,K2的功能与实时时钟设置相同。具体软件实现代码如下:#includesbit K1=P30;sbit K2=P31;sbit K3=P32;sbit K4=P33;unsigned char Time=0;/用来计时间的值#define DIGP0sbit LSA=P22;sbit LSB=P23;sbit LSC=P24;sbit LED0=P20;sbit LED1=P21;sbit Beep=P15;sbit Switch=P10;unsigned char code DIG_CODE10=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/0123456789unsigned char Num=0;unsigned int disp8=0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f;unsigned char hour=0,minit=0,second=0;unsigned char Thour2=0,0,Tminit2=0,0,Tsecond2=0,0;unsigned char Count=0;/设定选择设置项unsigned char SetPlace;/设置位选择unsigned int CT=0;/设定值闪烁控制void Delay1ms(unsigned int c);void TimerConfiguration();void Int0Configuration();void Int1Configuration();unsigned char ReSet=1; /* 函 数 名 : main* 函数功能 : 主函数* 输 入 : 无* 输 出 : 无*/void main(void)unsigned char i=0;unsigned char m;unsigned BCT=0;/报警时长设定Switch=0;TimerConfiguration();Int0Configuration();Int1Configuration();while(1)if(Count=0)if(TR0=0)CT+;if(CT2000)CT=0;if(K1=0)/检测按键K2是否按下Delay1ms(10);/消除抖动if(K1=0)SetPlace+;if(SetPlace=3)SetPlace=0;while(i=60)second=0;else if(SetPlace=1)minit+;if(minit=60)minit=0;elsehour+;if(hour=24)hour=0; while(i1000)disp7 = 0;disp6 = 0;elsedisp7 = DIG_CODEsecond%10;disp6 = DIG_CODEsecond/10;disp5 = 0X40;if(SetPlace=1&CT1000)disp4 = 0;disp3 = 0;elsedisp4 = DIG_CODEminit%10;disp3 = DIG_CODEminit/10;disp2 = 0X40;if(SetPlace=2&CT1000)disp1 = 0;disp0 = 0;elsedisp1 = DIG_CODEhour%10;disp0 = DIG_CODEhour/10;else/设定定时时间 /设置定时点m=Count-1;CT+;if(CT2000)CT=0;if(K1=0)/检测按键K2是否按下Delay1ms(10);/消除抖动if(K1=0)SetPlace+;if(SetPlace=3)SetPlace=0;while(i=60)Tsecondm=0;else if(SetPlace=1)Tminitm=Tminitm+1;if(Tminitm=60)Tminitm=0;elseThourm=Thourm+1;if(Thourm=24)Thourm=0; while(i1000)disp7 = 0;disp6 = 0;elsedisp7 = DIG_CODETsecondm%10;disp6 = DIG_CODETsecondm/10;disp5 = 0X40;if(SetPlace=1&CT1000)disp4 = 0;disp3 = 0;elsedisp4 = DIG_CODETminitm%10;disp3 = DIG_CODETminitm/10;disp2 = 0X40;if(SetPlace=2&CT1000)disp1 = 0;disp0 = 0;elsedisp1 = DIG_CODEThourm%10;disp0 = DIG_CODEThourm/10;/检测是否到设定的时间if(TR0=1)if(hour=Thour1)if(minit=Tminit1)if(second=Tsecond1)Switch=1;BCT=4000; /值为4000报警时长十秒钟左右if(hour=Thour0)if(minit=Tminit0)if(second=Tsecond0)Switch=0;BCT=2000;if(BCT0)BCT-;Beep= 1;Delay1ms(1);Beep= 0;Delay1ms(1); /-显示时钟-/DIG=0; /消隐switch(Num) /位选,选择点亮的数码管,case(7):LSA=0;LSB=0;LSC=0; break;case(6):LSA=1;LSB=0;LSC=0; break;case(5):LSA=0;LSB=1;LSC=0; break;case(4):LSA=1;LSB=1;LSC=0; break;case(3):LSA=0;LSB=0;LSC=1; break;case(2):LSA=1;LSB=0;LSC=1; break;case(1):LSA=0;LSB=1;LSC=1; break;case(0):LSA=1;LSB=1;LSC=1; break;DIG=dispNum; /段选,选择显示的数字。Num+;if(Num7)Num=0;/* 函 数 名 : Delay1ms()* 函数功能 : 延时1ms* 输 入 : c* 输 出 : 无*/void Delay1ms(unsigned int c) /误差 0us unsigned char a,b;for (; c0; c-)for(b=199;b0;b-)for(a=1;a0;a-); /* 函 数 名 : TimerConfiguration()* 函数功能 : 配置定时器值* 输 入 : 无* 输 出 : 无*/void TimerConfiguration() TMOD = 0x01; /选择工作方式1 TH0 = 0x3c; /设置初始值 TL0 = 0x0b0; EA = 1; /打开总中断 ET0 = 1; /打开定时器0中断 TR0 = 0; /启动定时器0/* 函 数 名 : Timer0()* 函数功能 : 定时器0中断函数* 输 入 : 无* 输 出 : 无*/ void Timer0() interrupt 1TH0 = 0x3c; /设置初始值 TL0 = 0xb0;Time+;if(Time=20&TR0=1) /一秒钟来到改变数值Time=0;second+;if(second=60)second=0;minit+;if(minit=60)minit=0;hour+;if(hour=24)hour=0;/* 函 数 名 : Int0Configuration()* 函数功能 : 配置外部中断0* 输 入 : 无* 输 出 : 无*/void Int0Configuration()/设置INT0IT0=1;/跳变沿出发方式(下降沿)EX0=1;/打开INT0的中断允许。EA=1;/打开总中断/* 函 数 名 : Int0() interrupt 0* 函数功能 : 外部中断0的中断函数* 输 入 : 无* 输 出 : 无*/ void Int0() interrupt 0 Delay1ms(10);if(K3=0)TR0=TR0;Time=0;CT=0;/* 函 数 名 : Int1Configuration()* 函数功能 : 配置外部中断1* 输 入 : 无* 输 出 : 无*/void Int1Configuration()/设置INT0IT1=1;/跳变沿出发方式(下降沿)EX1=1;/打开INT0的中断允许。EA=1;/打开总中

温馨提示

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

评论

0/150

提交评论