基于51單片機(jī)的頻率溫度測(cè)量系統(tǒng)報(bào)告_第1頁(yè)
基于51單片機(jī)的頻率溫度測(cè)量系統(tǒng)報(bào)告_第2頁(yè)
基于51單片機(jī)的頻率溫度測(cè)量系統(tǒng)報(bào)告_第3頁(yè)
基于51單片機(jī)的頻率溫度測(cè)量系統(tǒng)報(bào)告_第4頁(yè)
基于51單片機(jī)的頻率溫度測(cè)量系統(tǒng)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩25頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

實(shí)訓(xùn)任務(wù)實(shí)訓(xùn)目的掌握從事電子類(lèi)高級(jí)專業(yè)人才必須具備的單片機(jī)基本理論、基礎(chǔ)技能,接口及應(yīng)用技術(shù)。同時(shí)通過(guò)實(shí)訓(xùn),使學(xué)生對(duì)于單片機(jī)的組成原理和結(jié)構(gòu)有比較深刻的理解,掌握單片機(jī)應(yīng)用系統(tǒng)的設(shè)計(jì)方法,可比較靈活地使用單片機(jī)構(gòu)成系統(tǒng)的外圍芯片,具備單片機(jī)軟件設(shè)計(jì)和編程能力。培養(yǎng)學(xué)生分析、解決電子電路應(yīng)用問(wèn)題的能力。為以后從事自動(dòng)化類(lèi)工作打下深厚基礎(chǔ)。實(shí)訓(xùn)要求用PROTEL99畫(huà)出原理圖;用實(shí)驗(yàn)板搭建該單片機(jī)系統(tǒng);用C語(yǔ)言編寫(xiě)程序(keil);改變電容頻率顯示發(fā)生變化;可測(cè)溫度范圍0℃~100℃通過(guò)按鍵實(shí)現(xiàn)頻率與溫度的切換顯示。可測(cè)得占空比;(發(fā)揮部分)增加一個(gè)按鍵,可以設(shè)定上下限值(發(fā)揮部分)實(shí)訓(xùn)方案該單片機(jī)系統(tǒng)用臺(tái)灣宏晶STC單片機(jī)系列為核心,用NEC555產(chǎn)生可調(diào)的振蕩頻率,輸送給單片機(jī)外部中斷口,單片機(jī)啟動(dòng)定時(shí)器定時(shí),將每秒中的脈沖個(gè)數(shù)記下,即可得到頻率;給鉑電阻一個(gè)恒壓,將鉑電阻產(chǎn)生的電壓信號(hào)經(jīng)運(yùn)算放大器放大后,送到單片機(jī)內(nèi)部A/D,再經(jīng)過(guò)標(biāo)度變換即可求得溫度。這兩個(gè)功能可以通過(guò)兩個(gè)按鍵相互轉(zhuǎn)換。顯示采用數(shù)碼管顯示,靜態(tài)方式。用單片機(jī)的串行口轉(zhuǎn)成并行來(lái)控制數(shù)碼管的顯示。圖1.1系統(tǒng)原理框圖電源模塊原理圖設(shè)計(jì)圖2.1電源模塊將220V交流電經(jīng)保險(xiǎn)絲接入開(kāi)關(guān)電源模塊,輸出5V直流電壓經(jīng)開(kāi)關(guān)后用一大一小兩電容進(jìn)行再濾波,用一個(gè)紅色的led來(lái)顯示開(kāi)關(guān)的狀態(tài),當(dāng)然需要加一個(gè)限流電阻,由該led的額定電壓為2.4v額定電流為24ma故限流電阻R2=(5V-2.4V)/24ma單片機(jī)模塊及其下載模塊原理圖設(shè)計(jì)圖3.1單片機(jī)模塊設(shè)計(jì)、單片機(jī)采用STC12C5A08AD也是51系列單片機(jī),右邊是51單片機(jī)的典型時(shí)鐘電路和復(fù)位電路,左邊的兩個(gè)上拉電阻是用來(lái)切換頻率溫度顯示。圖3.2單片機(jī)下載模塊這是RS232電平(串口電平)轉(zhuǎn)TTL電平電路,構(gòu)成單片機(jī)和電腦的通路,再采用STC_ISP軟件進(jìn)行下載。顯示模塊原理圖設(shè)計(jì)圖4.1顯示模塊原理圖采用八段共陽(yáng)數(shù)碼管顯示頻率和溫度,由于他們的額定電壓時(shí)3,8v,每段靜態(tài)額定電流為10ma,故限流電阻R1=(5-3.8)V/(10*24)ma。用移位寄存器74LS164把單片機(jī)輸出的串行數(shù)據(jù)轉(zhuǎn)成并行輸出給數(shù)碼管。程序設(shè)計(jì)#include<reg51.h>//包含單片機(jī)寄存器的頭文件 sbitsclk=P2^1;sbitsda=P2^2;inttab[10]={0x03,0xf3,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09};//共陽(yáng)數(shù)碼管0~9編碼voiddelay(xms)//延時(shí)程序{ inti,j; for(i=xms;i>0;i--) for(j=110;j>0;j--);}voidbit_out(biti)//給74ls164寫(xiě)入一位數(shù){sclk=0;sda=i;sclk=1;//上跳沿時(shí)寫(xiě)入數(shù)據(jù)}voidleddisp(intnum)//把一個(gè)三位數(shù)顯示到數(shù)碼管上{ chari,j; intge,bai,shi;//把三位數(shù)變成3個(gè)一位數(shù) bai=num/100; shi=(num%100)/10; ge=num%10; for(i=0;i<3;i++)//每次寫(xiě)一個(gè)數(shù) { switch(i)//由于是移位寄存器是故先寫(xiě)個(gè)位數(shù),再寫(xiě)十位數(shù),最后寫(xiě)百位數(shù) { case0: j=ge;break; case1: j=shi;break; case2: j=bai;break; } //把每個(gè)數(shù)對(duì)應(yīng)的八位編碼從低位到高位寫(xiě)入到74ls164 bit_out((bit)(tab[j]&0x01));/*段碼二進(jìn)制的最低位*/ bit_out((bit)(tab[j]&0x02)); bit_out((bit)(tab[j]&0x04)); bit_out((bit)(tab[j]&0x08)); bit_out((bit)(tab[j]&0x10)); bit_out((bit)(tab[j]&0x20)); bit_out((bit)(tab[j]&0x40)); bit_out((bit)(tab[j]&0x80));/*段碼二進(jìn)制的最高位*/ } /*輸出段碼,顯示數(shù)字*/}voidmain(){ while(1) { leddisp(789); delay(100); } }頻率模塊原理圖設(shè)計(jì)圖5.1555頻率模塊原理圖這是555構(gòu)成的多諧振蕩器用來(lái)產(chǎn)生方波信號(hào),產(chǎn)生的頻率為f=1/(ln2*C11*(R4+2R3))程序設(shè)計(jì)#include<reg51.h>#defineucharunsignedchar#defineuintunsignedintucharflag=0;uintcount=0;intnum1=0;///////ledisp同上///////frequencyvoidinit_t0t1()//初始化計(jì)數(shù)器和定時(shí)器{ TMOD=0X51;//0101,0001計(jì)數(shù)器1方式1,定時(shí)器0方式1 TH1=0; TL1=0;//計(jì)數(shù)器清零 TH0=(65536-5000)/256; TL0=(65536-5000)%256;//計(jì)時(shí)器置初值使50ms溢出 EA=1; ET0=1; TR0=1; TR1=1;}intread()//讀出計(jì)數(shù)器對(duì)15號(hào)引腳的計(jì)數(shù)值{ uchartl,th; intval; th=TH1; tl=TL1; val=th*256+tl; returnval; }voidt0()interrupt1//T0的中斷服務(wù)程序,每50ms執(zhí)行一次,目的是定時(shí)1s{ TH0=(65536-5000)/256;//重置初值 TL0=(65536-5000)%256; count++; //每過(guò)50ms加1 if(count>=20) //20個(gè)50ms即是一秒 { count=0; flag=1; }}voidmain(){ init_t0t1();//調(diào)用T0,T1初始化程序 while(1) { if(flag==1)//一秒時(shí)間到 { TR0=0; //關(guān)掉定時(shí)器計(jì)數(shù)器,防止中斷 TR1=0; num1=read();//1s時(shí)間到就把讀出計(jì)數(shù)器的值,此值就是頻率 leddisp(num1);//顯示頻率 delay(100); TH1=0; TL1=0;//計(jì)數(shù)器清零 TH0=(65536-5000)/256; TL0=(65536-5000)%256;//重置初值 flag=0;//flag清零 TR0=1;//重新打開(kāi)定時(shí)器計(jì)數(shù)器 TR1=1; } }}溫度采集模塊原理圖設(shè)計(jì)圖6.1溫度測(cè)量模塊左下角是利用TL431構(gòu)成的穩(wěn)壓電源,輸出電壓為V5=Vref/R16*(R15+R16)=3.3v其中Vref=2.5v由運(yùn)放的虛短性質(zhì)知V6=3.3V,故流過(guò)R11的電流為1ma,由運(yùn)放的虛斷性質(zhì)知流過(guò)PT100的電流也為1ma恒流。再由PT100的溫度電阻特性如下圖可知溫度T=(Vpt(mv)-100*1)/0.385T>0右邊是一個(gè)差分放大電路放大倍數(shù)op=(1+R8/R6),故Vout=op*Vpt程序設(shè)計(jì)#include<reg51.h>#defineucharunsignedchar#defineuintunsignedint #defineADC_FLAG0X10;constdoublevin=5000;//電源電壓,需要實(shí)測(cè)constdoubleiin=3.3/3.3;//流過(guò)PT的電流3.3v/3.3k,需要實(shí)測(cè)constdoubleop=(1080/108);//lm358的1號(hào)管腳(1v左右)除以67號(hào)管腳電壓100mv左右,需要實(shí)測(cè)constucharc=18;inta[18];constdoubled=2;ucharcount2=0;ucharflag2;intnum1=0;//數(shù)碼管顯示溫度//inttemp3; sfr ADC_CONTR=0XBC;//控制寄存器sfrADC_RES=0XBD;//轉(zhuǎn)換結(jié)果的高八位寄存器sfr ADC_RESL=0XBE;//轉(zhuǎn)換結(jié)果的低八位寄存器sfrP1ASF=0X9D;//P1第二功能控制寄存器/////////////leddispsbitsclk=P2^1;sbitsda=P2^2;inttab[10]={0x03,0xf3,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09};voiddelay(xms);////////////////////////////////////////lvbovoidgetdata(intnum3)//把轉(zhuǎn)換結(jié)果存進(jìn)數(shù)組a[]{ if(count2<=(c-1)) { a[count2]=num3; count2++; } else { count2=0; flag2=1; } }intlvbo(int*p)//濾波程序,去掉最大和最小,剩下的取平均{intsum,val; chari,j; inttemp; for(i=0;i<=(c-2);i++) { for(j=i+1;j<=(c-1);j++) { if((p[i])<(p[j])) { temp=p[i]; p[i]=p[j]; p[j]=temp; } } } for(i=d;i<=(c-d-1);i++) {sum+=p[i]; } val=sum/(c-2*d); returnval; //returnp[(c+1)/2];}////////////////////////////////wenduvoidinit_ad() //初始化ad{ P1ASF=0X01;//只把P1.0作為ad用 ADC_RES=0X00; ADC_RESL=0X00;//轉(zhuǎn)換結(jié)果寄存器清零 ADC_CONTR=0x88;//1010,100;打開(kāi)ad轉(zhuǎn)換電源,設(shè)定轉(zhuǎn)換速度,選擇p1.0作為ad通道 delay(2); IE=0XA0;//允許ad中斷}voidadc()interrupt5//把轉(zhuǎn)換完成,就把10位結(jié)果放入temp3,并開(kāi)始下一次轉(zhuǎn)換{ inttemp3,temp4;///////////////////////////////////////////////////////// ADC_CONTR&=!ADC_FLAG;//把flag位清零 temp3=ADC_RES; temp4=ADC_RESL&0x03;////////////////////////////////////////////////////////////////// temp3=temp3*4+temp4; getdata(temp3); ADC_CONTR=0x88; }//////////////// leddisp同上voidmain(){ doubletemp1,temp2,temp3,temp4,temp5; intnum3;init_ad(); while(1) { if(flag2==1)//計(jì)滿18個(gè)數(shù),開(kāi)始濾波,然后計(jì)算溫度 { flag2=0; EA=0;//不允許中斷 num3=lvbo(a);//開(kāi)始濾波 temp1=(vin*num3/1024); //測(cè)得的1號(hào)管腳電壓值 temp2=temp1/op/iin-100;//測(cè)得的增加的電阻 num1=(int)((temp2/0.3851+0.5)); //溫度 num1=(num1+temp3+temp4+temp5)/4;//取前三次和本次測(cè)得溫度的平均值 temp3=temp4; temp4=temp5; temp5=num1; EA=1; } leddisp(num1); //顯示溫度 delay(1000); }}總電路圖圖7.1總原理圖總程序圖#include<reg51.h>#defineucharunsignedchar#defineuintunsignedint #defineADC_FLAG0X10;constdoublevin=5000;//電源電壓,需要實(shí)測(cè)constdoubleiin=3.3/3.3;//流過(guò)PT的電流3.3v/3.3k,需要實(shí)測(cè)constdoubleop=(1080/108);//lm358的1號(hào)管腳(1v左右)除以67號(hào)管腳電壓100mv左右,需要實(shí)測(cè)constucharc=18;inta[18];constdoubled=2;ucharcount2=0;ucharflag2;////////////frequcharflag=0;uintcount=0;///////////////////intnum1=0;//數(shù)碼管顯示溫度//inttemp3;///////////////////////////////////////////////////////////////////////////////////////// sfr ADC_CONTR=0XBC;//控制寄存器sfrADC_RES=0XBD;//轉(zhuǎn)換結(jié)果高八位寄存器sfr ADC_RESL=0XBE;//轉(zhuǎn)換結(jié)果的低八位寄存器sfrP1ASF=0X9D;//P1第二功能控制寄存器//sfrAUXR1=0XA2;/////////////leddispsbitsclk=P2^1;sbitsda=P2^2;inttab[10]={0x03,0xf3,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09};////////sbitfreq=P2^7;sbitwendu=P0^4;/////////////// leddispvoiddelay(xms){ inti,j; for(i=xms;i>0;i--) for(j=110;j>0;j--);}voidbit_out(biti){sclk=0;sda=i;sclk=1;}voidleddisp(intnum2){ chari,j; intge,bai,shi; bai=num2/100; shi=(num2%100)/10; ge=num2%10; for(i=0;i<3;i++) { switch(i) { case0: j=ge;break; case1: j=shi;break; case2: j=bai;break; } bit_out((bit)(tab[j]&0x01));/*段碼二進(jìn)制的最低位*/ bit_out((bit)(tab[j]&0x02)); bit_out((bit)(tab[j]&0x04)); bit_out((bit)(tab[j]&0x08)); bit_out((bit)(tab[j]&0x10)); bit_out((bit)(tab[j]&0x20)); bit_out((bit)(tab[j]&0x40)); bit_out((bit)(tab[j]&0x80));/*段碼二進(jìn)制的最高位*/ } /*輸出段碼,顯示數(shù)字*/}////////////////////frequencyvoidinit_t0t1(){ TMOD=0X51;//0101,0001計(jì)數(shù)器1方式1,定時(shí)器0方式1 TH1=0; TL1=0;//計(jì)數(shù)器清零 TH0=(65536-5000)/256; TL0=(65536-5000)%256;//計(jì)時(shí)50ms溢出 EA=1; ET0=1; TR0=1; TR1=1;}intread(){ uchartl,th; intval; th=TH1; tl=TL1; val=th*256+tl; returnval; }voidt0()interrupt1//定時(shí)1s,就把flag變?yōu)?{ TH0=(65536-5000)/256; TL0=(65536-5000)%256; count++; if(count>=20) { count=0; flag=1; }}////////////////////////////////////////lvbovoidgetdata(intnum3){ if(count2<=(c-1)) { a[count2]=num3; count2++; } else { count2=0; flag2=1; } }intlvbo(int*p){intsum,val; chari,j; inttemp; for(i=0;i<=(c-2);i++) { for(j=i+1;j<=(c-1);j++) { if((p[i])<(p[j])) { temp=p[i]; p[i]=p[j]; p[j]=temp; } } } for(i=d;i<=(c-d-1);i++) {sum+=p[i]; } val=sum/(c-2*d); returnval; //returnp[(c+1)/2];}////////////////////////////////wenduvoidinit_ad(){ P1ASF=0X01;//只把P1.0作為ad用 ADC_RES=0X00; ADC_RESL=0X00;//轉(zhuǎn)換結(jié)果寄存器清零 ADC_CONTR=0x88;//1010,100;打開(kāi)ad轉(zhuǎn)換電源,設(shè)定轉(zhuǎn)換速度,選擇p1.0作為ad通道 //AUXR1|=0x04; delay(2); IE=0XA0;//允許ad中斷}voidadc()interrupt5{ inttemp3,temp4;///////////////////////////////////////////////////////// ADC_CONTR&=!ADC_FLAG;//把flag位清零 temp3=ADC_RES; temp4=ADC_RESL&0x03;////////////////////////////////////////////////////////////////// temp3=temp3*4+temp4; getdata(temp3); ADC_CONTR=0x88; }//////////////////////////////voidmai

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論