基于51单片机的24小时定时控制系统_第1页
基于51单片机的24小时定时控制系统_第2页
基于51单片机的24小时定时控制系统_第3页
基于51单片机的24小时定时控制系统_第4页
基于51单片机的24小时定时控制系统_第5页
免费预览已结束,剩余9页可下载查看

付费下载

下载本文档

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

文档简介

1、姓名:余明永学 号:E01214308专业:网络工程完成时间:20成/12/31基于51单片机的24小时定时控制系统E01214308余明永安徽大学计算机科学与技术学院,安徽合肥230061摘要:定时开关控制器在工业方面的自动控制,办公场所的电器控制等有着极为广泛的用途;本文利用89C51单片机的定时器计数器时钟电路设计一套24小时范围内的定时控制系统;可方便的实现对家 庭电器和工业方面的自动控制;该定时开关控制器具有简单易制、价格低廉、控制时间可精确到秒等优点,还可以 实时显示时间,具有较高的应用价值。关键字 :单片机时钟定时控制开关Timing Control System of 24h

2、Designing Based on 51MCUE01214308 YU Ming-yongDepartment of Computer Science and Technology, Anhui University, Hefei 230601, China 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 s

3、ystem 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 ve

4、ry 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引言电子定时器在家用电器中经常用于延 时自动关机、定时。延时自动关机可用于: 收音机、电视机、录音机、催眠器、门灯、 路灯、汽车头灯、转弯灯以及其他电器的延 时断电及延时自停电源等。定时可用于:照 相定时曝光、定时闪光、定时放大、定时调 速、定时烘箱、冰箱门

5、开定时报警、水位定 时报警、延时催眠器、延时电铃、延时电子 锁、触摸定时开关等。例如:空调中的定时 器,在工作一段时间之后便能自动切断电源 停止工作。夏季夜间使用,入睡前先顶好时 间,等睡熟后到了预定时间,空调自动关机。 方便节能。定时器除了应用于家用电器外, 还广泛地用于工业农业生产和服务设施,甚 至军事等。单片机的定时器是单片机里最“活跃”的部件之一,很多程序、应用系统都 离不开定时器。由于定时器的应用与单片机 的其他硬件相关,存在着一定的复杂性。而定 时器也是单片机应用中解决某类复杂问题 的最为有效的方法,应用非常广泛。本文设计 了基于单片机系统的一个简单的定时开关2硬件系统设计控制系统

6、。可以灵活的承载多方面有定时控 制需求的设备的控制。1整体方案设计硬件系统设计采用所学习单片机开发整个系统由51单片机,时钟电路,复 位电路,独立按键,显示电路,报警器以及 继电器等部分组成1(结构图如图一)。定板的设计电路做些简要的修改,并添加继电 器电路,电路原理图见图二。独立按键与单片机K1,K2, K3, K4分别与51单片机的时开关控制系统设计主要以STC89C51单片P3A0,P3A1,P3A2,P3A3 口相接。K3 采用机为核心,通过DS1302进行精准的时间控制,独立按键控制设置实时时间以及中断方式按下切换实时时间的设置状态和运行状态;K4切换选择显示实时时间,定定时开、关时

7、间,由8个8段LED数码管时开时间点,定时关时间点,在定时时间点MCU独立键盘贞革口吗N容,汩显示实时的系统时间,并实现交互的设置开 关定时时间。报警器用蜂鸣器当到定时时间 时蜂鸣器发出十秒左右报警声以提示用户。 继电器、受控电器插座及受控电器组成一 个执行机构,当定时时间到时,单片机向 继电器输出一个高电平使继电器工作,继电 器常开触点闭合接通受控电器插座,使受控电器通电加以工作,从而完成定时开关 电器的功能。图二定时开关系统硬件结构图可进行设置改变定时时间;K1在设置状态 下起作用,进行选择设置时分秒;K2在设置状态下起作用对设置项的值进行加一。显 示时间的八个LED八段数码管通过一个图一

8、定时开关系统构成图74138译码器进行选择,数码管输入口通过初始化定时计数器中断中改变时间的 值;K外部中0切换设置实 时时间K外部中1切换设置定时时间定时时间设置循环对应时分秒数值加显示对应的时分秒改变相应控制继电 器状态值并使蜂鸣 器报警判断属于在哪 种状态?实时时钟切换设置位切换设置位和定时时间对应时分秒数值加74573与单片机P0 口相连;138译码器的输 入口为P2八2, P2八3, P2%。本系统采用了 两个LED灯区分设置选项,两灯都不亮数 码管显示为实时时间,两灯亮一灯为开关关 闭定时时间,两灯全亮为开关开启定时时 间,占用P2八0,P27两个接口。蜂鸣器报 警装置接单片机P1

