还剩21页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
温度控制系统摘要:随着微机测量和控制技术的迅速发展与广泛应用,以单片机为核心的温度采集与控制系统的研发与应用在很大程度上提高了生产生活中对温度的控制水平本设计论述了一种以STC89C52单片机为主控制单元,以DS18B20为温度传感器的温度控制系统该控制系统可以实时存储相关的温度数据并记录当前的时间系统设计了相关的硬件电路和相关应用程序硬件电路主要包括STC89C52单片机最小系统,测温电路、实时时钟电路、LCD液晶显示电路以及通讯模块电路等系统程序主要包括主程序,读出温度子程序,计算温度子程序、LCD显示程序以及数据存储程序等关键词STC89C52DS18B20,LCDAbstract:Alongwiththecomputermeasurementandcontroltechnologyoftherapiddevelopmentandwideapplicationbasedonsinglechiptemperaturegatheringandcontrolsystemdevelopmentandapplicationgreatlyimprovetheproductionoftemperatureinlifelevelofcontrol.ThisdesignSTC89C52describesakindofmainlybyMCUcontrolunitfortemperaturesensorDS18B20temperaturecontrolsystem.Thecontrolsystemcanreal-timestoragetemperaturedataandrecordrelatedtothecurrenttime.Systemdesignrelatedhardwarecircuitandrelatedapplications.STC89C52microcontrollerhardwarecircuitincludetemperaturedetectioncircuitsmallestsystemandreal-timeclockcircuitLCDdisplaycircuitcommunicationmodulecircuitetc.SystemprogrammingmainlyincludemainprogramreadtemperaturesubroutinethecalculationoftemperaturesubroutinesLCDdisplayproceduresanddatastorageproceduresetc.Keywords:STC89C52DS18B20,LCD目录TOC\o1-3\h\u1前言12总体方案设计
22.1方案设计
22.2方案论证
32.3方案选择33单元模块的设计
43.1单片机模块
43.218B20温度模块
53.3显示器模块64软件设计
74.1系统总框图
74.2温度采集子程序85系统功能与调试方法介绍
95.1系统功能
2.1方案设计方案一采用热敏电阻作为温度检测模块,热敏电阻是半导体材料,随着温度的改变,其阻值也不一样,因此可作为温度检测传感器方案二采用DS18B20作为温度传感器采集温度,18B20是总线结构,结构简单精度高其原理如下图G�图
2.1数字温度计原理图
2.2方案论证方案一这种方法电路设计比较困难,电阻值的改变要通过电压反映,电压要用AD采集,输出的数字量再转化成温度,设计较复杂方案二这种方法实现起来比较容易,传感器可以和单片机直接进行通信,将电压采集回来,电路简单,精度较高
2.3方案选择通过上述论证比较,我们最终选择方案二方案二通过单片机输出通过简单可行的时序指令给18B20,18B20将温度采样量化后直接传给单片机,单片机再做简单的处理后将温度计算出来,最后将温度显示出来通过简单可行的方法完成了设计,不仅成本低廉,而且可以方便的显示当前工作状态本方案较圆满的完成了设计的要求3单元模块的设计
3.1单片机模块本次设计选用的单片机芯片是STC89C52单片机STC89C52是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器STC89C52使用经典的MCS-51内核,但做了很多的改进使得芯片具有传统51单片机不具备的功能在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案STC89C52中有一个用于构成内部振荡器的高增益反相放大器,引脚XTAL1和XTAL2分别是该放大器的输入端和输出端这个放大器与作为反馈元件的片外石英晶休或陶瓷谐振器一起构成自激振荡器外接石英晶体或陶瓷诺振器及电容C1C2接在放大器的反馈回路中构成并联振荡电路对外接电容C1C2虽然没有十分严格的要求,但电容容量的大小会轻微影响振荡频率的高低、振荡器工作的稳定性、起振的难易程序及温度稳定性,这里选择使用石英晶休,我们的电容使用22pF如使用陶瓷谐振器的话,应选择40pF士10pF的容值的电容也可以采用外部时钟采用外部时钟的电路的情况时,外部时钟脉冲接到XTAL1端,即内部时钟发生器的输入端,XTAL2则悬空图
3.1单片机最小系统
(1)主电源引脚(2根)VCCPin40电源输入,接+5V电源GNDPin20接地线
(2)外接晶振引脚(2根)XTAL1Pin19片内振荡电路的输入端XTAL2Pin20片内振荡电路的输出端
(3)控制引脚(4根)RST/VPPPin9复位引脚,引脚上出现2个机器周期的高电平将使单片机复位ALE/PROGPin30地址锁存允许信号PSENPin29外部存储器读选通信号EA/VPPPin31程序存储器的内外部选通,接低电平从外部程序存储器读指令,如果接高电平则从内部程序存储器读指令
(4)可编程输入/输出引脚(32根)AT89S51单片机有4组8位的可编程I/O口,分别位P
0、P
1、P
2、P3口,每个口有8位(8根引脚),共32根每一根引脚都可以编程PO口(Pin39~Pin32)8位双向I/O口线,名称为P
0.0~P
0.7P1口(Pin1~Pin8)8位准双向I/O口线,名称为P
1.0~P
1.7P2口(Pin21~Pin28)8位准双向I/O口线,名称为P
2.0~P
2.7P3口(Pin10~Pin17)8位准双向I/O口线,名称为P
3.0~P
3.
73.218B20温度模块本次试验选择的温度传感器是DS18B20,DS18B20温度传感器是美国达拉斯DALLAS半导体公司推出的应用单总线技术的数字温度传感器该器件将半导体温敏器件、A/D转换器、存储器等做在一个很小的集成电路芯片上本设计中温度传感器之所以选择单线数字器件DS18B20,是在经过多方面比较和考虑后决定的,主要有以下几方面的原因
(1)系统的特性测温范围为-55℃~+125℃,测温精度为士
0.5℃;温度转换精度9~12位可变,能够直接将温度转换值以16位二进制数码的方式串行输出;12位精度转换的最大时间为750ms;可以通过数据线供电,具有超低功耗工作方式
(2)系统成本由于计算机技术和微电子技术的发展,新型大规模集成电路功能越来越强大,体积越来越小,而价格也越来越低一支DS18B20的体积与普通三极管相差无几,价格只有十元人民币左右
(3)系统复杂度由于DS18B20是单总线器件,微处理器与其接口时仅需占用1个I/O端口且一条总线上可以挂接几十个DS18B20,测温时无需任何外部元件,因此,与模拟传感器相比,可以大大减少接线的数量,降低系统的复杂度,减少工程的施工量
(4)系统的调试和维护由于引线的减少,使得系统接口大为简化,给系统的调试带来方便同时因为DS18B20是全数字元器件,故障率很低,抗干扰性强,因此,减少了系统的日常维护工作DS18B20温度传感器只有三根外引线单线数据传输总线端口DQ,外供电源线VDD,共用地线GNDDS18B20有两种供电方式一种为数据线供电方式,此时VDD接地,它是通过内部电容在空闲时从数据线获取能量,来完成温度转换,相应的完成温度转换的时间较长这种情况下,用单片机的一个I/O口来完成对DS18B20总线的上拉另一种是外部供电方式VDD接+5V,相应的完成温度测量的时间较短电路如图
3.2图
3.2温度传感器接口
3.3显示器模块显示模块采用LCD1602液晶显示器LCD1602液晶模块内部的字符发生存储器已经存储了160个不同的点阵字符图形,每一个字符都有一个固定的代码,因此使用简单,显示效果良好电路如图
3.3图
3.31602显示接口4软件设计
4.1系统总框图G�上电复位图
4.1系统总框图
4.2温度采集子程序G�发送温度读取指令图
4.2按键子程序框图5系统功能与调试方法介绍
5.1系统功能该系统能够准确的检测到环境温度,精度达到两位小数,反应迅速,测量范围广泛,出错率低
5.2系统指标温度判断结果显示指示25度低于安全值LOW35度处于安全范围SUIT45度高于安全值HIGH
5.3系统调试单片机发送初始化时序,使传感器初始化,然后再发送温度采集指令,采集完毕后给单片机返回结束信号,单片机开始读取温度信息,进行转换后显示出来硬件调试时,主要是给单片机上电,检查各部分电路是否正常,是否存在虚焊的情况各器件逻辑连接是否正确软件调试时先搭建程序框架,先写ds18b20程序,检测其是否能够将温度采集出来,调试该部分可用串口将数据传送到电脑上来,观察是否正确温度采集正确后,调试LCD1602显示模块,将数据显示到该显示器上最后将判断语句加上,其运行状态显示到1602上6参考文献
[1]徐爱钧,智能化测量控制仪表原理与设计,北京航空航天大学出版社,2004
[2]徐爱钧,KeilCx51V
7.0单片机高级语言编程与uVision2应用实践,电子工业出版社,
2004.
[3]刘乐善.微型计算机接口技术及应用[M].北京北京航空航天大学出版社,
2001.258~
264.
[4]童诗白.模拟电路技术基础[M].北京高等教育出版社,
2000.171~
202.
[5]杜华.任意波形发生器及应用[J].国外电子测量技术,
2005.138~
40.
[6]张友德.单片微型机原理、应用与实践[M].上海复旦大学出版社,
2004.40~
44.
[7]程朗.基于8051单片机的双通道波形发生器的设计与实现[J].计算机工程与应用,
2004.8100~
103.
[8]张永瑞.电子测量技术基础[M].西安西安电子科技大学出版社,
2006.61~
101.
[9]李叶紫.MCS-51单片机应用教程[M].北京清华大学出版社,
2004.232~
238.
[10]周润景等,基于PROTEUS的电路的及单片机系统设计与仿真,北京航空航天大学出版社,2006附录1相关设计图附录2元器件清单表序号元件名称型号参数封装数量1单片机AT89C51PDIP12温度传感器Ds18b20TO-9213电阻10K色环44底座40脚15晶振
11.0592M16陶瓷电容22pf27电解电容10uf18排针409排线25101602液晶QC1602A1附录3源程序#includeREGX
52.H#include
1602.h#include18b
20.h#defineucharunsignedchar#defineuintunsignedintsbittem_high=P1^0;sbittem_low=P1^1;ucharcodetable1[]={Temp:};//LCD第一行显示ucharcodetable2[]={zhaungtai:};//LCD第二行显示ucharcodetable3[]={0123456789};ucharcodehigh[]={high!};ucharcodelow[]={low!!};ucharcodesuit[]={suit!};uintsdate;//测量到的温度的整数部分uintgeweishiwei;ucharxiaoshu1;//小数第一位ucharxiaoshu2;//小数第二位inti;voidmain{init;//初始化18b20函数SET_int;//初始化1602;xianshitable15table210;while1{readtemp;SET_code0x80+6;SET_data+;SET_code0x80+7;SET_datatable3[shiwei];SET_code0x80+8;SET_datatable3[gewei];SET_code0x80+9;SET_data.;SET_code0x80+10;SET_datatable3[xiaoshu1];SET_code0x80+11;SET_datatable3[xiaoshu2];ifsdate40{SET_code0x80+0x40+11;fori=0;i5;i++SET_datahigh[i];tem_high=0;tem_low=1;}elseifsdate30{SET_code0x80+0x40+11;fori=0;i5;i++SET_datalow[i];tem_low=0;tem_high=1;}else{SET_code0x80+0x40+11;fori=0;i5;i++SET_datasuit[i];tem_low=1;tem_high=1;}}}#includeREGX
52.H#include
1602.h/****************************************/void_delay_msintms{intij;fori=111;i0;i--forj=0;jms;j++;}/*********写指令***********************参数为l602指令查数据手册***/voidSET_codeintcom//写指令{W_code;P2=com;_delay_ms5;EN=1;//LCDEN;_delay_ms5;NLCDEN;}voidSET_dataintmydata//写数据{W_data;P2=mydata;_delay_ms5;LCDEN;_delay_ms5;NLCDEN;}voidSET_int//初始化1602;{LCDEN;SET_code0x38;//设置显示模式SET_code0x0C;//设置开显示不显光标SET_code0x06;//写一个字符后地址指针自动加1SET_code0x01;//清屏}/*********显示函数***********************参数X,Y为第一行和第二行要显示字符串首地址m,n为字符串长度***/voidxianshichar*Xintmchar*Yintn{inti;SET_code0x80;//第一行首地址fori=0;im;i++SET_dataX[i];SET_code0x80+0x40;//第二行首地址fori=0;in;i++SET_dataY[i];}/*********显示函数***********************参数X,为第一行要显示字符串首地址m为字符串长度n为显示到第几格的位置***/voidxianshi_onechar*Xintmintn{inti;SET_code0x80+n;//第一行首地址fori=0;im;i++SET_dataX[i];}voidxianshi_twochar*Xintmintn{inti;SET_code0x80+40+n;//第二行首地址fori=0;im;i++SET_dataX[i];}#includeREGX
52.H#include18b
20.huchartempL=0;//设全局变量uchartempH=0;externuintsdate;//测量到的温度的整数部分externuintgeweishiwei;externucharxiaoshu1;//小数第一位externucharxiaoshu2;//小数第二位ucharxiaoshu;//两位小数sbitds=P1^3;//连接DS18B20voiddelay_18b20uchari//这个延时程序的具体延时时间是time=i*8+10适用于小于2ms的延时{fori;i0;i--;}voidinit//初始化函数{ucharx=0;ds=1;delay_18b208;ds=0;delay_18b2080;ds=1;delay_18b205;x=ds;delay_18b2040;ds=1;}/***************读一个字节************/ucharread_onechar{ucharidate;fori=8;i0;i--{ds=1;delay_18b201;ds=0;delay_18b201;ds=1;date=date1;ifds==1{date=date|0x80;delay_18b204;}}returndate;}/***************写一个字节************/voidwrite_onecharuchardate{uchari;fori=8;i0;i--{ds=0;delay_18b201;ds=date0x01;delay_18b205;ds=1;date=date1;ifds==1{date=date|0x80;delay_18b204;}}}/***************读取温度************/voidreadtemp{init;write_onechar0xcc;write_onechar0x44;delay_18b20150;init;write_onechar0xcc;write_onechar0xbe;tempL=read_onechar;tempH=read_onechar;sdate=tempL/16+tempH*16;//整数部分shiwei=sdate/10;gewei=sdate%10;xiaoshu1=tempL0x0f*10/16;//小数第一位xiaoshu2=tempL0x0f*100/16%10;//小数第二位xiaoshu=xiaoshu1*10+xiaoshu2;//小数两位}。