单片机课程设计温度控制系统_第1页
单片机课程设计温度控制系统_第2页
单片机课程设计温度控制系统_第3页
单片机课程设计温度控制系统_第4页
单片机课程设计温度控制系统_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 分类号 UDC 单位代码 10644 密 级 公 开 学 号 201310530201 课程设计基于DS18B20测温单片机温度控制系统课程名称: 数字电子技术基础作 者: 罗 健指导教师: 柳 妮 系 别: 物理与工程技术学院专 业: 电子科学与技术提交论文日期: 2015 年 6 月 24 日 论文答辩日期: 年 月 日    中 国 · 达 州年 月目 录摘要1一、系统设计21.1 项目概要21.2设计任务和基本要求:2二、 硬件设计32.1 硬件设计概要32.2 信息处理模块32.3 温度采集模块42.3.1传感器DS18b20简介42.3.2实验模拟电

2、路图42.3.3程序流程图52.4控制调节模块62.4.1升温调节系统62.4.2温度上限调节系统72.5显示模块9三、仿真后,部分显示成果9四、参考文献11六、附录116.1原理图116.2参考程序12单片机原理课程设计基于DS18B20测温单片机温度控制系统电子与科学 专业 2013级2 班 指导教师:柳妮摘要:介绍了以AT89S52单片机为控制核心的温度控制系统,系统采用数字温度计芯片DS18B20构成测温单元,通过AT89S52的开关量输出控制固态继电器(SSR)的通断,调节烤箱内温度。采用PID 控制算法可以明显改善系统的稳态性能以及稳态响应。关键词:温度控制;单片机;PID算法;D

3、S18B20Temperature Control System Based on DS18B20Automation School of Beijing University of posts and telecommunications 100876Abstract: The temperature control system based on AT89S52 SCM as the controller is introduced in this paper. The temperature measurement unit consists of digital thermometer

4、 chip .The output of switching value from AT89S52 controls the switch of solid state relay to regulate the temperature in the oven. An evident improvement on steady-state behavior and response of system is achieved when the PID control algorithm is used.Keywords: temperature control; single chip mic

5、roprocessor ; PID algorithm; DS18B20一、系统设计1.1 项目概要整个系统主控部分采用AT89S52构成单片机应用系统; 温度检测部分采用DS18B20 单总线数字温度传感器对温度进行检测;控制部分由固态继电器控制加热管的通断。工作时, 由键盘输入设定温度值,系统采用PID控制算法进行运算,通过单片机AT89S52的开关量控制固态继电器(SSR)的通断,以调节烤箱内温度至设定值,稳态误差在()1。液晶实时显示烤箱内温度和设定温度值。单片机温度控制系统原理图如图 1 所示图1 单片机温度控制系统原理图1.2设计任务和基本要求:(1) 实现099度范围的温度检测,

6、精度为1.0级。通过2位LED显示器显示被测温度值。(2) 可用按键设置温度报警值,并且在LED上显示。当超过报警限制时,发出声光报警。(3) 当温度超限时,按照某种控制规律控制执行器操作。二、 硬件设计2.1 硬件设计概要根据需求,我们将系统分为五个模块,信息处理模块,温度采集模块、时间模块、控制调节模块、报警电路模块,显示模块。2.2 信息处理模块AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROMFalsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。AT89C2051是一种带2

7、K字节闪烁可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除100次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。单片机模块如图2 所示。图2单片机模块2.3 温度采集模块2.3.1传感器DS18b20简介 DALLAS最新单线数字温度传感器DS18b20简介新的“一线器件”,体积更小、适用电压更宽、更经济。Dallas

8、半导体公司的数字化温度传感器DS18b20是世界上第一片支持“一线总线”接口温度传感器。一线总线独特而且经济的特点,使用户可轻松地组建传感器网络,为测量系统的构建引入全新的概念。DS18b20、DS1822“一线总线”数字化温度传感器同DS1820一样,DS18b20也支持“一线总线”接口,测量温度范围为-55 +125,在-10 +85范围内,精度为0.5。DS18b20的精度较差为2。现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。适合于恶劣环境的现场温度测量,如:环境控制、设备或过程控制、测量类消费电子产品等。与前一代产品不同,新的产品支持3V 5V的电压范围,使系统

