基于单片机和DS18B20的多路温度控制系统毕业设计论文.docx
《基于单片机和DS18B20的多路温度控制系统毕业设计论文.docx》由会员分享,可在线阅读,更多相关《基于单片机和DS18B20的多路温度控制系统毕业设计论文.docx(41页珍藏版)》请在冰豆网上搜索。
基于单片机和DS18B20的多路温度控制系统毕业设计论文
大学
毕业论文(设计)
基于单片机的多路温度控制系统
Microcontroller-basedMulti-channelTemperatureControlSystem
申请学位:
工学学士学位
院系:
光电信息学院
专业:
电子信息工程
基于单片机的多路温度控制系统
姓名:
导师:
201x年5月20日
大学
烟台大学毕业论文(设计)任务书
院(系):
光电信息科学技术学院
姓名
学号
毕业届别
专业
电子信息工程
毕业论文(设计)题目
基于单片机的多路温度控制系统
指导教师
学历
职称
讲师
所学专业
通信与信息系统
具体要求(主要内容、基本要求、主要参考资料等):
主要内容:
学习单片机STC89C52和温度传感器DS18B20的相关知识,结合单片机的理论与应用知识,使用单片机控制两路传感器并联进行温度采集和报警控制。
基本要求:
培养学生解决实际问题的能力及初步的理论研究能力;查阅文献资料、调查收集信息的能力;独立思考,认真钻研,提出方案并论证方案的能力;设计、计算、绘图能力;实验数据分析与处理的能力;外文阅读、计算机应用能力;撰写实验报告、设计说明书、技术总结和论文的能力;语言表达、思辨能力。
参考资料:
新概念51单片机C语言教程;
单片机原理及接口技术;
DALLAS公司的DS18B20的数据手册
进度安排:
2012-2013-1学期:
14~16周,确定指导教师,选题。
2012-2013-2学期:
1~4周查阅资料、学习相关软件,确定设计方案;
5~8周系统硬件设计;
9~11周系统软件设计及系统调试;
12~13周撰写、修改毕业论文;
14~15周系统验收、论文答辩。
指导教师(签字):
年月日
院(系)意见:
教学院长(主任)(签字):
年月日
备注:
[摘要]在计算机技术广泛应用的今天单片机也得到了广泛的使用,应用单片机的产品已经出现在我们日常生活的每个角落。
本次设计器材主要有STC89C52单片机、DS18B20温度传感器、LED共阴数码管。
本次设计先是通过Keil软件进行编程生成Hex文件,然后下载到单片机中进而控制DS18B20温度采集并通过数码管显示。
本文重点完成了单片机基本的I/O口的功能实现、DS18B20的功能实现与特点、温度传感器的软件读写程序、数码管位选段选实现程序、独立键盘控制两路温度的显示和温度报警的实现。
[关键词]STC89C52单片机;DS18B20;LED;独立键盘
[Abstract]Intheageofcomputertechnique,themicrocontrollerhasalsobeenwidelyused,andwecanseetheproductsofmicrocontrollereverywhereinourdailylife.TheequipmentusedofThedesign,containSTC89C52microcontroller,DS18B20temperaturesensor,commoncathodeLED.ThisdesignfirstrunthroughKeilsoftware,producingHexfile,andthendownloadedtotheMCUtocontrolDS18B20temperaturecollectingandthroughdigitaltubedisplay.ThispapermainlyintroducesthesinglechipmicrocomputeroftherealizationofthefunctionofthebasicI/Oport,thefunctionsandfeaturesofDS18B20,thetemperaturesensorofthesoftwaretoreadandwriteprocedures,digitaltubelocationandpassagechoseprogram,twowayindependentkeyboardcontroldisplayoftemperatureandtemperaturealarm.
[Keywords]STC89C52microcontroller;DS18B20;LED;Separatekeyboard
1绪论
在此科技迅速发展的年代,在人们的生产和生活中已经广泛使用温度采集控制,人们采集温度通常使用温度计,而人们控制温度的方式一般是通过通风或者人工操作加热或降温,可是控制效果不好、时效性也不好,而且工作员工的工作硬度比较大。
虽然现在相当一部分用户的温度传感器是用半导体二极管充当,但这样做有不好的交换性和太好的成绩。
因为对温度要求较高的行业比较多,并且引发事故的多数是由于环境温度变化不合理造成,并且还有很多操作人员安全收到威胁的情况,所以,将数字温度测量及控制设备安装在不安全环境的某些特定位置,在温度超过某范围就报警。
本设计由于使用了智能温度传感器进行控制,这种传感器具有比较高的测量精度,简单的操作,并且还具有比较便宜的价格,本设计是一个基于单片机的数字温度采集及控制系统。
随着社会的发展,愈来愈多的行业需要进行温度的采集及控制,致使本课题变得很重要。
温度传感器DS18B20所采集的温度先发送至单片机STC89C52,然后STC89C52对数据进行进一步的分析处理,进而使其能在LED数码管上表示出来,并通过温度控制相连的报警或其他系统。
通过学习该课程使我们全面的了解单片机和温度传感器、掌握此传感器与单片机各模块电路的连接线路和程序的编写的过程,从而锻炼我们在使用单片机进行各种设计方面的实践活动和动手能力。
2系统的设计方案
2.1设计任务
本次设计主要是通过按键选择两路DS18B20进行温度采集,并传到主机进行处理,然后主机把处理好的温度值发送到数码管上显示并控制温度报警。
而在本次设计中,两路温度传感器采用与主机的单总线进行并联方式,这样就需要对两路温度传感器分开进行处理。
这里就用到了温度传感器的匹配ROM编码命令进行对两路温度传感器的识别,此时用独立键盘进行控制选择哪一路温度传感器进行温度采集。
2.2设计原理
根据系统的设计要求,DS18B20作用此次设计使用的数字温度传感器和单片机则使用STC89C52。
当主机STC89C52给从机DS18B20发送采集温度命令后,从机DS18B20响应主机并进行模数转换,发往主机STC89C52自己所测得的二进制温度数据;单片机对从机DS18B20发送来的温度数据按照自己存储的程序进行处理,使之变成十进制温度数值,并通过单总线发送到数码管(LED)显示,蜂鸣器根据温度数值来进行报警;由键盘控制电路选择对哪路DS18B20发送读取温度命令,进而数码管显示。
系统设计框图如图2.1
图2.1设计原理图
3器件的选择
3.1单片机STC89C52
STC89C52[1]作为本次设计使用的单片机(引脚图如图3.1),一是因为本人手中有现成的STC89C52单片机的开发板,可以方便调试和使用,二是STC89C52单片机和市面流行的单片机一样,容易上手,并且特性比较好。
此设计使用到单片机的P0口作为数据线控制四位共阴数码管的段选而来传输数据,使用单片机的P2的2.3.4口连接74LS138译码器的输入引脚来控制四位数码管的位选,使用P3^7口连接两个DS18B20的数据线引脚,使用P2^0连接一个独立按键来控制传感器的选择。
图3.1单片机引脚本
3.2DS18B20
DS18B20[2]温度传感器(如图3.2)是美国Dallas公司的一线器件,它内部结构主要由四部分(如图3.3)组成:
64位光刻ROM、温度传感器、非挥发的温度存储器、配置寄存器;即使用单一的数据线与主机进行数据交换。
DS18B20由于其各方面都优点使它得到公众的认可,而得到广泛的使用。
本次设计使用两个DS18B20都与单片机STC89C52的一个I/O口相连,利用他们两个ROM序列号的不同来控制它们分别进行温度的采集和控制。
图
图3.2DS18B20引脚
图3.3DS18B20内部结构
光刻ROM(如图3.4)在出厂前64位编码号就被光刻设置好了,并且每个DS18B20的ROM序列号都是世上唯一存在的。
单片机可以通过单一的总线与多个DS18B20相连并互不影响低采集温度正是基于每个DS18B20ROM的数据都不同的原理。
图3.4DS18B20ROM编码
DS18B20中的温度传感器(如图3.5),以16位的二进制值来保存采集的数据,S为符号标志位。
图3.5DS18B20温度传感器
配置寄存器(图3.6)主要是用于通过R1和R0来设置DS18B20的分辨率(DS18B20出厂默认设置为12),他们的对应关系如图3.7。
图3.6配置寄存器
图3.7DS18B20分辨率设置
图3.8高速暂存存储器
高速暂存存储器RAM(如图3.8)由9个字节组成,主要用于存储温度数据、设置高低温阀值和校验。
4模块设计
4.1晶振电路和复位电路
晶振电路和复位电路如图4.1和4.2。
晶振电路中本次设计使用的是STC89C52的片内时钟振荡方式,器件数值大小如图4.1所示。
单片机的晶振采用11.0592MHZ,此频率对应的振荡周期即为单片机的振荡周期,外加两个的电容选取大小为30pF的,振荡器的作用主要是产生时钟振荡,这个电路即可产生自激振荡。
对于复位电路,STC89C52采用的是更加直接和简单的复位(如图4.2)。
RST是复位输入引脚,在按下按键后,系统自动复位,非常容易,而上拉电阻起到限流作用,保护电路。
图4.1晶振电路图4.2复位电路
4.2温度采集电路
温度采集电路即使DS18B20和单片机连接,如图4.3。
本次设计中使用DS18B20与的P3^7口相连的方式,由于STC89C52单片机的P3^7口没有内置上拉电阻,所以使用它时需要接上拉电阻。
本次设计中采用两路DS18B20的数据线都与P3^7相连的并联的单总线方式。
图4.3DS18B20连接电路
4.3键盘单元
本次设计使用了一个独立按键,按键开关状态通常是需要去抖后确定的,本次设计中采用的方法是,在检测到有键按下时,不是去先执行原程序,而是先执行一个时间很小的延时程序,然后再次检测该键是否还是按下状态的软件去抖,如该键还是按下状态则输入此键按下的信息,从而达到去抖动功效。
4.4显示电路
本次设计并没有采用现在比较流行的LCD液晶显示器,而是采用了价格比较便宜并容易操作的LED数码管显示器(如图4.4)。
本部分电路是使用锁存器74LS573连接单片机和四段数码管,单片机通过P0口数据线将要显示的数值先送达锁存器74LS573,再由74LS573传输到数码管显示,从而控制数码管的段选,进而实现数码管上显示传输来的数据,而通过P2的三个图4.4共阴数码管[3]
I/O口经过138译码器控制数码管的位选线来控制显示数码管的位。
而在控制数码股的位选上,采用了74LS138译码器(如图4.5),P2的2.3.4口连接译码器的三个输入引脚,前四个输出引脚连接4位数码管。
图4.574LS138
5系统硬件实现
本次设计使用到的器件如表1
表1器件的使用表
器件名称
数量
STC89C52单片机
1个
12M晶振
1个
独立键盘
2个
共阴数码管
4位
万通板
1个
DS18B20
2个
74LS138
1个
74LS573
1个
蜂鸣器
1个
电阻
若干
导线
若干
电容
若干
STC89C52的P3^7与两路DS18B20的数据连接时(如图5.1)以并联形式。
本次设计使用P2口的2.3.4口来控制74LS138译码器来控制四位数码管,从而达到节约使用单片机I/O口资源,具体连接电路如图5.2,译码器的真值表如表2。
图图5.1传感器并联
表274LS138[4]译码器的真值表
输入
输出
STA
/STB
/STC
A2
A1
A0
/Y0
/Y1
/Y2
/Y3
/Y4
/Y5
/Y6
/Y7
×
H
×
×
×
×
H
H
H
H
H
H
H
H
×
×
H
×
×
×
H
H
H
H
H
H
H
H
L
×
×
×
×
×
H
H
H
H
H
H
H
H
H
L
L
L
L
L
L
H
H
H
H
H
H
H
H
L
L
L
L
H
H
L
H
H
H
H
H
H
H
L
L
L
H
L
H
H
L
H
H
H
H
H
H
L
L
L
H
H
H
H
H
L
H
H
H
H
H
L
L
H
L
L
H
H
H
H
L
H
H
H
H
L
L
H
L
H
H
H
H
H
H
L
H
H
H
L
L
H
H
L
H
H
H
H
H
H
L
H
H
L
L
H
H
H
H
H
H
H
H
H
H
L
图5.2译码器的连接
系统总体连接实现的效果图如图5.3
图5.3系统硬件连接效果
6软件实现
6.1DS18B20工作时序
DS18B20按协议执行的工作流程:
初始化时序→ROM操作指令→存储器操作指令→数据传输。
其工作时序包括:
初始化时序
;写时序;读时序
图6.1初始化时序
初始化时序(如图6.1):
主机先向数据线发出一个低脉冲,然后将其恢复,而主机此后对总线进行检测,如有器件存在并应答那么总线会是低电平,否则总线是高电平。
从机DS18B20上电后一直检测总线,如果在总线上有500μs左右低电平,则DS18B20会对主机应答即将总线将拉低60~240微秒,告诉主机自己已做好准备;否则它会一直进行检测。
主机操作DS18B20是通过向其发送写与读命令控制的,而这些命令都是单独一位一位写和读的,即向DS18B20的写0、写1、读0和读1,一下就是这些时序。
对DS18B20写时序(如图6.2):
主机进行写周期时,先将总线拉低1微秒以表示写周期的开始,此时若想写0则继续拉低总线,若想写1则释放总线为高,写周期至少60微妙;而从机在写周期开始15微秒后就检测总线,在总线被拉低1微秒后,从机采样到总线为高则为1,否则为0
图6.2写周期时序
主机为STC89C52,从机为DS18B20,写周期最长不超过120μs,最少为60μs。
DS18B20读时序(如图6.3):
从机在检测到主机拉低总线1微秒后读周期开始,从机将数据送到总线,送1则将总线释放为高,送0则继续拉低总线,读周期至少60微秒;主机在读周期开始后的15微秒内检测总线电平,高则读1,低则读0。
主机为STC89C52,从机为DS18B20,完成一个读时序过程,同样也需要至少60us。
图6.3读周期时序
6.2程序实现
6.2.1DS18B20的指令集:
主机必须按协议对DS18B20进行各种读写操作,根据DS18B20协议的规定,单片机需经过以下4个步骤对DS18B20进行温度采集:
(1)每次对DS18B20进行读写操作之前,都必须对其进行复位初始化。
(2)发送一条ROM指令(如图6.4)
图6.4ROM操作指令
(3)发送存储器指令(如图6.5)
图6.5存储器指令
(4)单片机STC89C52接受DS18B20传来的温度数据
6.2.2编程
根据系统流程图6.6进行编程如附录程序,这样我们可以清楚了解本次设计的程序编写过程。
选择B传感器
选A片
是
否
图6.6系统设计流程图
1.读ROM编码过程,在进行本次实验前需要预先读出两路DS18B20的ROM编码以区别两个DS18B20,此时需要借助单片机的串口调试助手。
先对系统初始化,然后使用程序借助串口调试助手分别读取两个ROM编码,然后将ROM编码固化到系统编程中。
2.对单片机定时器初始化时对定时器设定初值TH1=0xD8;TL1=0xF0;以时定时器每10000个时钟周期中断一次,故定时每经过10000*1us=10ms时间中断一次。
3.DS18B20的操作,对DS18B20初始化,进而确定其存在并且已经准备好,如附录
voidInit18b20(void);
对DS18B20进行读字节操作附录子程序的unsignedcharReadByte(void)
对DS18B20进行写字节操作即附录程序voidWriteByte(unsignedcharidatawr)
对DS18B20读写字节操作前都需要先对其进行初始化,而当其执行完温度转换命令后将温度值以二进制存放在高速暂存存储器的低两个字节,然后向单片机发送数据,此时单片机需要先将这低两个字节的温度数据整合为一个数据如附录程序中的voidGemTemp(void),然后再将温度值经过取小数和取整数部分后转换为十进制数值并经显示电路显示。
4.由于本次设计使用到了两路DS18B20,程序控制它们读取温度时需要先对它们的ROM编码进行匹配,即先向总线发送匹配ROM的命令WriteByte(0x55)随即发送其中一个DS18B20的ROM序列号,然后发送温度转换命令WriteByte(0x44);然后再发送匹配ROM的命令WriteByte(0x55)随即仍发送这个DS18B20的序列号,然后发送读温度命令WriteByte(0xBE)后,这样既能读取这个DS18B20测得到温度。
这里对总线发送匹配命令接着发送其中一个的序列号后,只有与这个序列号匹配的DS18B20才会响应主机的进行温度采集。
程序写好之后再Keil软件中进行编译运行生成Hex文件,再经过单片机烧录工具下载到单片机中,系统就可以实现。
结论
毕业设计选题时之所以选择多路温度采集控制系统,主要是旨在学习时下应用广泛的单片机,再者是因为对温度采集系统感兴趣。
设计起初,我先是对STC89C52单片机进行学习了解,后搜集并学习DS18B20的数据手册,接着学习了共阴数码管和独立键盘的使用方法。
本次设计使用单片机控制温度传感器测试温度和数码管的显示以及蜂鸣器的报警,实现了以单总线方式相连两路温度传感器并能实时采集和显示两点的温度而且进行高温度的蜂鸣器报警。
在此次实践中本人学习了相关器件的使用,锻炼了动手和独立解决问题的能力;并且在Keil软件编程中反复调试程序,也锻炼了本人的耐心,虚心接受并检查错误。
致谢
在本次设计开始时,导师晋老师对本人讲解了本次设计的基本过程和注意事项,让我有了总体设计轮廓。
并且还给我指导每个阶段的学习,给我了很大帮助和支持。
通过本次毕业设计,从论文选题到搜集资料,从写提纲到开始动手进行设计,从开始调试程序到最后程序能正常运行,期间经历了喜悦、烦躁、痛苦和开心。
在这毕业设计结束之时,论文得以顺利完成,非常要感谢导师的指导,还有几位同学的帮助。
参考文献
[1]李朝青.单片机原理及接口技术.北京.北京航天航空大学出版社.2005.
[2]Dallas.DS18B20数据手册
[3]郭天祥.新概念51单片机C语言教程.北京.电子工业出版社.2009.
[4]余孟尝.数字电子技术基础简明教程.北京.高等教育出版社版社.2006.
附录
#include
#include
externGetTemp();//声明引用外部函数
externunsignedintidataTemperature;//声明引用外部变量
voiddelay(unsignedinti);//elseI0
sbitLS138A=P2^2;//管脚定义
sbitLS138B=P2^3;
sbitLS138C=P2^4;
sbitD18B20=P3^7;
#defineNOP()_nop_()/*定义空指令*/
#define_Nop()_nop_()/*定义空指令*/
sbitkey=P2^0;
sbitming=P1^5;
//此表为LED的字模,共阴数码管0-9-
UnsignedcharcodeDisp_Tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};
unsignedlongLedOut[5],LedNumVal,temp,tem;
voidsystem_Ini()
{
TMOD|=0x11;
TH1=0xD8;//10000个机器周期(10000*1μs)
TL1=0xF0;
IE=0x8A;
TR1=1;
}
bitflag;
unsignedintidataTemperature;
unsignedcharidatatemp_buff[9];//存储读取的字节,readscratchpad为9字节,readromID为8字节
unsignedcharidataid_buff2[8]={0x28,0xE2,0x70,0xB4,0x03,0x00,0x00,0x4F};
unsignedcharidataid_buff1[8]={0x28,0x29,0xBB,0xBF,0x03,0x00,0x00,0xEE};
unsignedcharidata*p,TIM;
unsignedcharidatacrc_data;
voidTempDelay(unsignedcharidataus)//延时处理
{
while(us--);
}
voidInit18b20(void)//18B20初始化
{
D18B20=1;
_nop_();
D18B20=0;
TempDelay(80);//delay530uS//80
_nop_();
D18B20=1;
TempDelay(4);//delay35uS//