资源描述
单片机通过热敏电阻测温一、前言近年来,随着科学技术和生产的不断发展,越来越多的参数需要通过温度测量来获得。因此,温度一词在生产生活中出现的频率日益增加。与之相对应的,温度测量也成为了生产生活中频繁使用的词语,同时它在各行各业中也发挥着重要的作用。温度是表征物体冷热程度的物理量,温度测量则是工农业生产过程中一个很重要而普遍的参数。温度的测量对保证产品质量、提高生产效率、节约能源、生产安全、促进国民经济的发展起到非常重要的作用。由于温度测量的普遍性,温度传感器的数量在各种传感器中居首位。而且随着科学技术和生产的不断发展,温度传感器的种类还是不断增加丰富来满足生产生活中的需要。而作为一种具有功能强,体积小,功耗低,价格便宜,工作可靠,使用方便等特点的器件,单片机成为温度测量系统的首选部件。近年年来随着计算机在社会领域的渗透和大规模集成电路的发展,单片机的应用正在不断地走向深入,越来越广泛地应用各个领域。单片机温度测量师对温度进行有效的测量,并且能够在工业生产中得到了广泛的应用,尤其在电力工程、化工生产、机械制造、冶金工业等重要工业领域中,担负着重要的测量任务。在日常生活中,也可以广泛实用于地热、空调器、电加热器等各种家庭室温测量及工业设备温度测量场合。三、硬件设计如图所示,本设计包括最小系统、测温电路、数码管显示、下载口、蜂鸣器、键盘等部分。本设计采用按键设置温度报警点通过测温电路采集温度信息,经过STC12C5410AD进行模数转换、处理并将实际温度值和设定温度值分别显示在共阴极数码显示管LED上。3.1 温度采样部分如图3.1所示,测温电路利用热敏电阻将温度转化为电量,并将电压值输入STC12C5410AD进行模数转换。STC12C5410AD将转换所得的数值输入数码管显示出来。 图3.1 温度采样电路3.2 温度显示部分LED数码管将STC12C5410AD处理的温度信息显示出来。图3.2为测温系统的显示部分。数码管的8个管脚由STC12C5410AD的P2口控制。4个三极管用来控制数码管显示。其基极分别与P3.2P3.5口相接。若P3.2输出高电平,则Q1导通,STC12C5410AD的P2口控制第一个数码管的8个管脚。P2口输出高电平,对应的管脚发光;反之,管脚不发光。如此将数值显示出来。4个数码管都显示出数值后,即得到温度值。 图3.2 温度显示部分3.3 温度报警部分温度报警部分包括报警点设置和蜂鸣器。本设计通过键盘进行温度报警点设置。5个按键分别接至P1.6P1.2口。其中,conf键控制数码管。当该键按下时,数码管显示全部为0,即将数码管切换至温度报警点设置界面。Bai、shi、ge、dian键分别控制百位、十位、个位和小数点后一位。该4键每按一下,数值增1。当数值为9后,再按一下则归0。蜂鸣器一管脚接至P3.7口。若所测温度超限时,则报警。 3.4 程序下载部分 下载口的作用是将编写的程序烧入单片机内。 四、软件设计 4.1 热敏电阻曲线拟合y=-30:5:110;x0=909.42 876.84 838.24 647.6 742.91 688.04 630.31 570.9 512 453.56. 398.73 347.87 301.65 260.28 223.81 191.89 169.24 140.17 119.73. 102.31 87.86 74.97 64.3 55.22 47.65 41.18;x=0.005.*x0;cftool(x,y)得结果:Linear model Poly3: f(x) = p1*x3 + p2*x2 + p3*x + p4Coefficients (with 95% confidence bounds): p1 = -2.537 (-3.205, -1.869) p2 = 22.01 (16.95, 27.08) p3 = -77.14 (-87.64, -66.64) p4 = 117.9 (112.8, 123)Goodness of fit: SSE: 357.4 R-square: 0.993 Adjusted R-square: 0.9921 RMSE: 3.781可得温度与电压值间的关系:T= -2.537 U3+22.01 U2-77.14 U+117.94.2 编程#include#define uchar unsigned char#define uint unsigned int#define ulong unsigned longsbit beep=P37;uchar code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f, 0x77,0x7c,0x39,0x5e,0x79,0x71;/0-fulong alarmT;void delay(uchar a)/延时a ms uchar j; while(a-!=0) for(j=0;j125;j+); uint GetAdData() /AD转换子程序uchar Lo2; uint Hi8;ADC_CONTR=0xEF; /启动AD,并选p1.7为AD转换通道 P1M0=0x03;P1M1=0x03;/p1.7先设开漏while(!(ADC_CONTR&0x10); /等待AD转换标志置1,即转换结束ADC_CONTR = 0x87; /关AD电源,清D转换标志,仍置p1.7为AD转换通道Lo2 =ADC_LOW2;Lo2&=0x03;Hi8 =ADC_DATA;Hi89) bai=0; if(P14=0) /按下十位控制键 delay(1); if(P14=0) shi+=1; if(shi9) shi=0; if(P13=0)/按下个位控制键 delay(1); if(P13=0) ge+=1; if(ge9) ge=0; if(P12=0)/按下点位控制键 delay(1); if(P12=0) dian+=1; if(dian9) dian=0; for(i=0;i100;i+) /显示所设置的温度 display(bai*100+shi*10+ge+0.1*dian)*10); alarmT=bai*100+shi*10+ge+0.1*dian;for(i=0;i100;i+) /显示报警温度 display(alarmT*10);void main() ulong U,T; uchar i,j; while(1) U=GetAdData(); U=U*5/1024; /10位AD转换为模拟电压,参考电压为5V T= -2.537*U*U*U+22.01*U*U-77.14*U+117.9; /计算温度 for(i=0;i=alarmT) /报警 for(j=0;j100;j+) beep=!beep;
展开阅读全文