智能温度控制系统毕业设计论文.doc_第1页
智能温度控制系统毕业设计论文.doc_第2页
智能温度控制系统毕业设计论文.doc_第3页
智能温度控制系统毕业设计论文.doc_第4页
智能温度控制系统毕业设计论文.doc_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

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

文档简介

目 录引 言11 系统的相关介绍21.1 系统的目的及意义21.2 设计要求21.3 系统传感器ds18b20的介绍21.3.1 ds18b20的主要特性21.3.2 ds18b20的外形和内部结构3 2 系统分析设计42.1 温度控制系统结构图及总述42.2 系统显示界面方案42.3 系统输入方案52.4系统的功能53 相关软件编译知识介绍53.1 c语言简介53.1.1 c语言的优点53.1.2 c语言缺点63.2 keil简介63.2.1 系统概述63.2.2 keil c51单片机软件开发系统的整体结构74系统流程图设计74.1主程序流程图74.2 ds18b20控制程序流程图84.2.1 ds18b20 复位程序流程图94.2.2 ds18b20写数据程序流程图94.2.3 ds18b20读数据程序流程图104.3 温度读取及转换程序流程图124.4 max7219驱动程序流程图134.4.1 max7219写入一个字节数据程序流程图134.4.2 max7219写入一个字数据程序流程图15 4.5 数码管温度显示程序流程图164.6 按键中断服务程序流程图17 5 电路仿真195.1 proteus软件介绍195.2 温度控制系统proteus仿真196总结207参考文献21附录1 源程序代码22 引 言信息采集(即传感器技术)、信息传输(通信技术)、信息处理(计算机技术)。传感器属于信息技术的前沿尖端产品,尤其是温度传感器被广泛用于工农业生产、科学研究和生活等领域,数量高居各种传感器之首。近百年来,温度传感器的发展大致经历了以下三个阶段;(1)传统的分立式温度传感器(含敏感元件);(2)模拟集成温度传感器/控制器;(3)智能温度传感器。目前,国际上新型温度传感器正从由集成化向智能化、网络化的方向发展。 下面介绍的就是两种最常见的温度传感器: (1)集成温度传感器模拟集成温度传感器。集成传感器是将温度传感器集成在一个芯片上、可完成温度测量及模拟信号输出功能的专用ic。模拟集成温度传感器的主要特点是功能单一(仅测量温度)、测温误差小、价格低、响应速度快、传输距离远、体积小、微功耗等,适合远距离测温、控温,不需要进行非线性校准,外围电路简单。它是目前在国内外应用最为普遍的一种集成传感器,典型产品有ad590、ad592、tmp17、lm135等。某些增强型集成温度控制器(例如tc652/653)中还包含了a/d转换器以及固化好的程序,这与智能温度传感器有某些相似之处。但它自成系统,工作时并不受微处理器的控制,这是二者的主要区别。 (2)智能温度传感器智能温度传感器(亦称数字温度传感器)是20世纪90年代中期微电子技术、计算机技术和自动测试技术的结晶。智能温度传感器内部都包含温度传感器、a/d转换器、信号处理器、存储器(或寄存器)和接口电路。有的产品还带多路选择器、中央控制器(cpu)、随机存取存储器(ram)和只读存储器(rom)。智能温度传感器的特点是能输出温度数据及相关的温度控制量,适配各种微控制器(mcu);并且它是在硬件的基础上通过软件来实现测试功能的,其智能化程度也取决于软件的开发水平。智能温度传感器正朝着高精度、多功能、总线标准化、高可靠性及安全性、开发虚拟传感器和网络传感器、研制单片测温系统等高科技的方向迅速发展。 1 系统的相关介绍1.1 系统的目的及意义温度检测控制系统广泛应用于社会生活的各个领域,如家电、汽车、材料、电力电子等,常用的控制电路根据应用场合和所要求的性能指标有所不并且当扰动因素不明确时,参数调整不便仍是普遍存在的问题。采用数字温度传感器ds18b20,因其内部集成了a/d转换器,使得电路结构更加简单,而且减少了温度测量转换时的精度损失,使得测量温度更加精确。数字温度传感器ds18b20只用一个引脚即可与单片机进行通信,大大减少了接线的麻烦,使得单片机更加具有扩展性。由于ds18b20芯片的小型化,更加可以通过单跳数据线就可以和主电路连接,故可以把数字温度传感器ds18b20做成探头,探入到狭小的地方,增加了实用性。更能串接多个数字温度传感器ds18b20进行范围的温度检测。因此温度监测是生产自动化的重要任务。因而本设计具有非常实际的生产意义。 1.2 设计要求本设计是基于单片机stc89c52的温度控制。它实现的是温度的监测和控制功能。 可设置报警温度。本设计用ds18b20传感器来检测温度,led用于显示。max7219用来驱动数码显示。设计先通过keil和proteus来联合仿真,然后焊接实物。具体设计要求如下:(1) 使用stc89c52控制器和ds18b20温度传感器,实现温度的检测和显示;(2) 设置默认报警温度为500c,并且能够通过按键设置调高调低报警温度;(3) 当温度高于报警温度时报警灯亮,低于报警温度时控制电阻丝加热;(4) 四位数码管能通过按键交换显示实测温度和报警温度。1.3 系统传感器ds18b20的介绍1.3.1 ds18b20的主要特性 (1) 适应电压范围更宽,电压范围:3.05.5v,在寄生电源方式下可由数据线供电。 (2) 独特的单线接口方式,ds18b20在与微处理器连接时仅需要一条口线即可实现微处理器与ds18b20的双向通讯。 (3) ds18b20支持多点组网功能,多个ds18b20可以并联在唯一的三线上,实现组网多点测温。 (4)ds18b20在使用中不需要任何外围元件,全部 传感元件及转换电路集成在形如一只三极管的集成电路内. (5)温范围55+125,在-10+85时精度为0.5 (6)可编程 的分辨率为912位,对应的可分辨温度分别为0.5、0.25、0.125和0.0625,可实现高精度测温。 (7)在9位分辨率时最多在 93.75ms内把温度转换为数字,12位分辨率时最多在750ms内把温度值转换为数字,速度更快。 (8)测量结果直接输出数字温度信号,以一 线总线串行传送给cpu,同时可传送crc校验码,具有极强的抗干扰纠错能力。 (9)负压特性:电源极性接反时,芯片不会因发热而烧毁, 但不能正常工作。 1.3.2 ds18b20的外形和内部结构 ds18b20内部结构主要由四部分组成:64位光刻rom 、温度传感器、非挥发的温度报警触发器th和tl、配置寄存器。ds18b20的外形及管脚排列如下图1.3.2.1: 图1.3.2.1 ds18b20的外形及管脚排列 2 系统分析设计 2.1 温度控制系统结构图及总述本设计实际上是模仿饮水机的工作原理。它是采用ds18b20温度传感器测试环境温度,经过cpu数据处理,用led数码管来显示温度。该设计可设置预期温度。当温控开关打开时,若测得环境温度低于设定温度,则继电器吸合,启动电热丝工作;若测得环境温度高于设定温度,则继电器释放,电热丝停止工作。 时钟电路按键设定电路温度传感器电路led显示电路报警信号灯控制电路继电器控制电路单片机(89c52)主控制器 图2.1.1系统总框图 2.2 系统显示界面方案该系统要求完成温度的显示以及按键操作时的实时显示功能。基于上述原因,本次设计考虑了两种方案:方案一:完全采用lcd液晶显示。这种方案显示精确,可方便的显示各种英文字符,温度符号,正负号等,但实现复杂,且须完成大量的软件工作。方案二:完全采用数码管显示。这种方案优点是实现简单。缺点是功能较少,只能显示有限的符号和数码字符。根据本设计的要求,方案二已经满足了要求,所以本次设计采用方案二以实现系统的显示功能。2.3 系统输入方案这里同样讨论了两种方案:方案一:采用8155扩展i/o口、键盘及显示等。该方案的优点是使用灵活可编程,并且有ram及计数器。若用该方案,可提供较多i/o口,但操作起来稍显复杂。方案二:直接在i/o口线上接上按键开关。因为设计时精简和优化了电路,所以剩余的端口资源还比较多。 由于该系统是对设定报警温度的控制,只需用单片机本身的i/o口就可实现,且本身的计数器及ram已经够用,故选择方案二。 2.4系统的功能 能完成对系统温度的监测及控制,并且能够对被控现场的温度进行智能调节,以保持被控现场温度基本不变。该系统如果应用于现实生活具有很强的实用意义。 3 相关软件编译知识介绍 3.1 c语言简介 c语言是一种计算机程序设计语言。它既具有高级语言的特点,又具有汇编语言的特点。它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。它的应用范围广泛,具备很强的数据处理能力,不仅仅是在软件开发上,而且各类科研都需要用到c语言 。具体应用比如单片机以及嵌入式系统开发。3.1.1 c语言的优点 c语言现在被广泛应用于单片机以及嵌入式系统的开发,它具有如下一些优点: (1) 简洁紧凑、灵活方便; (2) 运算符丰富; (3) 数据类型丰富 ; (4) c是结构式语言; (5) 语法限制不太严格,程序设计自由度大; (6) 允许直接访问物理地址,对硬件进行操作; (7) 生成目标代码质量高,程序执行效率高; (8) 适用范围大,可移植性好 。 3.1.2 c语言缺点c语言是一种较汇编语言高级的语言,但相对于汇编这种直接面向机器的语言来说,它的处理效率较会变低。3.2 keil简介keil c51是美国keil software公司出品的51系列兼容单片机c语言软件开发系统,与汇编相比,c语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。keil提供了包括c编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uvision)将这些部分组合在一起。运行keil软件需要win98、nt、win2000、winxp等操作系统。如果你使用c语言编程,那么keil几乎就是你的不二之选,即使不使用c语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。3.2.1 系统概述keil c51软件提供丰富的库函数和功能强大的集成开发调试工具,全windows界面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到keil c51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。下面详细介绍keil c51开发系统各部分功能和使用。 3.2.2 keil c51单片机软件开发系统的整体结构 c51工具包的整体结构,uvision与ishell分别是c51 for windows和for dos的集成开发环境(ide),可以完成编辑、编译、连接、调试、仿真等整个开发流程。开发人员可用ide本身或其它编辑器编辑c或汇编源文件。然后分别由c51及c51编译器编译生成目标文件(.obj)。目标文件可由lib51创建生成库文件,也可以与库文件一起经l51连接定位生成绝对目标文件(.abs)。abs文件由oh51转换成标准的hex文件,以供调试器dscope51或tscope51使用进行源代码级调试,也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如eprom中。 4系统流程图设计软件总体设计主要完成各部分的软件控制和协调。本系统主程序模块主要完成的工作是对系统的初始化,发送显示数据,同时对键盘进行扫描,等待外部中断,以及根据所需要的功能进行相应的操作。4.1主程序流程图 本设计是模拟温度控制系统,主程序通过调用读取温度子程序和显示子程序,来实时扫描并显示系统温度;并通过调用温度控制子程序将测得的温度与系统所设的报警温度比较进而对温度进行控制。通过扫描中断口检查是否有按键按下,调用相应的按键扫描子程序来进行对应的设置。主程序如下:void main(void)ea=1; /开中断总开关ex0=1; /允许int0中断it0=1; /下降沿产生中断text_rst();/第一次使用数码管测试while(1)t_current=gettemperature(); /温度值传给t_timetemperature_display(t_current);/显示温度if(t_current0; i-) dq = 0; dq = dat&0x01; delay(10); dq = 1; dat=1; 开始循环控制变量i=8 i=0? y ndq=dat&0x01延时dq=1dat=1结束图4.2.2 ds18b20写数据程序流程图 4.2.3 ds18b20读数据程序流程图ds18b20读数据程序流程图如图4.2.3所示。ds18b20读数据程序如下: ds18b20read(void) /读ds18b20的程序 unsigned char i=0; unsigned char dat = 0; for (i=8;i0;i-) dq = 0; dat=1; dq = 1; if(dq) dat|=0x80; delay(8); return(dat); 开始 循环控制变量i=8dat=0 i=0? y ndq=0;dat1;dq=1 y dq=1? ndat|=0x80延时返回dat 值结束图4.2.3 ds18b20读数据程序流程图4.3 温度读取及转换程序流程图温度读取及转换流程图如图4.3.1所示。温度读取及转换具体程序如下: gettemperature(void) /从ds18b20中读出两个字节的温度数据 uchar symbol; unsigned int temperature; unsigned char a=0; unsigned char b=0; unsigned int t=0; ds18b20rst(); ds18b20write(0xcc); ds18b20write(0x44); ds18b20rst(); ds18b20write(0xcc); ds18b20write(0xbe); a=ds18b20read(); b=ds18b20read(); t=b; t=8; /进行精度转换 t=t|a; if(t0x0fff)symbol=0; else t=t+1; symbol=1; temperature=t*0.625; if(symbol=1) temperature=-temperature; return(temperature); 开始ds18b20初始化启动温度转换读取当前实际温度值处理读取的温度值y 温度大于0? n 符号标志为0 符号为1,按正温度处理 返回处理后的温度值 结束图4.3.1 温度读取及转换程序流程图4.4 max7219驱动程序流程图4.4.1 max7219写入一个字节数据程序流程图写入一个字节数据程序流程图如图4.4.1所示。 开始 循环控制变量i=8 code1=ch&0x80 ch=ch1 code1=1? y din=1,给上升沿 n din=0,给上升沿 结束 图4.4.1 max7219写入一个字节数据程序流程图 具体程序如下: void write_byte(uchar ch) uchar i,code1; _nop_(); _nop_(); _nop_(); for(i=0;i8;i+) code1=ch&0x80; ch=ch1; if(code1) din=1; clk=0; clk=1; else din=0; clk=0; clk=1; 4.4.2 max7219写入一个字数据程序流程图写入一个字节数据程序流程图如图4.4.1所示。开始load=0延时写地址延时写数据延时load=1结束图4.4.2 max7219写入一个字数据程序流程图 具体程序如下: void write7219(uchar addr,uchar number) load=0; _nop_(); _nop_(); _nop_(); write_byte(addr); _nop_(); _nop_(); _nop_(); write_byte(number); _nop_(); _nop_(); _nop_(); load=1; 4.5 数码管温度显示程序流程图数码管温度显示程序流程图如图4.5.1所示。具体程序如下: temperature_display(int temperature_x) uchar symbol; if(temperature_x0) symbol=1; temperature_x=-temperature_x; else symbol=0; switch(symbol) case 0:disbuffer0=0x0f;break; case 1:disbuffer0=0x0a;break; disbuffer1=temperature_x/100; disbuffer2=(temperature_x%100)/10; disbuffer2=disbuffer2|0x80; disbuffer3=temperature_x%10; if(disbuffer1=0x00) disbuffer1=0x0f; write7219(0x01,disbuffer0); write7219(0x02,disbuffer1); write7219(0x03,disbuffer2); write7219(0x04,disbuffer3); 开始 温度小于0? y symbol=1 nsymbol=0显示符号位显示十位显示个位显示小数位结束图4.5.1 数码管温度显示程序流程图4.6 按键中断服务程序流程图按键中断服务程序流程图如图4.6.1所示。具体程序如下: int0() interrupt 0 using 0 temperature_display(t_original); key_v = 0x07; for(;) if(key() delayms(10); if(key() key_v = key_s; if(key_v & 0x01) = 0) t_original=10+t_original; temperature_display(t_original); else if(key_v & 0x02) = 0) t_original=t_original-10; temperature_display(t_original); else if(key_v & 0x04) = 0) goto exit; exit:temperature_display(t_current); 中断入口 k1键按下? y 报警温度加一, 显示报警温度 n k2键按下? y 报警温度减一, 显示报警温度 nk3键按下退出按键程序,显示当前温度中断返回图4.6.1 按键中断服务程序流程图 5 电路仿真5.1 proteus软件介绍proteus软件是labcenter electronics公司的一款电路设计与仿真软件,它包括isis、ares等软件模块,ares模块主要用来完成pcb的设计,而isis模块用来完成电路原理图的布图与仿真。proteus的软件仿真基于vsm技术,它与其他软件最大的不同也是最大的优势就在于它能仿真大量的单片机芯片,比如mcs-51系列、pic系列等等,以及单片机外围电路,比如键盘、led、lcd等等。通过proteus软件的使用我们能够轻易地获得一个功能齐全、实用方便的单片机实验室。5.2 温度控制系统proteus仿真系统仿真图如图5.2.1所示。 图5.2.1 系统仿真图 6总结用单片机实现系统温度控制,可以使我们的生活方便快捷。这项看起来不需要多少技术的工作却是非常需要耐心和精力,几天的设计对我们来说的意义,不仅仅是让我们把所学的理论知识与实践相结合起来,还提高了我们的实际动手能力和独立思考的能力,更重要的是团队合作,虽然我们这次设计仓促,制作有些简单,但我们得到了很多远大于设计的东西!通过这次课程设计,使我得到了一次用专业知识、专业技能分析和解决问题全面的系统的锻炼。使我在单片机的基本原理、单片机应用系统开发过程,以及在常用编程设计思路技巧,特别是对于c语言的掌握方面都能向前迈了一大步,为日后成为合格的应用型人才打下良好的基础。该设计虽然结束了,但由于时间、设备、条件和水平等各方面因素,还存在一些不足,还需要不断改进,当然也就需要学习并运用更多相关的知识。在以后我会更加深入研究单片机,相信在不久的将来我会通过自己的努力亲手做出一个实用的产品出来。7参考文献【1】王静霞.单片机应用技术.电子工业出版社,2009【2】何立民.单片机高等教程.北京航空航天大学出版社,2000 【3】何立民.单片机应用系统设计系统配置与接口技术.北京航空航天大学出版社, 2001【4】李静.51单片机c语言程序设计.人民邮电出版社,2010【5】李群芳等.单片微机计算机与接口技术.电子工业出版社,2008附录1 源程序代码/规定默认设定温度为t0=40度,k0键为开始设置键,k1键为加一度键,k2键为减一度键#include#include#define uchar unsigned char/max7219端口定义sbit din=p20;sbit clk=p21;sbit load=p22;sbit jidianqi=p24;/继电器接口sbit k0=p32;sbit k1=p25;sbit k2=p26;sbit k3=p27;sbit dq =p13; /ds18b20定义单片机数据引脚 sbit alarm=p23; uchar disbuffer4=0,0,0,0;unsigned int t_original=500; / 规定默认设定温度为t0=40度unsigned int t_current;unsigned char key_s, key_v;void delay(unsigned int i) /延时程序 while(i-); ds18b20rst(void) /ds18b20复位初始化 unsigned char x=0; dq = 1; delay(16); dq = 0; delay(160); dq = 1; delay(28); x=dq; delay(40);ds18b20read(void) /读ds18b20的程序 unsigned char i=0; unsigned char dat = 0; for (i=8;i0;i-) dq = 0; dat=1; dq = 1; if(dq) dat|=0x80; delay(8); return(dat);ds18b20write(unsigned char dat) /写ds18b20的子程序 unsigned char i=0; for (i=8; i0; i-) dq = 0; dq = dat&0x01; delay(10); dq = 1; dat=1; gettemperature(void) /从ds18b20中读出两个字节的温度数据 uchar symbol; unsigned int temperature; unsigned char a=0; unsigned char b=0; unsigned int t=0; ds18b20rst(); ds18b20write(0xcc); ds18b20write(0x44); ds18b20rst(); ds18b20write(0xcc); ds18b20write(0xbe); a=ds18b20read(); b=ds18b20read(); t=b; t=8; /进行精度转换 t=t|a; if(t0x0fff)symbol=0; else t=t+1; symbol=1; temperature=t*0.625; if(symbol=1) temperature=-temperature; return(temperature); /*向max7219写入一个字节数据*/void write_byte(uchar ch) uchar i,code1; _nop_(); _nop_(); _nop_(); for(i=0;i8;i+) code1=ch&0x80; ch=ch1; if(code1) din=1; clk=0; clk=1; else din=0; clk=0; clk=1; /*向max7219写入一个字(16位)*/void write7219(uchar addr,uchar number) load=0; _nop_(); _nop_(); _nop_(); write_byte(addr); _nop_(); _nop_(); _nop_(); write_byte(numb

温馨提示

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

评论

0/150

提交评论