




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
基于單片機的溫度控制器設計1引言1.1設計目的1.溫度顯示的根本范圍-55℃—128℃;2.精度誤差等于0.1℃;3.所測溫度值由四位數碼管顯示;4.可以任意設定溫度的上下限報警功能。1.2設計要求設計一個溫度控制電路,用AT89C51作為溫度測試控制系統設計的核心器件,用數字溫度傳感器DS18B20實現溫度的測量,用數碼管顯示對應的溫度。通過指示燈和報警器完成溫度上下限的報警指示功能,并通過對電風扇和電熱絲的操作,使其恢復到要求的范圍內。設計加、減按鈕以及設置按鈕實現上下限溫度的任意設定。2系統方案設計該方案使用了AT89C51單片機作為控制核心,以智能溫度傳感器DS18B20為溫度測量元件,對各點溫度進行檢測,設置溫度上下限,超過其溫度值就報警指示,并通過控制使溫度恢復到要求的范圍內。顯示電路采用4位共陰極LED數碼管顯示。使用三極管,電阻,指示燈和蜂鳴器組成的報警指示電路,設計溫度控制器,實現溫度的測量、控制、報警、顯示、設置等功能??傮w設計方框圖如圖1所示:圖1總體設計方框圖3硬件設計3.1溫度傳感器與單片機的連接用AT89C51作為溫度控制系統設計的核心器件。AT89C51是一種低損耗、高性能、CMOS八位微處理器。DS18B20與單片機的接口電路非常簡單,DS18B20只有三個引腳,一個接地,一個接電源,一個數字輸入輸出引腳接單片機I/O口。測量溫度范圍在-55℃到+128℃之間,數字溫度計的分辨率用戶可以從9位到12位選擇,內部有溫度上、下限告警設置。總線上傳輸的所有數據和命令都是以字節的低位在前。DS18B20在使用時,一般都采用單片機來實現數據采集。溫度傳感器的單總線與單片機的P3.7連接,單片機與溫度傳感器的連接圖如圖2所示:圖2單片機與溫度傳感器的連接圖3.2報警溫度調整按鍵本系統設計三個按鍵,采用查詢方式,一個用于選擇切換設置報警溫度和當前溫度,另外兩個分別用于設置報警溫度的加和減。按鍵電路圖如圖3所示:圖3按鍵電路圖3.3單片機與報警控制電路系統中的報警電路是由三極管,蜂鳴器,發光二極管和限流電阻組成,并與單片機的P1.5~P1.7端口連接??刂齐娐酚苫瑒幼冏杵?,電熱絲〔電燈泡〕和電風扇〔電動機〕組成,與單片機的P1.3~P1.4端口連接。報警控制電路圖如圖4所示:圖4報警控制電路圖3.4顯示電路顯示電路采用4位共陰極LED數碼管,P2端口是一個內部帶上拉電阻的8位雙向I/O,作為段碼輸出。P3口的低四位作為數碼管的位選端。采用動態掃描的方式顯示。數碼管顯示電路圖如圖5所示:圖5數碼管顯示電路圖4系統軟件設計系統程序主要包括主程序,顯示數據程序,讀出溫度程序,按鍵掃描程序等。4.1主程序主程序的主要功能是負責溫度的實時顯示、讀出并處理DS18B20的測量的當前溫度值,其程序流程見圖6所示:圖6主程序流程圖4.2顯示數據程序顯示數據刷新程序主要是對別離后的溫度顯示數據進行刷新操作,當標志位為1時將符號顯示位移入第一位。程序流程圖如圖7所示:圖7顯示數據程序流程圖4.3讀出溫度程序讀出溫度程序的主要功能是讀出RAM中的9字節,在讀出時需進行CRC校驗,校驗有錯時不進行溫度數據的改寫。其程序流程圖如圖8所示:圖8程序流程圖4.4按鍵掃描程序按鍵采用掃描查詢方式,設置標志位,當標志位為1時,顯示設置溫度,否那么顯示當前溫度。按鍵掃描程序流程圖圖如圖9所示:圖9按鍵掃描程序流程圖5系統仿真及實際調試進入Proteus界面后,連接好電路,并將程序下載進去。將DS18B20精度的改為0.1,數碼管顯示溫度與傳感器的溫度相同,溫度顯示仿真圖如圖10所示:圖10溫度顯示仿真圖當按下SET鍵一次時,進入溫度報警上線調節,此時顯示軟件設置溫度報警上線,按ADD或DEC時,分別對報警溫度進行加1或減1;當再次按下SET鍵時,進入溫度報警下線調節,此時顯示軟件設置溫度報警下線,按ADD或DEC時,分別對報警溫度進行加1或減1;當第三次按下SET鍵時,退出溫度報警線設置,顯示當前溫度。溫度調試仿真圖如圖11所示:圖11溫度調試仿真當溫度超過設定的上限溫度時,報警器開始報警且指示燈〔紅燈〕開始閃爍,同時,電動機帶動電風扇轉使溫度降低;當溫度超過設定的下限溫度時,報警器開始報警且指示燈〔綠燈〕開始閃爍,同時,電熱絲發熱使溫度升高;報警控制顯示仿真圖如圖12所示:圖12報警控制顯示仿真圖6總結通過這次溫度控制器的設計與仿真,讓我更多的了解了設計電路的程序,以及溫度控制器的工作原理與設計理念,同時在設計過程中也暴露出許多問題,剛開始設計時,沒有過多的查詢相關資料,只是盲目的開始設計,以致設計工作停止不前,對編程不是很熟練,使得花了大量的時間用于軟件編程。把程序調試完好后,一切工作也都能迎刃而解了。從這次的課程設計中,我意識到,在以后的學習中,要理論聯系實際,把我們所學的理論知識用到實際當中,學習使用單機片機更是如此,程序只有在經常的讀寫過程中才能提高,也能提高查詢資料、分析問題、進而解決問題的能力。參考文獻[1]王思明,張鑫等.單片機原理及應用系統設計[M].北京:科學出版社,2023.[2]陶紅艷,余成波.傳感器與現代檢測技術[M].北京:清華大學出版社,2023.[3]康華光.電子技術根底—數字局部[M].北京:高等教育出版社,2023.[4]朱清惠等.Proteus教程:電子線路設計制版與仿真[M].北京:清華大學出版社,2023.[5]譚浩強.C程序設計[M].北京:清華大學出版社,2023.附錄源程序#include<reg51.h>//**********51單片機頭文件#include<intrins.h>//***********_nop_();延時函數用#definedmP2//****************段碼輸出口#defineucharunsignedchar#defineuintunsignedintsbitDQ=P3^7;//******************溫度輸入口sbitw0=P3^3;//******************數碼管4sbitw1=P3^2;//******************數碼管3sbitw2=P3^1;//******************數碼管2sbitw3=P3^0;//******************數碼管1sbitbeep=P1^5;//*****************蜂鳴器sbitset=P3^4;//******************溫度設置切換鍵sbitadd=P3^5;//******************溫度加sbitdec=P3^6;//******************溫度減sbita=P1^6;//******************紅燈sbitb=P1^7;//******************綠燈sbitc=P1^3;//******************電機sbitd=P1^4;//******************電燈泡inttemp1=0;//**********顯示當前溫度和設置溫度的標志位為0時顯示當前溫度uinth;uinttemp;ucharr;ucharhigh=30,low=20;//******************設置初始上下限報警溫度值ucharsign;ucharq=0;uchartt=0;ucharscale;//**************溫度小數局部用查表法***********//ucharcodeditab[16]={0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09};//******************小數斷碼表ucharcodetable_dm[12]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40};//************共陰LED段碼表"0""1""2""3""4""5""6""7""8""9""不亮""-"uchartable_dm1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};//**個位帶小數點的斷碼表*********uchardatatemp_data[2]={0x00,0x00};//******************讀出溫度暫放uchardatadisplay[5]={0x00,0x00,0x00,0x00,0x00};//******顯示單元數據,共4個數據和一個運算暫用/*****************11us延時函數*************************/voiddelay(uintt){for(;t>0;t--);}voidscan(){intj;for(j=0;j<4;j++){if(j==0){dm=table_dm[display[0]];w0=0;delay(50);w0=1;}//*******小數elseif(j==1){dm=table_dm1[display[1]];w1=0;delay(50);w1=1;}//***個位elseif(j==2){dm=table_dm[display[2]];w2=0;delay(50);w2=1;}//****十位elseif(j==3){dm=table_dm[display[3]];w3=0;delay(50);w3=1;}//****百位}}voidow_reset(void)//***************DS18B20復位函數{charpresence=1;while(presence){while(presence){DQ=1;_nop_();_nop_();//******************從高拉倒低DQ=0;delay(50);//****************************550usDQ=1;delay(6);//**********************66uspresence=DQ;//****************presence=0復位成功,繼續下一步}delay(45);//********************延時500uspresence=~DQ;}DQ=1;//**********************拉高電平}/****************DS18B20寫命令函數************************///***************向1-WIRE總線上寫1個字節voidwrite_byte(ucharval){uchari;for(i=8;i>0;i--){DQ=1;_nop_();_nop_();//****************從高拉倒低DQ=0;_nop_();_nop_();_nop_();_nop_();//******5usDQ=val&0x01;//********************最低位移出delay(6);//******************66usval=val/2;//******************向右移1位}DQ=1;delay(1);}ucharread_byte(void)//****************DS18B20讀1字節函數{uchari;ucharvalue=0;for(i=8;i>0;i--){DQ=1;_nop_();_nop_();value>>=1;DQ=0;_nop_();_nop_();_nop_();_nop_();//******************4usDQ=1;_nop_();_nop_();_nop_();_nop_();//******************4usif(DQ)value|=0x80;delay(6);//66us}DQ=1;return(value);}read_temp()//*****************讀出溫度函數{ow_reset();//******************總線復位delay(200);write_byte(0xcc);//******************發命令write_byte(0x44);//*****************發轉換命令ow_reset();delay(1);write_byte(0xcc);//******************發命令write_byte(0xbe);temp_data[0]=read_byte();//******************讀溫度值的低字節temp_data[1]=read_byte();//******************讀溫度值的高字節temp=temp_data[1];temp<<=8;temp=temp|temp_data[0];//******************兩字節合成一個整型變量。returntemp;//******************返回溫度值}voidwork_temp(uinttem)//****************溫度數據處理函數{ucharn=0;if(tem>6348)//******************溫度值正負判斷{tem=65536-tem;n=1;}//*********負溫度求補碼,標志位置1display[4]=tem&0x0f;//**********取小數局部的值display[0]=ditab[display[4]];//*******存入小數局部顯示值display[4]=tem>>4;//************取中間八位,即整數局部的值display[3]=display[4]/100;//******取百位數據暫存display[1]=display[4]%100;//*****取后兩位數據暫存display[2]=display[1]/10;//******取十位數據暫存display[1]=display[1]%10;//*****個位數據r=display[1]+display[2]*10+display[3]*100;//***********符號位顯示判斷***********//if(!display[3]){display[3]=0x0a;//*********最高位為0時不顯示if(!display[2]){display[2]=0x0a;//**********次高位為0時不顯示}}if(n){display[3]=0x0b;}//******負溫度時最高位顯示"-"}voidBEEP()//***********報警器指示燈的實現程序{if(r>=high&&r<129){beep=!beep;a=!a;}else{beep=0;a=0;}if(r<=low){beep=!beep;b=!b;}else{beep=0;b=0;}}voidcon(void)//*********實現溫度控制程序{if(r>=high&&r<129)c=1;elsec=0;if(r<=low)d=1;elsed=0;}//*********設置溫度顯示轉換************//voidxianshi(inthorl){intn=0;if(horl>128){horl=256-horl;n=1;}display[3]=horl/100;display[3]=display[3]&0x0f;display[2]=horl%100/10;display[1]=horl%10;display[0]=0;if(!display[3]){display[3]=0x0a;//***********最高位為0時不顯示if(!display[2]){display[2]=0x0a;//***********次高位為0時不顯示}}if(n){display[3]=0x0b;//***********負溫度時最高位顯示"-"}}//*********按鍵查詢程序**************//voidkeyscan(){inttemp1;//**********最高溫度和最低溫度標志位if(set==0){whil
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 自動化施工方案
- 幼兒園大班《滑梯的回憶》教案
- 建筑施工特種作業-高處作業吊籃安裝拆卸工真題庫-2
- 容錯性定義題目及答案
- 1 1 集合-2026版53高考數學總復習A版精煉
- 2023-2024學年云南省保山市高二下學期期末質量檢測數學試題(解析版)
- 2023-2024學年山東省青島市萊西市高二下學期期末考試數學試題(解析版)
- 新疆盛鼎龍新材料科技有限責任公司2500噸-年高效偶聯劑5000噸-年甲基苯基硅油及3萬噸-年硅酮膠項目環評報告
- 2025年秋三年級上冊語文同步教案 8 總也倒不了的老屋
- 物流公司和客戶合作協議
- 年產12000噸水合肼(100%)項目環評報告書
- 《有機波譜分析》期末考試試卷及參考答案
- 公路工程基本建設項目概算、預算編制辦法
- 最詳細的整車開發流程
- 部編版七年級歷史(下)材料論述題專項訓練
- 年產1000噸乳酸的生產工藝設計
- 博克服裝CAD制版說明操作手冊(共95頁)
- 光電效應測普朗克常數-實驗報告
- (完整word版)數據模型與決策課程案例分析
- 自制桁架移動式操作平臺施工方案
- 物業服務參與校園文化建設及舉辦大型活動配合措施
評論
0/150
提交評論