单片机加热定时器.docx

上传人:b****5 文档编号:6480866 上传时间:2023-01-06 格式:DOCX 页数:16 大小:157.44KB
下载 相关 举报
单片机加热定时器.docx_第1页
第1页 / 共16页
单片机加热定时器.docx_第2页
第2页 / 共16页
单片机加热定时器.docx_第3页
第3页 / 共16页
单片机加热定时器.docx_第4页
第4页 / 共16页
单片机加热定时器.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

单片机加热定时器.docx

《单片机加热定时器.docx》由会员分享,可在线阅读,更多相关《单片机加热定时器.docx(16页珍藏版)》请在冰豆网上搜索。

单片机加热定时器.docx

单片机加热定时器

1.1设计题目:

加热定时器设计

 

1.2.1设计目的

(1)掌握可任意预置的定时构成、原理与设计方法;

(2)熟悉集成电路的使用方法。

(3)通过应用单片机系统,培养创新意识,提高动手能力。

1.2.2基本要求

(1)设计要求:

为系热水器定时加热

(2)每天早7:

00起加热,晚10:

00起加热,保证热水;周末全天供水。

(3)控制面板设计。

1.2.3基本优点传统的大容量电热水器的加热时间一般都比较长,如果热水器一直开着,则会一直耗能耗电,而定时开关控制器则可有效解决这些问题,使电热水器使用起来更加舒适省电。

这样,电热水器不仅可以充分利用闲置的时间,避免用户使用时长时间的等待,减少不必要的保温,也可以更加节约电能,特别对低谷及高峰用电有差价的地区.利用晚间低谷用电开机加热,白天用电高峰关机保温,便能大量节约电费开支。

本文中的定时控制器主要是以单片机AT89C51作为核心控制元件,通过外围电路来控制热水器的电源,以达到定时开关机的目的。

2设计思路    

    1硬件组成

    

    本电热水器控制系统在加电后即可进入正常计时状态,用户可以随时校准时间并设定热水器的开关时间,以便控制器能够在设定的开关时刻通过单片机的输出端口控制输出继电器的动作,进而控制热水器的启闭。

该系统的硬件原理图见图1所示。

    

 

    

    

    本系统的核心单片机AT89C2051为20脚300MIL封装,是一种带有2KBFLASHE2PROM的单片机。

该单片机除了少了两个并口外,能兼容MCS-51系列单片机的所有功能,且具备体积小、功能强、运行速度快等特点。

该电路可通过单片机的P3.7口连接一个键盘电路来实现对参数的人工自由设定,同时可通过串口连接8位LED数码管,以分别显示小时、分钟和秒。

系统定时启动是通过P3.0口完成的。

程序开始时这三个口的输出状态都是低电平,AT89C51通过程序查询P3.0口输出ON或OFF的状态预置时间是否已到,

    如果已到时间,则改变相应的输出状态,从而完成对外部电路的控制。

    

    

本设计采用时钟芯片DS1302来控制时间。

美国DALLAS公司推出的具有涓细电流充电能力的低功耗实时时钟电路DS1302的结构、工作原理及其在实时显示时间中的应用。

它可以对年、月、日、周、日、时、分、秒进行计时,且具有闰年补偿等多种功能。

DS1302是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。

采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。

DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。

DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后备电源双电源引脚,同时提供了对后备电源进行涓细电流充电的能力。

1.1引脚功能及结构

DS1302的引脚排列,其中Vcc1为后备电源,VCC2为主电源。

在主电源关闭的情况下,也能保持时钟的连续运行。

DS1302由Vcc1或Vcc2两者中的较大者供电。

当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。

当Vcc2小于Vcc1时,DS1302由Vcc1供电。

X1和X2是振荡源,外接32.768kHz晶振。

RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。

RST输入有两种功能:

首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。

当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。

如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。

上电运行时,在Vcc>2.0V之前,RST必须保持低电平。

只有在SCLK为低电平时,才能将RST置为高电平。

