第5章定时开关控制器(gai)_第1页
第5章定时开关控制器(gai)_第2页
第5章定时开关控制器(gai)_第3页
第5章定时开关控制器(gai)_第4页
第5章定时开关控制器(gai)_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

1、第第5章章 定时开关控制器定时开关控制器 定时开关控制器广泛应用于日常生活与定时开关控制器广泛应用于日常生活与工业生产中的负载电源的通断,比如,传统工业生产中的负载电源的通断,比如,传统的大容量电热水器的加热时间一般都比较长,的大容量电热水器的加热时间一般都比较长,如果热水器一直开着,则会一直耗能耗电,如果热水器一直开着,则会一直耗能耗电,而通过定时开关控制器来设定其电源的通断而通过定时开关控制器来设定其电源的通断时间可有效解决这些问题,使电热水器使用时间可有效解决这些问题,使电热水器使用起来更加舒适省电。起来更加舒适省电。通过本项目的学习进一通过本项目的学习进一步掌握单片机定时器步掌握单片机

2、定时器/计数器和中断的使用。计数器和中断的使用。 5.1 任务描述任务描述 5.2 电路设计电路设计 5.3 软件设计软件设计5.1 任务描述任务描述 用单片机实现电源开关控制,可以由人用单片机实现电源开关控制,可以由人通过按键来设定负载电源的开通过按键来设定负载电源的开/关时间,并且关时间,并且通过显示器观察时间,达到定时开关机的目通过显示器观察时间,达到定时开关机的目的,实物图如图的,实物图如图5.1所示。所示。 (a)未加电 (b)项目运行图5.1 项目实物图 应用AT89C51单片机为核心,设计具备按键功能和数码管显示功能的外围硬件电路,以便控制器能够在设定的开关时刻控制输出继电器的动

3、作,进而控制负载电源的启闭,并完成软件程序设计。可以实现电源的直接启实现电源的直接启动动/关闭关闭;也可以通过按键设置负载电源的启按键设置负载电源的启动时间动时间,最大预约时间为最大预约时间为12小时小时。 开始键:开始键:按下该键,电源接通。 关闭键:关闭键:按下该键,电源断。 预约键:预约键:第一次按下该键,可以对电源的接通时间进行小时调整;第二次按下该键,可以对电源的接通时间进行分钟调整。 加一键:加一键:按下该键,调小时时间加一,最大值到11;或调分钟时间加一,最大值到59。 减一键:减一键:按下该键,调小时时间减一,最小值到0;或调分钟时间减一,最小可值到0。 预留键:预留键:本任务

4、中,该键预留,用户可自定义。 显示功能 按键指示灯:按键指示灯:只要有按键按下,该指示灯均会点亮。 开关电源指示灯开关电源指示灯:负载电源处于通的状态,该灯点亮;否则1S闪烁。 四位数码管:四位数码管:前两位为时,后两位为分。上电即显示“-”;预约调时前两位闪烁,预约调分后两位闪烁。预约时间内倒计时显示。负载电源通断均显示“-”。 负载电源通断功能在本项目中,需要实现多个按键的输入识别与控制,以及实现按秒计数、显示的显示控制方法。 为了实现功能要求,选用AT89C51作为电路的控制核心,根据设计的总体要求划分出各功能电路块,其系统组成方框图如图5.2。图5.2 系统组成方框图5.2 电路设计电

5、路设计 根据设计要求,选用AT89C51作为电路的控制核心,单片机的主要引脚设计选用如图5.3所示。该图中,已经包含了时钟电路、复位电路作为单片机的最小系统。其中,P0.7P0.0作为四位七段数码管的段码输出端,P1.3P1.0用作位选输出端;P2.5P2.0及及P3.2用作键盘控制输入端;P3.6为继电器控制输出端。图5.3项目控制单元图5.4 定时开关电路仿真图5.3软件设计软件设计参考程序如下:/*定时开关控制器。按下KEYON键,继电器接通,如设定预约时间,则在预约时间到达后接通;按下KEYOFF键,继电器断;第一次按下KEYSET,调小时、数码管前两位闪烁;第二次按下KEYSET,调

6、分钟、数码管后两位闪烁;按下KEYINC键,小时/分钟加一;按下KEYDEC键,小时/分钟减一;继电器接通时,指示灯点亮,否则1s闪烁*/#include #define uchar unsigned char#define uint unsigned intsbit KEYON=P20;sbit KEYOFF=P21;sbit KEYSET=P22;sbit KEYINC=P23;sbit KEYDEC=P24;sbit KEYFREE=P25;sbit POWER=P36;sbit LED=P33;uchar code dispcode=0 x3f, 0 x06, 0 x5b, 0 x4f

