单片机温控有程序.docx
- 文档编号:27405434
- 上传时间:2023-06-30
- 格式:DOCX
- 页数:35
- 大小:338.42KB
单片机温控有程序.docx
《单片机温控有程序.docx》由会员分享,可在线阅读,更多相关《单片机温控有程序.docx(35页珍藏版)》请在冰豆网上搜索。
单片机温控有程序
单片机原理及应用
课程设计报告
题目:
温度控制系统的设计
专业:
年级:
学号:
学生姓名:
联系电话
指导老师:
完成日期:
2013年5月18日
温度控制系统的设计
摘要
该设计主要利用STC89C52单片机和DS18B20元件,制作温度控制系统,该系统采用有字库的LCD12864中文液晶作为显示器件,实现温度控制系统的模拟。
使用蜂鸣器和LED灯作为超出温度设定范围时的报警,而继电器模块可以对温度控制的模拟,当温度低于某一值时,继电器控制开始加热,当温度高于某一值时,继电器控制停止加热,经测试系统达到本次设计的要求,STC89C52单片机具有功耗低的优点。
关键词:
STC89C52;LCD12864;DS18B20温度传感器;温度控制系统;继电器;
ABSTRACT
ThisdesignismainlyuseSTC89C52MCUandDS18B20components,temperaturecontrolsystem,thesystemUSESawordstockLCD12864LCDinChineseasadisplaydevice,realizethesimulationofthetemperaturecontrolsystem.UsingthebuzzerandLEDlightsasbeyondthescopeoftemperaturesettingofalarm,andrelaymodulecansimulationoftemperaturecontrol,whenthetemperatureislowerthanacertainvalue,therelaycontrolbegantoheat,whenthetemperatureishigherthanacertainvalue,therelaycontroltostopheating,thetestsystemmeetthedesignrequirements,STC89C52MCUhastheadvantagesoflowpowerconsumption.
Keywords:
STC89C52;LCD12864;DS18B20temperaturesensor;Thetemperaturecontrol
ofsystem;Relay;
目录
摘要I
ABSTRACTII
1设计要求及方案选择1
1.1设计要求1
1.2扩展部分1
2理论分析与设计3
2.1温度控制系统的总电路的分析及设计3
2.2单片机温度控制系统的基本构成及原理设计4
3 电路设计4
3.1STC89C52单片机介绍4
3.2最小系统电路7
3.3温度传感器电路设计8
3.4下载端口电路8
3.5LCD12864显示电路设计9
3.6超温报警电路10
3.7按键模块电路10
3.8继电器模块电路11
3.9软件的设计12
4系统测试....................................................................................................................12
4.1调试所用的基本仪器清单12
4.2硬件电路调试12
4.3测试结果分析13
参考文献13
附录114
附录215
1设计要求及方案选择
1.1设计要求
(1)制作完成温度检测系统。
(2)温度检测精度1度。
(3)温度能控制在一定范围内,超出温度设定范围时报警(声光指示)。
(4)所用到的电路板必须有作者的名字和学号(制作PCB板时候放置,不能用笔写)。
(5)设计在2013年5月30日前完成。
1.2扩展部分
(1)温度精度0.1;
(2)用继电器模块模拟加热系统对水进行加热;
(3)设计一个加热系统对水进行加热,完成以上控制;
(4)其它。
1.3方案选择
本次设计温度控制系统,使用了STC89C52单片机芯片控制电路,单片机控制电路简单且省去了很多复杂的线路,使得电路简明易懂,使用DS18B20作为温度系统的采集,同时使用C语言程序来控制温度在有字库的LCD12864显示,使得编程变得更容易,这样通过四个模块:
最小系统、温度检测、超温报警、LCD12864显示即可满足设计基本要求。
(1)总设计原理框图如下图1-1所示:
图1-1总设计原理框图
(2)设计方案的选择
①计时方案
方案一:
采用DS18B20“一线总线”接口的温度传感器,它具有微型化、低功耗、高性能、抗干扰能力强、易配微处理器等优点,可直接将温度转化为串行数字信号供处理器处理。
适应电压范围宽,电压范围在3.0-5.5V,在寄生电源方式下可由数据线供电。
它与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通信。
DS18B20支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测量。
在使用中不需要任何外围器元件,全部传感元件及转换电路集成在形如一只三极管的集成电路内。
测温范围-55℃—+125℃,在-10℃—+85℃时精度为±0.5℃。
编程分辨率为9-12位,对应的可分辨温度分别为0.5℃、0.25℃、0.125℃和0.0625℃,可实现高精度测温。
在9位分辨率时,最多在93.75ms内把温度转换为数字;在12位分辨率时,最多在750ms内把温度转换为数字。
测量结果直接输出数字温度信号,以“一线总线”串行传送给CPU,同时可传送CRC校验码,具有极强的抗干扰纠错能力。
因此,它的使用范围很广,应用与冷冻库、粮仓、储罐、以及纺机、空调等狭小空间工业设备测温和控制。
方案二:
选用HS1101湿度传感器来测量湿度,HS1101是法国Humirel公司推出的一款电容式相对湿度传感器,该传感器广泛应用于办公室、家庭、汽车驾驶室和工业控制系统等,对空气湿度进行监测。
与其它湿度传感器相比,无须校验的完全互换性;
长期饱和状态,瞬间脱湿;适应自动装配过程,包括波峰、焊接、回流焊等;具有高可靠性和长期稳定性;特有的固态聚合物结构;响应时间快;也适用于现行电压输出和线形频率输出两种电路。
总上考虑选择方案一节省硬件成本,且硬件设计简单。
②显示方案方案一:
对于显示显然是一个重要的环节。
为了把温度显示出来,可以用数码管或者LCD1602,但基于这两种显示不能显示汉字,所以采用LCD12864。
方案二:
采用LCD12864显示年、月、日、时、分、秒和温度。
由于平时多用LCD12864做显示,况且自己有LCD12864显示屏,所以本系统设计需要采用LCD12864做显示。
2理论分析与设计
2.1温度控制系统的总电路的分析及设计
温度控制系统由6个部分构成,分别是最小系统电路,按键电路,继电器模块电路,LCD12864显示电路,温度传感器电路,超温报警电路,时钟电路。
这几个部分电路结合起来就是一个完整的温度控制系统电路。
本设计能实现温度比较准确的显示,用DS18B20产生温度数据,后通过单片机将数据读回来,最终在LCD12864液晶上面显示。
同时设计能通过按键对时钟进行日期和时间的调节,并在LCD12864上显示。
(1)温度传感器电路分析
温度传感器电路关系到读取的温度是否准确。
采用DS18B20具有高精度测温以及分辨率达到了9位等特点,平时也是用DS18B20作温度传感器电路,所以作为本次设计也用其作为温度传感器电路。
(2)显示电路
对于显示电路,本设计采用LCD12864显示年、月、日、时、分、秒和温度。
LCD12864能显示的信息较多。
同时,由于之前用过LCD12864做显示,所以本系统采用LCD12864做显示。
(3)超温报警电路
利用蜂鸣器和LED灯电路实现超温报警功能。
2.2单片机温度控制系统的基本构成及原理设计
单片机温度控制系统,可用单片机采集DS18B20的温度,可以实现温度的正确显示,当温度超过或者低于某个值时,超温报警电路的蜂鸣器就响和LED灯就亮。
本系统在此基础上,加入了日期、时间和继电器模拟电路功能。
图2-2系统的总体框图
据此,本设计系统以单片机为控制核心,连接成最小系统,由温度传感器模块产生数据输出,通过LCD12864显示。
系统的总体框图如上图2-2所示。
单片机上电后,系统进入正常工作状态,将温度数据通过LCD12864液晶实时显示,同时时间开始走动。
在此过程中随时都可以进行时间调节。
当复位键按下的时候温度控制系统重新开始。
3 电路设计
3.1STC89C52单片机介绍
STC89C52单片机是一种低电压、高性能CMOS8位单片机,片内含8kbytes的可反复写的FlashROM和128bytes的RAM,2个16位定时计数器。
STC89C52单片机内部主要包括累加器ACC(有时也简称为A)、程序状态字PSW、地址指示器DPTR、只读存储器ROM、随机存取存储器RAM、寄存器、并行I/O接口P0~P3、定时器/计数器、串行I/O接口以及定时控制逻辑电路等。
这些部件通过内部总线联接起来,构成一个完整的微型计算机。
其管脚图如图3-1所示。
图3-1STC89C52单片机管脚结构图P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收TTL门电流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4个TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为AT89C51的一些特殊功能口,P3.0RXD(串行输入口);P3.1TXD(串行输出口);P3.2/INT0(外部中断0);P3.3/INT1(外部中断1);P3.4T0(记时器0外部输入);P3.5T1(记时器1外部输入);P3.6/WR(外部数据存储器写选通);P3.7/RD(外部数据存储器读选通)P3口同时为闪烁编程和编程校验接收一些控制信号。
此设计的总原理图如下图3-2所示:
图3-2温度控制系统总原理图
3.2最小系统电路
最小系统包括电源、复位电路、晶振电路。
单片机的40脚接VCC,20脚接GND。
本设计采用上电按钮复位电路,首先经过上电复位,当按下按键时,RST直接与VCC相连,为高电平形成复位,同时电解电容被电路放电;按键松开时,VCC对电容充电,充电电流在电阻上,RST依然为高电平,仍然是复位,充电完成后,电容相当于开路,RST为低电平,单片机芯片正常工作。
其中电阻R16决定了电容充电的时间,R16越大则充电时间长,复位信号从VCC回落到0V的时间也长。
本设计晶振电路采用12M的晶振。
晶振的作用是给单片机正常工作提供稳定的时钟信号。
用12M的就是好算时间,因为一个机器周期为1/12时钟周期,所以这样用12M的话,一个时钟周期为12us,那么定时器计一次数就是1us了。
电容范围在20-40pF之间,晶振电路选两个30P的无极性电容,主要是为了使震荡电路更稳定。
最小系统电路如图3-3所示:
图3-3最小系统电路图
3.3温度传感器电路设计
DS18B20数字温度传感器是单总线器件,具有线路简单,体积小的特点。
因此用它来组成一个测温系统,具有线路简单,在一根通信线,可以挂很多这样的数字温度计,十分方便。
DS18B20的特点只要求一个端口即可实现通信。
在DS18B20中的每个器件上都有独一无二的序列号。
实际应用中不需要外部任何元器件即可实现测温。
测量温度范围在-55.C到+125.C之间。
数字温度计的分辨率用户可以从9位到12位选择。
内部有温度上、下限告警设置。
R14为4.7k的上拉电阻。
温度传感器电路如下图3-4所示:
图3-4温度传感器电路图
3.4下载端口电路
设计用到的STC89C52单片机芯片的ISP下载线是通过单片机的P3.0RXD和P3.1TXD引脚把程序烧进去的。
管脚TXD和RXD用于异步串行通信。
其实STC89C52单片机的ISP下载线就是一个max232芯片连接STC和计算机的串行通信口。
计算机把程序从串口送到max232芯片,电平转换后送进单片机的串行口,也就是TXD和RXD。
然后单片机的串行模块把数据送到程序区。
在此加入外部电源用插针代替预备在其他情况下的电源供电。
如下图3-5所示:
图3-5下载端口和电源供电电路
3.5LCD12864显示电路设计
LCD12864显示电路,通过P0口和P2口的部分引脚作为控制输出,其中P0口要加多上拉电阻才能使用,由于其内部无上拉电阻,作为I/O用时候要加上拉电阻。
P0口作为显示输出端口的并行数据口,其中还需要用到P2.1作为LCD12864数据/命令选择端,P2.2读/写选择端,P2.3使能信号端,P2.4作为串/并行选择端。
电路接线图如下图3-6所示:
图3-6LCD12864显示电路
3.6超温报警电路
超温报警电路主要用于温度高于或者低于某一值时报警。
蜂鸣器电路主要由1K电阻R1,PNP型三极管8550以及蜂鸣器组成,J3为一个跳帽,当需用到蜂鸣器时就插上跳帽。
D1是LED灯也是用于超温时报警,超温报警电路图如图3-7所示:
图3-7蜂鸣器电路图
3.7按键模块电路
按键模块电路主要用于调节日期和时间的,当接到P0口时就得加上拉电阻,接到P1、P2、P3口时可以不加上拉电阻,直接接其I/O口。
当按键按下,拉低I/O口,此时可通过程序控制检测其是否被按下,当检测到被按下和没有被按下时,通过程序控制想要处理的事情,此处按键模块主要用于调整日期和时间的。
按键模块电路图如图3-8所示:
图3-8按键模块电路图
3.8继电器模块电路
继电器线圈需要流过较大的电流(约50mA)才能使继电器吸合,一般的集成电路不能提供这样大的电流,因此必须进行扩流,即驱动。
图3-9所示为用NPN型三极管驱动继电器的电路图,图中阴影部分为继电器电路,继电器线圈作为集电极负载而接到集电极和正电源之间。
图3-9用NPN三极管驱动继电器电路图
当输入为0V时,三极管截止,继电器线圈无电流流过,则继电器释放(OFF);相反,当输入为+VCC时,三极管饱和,继电器线圈有相当的电流流过,则继电器吸合(ON)。
具体接线图如图3-10所示:
图3-10继电器模块电路图
3.9软件的设计
全部控制程序实际上分为若干模块:
LCD12864液晶显示程序,按键设置处理程序,温度传感器采集程序,超温报警程序等。
整个软件流程图如图3-11所示。
图3-11程序流程图
当温度控制系统上电,LCD12864显示温度、日期、时间。
当按下按键可以调整日期和时间的加减,当温度高于或者低于某一值时,超温报警的蜂鸣器响和灯不断闪烁。
4系统测试
4.1调试所用的基本仪器清单
万用表,5v直流电源,ISP下载串口,keil软件。
4.2硬件电路调试
通过对温度控制系统的初步了解,并且根据器件资料来画原理图,做出电路板。
根据资料和时序图写出程序并调试,能显示温度值。
但是,LCD12864所显示的温度跟实际的有所误差。
经过反复调解程序,和查找相关资料,终于能把准确的温度显示出来。
日期和时间是用单片机的定时器来计时的,所以时间比较准确。
4.3测试结果分析
系统上电后,首先对LCD12864初始化写时钟控制程序,因为之前写过时钟程序所以经过几次的调试能在LCD12864准确的显示日期和时间。
在时钟程序的前提下加入温度显示程序,第一次没能在LCD12864想要的位置上显示,以为是显示位置的设置的错误,为了能先显示温度,先写程序在LCD12864显示温度,一步步调节,然后把时间和温度的两个程序结合起来。
但是,温度采集回来的数据并不是完全正确,经过调节感觉误差有所减小,但温湿度传感器本身就存在误差,还有就是程序的时序不够精确所引起的原因。
5总结
经过此次课程设计,感觉自己学到了很多,这次课程设计让我更进一步了解单片机的使用,并且深深体会到理论要通过实践才能理解得更加的深刻。
当遇到的问题通过自己去查资料和看相关的学习视频找出解决方法,自己会感到无比的自豪,特别是在硬件确定的情况下,通过程序可以不断改变而显示出自己想要的内容。
以此同时,不断的调程序有时会感到烦躁,但也同时学会了坚持,调出自己想要的程序那种内心的感觉是无法形容的,所以只有在不断实践中才能提高自己。
参考文献
[1]姜志海,黄玉清,刘连鑫.单片机原理及应用技术[M].北京:
电子工业出版社,2009.
[2]郭天祥.51单片机C语言教程[M].电子工业出版社,2012.
[3]谭浩强.C程序设计[M].北京:
清华大学出版社,2005.
[4]李伯成.基于MCS-51单片机的嵌入式系统的设计[M].北京:
电子工业出版社,2004.
附录1
温度控制系统总原理图
附录2
部分源程序附录:
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
#defineLCD_dataP0//数据口
sbitSPK=P3^7;//蜂鸣器定义
sbitLED=P1^4;//LED定义
sbitDQ=P3^6;//ds18b20定义
sbitRS=P2^1;//控制端口位定义
sbitRW=P2^2;
sbitEN=P2^3;
sbitkey1=P1^0;//位定义四个按键(用来调时)
sbitkey2=P1^1;
sbitkey3=P1^2;
sbitkey4=P1^3;
floatf_temp;//定义浮点型的温度数据
uchartemp=80,temp_L,temp_H;
ucharutime,f;//定时20ms,每20ms,utime++,定义按键为f
ucharclock[6]={13,6,1,12,33,56};//用来存放年的后两位,月,日,时,分,秒
uchartempreture[2];
ucharcodetab1[14]="10电子班黄金清";
uchartab2[16]="日期:
20";
uchartab3[14]="时间:
";
uchartab4[14]="温度:
.0C";
voiddelay(uintt)//延时子函数
{
uinti,j;
for(i=120;i>0;i--);
for(j=t;j>0;j--);
}
voiddelay_us(uchari)//延时函数,计算公式:
延时时间T=5+2*i;
{
while(--i);
}
voiddi()//蜂鸣器和灯闪烁程序
{
SPK=0;
LED=0;
delay(5000);
SPK=1;
LED=1;
}
voidread_busy()//lcd忙检测
{
EN=0;
RW=1;
RS=0;
EN=1;
while(P0&0x80);
EN=0;
}
voidwrite_com(ucharcom)//写命令
{
read_busy();
EN=1;
RS=0;
RW=0;
P0=com;
delay
(1);
EN=0;
}
voidwrite_dat(uchardat)//写数据
{
read_busy();
EN=1;
RS=1;
RW=0;
P0=dat;
delay
(1);
EN=0;
}
voidinit_12864()//lcd初始化
{
delay(40);
write_com(0x30);//8位数据格式,基本指令显示
delay(10);//延时时间
write_com(0x30);//8位数据格式,基本指令显示
delay(37);
write_com(0x0c);//开显示、关闭光标
delay(10);
write_com(0x01);//清屏指令
delay(10);//延时
write_com(0x06);//设置显示点:
指针自加1
}
voiddisplay()//lcd显示函数
{
uchari;
write_com(0x81);
for(i=0;i<14;i++)
{
write_dat(tab1[i]);
}
write_com(0x90);
for(i=0;i<16;i++)
{
write_dat(tab2[i]);
}
write_com(0x88);
for(i=0;i<14;i++)
{
write_dat(tab3[i]);
delay
(1);
}
write_com(0x98);
for(i=0;i<12;i++)
{
write_dat(tab4[i]);
}
}
voidshan(void)//lcd时间调节定位函数
{
uchari;
write_com(0x94);//将数据写在0x94地址上
if(f==1)//按键按一下年开份始闪烁
{
{
tab2[8]='';//向要闪烁的位置写空格
tab2[9]='';
}
for(i=8;i<=15;i++)
{
write_dat(tab2[i]);//写数据
}
gotoreturn1;
}
if(f==2)//按键按两下月份开始闪烁
{
{
tab2[11]='';
tab2[12]='';
}
for(i=8;i<=15;i++)
{
write_dat(tab2[i]);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 温控 程序