数字温度计的设计_第1页
数字温度计的设计_第2页
数字温度计的设计_第3页
数字温度计的设计_第4页
数字温度计的设计_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

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

文档简介

数字温度计的设计摘要伴随中国的不断发展、经济水平的提升、技术的进步,温度已逐渐转变成了不可或缺的测量参数。本篇文章仔细的分析了STC89C51的数字温度计的研发基础和整体理论。本篇文章中的数字温度计能够实时地测定温度,而且能够手动的调节要测定的温度范围,依照调节的温度范围,完成温度的实时测定并报警。温度计主要分为民用以及工业用两种,不管民用还是工业用,精确度逐渐被关注起来,民用的温度计通常是体温计,工用的大多为工厂周围环境温度的测定,应用在较为恶劣的条件下的温度测定,本篇文章中的单片机数字温度计,可以达到民用以及工用的标准。本篇文章中的单片机数字温度计,更为精确,并且能够实时的测定温度,而且具备报警的作用,并且能够手动调节温度范围,达到工业社会的标准。关键词:STC89C51;DS18B20;报警电路。目录TOC\o"1-3"\h\u20598摘要 216868第一章绪论 313610第二章系统设计方案 562292.1设计任务 557962.2设计方案 5245292.3系统的总体结构 55531第三章硬件电路设计 7209143.1单片机控制电路 7185663.1.1STC89C51单片机介绍 7298073.1.2复位电路 8190603.1.3时钟电路 8231313.2温度传感电路 9223243.2.2温度传感电路 10296133.3按键电路模块 10233313.4显示电路模块 11195323.5报警电路模块 1110145第四章系统软件设计 1322755第五章安装与调试 20195345.1实物安装 20172085.2调试与性能测试 206239第六章总结与展望 2420311参考文献 2529528附录 2610251附录一:电路原理图 2630075附录二:元器件清单 278576附录三:源程序 27第一章绪论伴随时代的不断发展,大家的生活水平正在逐渐的提升,精准度逐渐转变成大家追求的标准。本篇文章中单片机操控的数字温度计已经是精度的代表,但是对研究和生活的要求越来越高,传统的测量方法不再可行,因此必须朝数字化方向发展控制和智能控制。在这个发展飞速的科技社会中,温度对我们来说是非常重要的。它也是我国化工、食品、冶金等行业的主要参数之一。现今,大家对许多数据的精准性要求逐渐提升。怎样精准、迅速地得到此类参数,受到目前社会信息发展水平的限制。传感器技术是属于信息技术的高端产品之一,而温度传感器技术又是其中最重要的一种,这些在我国得到了广泛的应用。毫不夸张地说,它已经渗透到我生活的方方面面。我们的生活和温度是分不开的。工业需要精确的温度控制,农业也需要精确的温度测量。因此,研究温度测量和温度报警装置意义重大。对于此次的电路设计,电路难度不大,所用到的硬件设施也比较简单易购买,主要的硬件是单片机STC89C51,温度传感器DS18B20,蜂鸣器,以及一些电阻电容,三极管,数码管和晶振。本篇文章中STC89C51的数字温度计和民用设备相对比,更容易获取温度数值,测定的上下限较大,测定的精准度较高,测定的温度以数字展现出来,主要用于对温度有较高要求的温度测量或用于科研实验室,本篇文章中的数字温度计选取STC89C51并运用数字来展示温度,能够精准地达到以上的标准。第二章系统设计方案2.1设计任务基于单片机设计一个数字温度计,能实时显示温度值。具体指标如下:

1.温度检测范围-55℃-125℃,报警值设置范围0℃-99℃

2.精度误差小于

0.5℃

3.数码管直读显示;