I/O为串行数据输入输出端(双向),后面有详细说明。

SCLK为时钟输入端。

1.2数据输入输出(I/O)

  在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。

同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。

2.4DS1302的寄存器

  DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式,

 

下面重点介绍键盘、显示以及输出控制这三种电路。

    

    1.1显示电路

    

    本系统中的显示电路主要由七段共阳显示译码器74LS47、3线-8线译码器74tHC138、7个PNP型三极管和六个数码管组成。

通过AT89C2051的P1.4~P1.7口将要显示字符的BCD码输出到74LS47的四个输人端,然后译码并输出相应的笔段来驱动LED数码管(共阳)。

LED数码管显示采用动态扫描方式,即在某一时刻,只有一个数码管被点亮。

数码管的位选信号由AT89C2051的P3.3~P3.5输出,并经74HCl38译码后通过三极管放大,以驱动相应的数码管。

    

    1.2键盘电路

    

    键盘电路跟显示电路一样采用扫描方式,并利用动态显示时的数码管驱动位置信号来判断相应按键的状态。

单片机的P3.3~P3.5口输出的BCD码经译码器译码后,相应的Y口呈低电平,而AT89C2051的P3.7口平时为高电平(由于有上拉电阻),只有当某一按键按下时,P3.7才被下拉为低,这时,单片机将利用程序查询P3.7是否为低,如果P3.7为低电平,则读回单片机P3.3~.P3.5口的值(从缓冲区读取),并判断是那个按键按下.然后调用相应的处理程序进行处理。

    

    1.3输出控制电路

    

    单片机的控制输出是通过P3.0~P3.2口完成的。

当程序开始时,这三个口的输出状态都是低电平,AT89C2051通过程序查询三路输出的ON或OFF状态预置时间是否已到,若时间到,则改变相应的输出状态,以完成对外部电路的控制。

    中断功能申请寄存器IE介绍

中断允许寄存器IE(可以打开和屏蔽相应的中断)

EX0/EX1ET1/ET0ES位:

分别是外部中断、定时中断、

串口中断

允许控制位。

=0:

禁止中断;

=1:

允许中断。

EA:

总的中断允许控制位(总开关):

=0:

禁止全部中断;

=1:

允许中断。

模式设置(杯子的大小)

工作方式寄存器TMOD

高四位对于定时器1,低四位对应定时器0

M1,M0:

工作方式选择位。

工作方式0=00:

13位定时器/计数器;

工作方式1=01:

16位定时器/计数器(常用);

工作方式2=10:

可自动重装的8位定时器/计数器(常用);

工作方式3=11:

T0分为2个8位定时器/计数器;仅适用于T0。

C/T:

定时方式/计数方式选择位。

=0:

内部提供信号脉冲。

=1:

外部提供信号脉冲。

GATE:

定时器启动控制位

=0:

程序控制。

=1:

硬件控制。

例如:

TMOD=00000001=0x01;//设定时器0为16位模式1

例如:

TMOD=00010000=0x10;//设定时器1为16位模式1

如何选择16位内部脉冲计数寄存器,并选择定时器0作为为定时器,且用软件方式实现定时器启动控制。

TMOD的值为多少?

定时0,选择低四位(高四位全为0)

16位计数寄存器选工作方式1即M1M0值为01

内部脉冲C/T值为0

软件启动定时器GATE值为0

TMOD=00000001=0x01

定时器控制寄存器TCON(高四位与定时器中断有关,低四位与外部中断有关)

TR0/TR1:

定时器运行启停控制位(可由用户通过软件设置)。

=0:

定时器停止运行;

=1:

定时器启动运行。

TF0/TF1:

定时器溢出中断申请标志位(由硬件自动置位)。

=0:

定时器未溢出;

=1:

定时器溢出(由全“1”变成全“0”)时由硬件自动置位,申请中断,中断被CPU响应后由硬件自动清零。

7、如何启动定时器和判断是否溢出