7、, 0 x66, 0 x6d, 0 x7d, 0 x07,0 x7f, 0 x6f,0 x40;/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 caculate(); /计时函数void display(); /显示函数void main(void)init()

8、;P1=0 x00;while(1)display();void init(void)/定时器0、 1,外部中断0初始化TMOD = 0 x11; / 定时器0 ,工作模式1, 16位定时方式TH0=(65536-50000)/256; /设定定时初值高八位TL0=(65536-50000)%256; /设定定时初值低八位TH1=(65536-50000)/256; /设定定时初值高八位TL1=(65536-50000)%256; /设定定时初值低八位 IT0=1; /选择INT0为下降沿触发方式EX0=1;ET1=1;ET0=1;EA=1;TR0=1;void display( ) /显示函

9、数 uchar i,j=0 x08; /=0 x08位选初始值if(Setflag=0)&!(min|hour) /数码管显示“-”for(i=0;i4;i+) disbufi=dispcode10;else/正常显示时间disbuf0 = dispcodemin%10; / 秒个位disbuf1 = dispcodemin/10;/ 秒十位disbuf2 = dispcodehour%10+0 x80;/ 分个位disbuf3 = dispcodehour/10;/ 分十位if(Setflag!=0)&flag) /如果调时,数码管闪烁显示for(i=0;i2) P0=0;

10、/不显示前面的0;else P0=disbufi; if(Setflag=1) P1=j&0 xfc;/调时,关断前两位位码 else P1=j&0 xf3;/调分,关断后两位位码delay(5);/延时2.5ms;P1=0 x00;j=j1;else /数码管正常显示for(i=0;i2) P0=0; /不显示前面的0;else P0=disbufi; P1=j; / 位选通delay(5); /延时2.5ms;P1=0 x00;j=j1; void int0( ) interrupt0 using 1 / 外部中断0中断函数uchar keynum;display();/动

11、态显示程序作为消抖if(INT0=0)/判断是否有键按下keynum=GetKeyNum(); /有效键,获取键值while(INT0=0); /等待按键释放 Keyprocess(keynum); /按键处理 Void time0( ) interrupt1 / 定时器0中断,处理调时、显示器闪烁static uchar ledcnt,num;TH0=(65536-50000)/256; /设定定时初值高八位TL0=(65536-50000)%256; /设定定时初值低八位 if(Onflag&(hour|min)!=0)|!Onflag) /指示灯每隔0.5s闪烁 ledcnt+;

12、 if(ledcnt=10) ledcnt=0; LED=LED; if(Setflag!=0)/调时闪烁 num+; if(num=5) num=0; flag=flag; void time1( ) interrupt 3 / 定时器1中断,处理计时TH1=(65536-50000)/256; /设定定时初值高八位TL1=(65536-50000)%256; /设定定时初值低八位 caculate(); /计时uchar GetKeyNum( ) /求键号uchar temp;if(KEYON=0)temp=1;if(KEYOFF=0) temp=2;if(KEYSET=0) temp=3

13、;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; /关调时标志if(!Setflag)&!(hour|min) /没有调时且未处于预约,继电器通POWER=0;LED=0;else TR1=1;/定时器T1运行,执行计时程序break;case 2: /KEYOFF,关处理,标志清零,继电器断 Onflag=0

14、; Setflag=0; hour=0;min=0;POWER=1;LED=1;break;case 3: /预约调时/调分键,处理调时标志 if(Onflag=0) Setflag+;if(Setflag=3) Setflag=1;break;case 4: /加一键, if(Setflag=1) /调时键,加小时处理,最大11 hour+;if(hour=12) hour=0;if(Setflag=2) /调分键,加分处理,最大59min+;if(min=60) min=0;break;case 5: /减一键 if(Setflag=1) /调时键,减小时处理,最小0 hour-; if(hour=-1) hour=12; if(Setflag=2) /调分键,减分处理,最小0min-;if(min=-1) min=59;break;void caculate( ) /计算时间static uint tcount;if(hour|min)!=0)t

温馨提示

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

评论

0/150

提交评论