課程設(shè)計(jì)報(bào)告 單片機(jī)通過熱敏電阻測(cè)溫
單片機(jī)通過熱敏電阻測(cè)溫一、前言近年來,隨著科學(xué)技術(shù)和生產(chǎn)的不斷發(fā)展,越來越多的參數(shù)需要通過溫度測(cè)量來獲得。因此,溫度一詞在生產(chǎn)生活中出現(xiàn)的頻率日益增加。與之相對(duì)應(yīng)的,溫度測(cè)量也成為了生產(chǎn)生活中頻繁使用的詞語,同時(shí)它在各行各業(yè)中也發(fā)揮著重要的作用。溫度是表征物體冷熱程度的物理量,溫度測(cè)量則是工農(nóng)業(yè)生產(chǎn)過程中一個(gè)很重要而普遍的參數(shù)。溫度的測(cè)量對(duì)保證產(chǎn)品質(zhì)量、提高生產(chǎn)效率、節(jié)約能源、生產(chǎn)安全、促進(jìn)國(guó)民經(jīng)濟(jì)的發(fā)展起到非常重要的作用。由于溫度測(cè)量的普遍性,溫度傳感器的數(shù)量在各種傳感器中居首位。而且隨著科學(xué)技術(shù)和生產(chǎn)的不斷發(fā)展,溫度傳感器的種類還是不斷增加豐富來滿足生產(chǎn)生活中的需要。而作為一種具有功能強(qiáng),體積小,功耗低,價(jià)格便宜,工作可靠,使用方便等特點(diǎn)的器件,單片機(jī)成為溫度測(cè)量系統(tǒng)的首選部件。近年年來隨著計(jì)算機(jī)在社會(huì)領(lǐng)域的滲透和大規(guī)模集成電路的發(fā)展,單片機(jī)的應(yīng)用正在不斷地走向深入,越來越廣泛地應(yīng)用各個(gè)領(lǐng)域。單片機(jī)溫度測(cè)量師對(duì)溫度進(jìn)行有效的測(cè)量,并且能夠在工業(yè)生產(chǎn)中得到了廣泛的應(yīng)用,尤其在電力工程、化工生產(chǎn)、機(jī)械制造、冶金工業(yè)等重要工業(yè)領(lǐng)域中,擔(dān)負(fù)著重要的測(cè)量任務(wù)。在日常生活中,也可以廣泛實(shí)用于地?zé)帷⒖照{(diào)器、電加熱器等各種家庭室溫測(cè)量及工業(yè)設(shè)備溫度測(cè)量場(chǎng)合。三、硬件設(shè)計(jì)如圖所示,本設(shè)計(jì)包括最小系統(tǒng)、測(cè)溫電路、數(shù)碼管顯示、下載口、蜂鳴器、鍵盤等部分。本設(shè)計(jì)采用按鍵設(shè)置溫度報(bào)警點(diǎn)通過測(cè)溫電路采集溫度信息,經(jīng)過STC12C5410AD進(jìn)行模數(shù)轉(zhuǎn)換、處理并將實(shí)際溫度值和設(shè)定溫度值分別顯示在共陰極數(shù)碼顯示管LED上。3.1 溫度采樣部分如圖3.1所示,測(cè)溫電路利用熱敏電阻將溫度轉(zhuǎn)化為電量,并將電壓值輸入STC12C5410AD進(jìn)行模數(shù)轉(zhuǎn)換。STC12C5410AD將轉(zhuǎn)換所得的數(shù)值輸入數(shù)碼管顯示出來。 圖3.1 溫度采樣電路3.2 溫度顯示部分LED數(shù)碼管將STC12C5410AD處理的溫度信息顯示出來。圖3.2為測(cè)溫系統(tǒng)的顯示部分。數(shù)碼管的8個(gè)管腳由STC12C5410AD的P2口控制。4個(gè)三極管用來控制數(shù)碼管顯示。其基極分別與P3.2P3.5口相接。若P3.2輸出高電平,則Q1導(dǎo)通,STC12C5410AD的P2口控制第一個(gè)數(shù)碼管的8個(gè)管腳。P2口輸出高電平,對(duì)應(yīng)的管腳發(fā)光;反之,管腳不發(fā)光。如此將數(shù)值顯示出來。4個(gè)數(shù)碼管都顯示出數(shù)值后,即得到溫度值。 圖3.2 溫度顯示部分3.3 溫度報(bào)警部分溫度報(bào)警部分包括報(bào)警點(diǎn)設(shè)置和蜂鳴器。本設(shè)計(jì)通過鍵盤進(jìn)行溫度報(bào)警點(diǎn)設(shè)置。5個(gè)按鍵分別接至P1.6P1.2口。其中,conf鍵控制數(shù)碼管。當(dāng)該鍵按下時(shí),數(shù)碼管顯示全部為0,即將數(shù)碼管切換至溫度報(bào)警點(diǎn)設(shè)置界面。Bai、shi、ge、dian鍵分別控制百位、十位、個(gè)位和小數(shù)點(diǎn)后一位。該4鍵每按一下,數(shù)值增1。當(dāng)數(shù)值為9后,再按一下則歸0。蜂鳴器一管腳接至P3.7口。若所測(cè)溫度超限時(shí),則報(bào)警。 3.4 程序下載部分 下載口的作用是將編寫的程序燒入單片機(jī)內(nèi)。 四、軟件設(shè)計(jì) 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)得結(jié)果: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可得溫度與電壓值間的關(guān)系:T= -2.537 U3+22.01 U2-77.14 U+117.94.2 編程#include<STC12C5410AD.H>#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)/延時(shí)a ms uchar j; while(a-!=0) for(j=0;j<125;j+); uint GetAdData() /AD轉(zhuǎn)換子程序uchar Lo2; uint Hi8;ADC_CONTR=0xEF; /啟動(dòng)AD,并選p1.7為AD轉(zhuǎn)換通道 P1M0=0x03;P1M1=0x03;/p1.7先設(shè)開漏while(!(ADC_CONTR&0x10); /等待AD轉(zhuǎn)換標(biāo)志置1,即轉(zhuǎn)換結(jié)束ADC_CONTR = 0x87; /關(guān)AD電源,清D轉(zhuǎn)換標(biāo)志,仍置p1.7為AD轉(zhuǎn)換通道Lo2 =ADC_LOW2;Lo2&=0x03;Hi8 =ADC_DATA;Hi8<<=2;Hi8+=Lo2; return(Hi8);void display(uchar date) uint bai,shi,ge,dian; bai=date/1000; shi=date%1000/100; ge=date%100/10; dian=date%10; P3=0x04; P2=tablebai; delay(2); P3=0; P3=0x08; P2=tableshi; delay(2); P3=0; P3=0x10; P2=tablege+0x80; delay(2); P3=0; P3=0x20; P2=tabledian; delay(2); P3=0; void keyscan() uint bai,shi,ge,dian,i; if(P16=0) /按下功能切換鍵,設(shè)置報(bào)警溫度 delay(1); if(P16=0) display(0); if(P15=0) delay(1); if(P15=0) /按下百位控制鍵 bai+=1; if(bai>9) bai=0; if(P14=0) /按下十位控制鍵 delay(1); if(P14=0) shi+=1; if(shi>9) shi=0; if(P13=0)/按下個(gè)位控制鍵 delay(1); if(P13=0) ge+=1; if(ge>9) ge=0; if(P12=0)/按下點(diǎn)位控制鍵 delay(1); if(P12=0) dian+=1; if(dian>9) dian=0; for(i=0;i<100;i+) /顯示所設(shè)置的溫度 display(bai*100+shi*10+ge+0.1*dian)*10); alarmT=bai*100+shi*10+ge+0.1*dian;for(i=0;i<100;i+) /顯示報(bào)警溫度 display(alarmT*10);void main() ulong U,T; uchar i,j; while(1) U=GetAdData(); U=U*5/1024; /10位AD轉(zhuǎn)換為模擬電壓,參考電壓為5V T= -2.537*U*U*U+22.01*U*U-77.14*U+117.9; /計(jì)算溫度 for(i=0;i<100;i+) /顯示溫度 display(T*10); keyscan(); if(T>=alarmT) /報(bào)警 for(j=0;j<100;j+) beep=!beep;