![基于51單片機的頻率溫度測量系統(tǒng)報告_第1頁](http://file4.renrendoc.com/view11/M01/2C/30/wKhkGWWjTsmAddVYAAHfZazft_o026.jpg)
![基于51單片機的頻率溫度測量系統(tǒng)報告_第2頁](http://file4.renrendoc.com/view11/M01/2C/30/wKhkGWWjTsmAddVYAAHfZazft_o0262.jpg)
![基于51單片機的頻率溫度測量系統(tǒng)報告_第3頁](http://file4.renrendoc.com/view11/M01/2C/30/wKhkGWWjTsmAddVYAAHfZazft_o0263.jpg)
![基于51單片機的頻率溫度測量系統(tǒng)報告_第4頁](http://file4.renrendoc.com/view11/M01/2C/30/wKhkGWWjTsmAddVYAAHfZazft_o0264.jpg)
![基于51單片機的頻率溫度測量系統(tǒng)報告_第5頁](http://file4.renrendoc.com/view11/M01/2C/30/wKhkGWWjTsmAddVYAAHfZazft_o0265.jpg)
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
實訓任務實訓目的掌握從事電子類高級專業(yè)人才必須具備的單片機基本理論、基礎技能,接口及應用技術。同時通過實訓,使學生對于單片機的組成原理和結構有比較深刻的理解,掌握單片機應用系統(tǒng)的設計方法,可比較靈活地使用單片機構成系統(tǒng)的外圍芯片,具備單片機軟件設計和編程能力。培養(yǎng)學生分析、解決電子電路應用問題的能力。為以后從事自動化類工作打下深厚基礎。實訓要求用PROTEL99畫出原理圖;用實驗板搭建該單片機系統(tǒng);用C語言編寫程序(keil);改變電容頻率顯示發(fā)生變化;可測溫度范圍0℃~100℃通過按鍵實現(xiàn)頻率與溫度的切換顯示??蓽y得占空比;(發(fā)揮部分)增加一個按鍵,可以設定上下限值(發(fā)揮部分)實訓方案該單片機系統(tǒng)用臺灣宏晶STC單片機系列為核心,用NEC555產生可調的振蕩頻率,輸送給單片機外部中斷口,單片機啟動定時器定時,將每秒中的脈沖個數(shù)記下,即可得到頻率;給鉑電阻一個恒壓,將鉑電阻產生的電壓信號經運算放大器放大后,送到單片機內部A/D,再經過標度變換即可求得溫度。這兩個功能可以通過兩個按鍵相互轉換。顯示采用數(shù)碼管顯示,靜態(tài)方式。用單片機的串行口轉成并行來控制數(shù)碼管的顯示。圖1.1系統(tǒng)原理框圖電源模塊原理圖設計圖2.1電源模塊將220V交流電經保險絲接入開關電源模塊,輸出5V直流電壓經開關后用一大一小兩電容進行再濾波,用一個紅色的led來顯示開關的狀態(tài),當然需要加一個限流電阻,由該led的額定電壓為2.4v額定電流為24ma故限流電阻R2=(5V-2.4V)/24ma單片機模塊及其下載模塊原理圖設計圖3.1單片機模塊設計、單片機采用STC12C5A08AD也是51系列單片機,右邊是51單片機的典型時鐘電路和復位電路,左邊的兩個上拉電阻是用來切換頻率溫度顯示。圖3.2單片機下載模塊這是RS232電平(串口電平)轉TTL電平電路,構成單片機和電腦的通路,再采用STC_ISP軟件進行下載。顯示模塊原理圖設計圖4.1顯示模塊原理圖采用八段共陽數(shù)碼管顯示頻率和溫度,由于他們的額定電壓時3,8v,每段靜態(tài)額定電流為10ma,故限流電阻R1=(5-3.8)V/(10*24)ma。用移位寄存器74LS164把單片機輸出的串行數(shù)據(jù)轉成并行輸出給數(shù)碼管。程序設計#include<reg51.h>//包含單片機寄存器的頭文件 sbitsclk=P2^1;sbitsda=P2^2;inttab[10]={0x03,0xf3,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09};//共陽數(shù)碼管0~9編碼voiddelay(xms)//延時程序{ inti,j; for(i=xms;i>0;i--) for(j=110;j>0;j--);}voidbit_out(biti)//給74ls164寫入一位數(shù){sclk=0;sda=i;sclk=1;//上跳沿時寫入數(shù)據(jù)}voidleddisp(intnum)//把一個三位數(shù)顯示到數(shù)碼管上{ chari,j; intge,bai,shi;//把三位數(shù)變成3個一位數(shù) bai=num/100; shi=(num%100)/10; ge=num%10; for(i=0;i<3;i++)//每次寫一個數(shù) { switch(i)//由于是移位寄存器是故先寫個位數(shù),再寫十位數(shù),最后寫百位數(shù) { case0: j=ge;break; case1: j=shi;break; case2: j=bai;break; } //把每個數(shù)對應的八位編碼從低位到高位寫入到74ls164 bit_out((bit)(tab[j]&0x01));/*段碼二進制的最低位*/ 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));/*段碼二進制的最高位*/ } /*輸出段碼,顯示數(shù)字*/}voidmain(){ while(1) { leddisp(789); delay(100); } }頻率模塊原理圖設計圖5.1555頻率模塊原理圖這是555構成的多諧振蕩器用來產生方波信號,產生的頻率為f=1/(ln2*C11*(R4+2R3))程序設計#include<reg51.h>#defineucharunsignedchar#defineuintunsignedintucharflag=0;uintcount=0;intnum1=0;///////ledisp同上///////frequencyvoidinit_t0t1()//初始化計數(shù)器和定時器{ TMOD=0X51;//0101,0001計數(shù)器1方式1,定時器0方式1 TH1=0; TL1=0;//計數(shù)器清零 TH0=(65536-5000)/256; TL0=(65536-5000)%256;//計時器置初值使50ms溢出 EA=1; ET0=1; TR0=1; TR1=1;}intread()//讀出計數(shù)器對15號引腳的計數(shù)值{ uchartl,th; intval; th=TH1; tl=TL1; val=th*256+tl; returnval; }voidt0()interrupt1//T0的中斷服務程序,每50ms執(zhí)行一次,目的是定時1s{ TH0=(65536-5000)/256;//重置初值 TL0=(65536-5000)%256; count++; //每過50ms加1 if(count>=20) //20個50ms即是一秒 { count=0; flag=1; }}voidmain(){ init_t0t1();//調用T0,T1初始化程序 while(1) { if(flag==1)//一秒時間到 { TR0=0; //關掉定時器計數(shù)器,防止中斷 TR1=0; num1=read();//1s時間到就把讀出計數(shù)器的值,此值就是頻率 leddisp(num1);//顯示頻率 delay(100); TH1=0; TL1=0;//計數(shù)器清零 TH0=(65536-5000)/256; TL0=(65536-5000)%256;//重置初值 flag=0;//flag清零 TR0=1;//重新打開定時器計數(shù)器 TR1=1; } }}溫度采集模塊原理圖設計圖6.1溫度測量模塊左下角是利用TL431構成的穩(wěn)壓電源,輸出電壓為V5=Vref/R16*(R15+R16)=3.3v其中Vref=2.5v由運放的虛短性質知V6=3.3V,故流過R11的電流為1ma,由運放的虛斷性質知流過PT100的電流也為1ma恒流。再由PT100的溫度電阻特性如下圖可知溫度T=(Vpt(mv)-100*1)/0.385T>0右邊是一個差分放大電路放大倍數(shù)op=(1+R8/R6),故Vout=op*Vpt程序設計#include<reg51.h>#defineucharunsignedchar#defineuintunsignedint #defineADC_FLAG0X10;constdoublevin=5000;//電源電壓,需要實測constdoubleiin=3.3/3.3;//流過PT的電流3.3v/3.3k,需要實測constdoubleop=(1080/108);//lm358的1號管腳(1v左右)除以67號管腳電壓100mv左右,需要實測constucharc=18;inta[18];constdoubled=2;ucharcount2=0;ucharflag2;intnum1=0;//數(shù)碼管顯示溫度//inttemp3; sfr ADC_CONTR=0XBC;//控制寄存器sfrADC_RES=0XBD;//轉換結果的高八位寄存器sfr ADC_RESL=0XBE;//轉換結果的低八位寄存器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)//把轉換結果存進數(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;//轉換結果寄存器清零 ADC_CONTR=0x88;//1010,100;打開ad轉換電源,設定轉換速度,選擇p1.0作為ad通道 delay(2); IE=0XA0;//允許ad中斷}voidadc()interrupt5//把轉換完成,就把10位結果放入temp3,并開始下一次轉換{ 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)//計滿18個數(shù),開始濾波,然后計算溫度 { flag2=0; EA=0;//不允許中斷 num3=lvbo(a);//開始濾波 temp1=(vin*num3/1024); //測得的1號管腳電壓值 temp2=temp1/op/iin-100;//測得的增加的電阻 num1=(int)((temp2/0.3851+0.5)); //溫度 num1=(num1+temp3+temp4+temp5)/4;//取前三次和本次測得溫度的平均值 temp3=temp4; temp4=temp5; temp5=num1; EA=1; } leddisp(num1); //顯示溫度 delay(1000); }}總電路圖圖7.1總原理圖總程序圖#include<reg51.h>#defineucharunsignedchar#defineuintunsignedint #defineADC_FLAG0X10;constdoublevin=5000;//電源電壓,需要實測constdoubleiin=3.3/3.3;//流過PT的電流3.3v/3.3k,需要實測constdoubleop=(1080/108);//lm358的1號管腳(1v左右)除以67號管腳電壓100mv左右,需要實測constucharc=18;inta[18];constdoubled=2;ucharcount2=0;ucharflag2;////////////frequcharflag=0;uintcount=0;///////////////////intnum1=0;//數(shù)碼管顯示溫度//inttemp3;///////////////////////////////////////////////////////////////////////////////////////// sfr ADC_CONTR=0XBC;//控制寄存器sfrADC_RES=0XBD;//轉換結果高八位寄存器sfr ADC_RESL=0XBE;//轉換結果的低八位寄存器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));/*段碼二進制的最低位*/ 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));/*段碼二進制的最高位*/ } /*輸出段碼,顯示數(shù)字*/}////////////////////frequencyvoidinit_t0t1(){ TMOD=0X51;//0101,0001計數(shù)器1方式1,定時器0方式1 TH1=0; TL1=0;//計數(shù)器清零 TH0=(65536-5000)/256; TL0=(65536-5000)%256;//計時50ms溢出 EA=1; ET0=1; TR0=1; TR1=1;}intread(){ uchartl,th; intval; th=TH1; tl=TL1; val=th*256+tl; returnval; }voidt0()interrupt1//定時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;//轉換結果寄存器清零 ADC_CONTR=0x88;//1010,100;打開ad轉換電源,設定轉換速度,選擇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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年水電工程招投標代理服務合同
- 2025年帶燈座項目投資可行性研究分析報告
- 制作度服務合同范例
- 2025年度綠色建筑項目施工資料審核承包合同范本
- 車輛出質抵押合同范本
- 個人股東合作合同范本
- 2025年三相中頻電源行業(yè)深度研究分析報告
- 臨建混凝土勞務合同范本
- 2025年度工程合同風險預警與防控策略
- 加工彈簧合同范本
- 《工作場所安全使用化學品規(guī)定》
- 2022年菏澤醫(yī)學??茖W校單招綜合素質考試筆試試題及答案解析
- 市政工程設施養(yǎng)護維修估算指標
- 課堂嵌入式評價及其應用
- 《管理學基礎》完整版課件全套ppt教程(最新)
- 短視頻:策劃+拍攝+制作+運營課件(完整版)
- 基金會財務報表審計指引
- 藍色卡通風好書推薦教育PPT模板
- 2022年江蘇省泰州市中考數(shù)學試題及答案解析
- 石家莊鐵道大學四方學院畢業(yè)設計46
- 智能化系統(tǒng)培訓
評論
0/150
提交評論