基于单片机温度控制系统设计.docx
《基于单片机温度控制系统设计.docx》由会员分享,可在线阅读,更多相关《基于单片机温度控制系统设计.docx(19页珍藏版)》请在冰豆网上搜索。
基于单片机温度控制系统设计
基于单片机的温度控制系统设计
摘要:
这次综合设计,主要是设计一个温度控制系统,用STC89C52单片机控制,
用智能温度传感器DS18B2C对温度进行采集,用LCD1602液晶显示屏将采集到的温度显示出来。
系统可以有效的将温度控制在设定的范围内。
如果实际温度超出了控制范围,则系统会有自动的提示信号,并且相应的继电器会动作。
我们的实际生活离不开对温度的控制,在很多情况下我们都要对我们所处的环境进行温度检测,然后通过一定的措施进行调节,从而达到我们自己想要的温度,使我们的生活环境更加适宜。
关键字:
单片机;液晶显示屏;温度传感器;继电器;提示信号
Abstract:
Thisintegrateddesignisthedesignofatemperaturecontrolsystem.AsmarttemperaturesensorDS18B20isusedtocollecttemperatureandaLCD1602LiquidScreenisusedtodisplaythecollectedtemperature.ThesystemcontrolledbySTC89C52caneffectivelycontrolthetemperaturewithinthesettinglimits.Iftheactualtemperatureexceedsthesettingrange,thesystemwillautomaticallygivesignal,andthecorrespondingRelaywilltakerelatedactions.Itisnecessaryforustocontrolthetemperaturebecauseinmanysituationsthetemperaturearoundusisnotproperforus.Soweneedtodetectitandtakesomeactionstoadjustittothetemperaturewewanttomaketheenvironmentaroundusbetter.
KeyWords:
DS18B20;LCD1602;STC89C52;Relay;Signal
引言
目前,测控系统在工业生产中起着把关者和指导者的作用,它从生产现场到各种参数的获取,运用科学规律和系统工程的做法,综合有效地利用各种先进技术,通过自动手段和装备,使每个生产环节得到优化,进而保证生产规范化,提高产品质量,降低成本,满足需要,保证安全生产。
传统的测控系统主要由“测控电路”组成,所具备的功能较少,也比较弱。
随着计算机技术的迅速发展,使得传统的系统发生了根本性的变化,即采用微型计算机作为测控系统的主题和核心,代替传统测控系统的常规电子线路,从而成为新一代的微机化测控系统。
目前,单片机在工业控制系统诸多领域得到了极为广泛的应用。
特别是其中的C51
系列的单片机的出现,具有更好的稳定性,更快和更准确的运算精度,推动了工业生产,影响着人们的工作和学习。
在现代社会中,温度控制不仅应用在工厂生产方面,其作用也体现到了各个方面,随着人们生活质量的提高,酒店厂房及家庭生活中都会见到温度控制的影子,温度控制将更好的服务于社会•而今,空调等
家用电器随着生产技术的发展和生活水平的提高越来越普及,一个简单,稳定的温度控制系统能更好的适应市场。
为了满足当前社会市场需求,我设计了此温度控制系统,以STC89C52为核心,以及液晶显示器,电磁继电器,电阻,按键等元件作为辅助,以电路分析作为理论指导和理论基础,设计出此系统,将被控对象的温度控制在一定的范围内,通过液晶显示器直观的显示出来,并且通过发光二极管,蜂鸣器等不同的信号告诉我们现在的温度在什么范围内,以便于我们做出相应的处理措施。
1设计方案及原理
1.1系统总体的设计方案
首先由智能传感器(DS18B20)采集到温度,通过单片机的P3.7口将采集到的数据信息输送到单片机中,经过微处理器对其进行运算,并且和设定的值进行比较,然后根据比较的结果,即根据温度信号所在的范围,微处理器执行相对应的操作。
由于我们所处的环境对温度的这个系统还具有温度范围调节功能。
例如:
若检测到的温度在最高温度和最低温度之间,则黄灯亮,若检测到的温度比最低温度低,则绿灯闪烁,蜂鸣器发出声音,继电器闭合开始加热,若检测到的温度高于最高温度,则红灯闪烁,并且蜂鸣器发出警报。
1・2系统组成框图
本系统组成主要有以下部分:
温度采集部分、数据运算处理部分、温度显示部分以及相应的提示信号部分。
温度采集
DS18B20
图1总体结构图
1.3系统原理组成和系统结构
这个智能温度控制系统由温度采集模块、温度显示模块、温度比较模块、处理模块等四大模块组成。
系统具体运行过程如下:
首先由智能温度传感器DS18B20从外界环境中采集到被测温度信号,将此信号发送到STC89C52单片机,然后单片机执行相应的指令,使继电器,发光二级管,蜂鸣器做出相应的动作。
2硬件设计
此系统的硬件电路包括以下部分,STC89C52单片机、LCD1602液晶显示屏、DS18B20、蜂鸣器、发光二极管、电磁继电器、加热装置、电阻、直流电压源、贴片按键以及晶振、导线等部分组成。
系统总体来说由四大部分构成:
温度范围设定,温度采集,数据处理,温度显示,处理机构等。
最初温度范围设定在软件中,但是可以通过按键对其进行调整。
温度采集采用的是温度智能传感器(DS18B20),这个智能传感器和单片机接口只需要一个I/O口,硬件电路连接比较方便,并且具有极强的抗干扰纠错能力。
数据处理采用的是STC89C52单片机,
当温度低于设定温度时,绿灯会闪烁,并且蜂鸣器发出响声,继电器会闭合,进行加热;当温度高于设定温度时,红灯会闪烁,蜂鸣器发出警报;当温度在设定范围内时,黄灯亮。
温度显示采用的是1602液晶显示器。
显示器上会显示出当前温度、最高温度、最低温度。
图2晶振电路:
为单片机提供时钟信号
R15
1k
R14
10k
C3
10uf
图3复位电路
图4继电器电路
原理:
当单片机P2.4引脚输出低电平时,三极管导通,贝U继电器线圈中会有电流流过,电流会产生电磁场,在电磁场的作用下,开关会被吸合。
当P2.4为高
电平时,三极管处于截止状态,则线圈中没有电流流过,因此开关因失去磁场的吸合力而断开。
继电器电路中二极管的作用:
由于当P2.4由低电平突然变为高电平时,继电器线圈中的电流会突然消失,根据电磁感应原理以及楞次定理,线圈两边会产生一个瞬时的反向高压,为了防止线圈产生的瞬时高电压形成闭合回路,产生大电流,因此,在中间加一个反向二极管,起到抑制反向电流的作用。
图5温度范围指示灯依次为绿、红、黄
原理:
当P1.0为低电平时,三极管导通,则蜂鸣器中有电流流过,因此蜂鸣器发声。
当P1.0为高电平时,三极管截止,蜂鸣器由于没有电流通过,因此停止发声。
牛
3
U2
CM1
\/m
■
>1
2
DC
50.0
1
DQ
10k
GND
■•
GND
DS18B20
图7温度传感器电路
原理:
DS18B20在出厂时默认配置为十二位,其中最高位是符号位,因此温度值共11位,单片机在读取数据时,一次会读2字节共十六位,读完后将低11位的二进制数转换成十进制数再乘以0.0625便为所测的真实值。
另外,还需要判断温度的正负。
前五位数字是符号位,这五位同时变化,我们只需要判断11位就
可以了。
前五位为1时,读取温度为负值,贝U测量到的数值需要求出补码(求反加一),再乘以0.0625才得到实际温度值。
前五位为0时,读取温度为正值,只要将测得数值乘以0.0625即可得到实际温度值。
LCD1
LM016L
VVERWeDDDDDDDD
12345678911234
图8显示部分
原理:
此温控系统的显示采用的是LCD1602液晶显示器,各个引脚的功能和作用如下:
VSS连接电源地,VDD连接电源正极,V0是液晶显示对比度调节端,RS是数据/命令选择端,RW是读写选择端,E是使能信号端。
D0~D7是数据端。
通过RS确定是写数据还是写命令。
写命令包括液晶光标显示不显示、光标闪烁不闪烁、需不需要移屏、在液晶的什么位置显示,等等。
写数据是指要显示什么内容。
读/写控制端设置为写模式,即低电平。
将数据或命令送达数据线上。
给E一
个高脉冲将数据送入液晶显示器,完成写操作。
图9按键电路图
原理:
由电路图可知某个按键被按下的标志是这个按键所对应的引脚的电平由高电平变为低电平。
因此,微处理器只需要检测P1.2、P1.3以及P1.4的电平变化
然后经过去抖动后,若对应的引脚依然为低电平,则表示此键被按下。
若电平由低变成高,则表示按键弹起。
3软件设计
4系统仿真及调试
我的程序是在KeilC软件中编写的,经过在软件中不断地调试,修改,最终
终于编译通过。
编译通过后,生成hex文件。
然后打开Proteus软件,将生成的
hex文件下载到单片机中,液晶显示屏上就显示出了如图所示的效果。
由于测到的
温度是四十五度,而设定的范围是四十度到九十度,因此实际检测到的温度在设定温度范围之内,自己期望的效果是液晶屏上显示最高温度、最低温度、测到的实际温度,并且黄色的发光二极管发光。
从仿真结果来看,实际效果达到了自己所期望的效果。
图10系统仿真结果
总结
本次单片机课程设计一共是两周的时间,在这忙碌的两周时间,我学到了很多东西。
现在依然记得很清楚当时刚刚拿到题目时的那种茫然,感觉题目有一定的难度,而自己却无从下手,不知道从什么地方开始做起。
在高老师的带领和指导下,我那种消极的情绪渐渐的消失了,渐渐的明白了应该去做哪些准备工作,应该去查阅哪方面的资料。
就这样我又重新找回了自己的自信心,开始通过网络和书籍查找自己所需元件的特性和使用方法。
查清楚所需要的元件资料大概花费了四天的时间,我便开始设计自己的电路图,搭建电路图可不是一件容易的事,不过在同学和老师的帮助以及自己的努力下,大概花了一天的时间,我的电路设计图就完成了。
接下来的主要任务就是根据自己的电路编写程序,如果说设计电路不容易,那么编写程序我就只能用“非常难”这三个字来形容了。
由于我们上学期学的是汇编语言单片机,而我自己之前自学过C语言单片机,对于我自己来
说,我感觉用C语言来编写比较方便一些,于是,我便开始了自己的编程。
编程需要耐心,因为我们编写出来的程序难免会有错误之处,在编译时不能通过,因此需要不断地去调试,直到编译通过为止。
经过几天反复的编写,在软件中编译,调试,纠错,最终编译结果终于通过。
接下来就是仿真了,需要在Proteus中将自
己的硬件电路和软件结合起来,看能不能达到自己预期的效果。
第一次仿真时,非常期待结果马上就能出现,并且能够达到预期的效果。
可是现实和期待值总是存在一定的差距。
电路图难免会出现连接失误,连接不完全等等之类的问题,经过我的努力修改,最终我的电路终于达到了我预的期望值,当我看到液晶显示屏上的结果,发光二级管闪烁,以及继电器,蜂鸣器按照我的要求动作时,我的心中有说不出的高兴和愉悦。
通过这次的课程设计,我懂得了如何将自己学过的东西用于实践,即理论和实践相结合。
增强了我和同学之间的互动能力,使我能够更好地和各个班的同学相互交流,相互学习共同进步。
在以后的学习中,我会更加努力,坚持理论和实践相结合的思想,去探索,去追求。
参考文献
[1]王振红.综合电子技术与实践[M].北京:
清华大学出版社,2005.2:
28-33.
[2]梅丽凤.单片机原理及接口技术[M].北京:
清华大学出版社,2006.8:
63-72.
[3]徐爱华.单片机应用技术教程[M].机械工业出版社,2003.7:
128-156.
[4]谢宜仁,谢东辰.单片机实用技术问答[M].人民邮电出版社,2003.2:
235-269.
[5]何立民.单片机应用技术选编[M].北京:
北京航空航天大学出版社,1997.10:
20-35.
⑹郭天祥.51单片机C语言教程[M].电子工业出版社,2009.1:
343-349.
附录
源程序代码:
#include
#include#include#defineucharunsignedchar
#defineuintunsignedint
sbitcgq=P3A7;//18B20接口
sbitd仁P2A0;//高于上限时,红灯闪烁
sbitd2=P2A1;〃低于下限温度时,绿灯闪烁
sbitd3=P2A2;〃黄灯正常时发光
sbitfeng=P1A。
;//不在正常范围内时蜂鸣器响
sbitsw=P2A4;〃当低于下限时,继电器吸合,升温开始工作
sbitrs=P2A6;//1602控制位选择
sbitrw=P2A5;
sbiten=P2A7;
bitflag;
bitflag_f;
chartemph,templ;//上限温度下线温度变量定义ucharcodetable1[]={"CT:
C"};
ucharcodetable2[]={"H:
+90.0L:
+40.0"};
charhf='+',hs=9,hg=0,hd=0,lf='+',ls=4,lg=0,ld=0;〃温度调整全局变量voiddelayus(uintus)//延长时间为11*us+3微秒
{
while(--us)_nop_();
}
voiddelayms(uintms)//延时函数1秒{uintx,y;
for(x=ms;x>0;x--)for(y=0;y<110;y++);
}
//************voidlcd_write_com(ucharcom)//写指令
{
delayms(5);〃维持信号稳定
rs=0;
rw=0;en=0;
delayms
(1);en=1;
P0=com;
en=0;
}
voidlcd_write_date(uchardate)//写数据
delayms(5);//维持信号稳定
rs=1;rw=0;en=0;delayms
(1);en=1;P0=date;en=0;
rs=0;
}
voidlcd_init()//液晶初始化
{
uchari;
delayms(15);
lcd_write_com(0x38);delayms(5);
lcd_write_com(0x38);delayms(5);
lcd_write_com(0x38);
delayms
(1);
lcd_write_com(0x01);
delayms
(1);
lcd_write_com(0x06);
delayms
(1);
lcd_write_com(0x0f);
delayms
(1);
lcd_write_com(0x80);
delayms
(1);
for(i=0;i<14;i++)
{lcd_write_date(table1[i]);delayms
(1);}lcd_write_com(0x80+0x40);for(i=0;i<17;i++)
{lcd_write_date(table2[i]);
delayms
(1);}
}
温度控制函数
*****************
*/
voidds18b20_init()//18B20初始化
{ucharx;cgq=1;delayus(8);
cgq=0;
delayus(50);
cgq=1;
delayus(20);
x=cgq;
delayus(5);
}
voidds18b20_write_date(uchardate)/向DS18B20中写入一个字节
{
uchari;
for(i=0;i<8;i++)
{cgq=0;
cgq=date&0x01;
delayus(5);
cgq=1;
date>>=1;
}
delayus(5);
}
uchards18b20_read_date(void)从18B20中读出一个字节
{uchari,date;
TR0=0;
for(i=0;i<8;i++)
{cgq=0;
date>>=1;
cgq=1;
if(cgq)
date|=0x80;
delayus(5);}TR0=1;
returndate;}
voidds18b20_start()//启动温度转换
{ds18b20_init();
ds18b20_write_date(0xcc);/跳过读取序列号ds18b20_write_date(0x44);/启动温度转换delayus(200);}
uintds18b20_temperature(void)/读取温度
{uchara;
uintb,t;
ds18b20_init();
ds18b20_write_date(0xcc);/跳过读取序列号ds18b20_write_date(0x44);/启动温度转换delayus(200);
ds18b20_init();
ds18b20_write_date(0xcc);
ds18b20_write_date(0xbe);/读取温度寄存器,共九个节
a=ds18b20_read_date();b=ds18b20_read_date();b<<=8;
t=a+b;
returnt;}
**************
按键调整******************/
sbitk1=P1A2;
sbitk2=PM3;
sbitk3=P1A4;
uchark;voidkey_scan()
{if(k1==0)
{delayms(10);
if(k1==0)
{while(!
k1);delayms(10);
k++;
if(k==9)k=0;}
}switch(k){case0:
{flag=1;
lcd_write_com(0x0c);
lcd_write_com(0x80);
}break;
case1:
{flag=0;d1=1;d2=1;d3=1;feng=1;lcd_write_com(0x0f);lcd_write_com(0x80+0x40+2);
}break;
case2:
{lcd_write_com(0x80+0x40+3);
}break;
case3:
{lcd_write_com(0x80+0x40+4);}break;
case4:
{lcd_write_com(0x80+0x40+6);}break;
case5:
{lcd_write_com(0x80+0x40+11);}break;
case6:
{lcd_write_com(0x80+0x40+12);}break;
case7:
{lcd_write_com(0x80+0x40+13);}break;
case8:
{lcd_write_com(0x80+0x40+16);
}break;
if(k)
{
if(k2==0)
{delayms(10);
if(k2==0)
{while(!
k2);delayms(10);if(k==1)
{if(hf=='+')hf='-';
elsehf='+';
lcd_write_date(hf);
lcd_write_com(0x80+0x40+2);}if(k==2)
{hs++;
if(hs>=10)hs=0;lcd_write_date(hs+0x30);lcd_write_com(0x80+0x40+3);}if(k==3)
{hg++;if(hg>=10)hg=0;lcd_write_date(hg+0x30);lcd_write_com(0x80+0x40+4);}if(k==4)
{hd++;if(hd>=10)hd=0;lcd_write_date(hd+0x30);lcd_write_com(0x80+0x40+6);}if(k==5)
{if(lf=='+')lf='-';
elself='+';
lcd_write_date(lf);
lcd_write_com(0x80+0x40+11);}if(k==6)
{ls++;
if(ls>=10)ls=0;lcd_write_date(ls+0x30);lcd_write_com(0x80+0x40+12);}if(k==7)
{lg++;
if(lg>=10)lg=0;lcd_write_date(lg+0x30);lcd_write_com(0x80+0x40+13);}if(k==8)
{ld++;
if(ld>=10)ld=0;
lcd_write_date(ld+0x30);
}
if(k3==0)
{delayms(10);
if(k3==0)
{while(!
k3);
delayms(10);
if(k==1)
{if(lf=='+')lf='-';
elself='+';
lcd_write_date(lf);lcd_write_com(0x80+0x40+2);}if(k==2)
{hs--;
if(hs<0)hs=9;
lcd_write_date(hs+0x30);lcd_write_com(0x80+0x40+3);}if(k==3)
{hg--;if(hg<0)hg=9;lcd_write_date(hg+0x30);lcd_write_com(0x80+0x40+4);}if(k==4)
{hd--;if(hd<0)hd=9;lcd_write_date(hd+0x30);lcd_write_com(0x80+0x40+6);}if(k==5)
{if(lf=='+')lf='-';
elself='+';
lcd_write_date(lf);
lcd_write_com(0x80+0x40+11);}if(k==6)
{ls--;
if(ls<0)ls=9;
lcd_write_date(ls+0x30);lcd_write_com(0x80+0x40+12);}if(k==7)
{lg--;if(lg<0)lg=9;lcd_write_date(lg+0x30);lcd_write_com(0x80+0x40+13);}if(k==8)
{ld-