基于热敏电阻的数字温度计_第1页
基于热敏电阻的数字温度计_第2页
基于热敏电阻的数字温度计_第3页
基于热敏电阻的数字温度计_第4页
基于热敏电阻的数字温度计_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

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

文档简介

浙江海洋学院单片机课程设计报告设计题目基于热敏电阻的数字温度计目录1.引言42.方案设计42.1设计要求42.2设计方案43.硬件设计43.1单片机最小系统43.2复位电路设计43.3测温电桥电路设计53.4信号放大电路设计53.5A/D转换63.6显示电路64.软件设计64.1软件流程74.2子程序模块75.实验结果与讨论85.1实验仿真85.2结果讨论96.心得体会97.附录:源程序:108.参考文献15摘要温度作为一个重要的物理量,是工业生产过程中最普遍、最重要的工艺参数之一,所以温度测量技术和测量仪器的研究是一个重要的课题。随着时代的进步和开展,单片机技术已经伸入到各个领域,基于单片机数字温度计与传统的温度计相比,具有读数方便,测温范围广,其输出温度采用数字显示。本设计采用了以单片机为开发平台,控制系采用AT89C51单片机,A/D转换采用ADC0809。系统除能确保实现要求的功能外,还可以方便进行。8路其它A/D转换量的测量、远程测量结果传送等扩展功能。基于单片机对热敏电阻进行温度测试。在进行模数转换时使用ADC0809将模拟信号转换为数字信号。ADC0809是8位的并行AD转换器,具有转换速率高,低功耗等特点。51单片机作为主控制器件进行数据运算。通过热面电阻阻值的改变而根据规定数据的变化改变其温度,到达了本设计的要求。引言随着以知识经济为特征的信息化时代的到来人们对仪器仪表的认识更加深入,温度作为一个重要的物理量,是工业生产过程中最普遍,最重要的工艺参数之一。随着工业的不断开展,对温度的测量的要求也越来越高,而且测量的范围也越来越广,对温度的检测技术的要求也越来越高,因此,温度测量及其测量技术的研究也是一个很重要的课题。目前温度计按测使用的温度计种类繁多,应用范围也比拟广泛,大致可以包括以下几种方法:1.利用物体热胀冷缩原理制成的温度计2.利用热电效应技术制成的温度检测元件3.利用热阻效应技术制成的温度计4.利用热辐射原理制成的高温计5.利用声学原理进行温度测量温度检测局部采用传统的热敏电阻,热敏电阻的阻值随环境温度变化而变化,将热敏电阻与固定电阻串联后分压,经A/D转换器将其转换为单片机可识别得二进制数字量,然后根据程序查表得到温度值,单片机主要控制LED显示器显示正确的温度值,测量误差约为正负0.5℃。方案设计2.1设计要求1、根本要求〔1〕能够进行温度数据的采集并显示。〔2〕显示三位,可以用LCD或LED。〔3〕具有开、关,复位功能。2、发挥局部〔1〕小于0度或大于40度能用蜂鸣器提示。〔2〕当温度10度内按格式x.xx显示2.2设计方案信号放大51单片机系统结构框图:信号放大51单片机AD转换器显示热敏电阻AD转换器显示热敏电阻温度检测局部采用传统的热敏电阻,首先PT100电阻上产生的电阻阻值变化引起电压变化,微弱的电压变化经过NE5532放大电路放大,再输入到ADC0809进行A/D模数转换,继而由AT89C51芯片处理从P0输出端口输入到数码显示管显示。硬件设计3.1单片机最小系统单片机最小系统选AT89C51,复位电路可对单片机进行复位操作3.2复位电路设计单片机在启动运行时都需要复位,使CPU和系统中的其他部件都处于一个确定的初始状态,并从这个状态开始工作。MCS-51单片机有一个复位引脚RST,采用施密特触发输入。当震荡器起振后,只要该引脚上出现2个机器周期以上的高电平即可确保时器件复位。单片机的复位方式可由手动复位方式完成。3.3测温电桥电路设计该测温电路设计为测温电桥,测温电桥的主要局部是热敏电阻。热敏电阻PT100的主要特点是:①灵敏度较高,其电阻温度系数要比金属大10~100倍以上,能检测出0-6℃的温度变化;②工作温度范围宽,常温器件适用于-55℃~315℃③使用方便,电阻值可在0.1~100kΩ间任意选择,测量范围在〔-200℃~850℃〕之间;④稳定性好、过载能力强。3.4信号放大电路设计本次课程设计,放大模块采用的是NE5532放大器,它是高性能低噪声双运算放大器〔双运放〕集成电路。与很多标准运放相似,但它具有更好的噪声性能,优良的输出驱动能力及相当高的小信号带宽,电源电压范围大等特点。3.5A/D转换首先输入3位地址,并使ALE=1,将地址存入地址锁存器中。此地址经译码选通8路模拟输入之一到比拟器。START上升沿将逐次逼近存放器复位。下降沿启动A/D转换,之后EOC输出信号变低,指示转换正在进行。直到A/D转换完成,EOC变为高电平,指示A/D转换结束,结果数据已存入锁存器,这个信号可用作中断申请。当OE输入高电平时,输出三态门翻开,转换结果的数字量输出到数据总线上。转换数据的传送A/D转换后得到的数据应及时传送给单片机进行处理。数据传送的关键问题是如何确认A/D转换的完成,因为只有确认完成后,才能进行传送。3.6显示电路7SEG-MPX4-CA是六位共阳极七段数码管。其中7SEG表示七段数码管,MPX4表示是四位,CA共阳极。AT89C51的8个输出口分别与各个数码管的8个段选端口相连,利用2k2电阻起到限流作用,使得数码管亮度适中。再经过单片机P0输出的8位数据,进入数码管中,同时单片机的P2.4-P2.7口来选择要显示的位,即控制数码管的位选,通过以上所述来到达实时显示温度的目的。软件设计根据需要,可将系统软件按照功能划分为4个模块,分别是主程序模块、A/D转换模块、液晶显示模块、警报模块,各模块的功能关系如下图。编写系统软件时,可首先编写各模块的底层驱动程序,而后是系统联机调试,编写上层主程序。系统主程序系统主程序警报模块液晶显示模块A/D转换模块警报模块液晶显示模块A/D转换模块4.1软件流程开始开始程序初始化程序初始化采集温度采集温度A/D转换A/D转换判断温度是否超限判断温度是否超限超限没有超限超限没有超限警报不警报警报不警报程序初始化程序初始化4.2子程序模块A/D转换的模块:AD转换通过ADC0809芯片实现,通过控制引脚的电平变化,启动AD转换,P1口读取AD数据,用于查表获取温度值。ADC0809操作函数流程图如下列图一:液晶显示模块:数码管根据模式切换不同的显示,正常模式时显示实时温度值,当显示超过上下限温度值时进如警报环节,显示函数流程图如图二:警报模块:图三为警报模块的流程图:开始开始开始开始初始化显示变量初始化显示变量OE置低电平OE置低电平判断当前模式ST低电平-高电平-低电平判断当前模式ST低电平-高电平-低电平报警模式显示温度并发出警报正常模式,显示实时温度值开始转换报警模式显示温度并发出警报正常模式,显示实时温度值开始转换判断EOC是否返回高电平判断EOC是否返回高电平结束结束图二液晶显示流程图读取AD值,读表后得到温度值显示到数码管读取AD值,读表后得到温度值显示到数码管OE拉高电平OE拉高电平判断温度是否超限读取AD转换的值判断温度是否超限读取AD转换的值大于上限上下限中间小于下限大于上限上下限中间小于下限将读取的AD值随函数返回将读取的AD值随函数返回蜂鸣器报警蜂鸣器报警蜂鸣器停止报警蜂鸣器报警蜂鸣器报警蜂鸣器停止报警结束结束结束结束图一A/D转换流程图图三警报器流程图实验结果与讨论5.1实验仿真热敏电阻PT100上温度变化,经过ADC0809的A/D转换,使得前几个模块得到运转,再由AT89C51的处理,从P0端口输出,完成显示模块功能,并拓展了温度在小于0℃和大于40℃的一个蜂鸣的警报,仿真结果如下列图所示:5.2结果讨论本设计以AT89C51单片机为系统的控制核心,采用proteus仿真软件进行测试。Proteus是一款比拟常用的单片机仿真软件,用proteus和keil配合进行仿真提高系统运行效率与稳定性。在这次课程设计中发现用PT100热敏电阻还是存在一定的缺陷的,如果可以就用电桥来代替热敏电阻,在这方面的只是还需要去学习。心得体会对于这次单片机的课程设计来说,首先我发现之前学到东西都遗忘的差不多,说明当初就没有学好,才会对此措手不及;第二,看到设计题目是基于热敏电阻的数字温度计,经过查阅资料后我的第一想法就是直接拿PT100热敏电阻,但老师的建议是用电桥来带起热敏电阻,但是由于对这方面的只是欠缺所以未能实现;第三,渐渐的发现其实课程实际还是很有趣的,从中可以不用很死板的去学习只是,可以自己主动地去学习,这还是很好的;最后,就是团队的力量了,我们一起查阅资料并相互讨论、交流,这不仅有利于我们完成设计也同时促进了我们无意间在学术上的交流。虽然这个单片机的课题比拟简单,但是从中我还是学到了许多新东西。在之前的学习过程中没有经常用到Proteus这个软件,所以刚刚开始的时候一边在向别人请教Proteus一边实践操作Proteus这个软件,不过幸好以前用过Protell绘图软件,举一反三的在短时间内把Proteus磕磕碰碰学会许多,虽然没有弄的很懂,但一定不会是一无所知了。怎么说经过这次课程设计真的丰富了我的大学生活,吸收了许多有营养的知识。附录:源程序:源程序代码〔主要语句要有注释〕。附源程序代码//程序头函数#include<reg51.h>//宏定义#defineuintunsignedint#defineucharunsignedchar#defineData_ADC0809P1//管脚声明sbitFeng=P3^0;//ADC0809sbitST=P3^3;sbitEOC=P3^4;sbitOE=P3^2;//显示数组0-9ucharData_[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x76,0x38,0x40};ucharcodeData_T[]={//AD数值对应的温度0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,/*0-11*///此范围内为无效值,读到的数据为70x89,0x88,0x87,0x86,0x85,0x84,0x83,0x82,0x81,/*12-20*///此范围内为负温度值-9~-10,1,2,3,4,5,6,6,7,8, /*21-30*/ //以下为正温度0-1119,9,10,11,11,12,13,13,14,15,/*31-40*/15,16,17,17,18,18,19,19,20,21,/*41-50*/21,22,22,23,23,24,24,25,25,26,/*51-60*/26,27,27,28,28,29,29,30,30,30,/*61-70*/31,31,32,32,33,33,33,34,34,35,/*71-80*/35,36,36,36,37,37,38,38,39,39,/*81-90*/39,40,40,41,41,42,42,42,43,43,/*91-100*/44,44,44,45,45,46,46,47,47,47,/*101-110*/48,48,49,49,49,50,50,51,51,51,/*111-120*/52,52,53,53,54,54,54,55,55,56,/*121-130*/56,57,57,57,58,58,59,59,60,60,/*131-140*/60,61,61,62,62,63,63,64,64,65,/*141-150*/65,65,66,66,67,67,68,68,69,69,/*151-160*/70,70,71,71,72,72,73,73,74,74,/*161-170*/75,75,76,76,77,78,78,79,79,80,/*171-180*/80,81,82,82,83,83,84,85,85,86,/*181-190*/87,87,88,89,89,90,91,91,92,93,/*191-200*/94,94,95,96,97,98,99,99,100,101,/*201-210*/102,103,104,105,106,107,108,109,110,111 /*211-220*/}; sbitWei1=P2^7;sbitWei2=P2^6;sbitWei3=P2^5;sbitWei4=P2^4;//函数声明voidDisplay(ucharX,ucharData);bitflag_start=0;uchartemp;//蜂鸣器变量ucharFFs=40,FFx=0;//显示模式ucharMode=0;ucharp;bitbdataflag; //ADC0809读取信息ucharADC0809(){ uchartemp_=0x00;//初始化高阻太 OE=0;//转化初始化 ST=0;//开始转换 ST=1; ST=0;//外部中断等待AD转换结束 while(EOC==0);//读取转换的AD值 OE=1; temp_=Data_ADC0809; OE=0; returntemp_;}//延时voiddelay(uintt){ uinti,j; for(i=0;i<t;i++) for(j=0;j<10;j++);}voidinit(){ TMOD=0x01; TL0=0xb0; TH0=0x3c; EA=1; ET0=1; TR0=1;}voidmain(){ uchari; uintpp; init(); while(1) {//正常模式 if(Mode==0) {//读取AD值 if(flag_start==1) { for(i=0;i<10;i++) { temp=ADC0809(); pp=pp+temp; } temp=pp/10; pp=0; flag_start=0; temp=Data_T[temp]; } for(p=0;p<10;p++) { if(Mode==0) Display(0,temp); elseif(Mode==1) Display(1,FFs); else Display(2,FFx); }//判断是否报警 if(temp>111) { flag=1; cold=1; hot=0; } elseif(temp<111) { if(temp>FFs) { flag=1; } elseif(temp<=FFs&&temp>=FFx) { flag=0; } elseif(temp<FFx) { flag=1; } } }//调整模式 elseif(Mode==1) { Display(1,FFs); flag=0; Feng=1; } else { Display(2,FFx); flag=0; Feng=1; } } }//显示X表示状态Data表示数据voidDisplay(ucharX,ucharData){ Wei1=1; Wei2=1; Wei3=1; Wei4=1; P0=0xff;//正常模式 if(X==0) { if(Data>128) { Data=Data-128; P0=~Data_[12]; Wei1=0; Wei2=1; Wei3=1; Wei4=1; delay(10); Wei1=1; Wei2=1; Wei3=1; Wei4=1; P0=~Data_[Data/10]; Wei1=1; Wei2=0; Wei3=1; Wei4=1; delay(10); Wei1=1; Wei2=1; Wei3=1; Wei4=1; P0=~Data_[Data%10]; Wei1=1; Wei2=1; Wei3=0; Wei4=1; delay(10); Wei1=1; Wei2=1; Wei3=1; Wei4=1; P0=0xa7; Wei1=1; Wei2=1; Wei3=1; Wei4=0; delay(10); Wei1=1; Wei2=1; Wei3=1; Wei4=1; } elseif(Data<128) { if(Data/100==0) P0=0xff; else P0=~Data_[Data/100]; Wei1=0; Wei2=1; Wei3=1; Wei4=1; delay(10); Wei1=1; Wei2=1; Wei3=1; Wei4=1; P0=~Data_[Data/10%10]; Wei1=1; Wei2=0; Wei3=1; Wei4=1; delay(10); Wei1=1; Wei2=1; Wei3=1; Wei4=1; P0=~Data_[Data%10]; Wei1=1; Wei2=1; Wei3=0; Wei4=1; delay(10); Wei1=1; Wei2=1; Wei3=1; Wei4=1; P0=0xa7; Wei1=1; Wei2=1; Wei3=1; Wei4=0; delay(10); Wei1=1; Wei2=1; Wei3=1; Wei4=1; } }//非正常 elseif(X!=0) { if(X==1) P0=~Data_[10]; elseif(X==2) P0=~Data_[11]; Wei1=0; We

温馨提示

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

评论

0/150

提交评论