基于单片机的温度控制系统1.docx
- 文档编号:15242425
- 上传时间:2023-07-02
- 格式:DOCX
- 页数:30
- 大小:540.74KB
基于单片机的温度控制系统1.docx
《基于单片机的温度控制系统1.docx》由会员分享,可在线阅读,更多相关《基于单片机的温度控制系统1.docx(30页珍藏版)》请在冰点文库上搜索。
基于单片机的温度控制系统1
分类号:
学校代码:
学号:
********本科生毕业设计
基于单片机的温度控制系统
Thetemperaturecontrolsystembasedonsinglechip
所在院(系);
学生姓名:
指导教师:
研究起止日期:
学位论文独创性声明
本人郑重声明:
1.坚持以“求实,创新”的科学精神从事研究工作。
2.本论文是我个人在导师指导下进行的研究工作和取得的研究成果。
3.本论文中除引文外,所以实验、数据和有关材料均是真实的。
4.本论文中除引文和致谢的内容外,不包含其他人或其他机构已经发表或撰写过的研究成果。
5.其他同志对本研究所做的贡献均已在论文中作了声明并表示了感谢。
作者签名:
日期:
【摘要】本设计是主要研究基于AT89S51单片机和DS18B20的温度控制系统设计。
利用单片机AT89S51作为主控模块,加上晶振电路、报警电路、温度检测传感器和LCD1602显示屏,组成了一个实时温度监控系统,在单片机中加入程序后,实现预期功能。
文中详细介绍了几个模块的硬件设计思路、硬件电路各个部分的功能及原理、相应软件的程序设计,以及使用说明等。
【关键词】AT89S51、DS18B20、温度
【Abstract】ThisdesignismainlyaimedatthetemperaturecontrolsystembasedonAT89S51SCMandDS18B20.Areal-timetemperaturemonitoringsystemisconstructedbyusingtheSCMAT89S51asthemaincontrolmoduleandapplyingthecrystaloscillatorsensorandtheLCD1602display.ThepresetfunctionswillberealizedafterloadingtheprogramsintotheSCM.Thisessaymainlycoverstheconceptsoverdesigningthemodulehardware,thefunctionsandprincipalsforthehardwarecircuitparts,thesoftwareprogrammingandapplicationinstructionsetc.
【Keywords】AT89S51、DS18B20、temperature
目录
1引言1
2系统总体方案1
2.1温度控制系统的功能要求1
2.2系统总框图1
3系统硬件电路设计2
3.1AT89S51单片机概述3
3.1.1AT89S51单片机引脚图及引脚功能介绍3
3.1.2最小系统模块4
3.2温度传感器DS18B20模块5
3.2.1DS18B20的概述5
3.3液晶显示屏1602LCD模块7
3.3.11602LCD概述7
3.4报警电路模块9
4温度控制系统的软件设计10
4.1DS18B20温度转换11
5protrus仿真实验结果12
6总结15
7参考文献16
8致谢16
附录一:
程序代码17
1引言
随着经济的发展,工业生产过程中对温度的控制越来越严格,现实生活中很多地方不能进行人工控制,需要借助检测工具进行实时监控,如何利用当今自动化控制技术,有效的监测和控制温度,提高温度检测的准确度,促进工业又好又快生产是值得我们研究的课题。
随着科技的迅猛发展,单片机的应用正在不断深入,在实时检测和自动控制的应用系统中,单片机往往作为一个核心部分来使用,但是仅有单片机方面的知识是不够的,还应更据具体硬件结构结合软件来实现相应功能,考虑到单片机具有价格便宜、功能强、使用方便灵活的特点,所以本系统使用AT89S51来作为本系统的设计芯片,利用DS18B20传感器检测温度,DS18B20内部集成A/D转换模块,可以简化电路和节约成本并且其检测精度相对较高,可以避免在温度转换中的误差,所以对基于单片机和DS18B20的温度控制系统研究和实际应用比较多,因此研究此课题具有很大的意义。
设计时必须掌握LCD工作原理方能进行更深层设计,所以着重介绍了几个模块的设计原理。
2系统总体方案
2.1温度控制系统的功能要求
本设计系统通过软件来仿真实际的温度检测系统,从而实现实时温度监控。
因DS18B20线路简单,体积小,精确度高等优点,本系统中使用DS18B20传感器检测具体的温度,然后通过C程序,将检测的温度传到1602显示屏上,本系统中还加有报警系统,当温度达到设定值要求时,相应的二极管发光,蜂鸣器报警,我们可以根据提示及时检查生产状况,单片机的程序可移植性高,运用灵活方便,可以根据具体需要来更改设定的温度,以达到不同场合的需要。
2.2系统总框图
本系统的总框图如下所示,以单片机为控制核心,采用模块化设计,共分为以下几个功能模块:
单片机控制模块系统、LCD温度显示模块、DS18B20温度检测系统、蜂鸣器报警系统等。
图2-1总体框图
3系统硬件电路设计
图3-1完整电路框图
3.1AT89S51单片机概述
AT89S51单片机包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、定时器/计数器、并行接口、串行口和终端系统等几大块和数据总线、地址总线、控制总线等三类总线。
中央处理器(CPU):
中央处理器是整个单片机的核心部件,是8位数据宽度的处理器,能够处理8位二进制数据和代码,CPU负责控制、指挥和调度整个单元协调工作,完成运算和输入输出等功能。
数据存储器(RAM):
AT89S51内部共有128个8位用户数据存储单元和128个专用寄存器单元,它们是统一编址的,专用寄存器只能存放控制指令数据,用户只能访问,不能用于存放用户数据,所以,用户可以使用的RAM只有128个,可存放读写的数据,运算的中间结果等。
程序存储器(ROM):
AT89S51共有4096个8位掩膜ROM,用于存放用户数据,原始数据表格。
定时器/计时器(ROM):
AT89S51有两个16位的可编程定时/计数器,以实现定时或计数产生中断用于控制程序转向。
并行输入输出口(I/O口):
AT89S51共有4组8位I/O口(P0--P3口),用于对外部程序的传输。
全双工串行口:
AT89S51内置一个全双工串行口,用于与其他设备的串行数据传输,该串行口可用作异步通信收发器。
中断系统:
AT89S51具备比较完善的中断系统,有两个外中断、两个定时器/计数器中断和一个串行中断,可满足不同的控制要求,并具备两个优先级别选择。
时钟电路:
AT89S51内置时钟电路,用于产生整个单片机运行的整个脉冲时序,但是需要外置震荡电容。
3.1.1AT89S51单片机引脚图及引脚功能介绍
首先我们来介绍一下单片机的引脚图及引脚功能(如下图所示),引脚的具体功能将在下面详细:
单片机的40个引脚大致可分为4类:
电源、时钟、控制和I/O引脚。
⒈电源:
⑴VCC-芯片电源,接+5V;
⑵VSS-接地端;
⒉时钟:
XTAL1、XTAL2-晶体振荡电路反相输入端和输出端。
⒊控制线:
控制线共有4根,
⑴ALE/
:
地址锁存允许/片内EPROM编程脉冲①ALE功能:
用来锁存P0口送出的低8位地址②
功能:
片内有EPROM的芯片,在EPROM编程期间,此引脚输入编程脉冲。
如右图所示:
⑵
:
外ROM读选通信号。
⑶RST/VPD:
复位/备用电源。
①RST(Reset)功能:
复位信号输入端。
②VPD功能:
在Vcc掉电情况下,接备用电源。
⑷EA/Vpp:
内外ROM选择/片内EPROM编程电源。
①EA功能:
内外ROM选择端。
②Vpp功能:
片内有EPROM的芯片,在EPROM编程期间,施加编程电源Vpp。
3.1.2最小系统模块
在设计中我选择单片机AT89S51芯片,采用12MHZ或更高频率晶振,以获得较高的刷新频率,温度显示更稳定。
其中复位电路采用简易的上电复位电路,由电阻R1,电容C3组成,分别接至AT89S51的RST复位输入端,VCC上电时,C充电,在10k电阻上出现电压,使得单片机复位;几个毫秒后,C充满,10k电阻上电流降为零,电压也为零,使得单片机进入工作状态。
时钟电路则由AT89S51的18,19脚的时钟端(XTALl及XTAL2)以及12MHz晶振X1、电容C1、C2组成,采用片内振荡方式。
图3-1最小系统电路图
3.2温度传感器DS18B20模块
3.2.1DS18B20的概述
1.DS18B20基本知识
DS18B20数字温度计是DALLAS公司生产的1-Wire,即单总线器件,具有线路简单,体积小的特点。
因此用它来组成一个测温系统,具有线路简单,在一根通信线,可以挂很多这样的数字温度计,十分方便。
2、DS18B20产品的特点
(1)只要求一个端口即可实现通信。
(2)在DS18B20中的每个器件上都有独一无二的序列号。
(3)实际应用中不需要外部任何元器件即可实现测温。
(4)测量温度范围在-55°C到+125°C之间
(5)数字温度计的分辨率用户可以从9位到12位选择。
(6)内部有温度上、下限告警设置。
3、DS18B20的引脚介绍
(1)GND地信号
(2)DQ数据输入/输出引脚。
开漏单总线接口引脚。
当被用着在寄生电源下,也可以向器件提供电源。
(3)VDD可选择的VDD引脚。
当工作于寄生电源时,此引脚必须接地。
4、DS18B20的使用方法
由于DS18B20采用的是1-Wire总线协议方式,即在一根数据线实现数据的双向传输,而对AT89S51单片机来说,硬件上并不支持单总线协议,因此,我们必须采用软件的方法来模拟单总线的协议时序来完成对DS18B20芯片的访问。
由于DS18B20是在一根I/O线上读写数据,因此,对读写的数据位有着严格的时序要求。
DS18B20有严格的通信协议来保证各位数据传输的正确性和完整性。
该协议定义了几种信号的时序:
初始化时序、读时序、写时序。
所有时序都是将主机作为主设备,单总线器件作为从设备。
而每一次命令和数据的传输都是从主机主动启动写时序开始,如果要求单总线器件回送数据,在进行写命令后,主机需启动读时序完成数据接收。
数据和命令的传输都是低位在先。
图3-2DS18B20温度传感器
根据上述DS18B20的用法,我将DS18B20的DQ引脚接到P3.7,通过P3.7高低电平变化以及延时程序来控制DS18B20的读写数据。
一、写数据:
首先把数据线(DQ)拉低,然后延时10秒,保持低电平,这时我们才开始写操作,写操作结束后,再将DQ位拉高。
二、读数据:
读数据时也首先将DQ拉低,产生一个脉冲信号,在低电平一微秒后直接拉高等待读数据。
因为DS18B20是单总线温度传感器,数据线是漏极开路,我将VCC引脚接高电平,为了使它稳定工作,在DQ和VCC引脚之间接入一个4.7K的电阻,当温度传感器开路或者没接时,能起到上拉作用,使之为高电平,保护后继电路。
3.3液晶显示屏1602LCD模块
3.3.11602LCD概述
1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。
目前市面上字符液晶绝大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。
1602LCM有14个引脚,其中包括8条数据线、3条控制线和3条电源线,见表3-3,通过单片机写入模块的命令和数据,就可对显示方式和显示内容作出选择。
表3-3液晶显示模块的部分引脚
引脚号
符号
引脚功能
1
GND
电源地
2
Vdd
+5V逻辑电源
3
Vee
液晶驱动电源(用于调节对比度)
4
Rs
寄存器选择(1—数据寄存器,0—命令/状态寄存器)
5
R/W
读/写操作选择(1—读,0—写)
6
E
使能(下降沿触发)
7~14
DB0~DB7
数据总线,与单片机的数据总线相连,三态
命令格式及功能说明
(1)内部寄存器LCD控制器HD44780内有多个寄存器,寄存器的选择见表3-4
表3-4寄存器的选择
RS
R/W
操作
RS
R/W
操作
0
0
命令寄存器写入
1
0
数据寄存器写入
0
1
忙标志和地址计数器读出
1
1
数据寄存器读出
RS位和R/W引脚上的电平决定对寄存器的选择和读/写,而DB7~DB0决定命令功能。
(2)命令功能说明下面介绍用到的2个命令
清屏。
命令格式如下:
RS
R/W
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
0
0
0
0
0
0
0
0
0
1
功能:
清除屏幕显示,并给出地址计数器AC置0。
显示开关控制。
命令格式如下:
RS
R/W
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
0
0
0
0
0
0
1
D
C
B
功能:
D位(DB2)控制整体显示的开与关,D=1,开显示:
D=0,则关显示。
C位(DB1)控制光标的开与关,C=1,光标开:
C=0,光标关。
B位(DB0)控制光标处字符的闪烁,B=1,字符闪烁;B=0,字符不闪烁。
根据其引脚使用方法,我将1602的数据总线接89C51的P2口,其4~6引脚接89C51的P3口,控制1602的工作,按照各管脚用法,由此设计的1602和单片机的接法如下:
图3-51602显示电路
3.4报警电路模块
因为涉及到发光二极管的使用,我采用共阳极的接法,所以我先介绍一下共阳极这种结构:
(1)共阳极结构:
如果所有发光二极管的阳极接在一起,称为共阳极结构,则数码显示段输入低电平有效,当某段输入低电平该段便发光,如图3-6所示:
图3-6共阳极结构
(2)如图3-7所示,本系统中报警电路的接法,其中发光二极管采用共阳极连接方式。
图3-7报警电路图
在本系统中,我使用发光二极管和蜂鸣器作为报警电路的元器件,我只用到两个发光二极管,但是使用原理和上面介绍的共阳极、共阴极是相同的。
我将发光二极管的阳极接高电平,阴极接到单片机,低电平时发光二极管工作。
由于发光二极管所允许流过的电流较小,约为10毫安左右,故需串电阻进行限流,在此我选取1K欧左右的电阻即可。
电路中存在两种电流,拉电流是数字电路输出高电平给负载提供的输出电流,灌电流时输出低电平是外部给数字电路的输入电流,它们实际就是输入、输出电流能力。
在本系统中我使用灌电流的方式,这样可以增加其带负载的能力,二极管发光更加明显。
4温度控制系统的软件设计
本系统中,当我们将编译后生成的hex文件加载到单片机芯片中后,程序就会不断调用每个模块的程序,不断的刷新检测的温度,并且及时在显示屏上显示,当DS18B20检测到的温度变化时,显示屏上也会做出相应的变化,如此循环下去即可实现预期功能。
程序设计总框图:
如图4-1
是
否是
图4-1数据读取流程图
4.1DS18B20温度转换
下面介绍一下DS18B20如何进行温度转换,然后在1602上显示十进制温度。
我以32°C为例,演示DS18B20如何显示32°C的。
我们先看下面几句程序:
a=ds1820rd();//读低8位
b=ds1820rd();//读高8位
tvalue=b;
tvalue<<=8;
tvalue=tvalue|a;//两个字节组合为一个字
if(tvalue<0x0fff)//判断温度是否为负
tflag=0;//tflag=0表示为正
else
{tvalue=~tvalue+1;//若温度为负,则取其补
tflag=1;//tflag=1表示为负
}
tvalue=tvalue*(0.625);//温度扩大10倍
return(tvalue);
}
DS18B20自身读取的温度是以16位二进制表示的,其中b中放高8位,a中放低八位,32的二进制为100000,所以b=00000010(高四位为符号位),c=00000000,我们将b赋值给tvalue,那么现在tvalue=00000010,下面将tvalue左移八位,然后与低八位做与运算之后tvalue=0000001000000000,我们和oxfff做判断,因为DS18B20出来的是一个16温度值,其中高4位为符号位,因tvalue的符号位为0,所以我们现在读取的温度值为正数,跳到tvalue=tvalue*(0.625)这一句,将tvalue与0.625相乘才能得到一个实际的温度值,此时读取的温度为320°C。
这就是为什么在显示屏上显示百位、十位、各位时为何需要进行下面计算的原因:
disdata[0]=tvalue/1000+0x30;//百位数0x30在1602里表示0
disdata[1]=tvalue%1000/100+0x30;//十位数
disdata[2]=tvalue%100/10+0x30;//个位数
disdata[3]=tvalue%10+0x30;//小数位
5protrus仿真实验结果
本系统设计完成后,主要观察了以下几个状态,来检验设计的准确性,分别为图5-1:
温度值在正常范围内时,只显示具体的温度。
图5-2:
温度大于30度时,绿灯亮,蜂鸣器报警。
图5-3:
温度小于负10度时,黄灯亮,蜂鸣器报警。
图5-1:
温度值在正常范围内时,只显示具体的温度
图5-2:
温度大于30度时,绿灯亮,蜂鸣器报警
图5-3:
温度小于负10度时,黄灯亮,蜂鸣器报警
6总结
通过三个月的努力,在老师与同学们的指导帮助下,终于完成了基于51单片机的基于单片机和DS18B20的温度控制系统的设计。
通过这次设计收获颇多,不仅是所作题目涉及到的软硬件知识还有更为重要的实际经验和过程中所发现的问题。
但是该系统不足之处是不能同时测试多个温度,然后取平均值,从而使温度更加精确,如果有需要可以连接多个DS18B20来扩充原来系统来实现。
通过这次毕业设计,使我得到了一次用专业知识、专业技能分析和解决问题全面的系统的锻炼。
使我在单片机的基本原理、单片机应用系统开发过程,以及常用编程设计的思路技巧,特别是对C语言的掌握方面能向前迈了一大步,该毕业设计虽然结束了,但由于时间、设备、条件和水平等各方面因素,还存在一些不足,还需要不断改进,当然也就需要学习并运用更多相关的知识。
7参考文献
[1]刘大茂主编,《单片机原理及其应用》,上海交通大学出版社,2006,3-11;
[2]李传军等编著,《单片机原理及应用》,河南科学技术出版社,2007;
[3]郁文工作室编著,《嵌入式C语言程序设计--使用MCS-51》,人民邮电出版社,2004,6-24;
[4]李群芳、黄建编著,《单片微型计算机与接口技术》,电子工业出版社,2005;
[5]蔡振江编著,《单片机原理及应用》,电子工业出版社,2011,8-21;
[6]王建校,杨建国等编著,《51系列单片机及C51程序设计》,科学出版社,2002,1-1;
8致谢
衷心感谢我的论文指导教师和公司同事对我在本次设计中的关怀与帮助。
通过本次的毕业设计,通过这次毕业设计,我对所学知识进行了一次系统的综合考察,感到收获很大,锻炼了自己的独立思考的能力,学会了如何分析问题解决问题。
尤其对单片机的学习和应用,自己在设计中提高了自己的分析问题,解决问题的能力,为自己今后走向工作岗位打下一个结实的基础,使自己掌握了又一有利工具,为以后激烈的工作竞争增强了实力。
同时在这次设计中,我也发现自己的不足。
这次毕业设计的时间短,任务重,缺乏理论和实验基础,加上我的能力有限,在设计中难免有考虑不周之处,还望于实际调试中不断完善自己。
这将会是我今后努力和学习的方向。
最后再次感谢曾经给予我帮助的人,其中武英老师对我的论文的撰写、修改提供了许多具体的指导。
吴嫁辰、刘彦巍等人在程序调试过程中对我的帮助。
附录一:
程序代码
lcd1602程序
voiddelay1ms(unsignedintms)//延时1毫秒
{unsignedinti,j;
for(i=0;i for(j=0;j<100;j++); } voidwr_com(unsignedcharcom)//写指令// {delay1ms (1); RS=0;//LCD数据命令选择端// RW=0;//LCD读写选择端// EN=0;//LCD使能信号// P2=com; delay1ms (1); EN=1; delay1ms (1); EN=0; } voidwr_dat(unsignedchardat)//写数据// {delay1ms (1);; RS=1; RW=0; EN=0; P2=dat; delay1ms (1); EN=1; delay1ms (1); EN=0; } voidlcd_init()//初始化设置// {delay1ms(15); wr_com(0x38);delay1ms(5); wr_com(0x08);delay1ms(5); wr_com(0x01);delay1ms(5); wr_com(0x06);delay1ms(5); wr_com(0x0c);delay1ms(5); } voiddisplay(unsignedchar*p)//显示// { while(*p! ='\0') { wr_dat(*p); p++; delay1ms (1); } } init_play()//初始化显示 {lcd_init(); wr_com(0x80); display(str1); wr_com(0xc0); display(str2); } ds1820程序 voiddelay_18B20(unsignedinti)//延时1微秒 { while(i--); } voidds1820rst()/*ds1820复位*/ {unsignedcharx=0; DQ=1;//DQ复位 delay_18B20(4);//延时 DQ=0;//DQ拉低 delay_18B20(100);//精确延时大于480us
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 温度 控制系统
![提示](https://static.bingdoc.com/images/bang_tan.gif)