TRx赋值为1,即可启动相应的定时器

如果TFx的值为1,即可以判断计数寄存器的值已经溢出。

可以用位赋值。

TCON=00010000=0x10代表什么?

即TR0的值为1,TF0的值为0。

定时器已经启动,并且计数寄存器的计数值还没有溢出。

(不能产生有效的内容中断信号)

程序1:

仿真实现定时器1SLED闪烁一次

#include

sbitLED=P2^0;

intcount=0;//50ms次数记录

timer_csh()//定时中断初始化函数

{

IE=0x82;//允许CPU中断和定时计数器0中断开关10000010

TMOD=0x01;//设定时器0和1为16位模式1

TH0=0x3C;//12M晶振定时50ms

TL0=0xB0;

}

voidmain()

{

timer_csh();//定时中断初始化

TR0=1;//开始计数

while

(1)

{

;

}//主程处于无限循环这里可以处理其他的事情

}

//定时器0中断处理

voidtimeint(void)interrupt1

{

count++;

if(count==20)//1s到

{

count=0;

LED=~LED;

}

TH0=0x3C;//定时初始值

TL0=0xB0;

}

 

    2软件设计

    

    2.1主程序流程

    

    本系统的主程序工作过程是首先循环进行8个数码管的扫描显示(DISPLY段),然后比较所有预置时间(COMP段)是否与当前时间相等,如相等则转向相应处理程序。

比较完成(或处理完成)后,再判断有无按键(PP2段)按下,没有则返回继续显示、比较、判断;有按键按下则转向相应的处理程序。

按键转移采用偏移量加表格跳转转移法(KEY段)。

预置时间比较则采用逐一比较法,即对每一个预设的值都进行比较,如果相等,则进行相应的处理。

在具体比较时(COMP1段),首先比较TH值,如不相等,则直接转出并置"时间到"标志CCB为0,而如果TH、TM、TS全部对应相等,则置该标志为1,其软件流程见图2所示。

    

    

    此次设计的可预置热水器控制电路,实现对时间和分钟的现实,可以设置热水器的使用时间,使热水器自动加热和停止,并且设置了水位比较电路可以进行报警。

由石英晶体振荡器产生频率为1000Hz的信号,经过三片74LS160进行分频后,得到1Hz的秒脉冲信号,再经过2片74LS90连接成的60进制计数器后得到1/60秒的分脉冲信号。

将分信号传输给两片74LS290连成的六十进制计数器进行分的计数,再由分计数的进位驱动二十四进制的时计数器。

时间计数器连接七段译码显示器进行时间的现实。

预置时间的电路与此相同。

预置时间计数器产生的输出进入减法器进行自动减一的设置,减法器的输出信号进入比较器,与正常时间计数器产生的信号进行比较。

当两者相等时,自动开始加。

由时计数器和分计数器产生的输出接入比较器,与设定时间电路的时计数器和分计数器相比较,当时间相等时热水器停止加热。

由传感器感知水位,经由模数转换器转换成八位二进制数,再由二进制→BCD码转换器将其转换成8421BCD码,输出的数据经计数器传入七段译码显示器进行水位的显示。

从水位计数器引出的信号进入比较器,与比较器中设置的水位进行比较,当其水位低于设定值时,自动停止工作并进行水位报警。

其中水位报警电路由555定时器构成的单稳态单路和多谐振荡电路组成。

    2.2秒脉冲发生器的软件设计

    

    系统中的秒脉冲发生器是由定时器T0和内存空间TT0配合完成的。

其中T0工作于l6位计数器模式,当T0向上计数并由全1变为全0时产生中断。

本程序中,T0的初值为0DC00H,大约0.01秒中断一次。

这里使用的晶振频率为11.0592MHz,由此可计算出日误差约为0.78s。

其操作流程如图3所示,系统产生中断后,首先保存ACC和PSW的值,然后为T0重装初值,并判断中断次数是否小于100,若是,则转出中断服务,反之则将秒计数器加1。