4.具有电源指示灯和蜂鸣器同时报警功能。2.2设计方案在该体系中选取温度测定体系。体系包括温度传感设备以及单片机。获取温度的设施——温度传感器采集不同位置的环境温度。它能够把测定的温度信号转化到电路信号中,显示体系能够识别电路信号并展现出其测定出来的温度数值。我使用DS18B20作为温度传感器。DS18B20它具有出色的性能和低廉的价格,因此在教师和学生中非常受欢迎。DS18B20的精准性较高,最小单位可达0.5摄氏度,最长运行周期为750ms,并且它具有独立的接口,这意味着只需一个接线端口即可完成两个设备之间的双向通信。微控制器及其本身。此研究所需的摄氏度大约0℃-99℃。DS18B20的温度测定范围已容纳在其中,能够达到本次研究的标准。2.3系统的总体结构本研究的体系中的模块通常能够划分成4个部分组成,依次是STC89C51,温度传感线路,数码管显示线路以及警报线路电路。图2-1为整体图纸,如下。图3-1系统总体结构图第三章硬件电路设计3.1单片机控制电路采用STC89C51单片机作为控制电路的核心硬件,采用了12MHz的晶振时钟电路和复位电路组成了整个主控制电路。3.1.1STC89C51单片机介绍STC89C51是以8051为核心的系统可编程芯片的单片机。最大运行时钟频率是80MHz。此芯片包括4KB闪存只读存储设备,能够反复重写一千次。兼容标准MCS-51指令体系以及80C51引脚结构。此芯片和一般的八位中央处理器集成,ISP闪存单元具有系统内可编程(ISP)的特点,省去了一般编程器的购买,速度更快。特点:1.工作频率范围:0至40MHz,等同于一般8051的0至80MHz。现实的运行频率达到了48MHz.2.集成五百一十二字节RAM3.I/O接口(27/23个),每个I/O口驱动能力均可达到20mA,但整个芯片最大不得超过55mA4.有2个16位定时器/计数器5.ISP:在系统可编程/IAP:在应用可编程,不需要专用的编程器。6.工作温度范围:0

-75℃/

-40

-+85℃下图3-1为STC89C51单片机的引脚图图3-1STC89C51引脚图引脚功能介绍:VCC/GND:供电电源。P0口:8位漏极开路型双向I/O口。P1-P3口:带内部上拉电阻的8位双向I/O口。RST:复位输入。EA/VPP:内部ROM选择/片内EPROM编程电源。XTAL1:反向振荡器的输入以及内部时钟电路的输入。XTAL2:来自反向振荡器的输出3.1.2复位电路复位电路是硬件研究中的最基础的内容,选取按键复位,闭合按钮后,RST端出现高电平,从而让单片机线路复位。图3-2属于复位电路的线路图纸图3-2复位电路图3.1.3时钟电路采用内部方式时钟电路,在XTAL1和XTAL2引脚两端跨接12MHz晶振和两个30pf微调电容构成时钟振荡电路。下图3-3为时钟电路图3-3时钟电路3.2温度传感电路3.2.1DS18B20简介DS18B20是如今世界温度测定领域中最为常用的温度传感设备。这和它的布线思路存在较大的关系,其的布线思路能够应用在许多的场合,一般的布线思路包括:管道布线等;特殊的布线思路包括:不锈钢封装式等。其更改外观具体决定于应用程序。耐磨、抗压、空间小、易操作、许多包装,能够应用在许多小型对温度测定精准度要求高的区域的温度测定。下图3-4为DBS18B20实物图与引脚图图3-4DBS18B20实物图与引脚图DS18B20引脚参数GND:电压地DQ:单数据总线VDD:电源电压NC:空引脚DS18B20运行中的注意内容即使DS18B20具备测定精准性高、连接简单等特征,不过在现实应用中也具备下列问题,必须特别关注:1、DS18B20和微处理设备间的传导形式是串行传输。所以在对DS18B20读写的时候,必须完全同时读取,2、数据DS18B20并没有包含DS18B20的悬挂数量,通常以为可以悬挂许多个,不过现实操作中悬挂达到八个时,就必须处理总线的问题,所以研究时要关注这一内容。3、连接DS18B20的电缆长度较短。此类情况是因为总线电容分布不平衡而导致的信号失真。选取DS18B20长距离测定的时候,必须分析长度的问题。3.2.2温度传感电路本研究中选取DS18B20。主要是因为此芯片组装较为简单,操作方便,很适合新手使用。温度传感器的1脚连接电源,2脚DQ端与单片机的P3.6端口相连,3脚接地。下图3-5为温度传感电路图3-5温度传感电路3.3按键电路模块按键电路,就是指用来调整温度的范围,按键电路中,S3为减小按键,S4为增加按键,按一下只能增加或减小一位。S5为菜单键,主要是设置温度上下限,按一下显示温度上限值,再按一下显示温度下限值,按第三下回到温度显示界面。图3-6按键电路3.4显示电路模块显示电路模块是本研究中最关键的原件,因为温度都必须显示线路来展示测定的温度,而单片机应用体系中的七段LED数码管一般被应用为显示设备。单片机的段码的输出端口为P0端口,单片机中的位码的输出端口为P2.0,P2.1,P2.2,P2.3口。原理图如3-7:图3-7显示电路原理图3.5报警电路模块报警电路是当周围温度超出预设的温度范围后可以报警的线路,本研究中报警所选取的是闪光灯以及蜂鸣设备的组合。P2.5口是报警线路的传输接口,当输入低电平时,蜂鸣设备进行警报。驱动三极管选取PNP,由于单片机开始上电时全部的IO接口会存在暂时的高电平。加入选取NPN,加入程序上把IO端口拉低,蜂鸣设备同样会响一小下或着进行吸合,为了防止此类情况的出现,就选取PNP。报警电路如下图3-8所示:图3-8报警电路第四章系统软件设计