9、设计更灵活、方便。而且新一代产品更便宜,体积更小。DS18b20内部结构主要由四部分组成:64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。2.3.2实验模拟电路图温度检测控制模拟电路图Ds18b20原件及其连线如图3 ,此温度传感器上显示的温度同步显示到LCD1602上,并有加温,减温按钮。图3温度检测控制模拟电路图2.3.3程序流程图图4主程序流程图图5 DS18B20初始化子程序流程图 图6 DS18B20读写的程序流程图2.4控制调节模块2.4.1升温调节系统 通过继电器的开合来控制加热片电路的通断,来达到设温效果,我们预设温度为25度,当温度低于25度时,单

10、片机P3.6引脚输出高电平,继电器导通,对温度传感器加热,加热模块如图7所示。图7 加温控制电路2.4.2温度上限调节系统 通过按键控制键选着调节对象,将设置好的温度上限实时显示显示在屏幕下方,如图8 图 8温度显示2.4.3 报警电路系统 通过蜂鸣器的鸣叫实现报警,如果温度超过上限蜂鸣器鸣叫,温度低于下限蜂鸣器鸣叫。如图9、10.图9 温度设定开关图10 报警模块 2.5显示模块通过采集DS18B20的温度,同步显示到LCD1602上,精确到小数点后第一位。如下图图11 温度显示界面通过2402记录超过设定值的温度,如下图:图12 记录超过设定值的温度显示界面 三、仿真后,部分显示成果图(1

11、3)显示当前温度图(14)温度高于温度上限,蜂鸣器鸣叫四、参考文献1 郭天祥.新概念51单片机C语音教程入门提高开发拓展攻略M.北 京:北京:电子工业出版社,2009.2 韩广兴.电子元器件与实用电路基础M.北京:电子工业出版社,2005.3 方大千,朱丽.电子控制系统装置制作入门M.北京:国防出版社,2006.4 刘向举,刘丽娜. 基于单片机的智能温度测控系统的设计J. 齐齐哈尔大 学学报(自然科学版). 2012(03)5 黄文力,邓小磊. DS18B20数字温度传感器接口程序的时序J. 仪器仪表 用户. 2011(06)6 黄晓林. 一种实用型智能恒温控制系统设计J. 自动化技术与应用.

12、 2011(11)7 王文,王直. 基于ARM和DS18B20的温度监测系统J. 电子设计工程. 2011(20)六、附录 6.1原理图6.2参考程序main.c文件:#include<reg51.h>#include"lcd.h"#include"temp.h"int LcdDisplay(int temp,int temp2);/* 函数名 : main* 函数功能 : 主函数* 输入 : 无* 输出 : 无*/ sbit key1=P14; sbit key2=P15; sbit bb=P21; void InitTimer0(void

13、) TMOD = 0x01; TH0 = 0x0FC; TL0 = 0x18; EA = 1; ET0 = 1; TR0 = 0;void main() int a,wd=2000;LcdInit(); /初始化LCD1602LcdWriteCom(0x88);/写地址 80表示初始地址LcdWriteData('C');key1=1;key2=1;InitTimer0(); while(1)a=LcdDisplay(Ds18b20ReadTemp(),wd);if(key1=0) Delay1ms(20); if(key1=0) wd=wd+100; if(key2=0) D

14、elay1ms(20); if(key2=0) wd=wd-100; if(a>wd) TR0=1; else TR0=0;/Delay1ms(1000);/1s钟刷一次/* 函数名 : LcdDisplay()* 函数功能 : LCD显示读取到的温度* 输入 : v* 输出 : 无*/int LcdDisplay(int temp,int temp2) /lcd显示 unsigned char datas = 0, 0, 0, 0, 0; /定义数组float tp; if(temp< 0)/当温度值为负数 LcdWriteCom(0x80);/写地址 80表示初始地址 LcdW