秒计数器大于59时,则为分计数器加1,同时秒计数器清0。

同样,分计数器如大于59,则为时计数器加1,同时分计数器清0。

时计数器如大于23时则清0并转出中断服务。

TD中断100次的时间刚好为1秒钟。

    

    

 

附图

程序

 

#include

#include"DS1302.h"

/************端口定义****************/

sbithot=P1^7;

sbitAdd_hour=P3^0;

sbitAdd_min=P3^1;

unsignedcharqiangdanum=0;

unsignedcharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,

0x7f,0x6f};

//unsignedcharcodeduan[]={};

unsignedcharge=0,shi=0;

voiddelay(unsignedintms)//晶振12M

{

unsignedinti,j;

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

{

for(i=0;i<120;i++);

}

}

voiddisplay(void)

{

P2=0x7f;

P0=table[week];

delay(5);

P2=0xbf;

P0=0x40;

delay(5);

P2=0xdf;

P0=table[h1];

delay(5);

P2=0xef;

P0=table[h0];

delay(5);

 

P2=0xf7;

P0=table[mi1];

delay(5);

P2=0xfb;

P0=table[mi0];

delay(5);

P2=0xfd;

P0=table[s1];

delay(5);

P2=0xfe;

P0=table[s0];

delay(5);

 

}

/*

{

write_ds1302(0x8e,0x00);//写保护寄存器,在对时钟或RAM写前WP一定要为0

//write_ds1302(0x8c,year);//年

//write_ds1302(0x88,month);//月

//write_ds1302(0x86,day);//日

//write_ds1302(0x8A,week);//星期

write_ds1302(0x84,hour);//时

write_ds1302(0x82,minute);//分

write_ds1302(0x80,second);//秒

write_ds1302(0x8e,0x80);//写保护寄存器

}

*/

 

voidchangtime()

{

unsignedcharChange_minute,Change_hour;

Change_minute=minute;

Change_hour=hour;

if(0==Add_min)

{

while(0==Add_min)

{

display();

}

Change_minute++;

if(Change_minute==90)

{Change_minute=0;

}

if(Change_minute%16==10)

{Change_minute+=6;

}

write_ds1302(0x8e,0x00);//写保护寄存器,在对时钟或RAM写前WP一定要为0

//write_ds1302(0x8c,year);//年

//write_ds1302(0x88,month);//月

//write_ds1302(0x86,day);//日

//write_ds1302(0x8A,week);//星期

//write_ds1302(0x84,hour);//时

write_ds1302(0x82,Change_minute);//分

//write_ds1302(0x80,second);//秒

write_ds1302(0x8e,0x80);//写保护寄存器

}

if(0==Add_hour)

{

while(0==Add_hour)

{

display();

}

Change_hour++;

if(Change_hour==0x24)

{Change_hour=0;}

if(Change_hour%16==10)

{Change_hour+=6;}

write_ds1302(0x8e,0x00);//写保护寄存器,在对时钟或RAM写前WP一定要为0

//write_ds1302(0x8c,year);//年

//write_ds1302(0x88,month);//月

//write_ds1302(0x86,day);//日

//write_ds1302(0x8A,week);//星期

write_ds1302(0x84,Change_hour);//时

//write_ds1302(0x82,Change_minute);//分

//write_ds1302(0x80,second);//秒

write_ds1302(0x8e,0x80);//写保护寄存器

}

}

voidmain()

{

hot=1;

initial_ds1302();

while

(1)

{

read_time();//读时间

display();

//if()

changtime();

if(week<=0x05)

{

if(hour>=0x07&hour<=0x22)

{

hot=0;

}

else

{

hot=1;

}

}

else

{

hot=0;

}

 

}

}

 

 

  

  

 

  3结束语

    

    本文通过以AT89C2051单片机为核心并辅以外围电路的设计方法实现了低成本的控制要求。