9、A5 口,通过P1A5 口的高 低电平不断变化产生交流信号使蜂鸣器发 声。继电器与单片机的P1A0 口相接,输出 1时继电器使电源接通控制电器正常工作, 输出0时继电器使电源断开控制电器停止工 作。3软件系统设计定时开关控制软件实现较为简单,主程 序主要是在单片机的控制下,对键盘的输入 信息进行存储分析,驱动LED数码管显示 出相关信息,并通过对比分析定时时间与时 钟,控制继电器的通、断,从而达到控制电 器通断电。在这个过程中,单片机首先进行 初始化,显示值初始化、继电器断开、以及 单片机振荡频率的校准等。单片机每执行一 次循环对定时时间和时钟进行一次比较。为了实现时钟走时与所在地时间一致 和

10、满足要求,设定了时钟设置和定时设置的 功能。时钟设置和定时设置都在主函数里的 while循环中实现,对于设置的按键采用扫 面检测的方法,而进入设置状态是用中断方法进入设置状态。程序设计的流程图如图开始图三定时开关系统设计流程图程序初始化后,设置定时器T0工作在 方式1用于计时,同时设置开关定时时间, 执行显示程序。当定时时间设置好后,系统 不断的查询定时时间到否,定时开关开时间 到时P1A0=1,继电器闭合,受控电器工作, 同时是控制蜂鸣器报警变量设置时间值,使 蜂鸣器控制P1A5电平高低不断交替变化产 生交流信号使蜂鸣器报警。在程序执行过程 中中断0控制着定时器的启动和暂停,当暂 停时可修改

11、实时时钟的时间,程序查询检查 K1和K2按键是否按下,K1选择设定位“时、 分、秒”,K2设置当前选择的设定位数值加 一。K4切换显示模式:实时时钟,定时关 时间,定时开时间。在模式 切换时对应 LED1,LED0显示灯改变,实时时钟两灯都 灭,定时关时间显示一个灯,定时开时间显 示两个灯。在定时开关状态下即可由K1,K2 键设置定时的时间值,K1,K2的功能与实时 时钟设置相同。具体软件实现代码如下:#include<reg51.h>sbit K1=P3"0;sbit K2=P31;sbit K3=P3"2;sbit K4=P3-3;unsigned char

12、 Time=0;用来计时间的值#define DIG P0sbit LSA=P2"2;sbit LSB=P2"3;sbit LSC=P2"4;sbit LED0=P2"0;sbit LED1=P21;sbit Beep=P115;sbit Switch=P110;unsigned char codeDIG_CODE10 = 0x3f,0x06,0x5b,0x4f,0x66,0x 6d,0x7d,0x07,0x7f,0x6f);/0123456789 unsigned char Num=0;unsigned intdisp8 = 0x3f,0x3f,0x3

13、f,0x3f,0x3f,0x3f,0x 3f,0x3f;unsigned char hour=0,minit=0,second=0;unsigned charThour2 = 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 Int1C

14、onfiguration();unsigned char ReSet=1;/xt* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vt* xt*/* 函数名:main* 函数功能:主函数* 输入:无* 输出:无vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl

15、* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl*/r*/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(CT>2000)CT=0;if(K1=0)检测按键K2是否按下Delay1ms(10);/消除抖动if(K1=0)S