15、riteData('-'); /显示负/因为读取的温度是实际温度的补码,所以减1,再取反求出原码temp=temp-1;temp=temp;tp=temp;temp=tp*0.0625*100+0.5;/留两个小数点就*100,+0.5是四舍五入,因为C语言浮点数转换为整型的时候把小数点/后面的数自动去掉,不管是否大于0.5,而+0.5之后大于0.5的就是进1了,小于0.5的就/算由?.5,还是在小数点后面。 else LcdWriteCom(0x80);/写地址 80表示初始地址 LcdWriteData('+'); /显示正tp=temp;/因为数据处理有小

16、数点所以将温度赋给一个浮点型变量/如果温度是正的那么,那么正数的原码就是补码它本身temp=tp*0.0625*100+0.5;/留两个小数点就*100,+0.5是四舍五入,因为C语言浮点数转换为整型的时候把小数点/后面的数自动去掉,不管是否大于0.5,而+0.5之后大于0.5的就是进1了,小于0.5的就/算加上0.5,还是在小数点后面。datas0 = temp / 10000;datas1 = temp % 10000 / 1000;datas2 = temp % 1000 / 100;datas3 = temp % 100 / 10;datas4 = temp % 10; LcdWrit

17、eCom(0x82); /写地址 80表示初始地址LcdWriteData('0'+datas0); /百位 LcdWriteCom(0x83); /写地址 80表示初始地址LcdWriteData('0'+datas1); /十位LcdWriteCom(0x84);/写地址 80表示初始地址LcdWriteData('0'+datas2); /个位 LcdWriteCom(0x85);/写地址 80表示初始地址LcdWriteData('.'); /显示 .LcdWriteCom(0x86); /写地址 80表示初始地址LcdW