该定时时控制器可定时控制并显示有关参数,在满足系统要求的同时,又具备简单、经济之特点。

此外,灵活的键盘输入方式来设定参数可增加系统的灵活性。

    

    日前,采用本设计制作的定时控制器已经通过测试并投入使用,实际使用结果证明:

该定时控制器运行可靠,操作方便,可用在传统的不带定时功能的热水器上,而且既经济又实用,值得推广。

可预置热水器控制电路是一个十分接近于生活的课题,其中采用数字电路实现对时和分的显示计时装置。

整个热水器电路只要有晶体振荡电路、分频电路、时间显示电路、译码显示电路、减法器电路、比较电路、模数转换电路、水位控制电路、报警电路组成。

热水器电路广泛应用于生活中,为人们的生活提供了便利的条件。

经过这次对可预置热水器控制电路的设计,我了解了热水器电路的基本构成和原理,同时也更加了解一直基本电路的实现方法。

这次的数字电子课程设计是一次自我检验的机会,我们要将课堂上所学到知识融会贯通到一个设计电路中去,而且,仅仅是教科书上所讲解的知识是完全不够的,设计的过程中,我们需要自己去查找各种各样的资料,将一些陌生的东西用我们学过的知识去理解,再把它们应用到我们设计的电路中去。

经过2个星期的课程设计,我对数字电子技术知识的了解更加深刻,我认真研究了几种电路中应用的芯片,将它们与同类的芯片进行比较,选择出最合适我所设置电路的芯片。

对于计数器的连接我有了一些掌握,理解了要怎样连接才可以得到需要的进制、将计数器用于分频电路的连接方法。

而且在电路我,我还可以加入自己的创新,将自己的想法一点点的在电路中进行体现。

这次课程设计的时间很急迫,也许我没有办法把每一个细节都仔仔细细的弄清楚,但是在这段时间里我真的学到了很多东西。

最开始的电路只是一种模仿,我完全没有办法融入到我的设计题目中,但随着查找各种各样的资料,理解各种芯片的作用与组合方式,我开始能够一点一滴的把自己的想法融入设计图中。

刚刚成型的电路并不完善,里面有太多的缺陷和不足,但是经过老师的指导,我一点点的修改,设计的电路也越来接近生活中应用的热水器,我的思路也越来越清晰,渐渐也能够自己发现问题并且找到一些方法解决问题。

2个星期的时间按是短暂的,但在这一个星期中,我真的学到了许多的东西,而且也提升了自己的能力。

虽然这1个星期来每天都很辛苦的找各种资料、反反复复的修改电路图,但是现在看到手中成型的电路图,心中的成就感也是不言而喻的。

也希望以后会再有这样的机会。

 

致谢

感谢我的指导老师翁志远老师在此次课程设计中给予我热情而耐心的指导。

在老师的指导下,我发现了自己设计中的许多错误和缺陷,怎么样解决问题、查阅什么样的书籍,老师都耐心的进行指导,而且在设计方案的变更上也给了我很多建议,拓宽了我的思路,纠正了我的错误想法。

同时我也要感谢我们小组的各位同学,在我遇到困难的时候耐心的帮助我鼓励我,让我重拾信心。

正是因为有了你们的帮助,我才能顺利的完成这次的数字电子课程设计。

最后,再次由衷的感谢你们对我的帮助和支持,谢谢你们!

 

参考文献

1王瑞兰.8位串行接口数码显示驱动器MAX7219及其应用.北京:

清华

大学出版社,2001

2王建华.单片机原理及其应用.北京:

人民邮电大学,2003

3张春光.微型计算机控制技术.北京:

化学工业出版社,2002

4李贵山.微型计算机测控技术.北京:

机械工业出版社,2002

5唐瑞庭.微型计算机原理与接口技术.北京:

高等教育出版社,1998

6李广弟,朱月秀,冷祖祁.单片机基础.第3版.北京:

北京航空航天大

学出版社,2007

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 表格模板 > 表格类模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1