16、etPlace+;if (SetPlace>=3)SetPlace=0;while(i<50)&&(K1=0) /检测按键是 否松开Delay1ms(10);i+;i=0;if(K2=0)检测按键K3是否按下(Delay1ms(10); 消除抖动if(K2=0)(if (SetPlace=0)(second+;if (second>=60)second=0;elseif (SetPlace=1)(minit+;if(minit>=60)minit=0;else(hour+;if (hour>=24)hour=0;while(i<50)&

17、;&(K2=0) /检测按键是 否松开i=0;数值转换为LED数码管显示 if (SetPlace=0&&CT>1000) (disp7 = 0;disp6 = 0; else (disp7=DIG_CODEsecond%10;disp6=DIG_CODEsecond/10;disp5 = 0X40;if(SetPlace=1&&CT>1000)(disp4 = 0;disp3 = 0; else (disp4= DIG_CODEminit%10;disp3= DIG_CODEminit/10;disp2 = 0X40;if(SetPlace

18、=2&&CT>1000)(disp1 = 0;disp0 = 0; else (disp1= DIG_CODEhour%10;DIG_CODEhour/10;disp0=else/设定定时时间设置定时点m=Count-1;CT+;if(CT>2000)CT=0;if(K1=0)检测按键K2是否按下(Delay1ms(10); /消除抖动 if(K1=0)(SetPlace+;if (SetPlace>=3) SetPlace=0;while(i<50)&&(K1=0)检测按键是否松开(Delay1ms(10);i+;i=0;if(K2=0

19、)检测按键K3是否按下(Delay1ms(10); /消除抖动 if(K2=0)(if (SetPlace=0)(Tsecondm=Tsecondm+1;if (Tsecondm>=60)Tsecondm=0; elseTminitm=Tminitm+1;if (Tminitm>=60)Tminitm=0; else (Thourm=Thourm+1;if (Thourm>=24)Thourm=0;while(i<50)&&(K2=0)检测按键是否松开(Delay1ms(10);i+;i=0;数值转换为LED数码管显示 if (SetPlace=0&am

20、p;&CT>1000) (disp7 = 0;disp6 = 0;else(disp7=DIG_CODETsecondm%10;disp6=DIG_CODETsecondm/10;disp5 = 0X40;if(SetPlace=1&&CT>1000)disp4 = 0;if (SetPlace=1)disp3 = 0; else (disp4= DIG_CODETminitm%10;disp3= DIG_CODETminitm/10;disp2 = 0X40;if (SetPlace=2&&CT>1000) (disp1 = 0;di

21、sp0 = 0; else (disp1= DIG_CODEThourm%10;disp0= DIG_CODEThourm/10;检测是否到设定的时间 if(TR0=1)(if(hour=Thour11)if (minit=Tminit11)if(second=Tsecond11) (Switch=1;BCT=4000; 值 为4000报警时长十秒钟左右if(hour=Thour01)if (minit=Tminit01)if(second=Tsecond01) (Switch=0;BCT=2000;if(BCT>0)BCT-;Beep= 1;Delay1ms(1);Beep= 0;De

22、lay1ms(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):

23、LSA=1;LSB=1;LSC=1; break;DIG=dispNum; /段选,选择显示的 数字。Num+;if (Num>7)Num=0; /xt* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vt* xt*/* 函数名:Delay1ms()* 函数功能:延时1ms* 输入:c* 输出:无vl* vl* vl* vl* vl* vl* vl* vl* vl* vl*

24、 vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl*/r*/ void Delay1ms(unsigned int c) 误差 0us (unsigned char a,b;for (; c>0; c-)(for (b=199;b>0;b-)(for(a=1;a>0;a-);/vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl

25、* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl*xt* xt*/* 函数名:TimerConfiguration()* 函数功能:配置定时器值* 输入:无*输出:无vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl>vt*xt* /r*>T* >T* >T* /void TimerC

26、onfiguration()(TMOD = 0x01; 选择工作方式1TH0 = 0x3c;设置初始值TL0 = 0x0b0;EA = 1;打开总中断ET0 = 1;打开定时器0中断TR0 = 0;启动定时器0/ xt*xt*xt*vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vt*xt* xt* xt*/>T* >T* >T* 函数名:Timer0()* 函数

27、功能:定时器0中断函数* 输入:无*输出:无vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl>vt*xt* /r*>T* >T* >T* /void Timer0() interrupt 1(TH0 = 0x3c;设置初始值TL0 = 0xb0;Time+;if(Time>=20&&TR0=1)一秒钟来到改变数值(T

28、ime=0;second+;if (second=60) (second=0;minit+;if (minit=60) (minit=0;hour+;if (hour=24)(hour=0;/ xt*xt* xt* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vt* xt* xt*xt* />T* >T* >T* 函数名:Int0Configuration()

29、* 函数功能:配置外部中断0* 输入:无* 输出:无vt* xt*xt* v!> vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl*xt*xt* / /void Int0Configuration()(设置INT0IT0=1;跳变沿出发方式(下降沿)EX0=1;打开INT0的中断允许。EA=1;打开总中断/ xt*xt* xt* vl* vl* vl* vl* vl* vl* v

30、l* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vt* xt* xt*xt* />T* >T* >T* 函数名:Int0() interrupt 0* 函数功能:外部中断0的中断函数* 输入:无* 输出:无vt* xt* xt* xt* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* v

31、l* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl>vt*xt* xt* />T> >T> >T> /void Int0() interrupt 0(Delay1ms(10);if(K3=0)(TR0=TR0;Time=0;CT=0;/vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl*xt* xt*/* 函数名:Int1Configuration()* 函数功能:配置外部中断1* 输入:无* 输出:无vt* xt* xt* xt* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vl* vt*xt* xt* />T* >T* >T* /void Int1Configuration()(设置INT0IT1=1;跳变沿出发方式(下降沿)EX1=1;打开INT

温馨提示

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

评论

0/150

提交评论