畢業(yè)設計論文,多點溫度檢測系統(tǒng),單片機AT89S51 DS18B20 總線_第1頁
畢業(yè)設計論文,多點溫度檢測系統(tǒng),單片機AT89S51 DS18B20 總線_第2頁
畢業(yè)設計論文,多點溫度檢測系統(tǒng),單片機AT89S51 DS18B20 總線_第3頁
畢業(yè)設計論文,多點溫度檢測系統(tǒng),單片機AT89S51 DS18B20 總線_第4頁
畢業(yè)設計論文,多點溫度檢測系統(tǒng),單片機AT89S51 DS18B20 總線_第5頁
已閱讀5頁,還剩29頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

將各個功能程序以子程序的形式寫好,當寫主程序的時候,只需要調(diào)用子程序。將功能程序段寫成子程序的形式,除了方便調(diào)用之外,還有一個好處那就是以后寫程序的時候如果要用到,就可以直接調(diào)用這個單元功能塊。(三)1-Wire總線接口:1-Wire總線(單總線)標準為外設器件沿著一條數(shù)據(jù)線進行雙向數(shù)據(jù)傳輸。任何單總線系統(tǒng)都包含一臺主機和一個從機,它們共用一條數(shù)據(jù)線。這條數(shù)據(jù)線被地址、控制和數(shù)據(jù)信息復用,全部器件完全依靠從數(shù)據(jù)線獲得電源供電和數(shù)字信號,也可以外部電源供電。當數(shù)據(jù)線為高電平時,電荷存儲在器件內(nèi)部;當數(shù)據(jù)線為低電平時,器件利用這些電荷提供能量。R為上拉電阻,以提高電信號的驅動能力.顧名思義單總線只有一根數(shù)據(jù)線設備主機或從機通過一個漏極開路或三態(tài)端口連接至該數(shù)據(jù)線這樣允許設備在不發(fā)送數(shù)據(jù)時釋放數(shù)據(jù)總線以便總線被其它設備所使用單總線端口為漏極開路其內(nèi)部等效電路如圖1所示單總線要求外接一個約5k的上拉電阻這樣單總線的閑置狀態(tài)為高電平不管什么原因如果傳輸過程需要暫時掛起且要求傳輸過程還能夠繼續(xù)的話則總線必須處于空閑狀態(tài)位傳輸之間的恢復時間沒有限制只要總線在恢復期間處于空閑狀態(tài)高電平如果總線保持低電平超過480s總線上的所有器件將復位另外在寄生方式供電時為了保證單總線器件在某些工作狀態(tài)下如溫度轉換期間EEPROM寫入等具有足夠的電源電流必須在總線上提供強上拉如圖4-2所示:圖4-2(四)1-Wire總線讀取數(shù)據(jù)子程序流程:1-Wire總線讀取流程圖:開始溫度數(shù)據(jù)處理LED數(shù)碼管清零開始溫度數(shù)據(jù)處理LED數(shù)碼管清零讀取溫度DS18B20檢測系統(tǒng)初始化溫度顯示在主機發(fā)出ROM命令以訪問某個指定的DS18B20接著就可以發(fā)出DS18B20支持,的某個功能命令這些命令允許主機寫入或讀出DS18B20暫存器啟動溫度轉換以及判斷。從機的供電方式DS18B20的功能命令總結于表4-12、1-Wire總線對DS18B20功能命令集表4-13、讀取子程序:voidwrite_byte(ucharval)//向1-WIRE總線上寫1個字節(jié){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);}/****************DS18B20讀1字節(jié)函數(shù)************************/ucharread_byte(void)//從總線上讀取1個字節(jié){uchari;ucharvalue=0;//將返回值初始化為0for(i=8;i>0;i--)//連續(xù)讀取8個數(shù)據(jù)位{DQ=1;_nop_();_nop_();value>>=1;DQ=0;_nop_();_nop_();_nop_();_nop_();//4usDQ=1;_nop_();_nop_();_nop_();_nop_();//4usif(DQ)value|=0x80;//將返回的字節(jié)對應的數(shù)據(jù)位置為1delay(6);//66us}DQ=1;return(value);}結束語由于在外面實習,因為沒有充分的時間和條件。經(jīng)過不斷的學習和努力,在其他老師及同學們的熱心幫助與指導下,基于單片機的單總線多點溫度測控系統(tǒng)的畢業(yè)設計順利完成本設計中以AT89S51為主控單元,DS18B20為檢測單元,四位二進制7段數(shù)碼管為顯示單元,外加復位開關電路和晶振電路,撥碼開關用來接通DS18B20,形成單路實時檢測,使溫度信息更迅速,直觀地發(fā)布。系統(tǒng)操作簡潔,易懂,可擴展性強,整個系統(tǒng)硬件簡單、可靠,系統(tǒng)成本低。電子信息技術日新月異地飛速發(fā)展,人們總是處在不斷學習階段,再加上我水平有限,所以本設計肯定存在許多不盡如人意的地方,歡迎廣大老師和同學批評指正。參考文獻[1]電子技術.北京:電子工業(yè)出版社.2003[2]C程序設計(第三版).北京:清華大學出版社.2003[3]電力電子技術.西安:西安電子科技大學出版社.2004[4]中外集傳感器實用手冊.北京:電子工業(yè)出版社.2005[5]8051單片機-數(shù)據(jù)傳輸接口擴展技術與實例.北京:人民郵電出版社.2005[6]大學生-電子技術與應用.北京:中國電力出版社.2007[7]電子設計競賽實訓教程.北京:北京航空航天大學出版社.2007[8]單片機應用技術(C語言).北京:中國勞動社會保障出版社.2007[9]計算機控制技術.北京:北京師范大學出版社.2007附錄附錄一程序:#include"reg51.h"#include"intrins.h"http://_nop_();延時函用#defineDisdataP1//段碼輸出口#definediscanP0//掃描口#defineucharunsignedchar#defineuintunsignedintsbitDQ=P3^4;//溫度輸入口sbitDIN=P1^7;//LED小數(shù)點控制sbitmusic=P2^2;sbithold=P2^0;sbita=P2^4;sbitb=P2^5;sbitm=P3^1;sbitn=P3^2;uinth;uinttemp;unsignedcharpresence,flash=0;ucharcodeditab[16]={0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09};//溫度小數(shù)部分用查表法//ucharcodedis_7[14]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf,0x9c,0xc6};//共陽LED段碼表"0""1""2""3""4""5""6""7""8""9""不亮""-""o""C"ucharcodescan_con[6]={0xc1,0xc2,0xc4,0xc8,0xd0,0xe0};//列掃描控制字uintdatatemp_data[2]={0x00,0x00};//讀出溫度暫放uintdatadisplay[7]={0x00,0x00,0x00,0x00,0x00,0x00,0x00};//顯示單元數(shù)據(jù),共6個數(shù)據(jù)和一個運算暫用/*****************延時函數(shù)*************************/voiddelay(uintt){for(;t>0;t--);}/********************************************************//*/*蜂鳴器驅動函數(shù)/*/********************************************************/beep(){unsignedchari;for(i=0;i<50;i++){music=1;delay(20);music=0;delay(20);}}voidkey(void)//開頭選擇{if(a==1){m=0;n=0;}if(b==1){m=1;n=1;}}/*******************************************************顯示掃描函數(shù)1,在溫度檢測開始的時候顯示0000********************************************************/scan1(){discan=scan_con[0];//位選Disdata=0x00;//數(shù)據(jù)顯示DIN=0;delay(200);//小數(shù)點顯示discan=scan_con[1];//位選Disdata=0x00;//數(shù)據(jù)顯示delay(200);discan=scan_con[2];//位選Disdata=0x00;//數(shù)據(jù)顯示delay(200);discan=scan_con[3];//位選Disdata=0x00;//數(shù)據(jù)顯示delay(200);discan=scan_con[4];//位選Disdata=0x00;//數(shù)據(jù)顯示delay(200);discan=scan_con[5];//位選Disdata=0xc00;//數(shù)據(jù)顯示delay(200);}/****************顯示掃描函數(shù)***************************/scan(){chark;for(k=0;k<6;k++)//6位LED掃描控制{discan=scan_con[k];//位選Disdata=dis_7[display[k]];//數(shù)據(jù)顯示if(k==3){DIN=0;}//小數(shù)點顯示delay(200);}}/////****************DS18B20復位函數(shù)************************/ow_reset(void){charpresence=1;while(presence){while(presence){DQ=1;_nop_();_nop_();//從高拉倒低DQ=0;delay(50);//550usDQ=1;delay(6);//66uspresence=DQ;//presence=0復位成功,繼續(xù)下一步}delay(45);//延時500uspresence=~DQ;//取反}DQ=1;//拉高電平}/////****************DS18B20寫命令函數(shù)************************/voidwrite_byte(ucharval)//向1-WIRE總線上寫1個字節(jié){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);}///****************DS18B20讀1字節(jié)函數(shù)************************/ucharread_byte(void)//從總線上讀取1個字節(jié){uchari;ucharvalue=0;//將返回值初始化為0for(i=8;i>0;i--)//連續(xù)讀取8個數(shù)據(jù)位{DQ=1;_nop_();_nop_();value>>=1;DQ=0;_nop_();_nop_();_nop_();_nop_();//4usDQ=1;_nop_();_nop_();_nop_();_nop_();//4usif(DQ)value|=0x80;//將返回的字節(jié)對應的數(shù)據(jù)位置為1delay(6);//66us}DQ=1;return(value);}///****************讀出溫度函數(shù)************************/read_temp(){ow_reset();//總線復位if(presence==1){beep();flash=1;}//DS18B20不正常,led報警delay(200);write_byte(0xcc);//發(fā)命令,跳過讀序列號的操作write_byte(0x44);//啟動溫度轉換命令ow_reset();delay(1);write_byte(0xcc);//發(fā)命令,跳過讀序列號的操作write_byte(0xbe);//讀取溫度寄存器等(共可讀9個寄存器)前兩個就是溫度temp_data[0]=read_byte();//讀溫度值的低字節(jié)temp_data[1]=read_byte();//讀溫度值的高字節(jié)temp=temp_data[1];temp<<=8;//先左移8再取值temp=temp|temp_data[0];//兩字節(jié)合成一個整型變量。returntemp;//返回溫度值}/****************溫度數(shù)據(jù)處理函數(shù)************************///二進制高字節(jié)的低半字節(jié)和低字節(jié)的高半字節(jié)組成一字節(jié),這個//字節(jié)的二進制轉換為十進制后,就是溫度值的百、十、個位值,而剩//下的低字節(jié)的低半字節(jié)轉化成十進制后,就是溫度值的小數(shù)部分/********************************************************/work_temp(uinttem){ucharn=0;if(tem>6348)//溫度值正負判斷{tem=65536-tem;n=1;}//負溫度求補碼,標志位置1display[6]=tem&0x0f;//取小數(shù)部分的值display[2]=ditab[display[6]];//存入小數(shù)部分顯示值display[6]=tem>>4;//取中間八位,即整數(shù)部分的值display[0]=13;display[1]=12;display[5]=(display[6])/100;//取百位數(shù)據(jù)暫存display[3]=(display[6])%100;//取后兩位數(shù)據(jù)暫存display[4]=(display[3])/10;//取十位數(shù)據(jù)暫存display[3]=(display[3])%10;/******************符號位顯示判斷**************************/if(!display[5]){display[5]=10;//最高位為0時不顯示if(!display[4]){display[4]=10;//次高位為0時不顯示}}if(n){display[5]=11;//負溫度時最高位顯示"-"}if(display[5]==3){beep();//當溫度低于30°時開始報警}}/****************主函數(shù)************************/main(){inti;key();Disdata=0xff;//

溫馨提示

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

評論

0/150

提交評論