4.1系统主程序设计主程序是本研究中的关键部分。首先当体系连接电源后,系统转变到温度运行阶段并运行温度测定系统,测定出的电信号转变成数字信号,之后展现在数码管中,并依照提前设计的温度范围实现温度控制。本体系软件研究的整体图纸如下。开始开始器件正常?测量温度DS18B20初始化将器件调整正常蜂鸣器鸣叫进入按键扫描子程序测量温度DS18B20初始化显示温度测量温度将温度与设定值比较是否超限按键按下YYNYNY图4-1系统主程序框图主程序:4.2DS18B20初始化子程序设计初始化程序是为了DS18B20在开始阶段的识别,获取或传输数据。初始化程序图纸如4-2:开始开始DQ复位,DQ=1单片机将DQ拉低延迟大于480us拉低总线初始化成功结束DQ=0?YN

图4-2DS18B20初始化程序流程图初始化程序4.3DS18B20读取温度子程序温度读取程序是为了可以直接测定出研究中的周围温度而研发的,而我们获取温度子程序的主要作用是为了获取其RAM的字节。DSl8B20的电源较为灵活方便,外部电源能够提升该体系的运行寿命。4-3是具体的数据流程图。开始开始结束跳过读序号的操作启动温度转换跳过读序号操作读取温度寄存器LOW-低八位,HIGH-高八位DS18B20初始化成功?NY图4-3DS18B20读取温度子程序流程图读取温度子程序:4.4数据显示处理子程序依照上述中的温度获取到数据显示程序。显示设备会展现出数字,假如要获取最终的结果,必须进一步的分析,办法是,获取的数字主要包括LOW以及HIGH两部分,而LOW的四位数字是最终结果的小数区域,HIGH的四位数字是结果的整数区域,而整数区域也需要进行区分:负数或0.加入数据为负的时候,数据在展现前被转换,并且整数区域被反转。整数区域是“-”,代表为负数。温度数据处理的图纸如4-4:开始开始提取整数部分存入HTLT>5?结束提取小数部分存入HTLT右移三位,精度0.5摄氏度小数部分整数化HT++提取符号部分存图sign负数标志flag=1是负数?NYNY图4-4温度数据处理程序的流程图第五章安装与调试5.1实物安装下图为安装实物图:图5-1电路实物图5.2调试与性能测试步骤:将程序通过STC-ISP写入实体电路,进行仿真。写入的程序中规定,初始的最高温度设定为30摄氏度,最低温度为10摄氏度。打开电源开关后,电路中电源显示的红灯会亮,数码管显示当前环境下的温度,通过MENU按键可以对温度上下限进行调节。下图5-2为打开电源开关后电路显示的温度,与实际温度的误差为0.1,在误差范围之内。图5-2温度显示实测一:让电路在低于下限温度进行报警,通过MENU对温度上下限进行设置,设置最高温度为40摄氏度,最低温度为25摄氏度,单片机实测温度为20.5摄氏度,温度计显示为20.5,没有误差,蜂鸣器报警。下图5-3为实物演示图片图5-3低于下限温度报警实测二:让电路高于上限温度报警。通过MENU设置温度上限为18摄氏度,温度下限为10摄氏度,单片机实测温度20摄氏度,与温度计实际温度相差0.1度,属于误差范围内,蜂鸣器报警。下图5-4为实物演示图片图5-4高于上限温度报警结果分析:本研究介绍和分析的数字温度计的测量限度大致为0℃至99℃,具备自动警报的作用和基础的范围(10℃~30℃)。能够手动调节温度的范围。4位数字集成数码管显示设定温度和当前测量温度的上下限。假如目前周围环境温度在默认范围内,则主功能不会运行警报程序,就是指警报电路不运行,蜂鸣设备不工作;假如目前周围环境温度超出了默认范围,则启动警报程序。此时,单片机出现警报,蜂鸣器位于低电平,蜂鸣设备鸣响,直到环境温度恢复到上下限之间的默认温度。从实验结果以及研究要求所实现的指标能够发现,设计基本达到了标准。第六章总结与展望在工业制造以及平常生活中,大家通常被温度所围绕着。外出旅游时必须观察温度的情况,季节温度逐渐地改变,大家对温度的要求逐渐严格。此类严格性具体是为了保证温度在选定范围内浮动并具备较高的精准性。假如温度不精准,会导致无数的问题。本篇文章研究了STC89C51为主的温度测定系统的设计过程和思路。合理选取STC89C51以及DS18B20能够给本研究提供实现线路功能的前提基础,并实现事半功倍的作用。并且,因为软件入门标准低并且可操作性强,极大程度的提升了系统的研究和开发速度。非常感谢我的导师。老师的耐心指导,使我的设计可以按计划完成。老师为我提供了很大的帮助,给了我很多很好的建议,这些建议对于撰写本文非常重要。真诚的感谢您。参考文献[1]陈权昌,李兴富.单片机原理及应用[M].广州:华南理工大学出版社,2007.84~102[2]李庆亮.C语言程序设计实用教程[M].北京:机械工业出版社,2005.32~58[3]杨志忠.数字电子技术[M].北京:高等教育出版社,2003.125~132[4]及力.Protel99SE原理图与PCB设计教程[M].北京:电子工业出版社,2007.89~150[5]徐江海.单片机实用教程[M].北京:机械工业出版社,2006.128~156[6]胡宴如.模拟电子技术[M].北京:高等教育出版社,2008.60~104[7]汪文,陈林.单片机原理及应用[M].湖北:华中科技大学出版社,2007.36~68[8]康华光.电子技术基础数字部分[M].北京:高等教育出版社,2008.203~209[9]杨欣.电子设计从零开始[M].北京:清华大学出版社,2005.28~102附录附录一:电路原理图附录二:元器件清单名称型号对应原理图编号数量PNP三极管9012Q111电容10ufC11电容30PC2,C32排阻1kD11温度传感器DS18B20DS11DC电源接口DC电源接口J113MM发光二极管红redL11电阻10kR1,R22电阻2KR31电阻1kR41微动开关SW-PBS1,S3,S4,S54有源蜂鸣器SPEAKERS214位数码管共阴数码管SMG11自锁开关电源开关SW1151单片机89C51/C52U11晶振12MY11附录三:源程序//****************************************/* 18B20温度传感器*///****************************************#ifndefuint#defineuintunsignedint#endif#ifndeful#defineulunsignedlong#endif#ifndefuchar#defineucharunsignedchar#endif//******************************************sbitDQ=P3^6; //ds18b20端口bittflag;/******************************************************************//*延时函数*//******************************************************************/voidDS18B20_delay(uinti)//延时函数{ while(i--);}/******************************************************************//*初始化*//******************************************************************/voidInit_DS18B20(void){ ucharx=0; DQ=1; //DQ复位 DS18B20_delay(8);//稍做延时 DQ=0; //单片机将DQ拉低 DS18B20_delay(80);//精确延时大于480us DQ=1; //拉高总线 DS18B20_delay(10); x=DQ; //稍做延时后如果x=0则初始化成功x=1则初始化失败 DS18B20_delay(5);}/******************************************************************//*读一个字节*//******************************************************************/ucharDS18B20_ReadOneChar(void){ uchari=0; uchardat=0; for(i=8;i>0;i--) { DQ=0; //给脉冲信号 dat>>=1; DQ=1; //给脉冲信号 if(DQ) dat|=0x80; DS18B20_delay(5); } return(dat);}/******************************************************************//*写一个字节*//******************************************************************/voidDS18B20_WriteOneChar(uchardat){ uchari=0; for(i=8;i>0;i--) { DQ=0; DQ=dat&0x01; DS18B20_delay(5); DQ=1; dat>>=1; } DS18B20_delay(5);}/******************************************************************//*读取温度*//******************************************************************/uintReadTemperature(void){ uchara=0; uintb=0; uintt=0; Init_DS18B20(); DS18B20_WriteOneChar(0xCC);//跳过读序号列号的操作 DS18B20_WriteOneChar(0x44);//启动温度转换 DS18B20_delay(200); Init_DS18B20(); DS18B20_WriteOneChar(0xCC);//跳过读序号列号的操作 DS18B20_WriteOneChar(0xBE);//读取温度寄存器等(共可读9个寄存器)前两个就是温度 a=DS18B20_ReadOneChar();//低位 b=DS18B20_ReadOneChar();//高位 b<<=8; t=a+b; if(t<0x0fff) tflag=0;else { t=~t+1; tflag=1; } t=t*(0.625);//温度值扩大10倍,精确到1位小数 return(t); } #include<reg51.h>#include<intrins.h>#include<DS18B20.h>#defineucharunsignedchar#defineuintunsignedint#defineSMGIOP0sbitSET=P1^0; //定义设定上下限键sbitADD=P1^1; //定义增加键sbitDEC=P1^2; //定义减小限键 sbitSMG1=P2^0; //定义数码管第一位sbitSMG2=P2^1; //定义数码管第二位sbitSMG3=P2^2; //定义数码管第三位sbitSMG4=P2^3; //定义数码管第四位sbitBEEP=P2^5; //定义蜂鸣器报警uinttempValue; //变量存储当前温度值uintHI_Alarm=30; //初始上限uintLO_Alarm=10; //初始下限ucharSMG_CC[]={0x5f,0x44,0x9d,0xd5,0xc6,0xd3,0xdb,0x45,0xdf,0xd7}; //共阴极数码管0-9编码ucharSMG_CC_DOT[]={0x7f,0x64,0xbd,0xf5,0xe6,0xf3,0xfb,0x65,0xff,0xf7}; //共阴极数码管0-9编码带小数点/********************************************************************//* 1ms延时 *//********************************************************************/voiddelayms(uintx){uchari;while(x--){for(i=150;i>0;i--);}}voidDisplay_Temperature() //显示温度{ charsmg1,smg2,smg3,smg4; smg1=tempValue/1000; //以下表示将温度值拆分开 smg2=(tempValue-smg1*1000)/100; smg3=(tempValue%100)/10; smg4=tempValue%10; if(tflag==1) //负数显示 { SMGIO=SMG_CC[smg4]; //显示小数位 SMG4=0; delayms(1); SMG4=1; SMGIO=SMG_CC_DOT[smg3]; //显示个数位 SMG3=0; delayms(1); SMG3=1; if(smg2==0) { SMGIO=0x80; //显示十数位 SMG2=0; delayms(1); SMG2=1; SMGIO=0x00; //显示百数位 SMG1=0; delayms(1); SMG1=1; } else { SMGIO=SMG_CC[smg2]; //显示十数位 SMG2=0; delayms(1); SMG2=1; SMGIO=0x80; //显示十数位 SMG1=0; delayms(1); SMG1=1; } } else //正数显示 { SMGIO=SMG_CC[smg4]; //显示小数位 SMG4=0; delayms(1); SMG4=1; SMGIO=SMG_CC_DOT[smg3]; //显示个数位 SMG3=0; delayms(1); SMG3=1; if(smg1==0) { SMGIO=0x00; SMG1=0; delayms(1); SMG1=1; if(smg2==0) { SMGIO=0x00; SMG1=0; delayms(1); SMG1=1; } else { SMGIO=SMG_CC[smg2]; SMG2=0; delayms(1); SMG2=1; } } else { SMGIO=SMG_CC[smg1]; SMG1=0; delayms(1); SMG1=1; SMGIO=SMG_CC[smg2]; SMG2=0; delayms(1); SMG2=1; } }}voidDisplay_HI_Alarm(){ SMGIO=0xce; //显示H SMG1=0; delayms(1); SMG1=1; SMGIO=0x80; //显示- SMG2=0; delayms(1); SMG2=1; SMGIO=SMG_CC[HI_Alarm/10]; //显示报警高值十位 SMG3=0; delayms(1); SMG3=1; SMGIO=SMG_CC[HI_Alarm%10]; //显示报警高值个数位 SMG4=0; delayms(1); SMG4=1; }voidDisplay_LO_Alarm(){ SMGIO=0x1a; //显示L SMG1=0; delayms(1); SMG1=1; SMGIO=0x80; //显示- SMG2=0; delayms(1); SMG2=1; SMGIO=SMG_CC[LO_Alarm/10]; //显示报警高值十位 SMG3=0; delayms(1); SMG3=1; SMGIO=SMG_CC[LO_Alarm%10]; //显示报警高值个数位 SMG4=0; delayms(1); SMG4=1; }voidSET_KEY(){ bitSET_FLAG=1; if(SET==0) //设定按键按下 { delayms(40); if(SET==1) //延时去除抖动再次判断是否按下按键 { while(SET_FLAG==1) { Di

温馨提示

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

评论

0/150

提交评论