18、riteData('0'+datas3); /显示小数点 LcdWriteCom(0x87); /写地址 80表示初始地址LcdWriteData('0'+datas4); /显示小数点if(temp2>0) LcdWriteCom(0x80+0x47); LcdWriteData('+'); LcdWriteData('0'+temp2/1000); LcdWriteData('0'+(temp2%1000)/100); LcdWriteData('.'); LcdWriteData(

19、9;0'+(temp2%1000)%100)/10);LcdWriteData('0'+temp2%10); else LcdWriteCom(0x80+0x47); LcdWriteData('-'); temp2=-temp2; LcdWriteData('0'+temp2/1000); LcdWriteData('0'+(temp2%1000)/100); LcdWriteData('.'); LcdWriteData('0'+(temp2%1000)%100)/10);LcdWrit

20、eData('0'+temp2%10); return(temp);void Timer0Interrupt(void) interrupt 1 TH0 = 0x0FC; TL0 = 0x18; bb=bb;DS18B20.h文件:#ifndef _TEMP_H_#define _TEMP_H_/* 函数名 : Delay1ms* 函数功能 : 延时函数* 输入 : 无* 输出 : 无*/void Delay1ms(unsigned int y)unsigned int x;for(y;y>0;y-)for(x=110;x>0;x-);/* 函数名 : Ds18b2

21、0Init* 函数功能 : 初始化* 输入 : 无* 输出 : 初始化成功返回1,失败返回0*/unsigned char Ds18b20Init()unsigned int i;DSPORT=0; /将总线拉低480us960usi=70;while(i-);/延时642usDSPORT=1;/然后拉高总线,如果DS18B20做出反应会将在15us60us后总线拉低i=0;while(DSPORT)/等待DS18B20拉低总线i+;if(i>5000)/等待>5MSreturn 0;/初始化失败return 1;/初始化成功/* 函数名 : Ds18b20WriteByte* 函

22、数功能 : 向18B20写入一个字节* 输入 : com* 输出 : 无*/void Ds18b20WriteByte(unsigned char dat)unsigned int i,j;for(j=0;j<8;j+)DSPORT=0;/每写入一位数据之前先把总线拉低1usi+;DSPORT=dat&0x01; /然后写入一个数据,从最低位开始i=6;while(i-); /延时68us,持续时间最少60usDSPORT=1;/然后释放总线,至少1us给总线恢复时间才能接着写入第二个数值dat>>=1;/* 函数名 : Ds18b20ReadByte* 函数功能 :

23、 读取一个字节* 输入 : com* 输出 : 无*/unsigned char Ds18b20ReadByte()unsigned char byte,bi;unsigned int i,j;for(j=8;j>0;j-)DSPORT=0;/先将总线拉低1usi+;DSPORT=1;/然后释放总线i+;i+;/延时6us等待数据稳定bi=DSPORT; /读取数据,从最低位开始读取/*将byte左移一位,然后与上右移7位后的bi,注意移动之后移掉那位补0。*/byte=(byte>>1)|(bi<<7); i=4;/读取完之后等待48us再接着读取下一个数whi

24、le(i-);return byte;/* 函数名 : Ds18b20ChangTemp* 函数功能 : 让18b20开始转换温度* 输入 : com* 输出 : 无*/void Ds18b20ChangTemp()Ds18b20Init();Delay1ms(1);Ds18b20WriteByte(0xcc);/跳过ROM操作命令 Ds18b20WriteByte(0x44); /温度转换命令/Delay1ms(100);/等待转换成功,而如果你是一直刷着的话,就不用这个延时了 /* 函数名 : Ds18b20ReadTempCom* 函数功能 : 发送读取温度命令* 输入 : com* 输

25、出 : 无*/void Ds18b20ReadTempCom()Ds18b20Init();Delay1ms(1);Ds18b20WriteByte(0xcc); /跳过ROM操作命令Ds18b20WriteByte(0xbe); /发送读取温度命令/* 函数名 : Ds18b20ReadTemp* 函数功能 : 读取温度* 输入 : com* 输出 : 无*/int Ds18b20ReadTemp()int temp=0;unsigned char tmh,tml;Ds18b20ChangTemp(); /先写入转换命令Ds18b20ReadTempCom();/然后等待转换完后发送读取温度

26、命令tml=Ds18b20ReadByte();/读取温度值共16位,先读低字节tmh=Ds18b20ReadByte();/再读高字节temp=tmh;temp<<=8;temp|=tml;return temp;LCD.h文件:#ifndef _LCD_H_#define _LCD_H_/* 函 数 名 : Lcd1602_Delay1ms* 函数功能 : 延时函数,延时1ms* 输 入 : c* 输 出 : 无* 说 名 : 该函数是在12MHZ晶振下,12分频单片机的延时。*/void Lcd1602_Delay1ms(uint c) /误差 0us uchar a,b;f

27、or (; c>0; c-) for (b=199;b>0;b-) for(a=1;a>0;a-); /* 函 数 名 : LcdWriteCom* 函数功能 : 向LCD写入一个字节的命令* 输 入 : com* 输 出 : 无*/#ifndef LCD1602_4PINS /当没有定义这个LCD1602_4PINS时void LcdWriteCom(uchar com) /写入命令LCD1602_E = 0; /使能LCD1602_RS = 0; /选择发送命令LCD1602_RW = 0; /选择写入LCD1602_DATAPINS = com; /放入命令Lcd160

28、2_Delay1ms(1);/等待数据稳定LCD1602_E = 1; /写入时序Lcd1602_Delay1ms(5); /保持时间LCD1602_E = 0;#else void LcdWriteCom(uchar com) /写入命令LCD1602_E = 0; /使能清零LCD1602_RS = 0; /选择写入命令LCD1602_RW = 0; /选择写入LCD1602_DATAPINS = com;/由于4位的接线是接到P0口的高四位,所以传送高四位不用改Lcd1602_Delay1ms(1);LCD1602_E = 1; /写入时序Lcd1602_Delay1ms(5);LCD1602_E = 0;/Lcd1602_Delay1ms(1);LCD1602_DATAPINS = com << 4; /发送低四位Lcd1602_Delay1ms(1);LCD1602_E = 1; /写入时序Lcd1602_Delay1ms(5);LCD1602_E = 0;#endif/* 函 数 名 : LcdWriteData* 函数功能 : 向LCD写入一个字节的数据* 输 入 : dat* 输 出 : 无*/ #ifndef LCD1602_4PINS void LcdWriteData(uchar

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论