《基于STC89C51單片機的多路溫度測控儀結構設計》17000字(論文)_第1頁
《基于STC89C51單片機的多路溫度測控儀結構設計》17000字(論文)_第2頁
《基于STC89C51單片機的多路溫度測控儀結構設計》17000字(論文)_第3頁
《基于STC89C51單片機的多路溫度測控儀結構設計》17000字(論文)_第4頁
《基于STC89C51單片機的多路溫度測控儀結構設計》17000字(論文)_第5頁
已閱讀5頁,還剩61頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

.4.9電路原理圖圖2-19電路原理圖第三章軟件部分設計3.1軟件流程圖圖4-1流程圖3.2軟件系統設計分析這個六路溫度測控儀,具有自動巡檢和手動巡檢兩種模式,并且兩大類模式能夠肆意的展開轉換。自動智能巡檢時,每一間隔一段固準確定時間,測量控制儀就會自動智能的根據順序展開轉換信號通道,轉換信號通道的有效時間間隔能夠經過項目菜單系數來設立;當人工手動巡檢時,儀器設備能夠直接測試某一個信號通道的溫度實際值,一直到又一次轉換信號通道。當項目菜單關停時,可以通過5鍵進行巡檢方式的切換;在當菜單打開時,可以通過5鍵退出菜單,返回之前的檢測模式,再次按5鍵進行檢測模式的切換3.2.1手動和自動檢測的切換檢測通道實現切換,全局變量表示著檢測通道的序號,取值范圍是0-7,代表著8條通道的序號,在這里采用6條通道。函數能夠實現對模擬開關的控制,只有在函數共同作用時才能夠實現檢測通道的切換。在自動檢測時,自動切換檢測通道的時間的間隔是由單片機內部的定時器中斷來實現的。當手動切換檢測模式時,只有主動的切換檢測通道,才會使檢測通道發生變化,所以在進行手動檢測通道時必須要關閉單片機的定時器TO。這個時候候的就能夠經過測試“增長”與“降低”來轉變的數值,進而完成測試信號通道的轉換。撰寫的應用程序是經過測試五個按鈕按一下的數目來展開完成測試方式辨別的。當在項目菜單關停時,每一次按一下5控制鍵1次,變化量MODE就會加1。通過判斷MODE的值是否能夠被2整除,就可以得到相應切換到哪一種檢測模式。當檢測模式切換到手動檢測模式的時候,首先要關閉單片機的定時器T0中斷,然后在進行啟動相應的程序。在當檢測模式切換到自動巡檢模式時,應當打開單片機的定時器T0中斷,關閉手動檢測模式的函數。這樣就能夠實現檢測的模式進行切換。3.2.2按鍵檢測按鍵的檢測共分為兩個階段,首先第一階段的目標是為了發現哪個按鍵被按下了。在當前的這個階段里“_key_status==CHECK_KEY_DOWN”,在滿足這個條件的時候,程序會檢測當前的“_key_dx”表示的是代表的按鍵是否已經被按下,即調用“_check_key(_key_idx)”,并且判斷返回值是否為“KEY_DowN”。如果這時條件并不滿足,則令“_key_idx”加“1”表示下一個鍵,“get_key()”函數返回。待到下一次“get_key()”再次被調用的時候,那么程序檢查“_key_idx”所代表的另一個按鍵是被按下。一直到當確定某個按鍵確實已經被按下的時候,例如當2號按鍵被按下時,那么在按鍵按下的這個期間中,一定會出現一次“get_key()”它的調用,并且在這一次的調用時“_key_idx==2”,所以就會有“_check_key(_key_idx)==KEY_DOWN”,然后程序就會進入到第2個階段,“_key_status”會被修改成為“CHECK_KEY_UP”。在當“_key_status==CHECK_KEY_UP”的第2個階段的時候,“_key_idx”的值是不會再次被修改的,而是鎖定在之前檢測到已經被按下的按鍵上面,對于之前舉的例子就是“key_idx=2”。在這時的這個階段中,當每一次“get_key()”被調用的時候,那么這個時候的“get_key()”將會返回“-1”;如果條件成立,說明用戶已經將2號按鍵按下然后有松開按鍵,之后“get_key()”會返回到“2”,在此同時“_key_status”會被改回到“CHECK_KEY_UP”,在下一次的調用的時候再一次重復之前的過程。3.2.3控制和菜單模塊與信號輸入參考程序:voidmain(){Time0_Init();//定時器初始化Serial_Init();//串控制端口初始處理化while(1){//項目菜單應用程序,反應控制鍵盤自動輸入,自動顯示與修改調整系數menu_routine();//完成測試信號通道的轉換switch8_1(ABC);//操作控制應用程序,A/D交換,并且自動顯示最終結果ctr_routine();}}在主運算函數里,始終長期周期循環交替使用menu_routine()與ctr_routine()。僅有在menu_routine()被使用的時候,項目菜單中的系數項才有可能在顯示器設備上自動刷新表明,客戶經過控制鍵盤對項目菜單的操作應用才可以獲取應用程序的反應與全面處理。僅有在ctr_routine()被使用的時候,才會展開A/D采樣并且自動刷新顯示器設備上的主要內容,操作控制自動報警控制器設備的動作。想要使2個功能模塊看起來是同時履行的,就需要menu_routine()與ctr_routine()各自的履行作用時間都不可以非常長。假如menu_routine()履行的有效時間比較長,則在這時期應用程序不會展開采樣,自動報警控制器設備分布狀態也就不會隨后改變。相同的,假如ctr_routine()履行的有效時間過長,在運算函數自動返回前,客戶按照壓控制鍵盤的操作應用不會獲取應用程序反應。每一次ctr_routine()被使用的時候,均會分別履行A/D交換采樣、參考依據采樣數值操作控制自動報警燈、發送傳輸通道號和與溫度相關的數值以及刷新顯示采樣值這4步操作,執行時間都不會很長。因此客戶按照壓控制鍵盤、修改調整系數的操作應用會很及時有效、順暢的獲取應用程序的反應。但是,從客戶開啟項目菜單到修改調整多種系數,到最終關停項目菜單的發展過程一定會連續比較長的有效時間,假如menu_routine()運算函數綜合系統設計成要等到項目菜單關停才自動返回,則采樣與操作控制的發展過程一定會受到嚴重的干擾。

第四章總結在論文快要完成之前,非常感激長時間以來關心著我與協助過我的每一個人!非常感激我的輔導老師,本次畢業論文從選題立項、確定題目再到綜合系統設計,再到多種探索研究,一直到綜合系統設計的實現,長期都獲取輔導教師的耐心輔導。輔導老師教會給我分析研究矛盾問題的模式,并且精確的提出我在本次論文里產生的主要問題矛盾與分析研究上的問題不足,輔導老師用非常豐富的專業文化理論知識幫我研究分析與解難,到本科畢業綜合設計的體系成立,輔導老師用準確嚴謹的治學態度,對我展開輔導和監督管理,輔導老師的悉心教導。非常感激我的指導員教師,指導員教師對同學工作,做得十分細致,對我們的學習和日常生活非常的關心,為我們供應了許多的協助與支持。非常感激我的舍友,在論文寫作時期,特別是在綜合系統設計過程里對我提升無私協助的同學們,在末期的應用程序測試與仿真模擬時期,持續地給我講解分析應用程序調節控制系數,同時也是在同學們的協助下,我才可以這么順利地實現了體系的仿真模擬工作。我們起來互幫互助,無論誰遇到矛盾問題都共同探索討論,分擔了許多學習壓力,實現了許多挑戰,節約了許多時間。非常感激我的父母雙親與每一個支持幫助過我的親人,非常感激你們為我付出的心血,非常感激你們對我的協助與支持,我每一個的偉大成就都與你們緊密聯系。非常感激院校給我一個應用平臺,讓我有一定學、有一定作為。除此之外,我也非常感激大學四年教導我的每一個任課教師,你們的耐心教導,不單單提升了我的專業文化理論知識也給了我很多人生啟示,非常感激你們的辛苦栽培。是你們的默默耕耘與付出使得我們收獲知識,能夠將自己所學用于社會建設發展,成為一個能為社會發展做出貢獻的人。最后,我真摯的向評閱本論文的專家們和各位老師們表示感謝!

參考文獻[1]王紅云.基于XTR101的溫度測量電路設計[J].國外電子元器件.2008(05)[2]朱彤珺.單片機在溫度控制系統中的應用探究[J].信息記錄材料.2019(10)[3]李耀貴,吳康福.淺析單片機溫度控制系統的研究[J].企業科技與發展.2019(04)[4]唐鎮城.淺談單片機在溫度控制系統中的應用[J].科學技術創新.2018(09)[5]華成英,童詩白主編.模擬電子技術基礎[M].高等教育出版社.2006[6]齊志才.單片機的溫度控制系統的研究與實現分析[J].電腦知識與技術.2015(05)[7]鄢志明.單片機溫度控制系統的設計研究[J.]現代信息科技.2017[8]陳振偉.基于單片機的溫度控制系統的研究與實現[J].長沙大學學報.2015(02)[9]張小明.探究基于單片機的溫度控制系統[J].電子制作.2015(01)[10]呂俊亞.一種基于單片機的溫度控制系統設計與實現[J].計算機仿真.2012(07)[11]陳振偉.基于單片機的溫度控制系統的研究與實現[J].長沙大學學報.2015(02)[12]劉瑩.基于單片機的溫度控制系統的設計與實現[J].電腦知識與技術.2014(09)[13]夏志華.基于單片機的溫度控制系統的研究與實現[J].煤炭技術.2013(02)[14]唐杉林.簡易高精度溫度測控系統[J].電子測試2016(05)[15]王亞.基于單片機實現環境溫度測控的設計[J].科技資訊.2016(03)[16]G

Jiang

M

Zhang,

x

Xie,

S

LiApplication

on

temperature

controlof

DS

18B2[J].

Control

Engineering

of

China,2003.[17]YiYunhui,CHENNan;PEIChangxingApplicationofSHT1x/SHT7xHumidity&TemperatureSensmitter[J].ModernElectronicsTechnique,2003,159(16):105-107.[18]SuKai,LiuQing-guo,ChenGuo-ping.PrincipleanddesignofMCS-51Single-chipmicroprocessor[J].MetallurgicalIndustryPress,2003[19]張杰,張學軍,劉云等.基于單片機的溫度控制系統設計及仿真[J]

.農機化研究,2015(4):219-222。[20]胡明慶,韓曉泉,周翔等.準分子激光器溫度控制系統設計[J].量子電子學報,2015,32(4):431-437。[21]金杰,李建功,張建偉等.外腔半導體用恒流源電路設計與實現[J].光子學報,2006,35(4):1449-1452。[22]劉孟德,賀海靖.高精度溫度測量電路設計[J].山東科學,2012,25(2):72-75。[23]張立立,楊華,楊青格.基于單片機的室內溫度控制系統設計與實現[J].實驗室研究與探索,2015,34(7):63-71。[24]韓建國,馬靜編著.單片機原理及應用[M].北京:中國礦業大學出版社,2006.9[25]候伯亨,周端,張彗娟,顧新編.數字系統設計基礎[M].西安:西安電子科技出版社,2000.11[26]沙占友.智能化集成溫度傳感器原理與應用[M].北京:機械工業出版社,2002.6[27]凌志浩.智能儀表原理與設計技術[M].上海:華東理工大學出版社,2003.8[28]郁有文.傳感器原理及工程應用[M].西安:西安電子科技大學出版社,2000.8[29]王仲生.智能檢測與控制技術[M].西安:西北工業大學出版社,2002.9[30]馬江濤.單片機溫度控制系統的設計及實現[J].北京:計算機測量與控制學報,2004.12,Vol(12):1219-1221

附錄#include<reg51.h>#include<intrins.hsbitSCL=P2^6;//將p2.6口模擬時鐘口sbitSDA=P2^7;//將p2.7口模擬數據口bitaskflag;#defineucharunsignedchar#defineuintunsignedint#definedisdataP0//顯示數據碼輸出口sbitrs=P2^0;sbitrw=P2^1;sbiten=P2^2;sbitBF=P0^7;//忙碌標志位,將BF位定義為P0.7引腳sbitLED1=P1^0;sbitLED2=P1^1;uintdatadis[4]={0x00,0x00,0x00,0x00};//定義3個顯示數據單元和1個數據存儲單元#definedelayNOP();{_nop_();_nop_();_nop_();_nop_();};bitbdataSystemError;//從機錯誤標志位/***********************PCF8591專用變量定義***********************/#definePCF8591_WRITE0x90#definePCF8591_READ0x91#defineNUM4//接收和發送緩存區的深度Ucharidatareceivebuf[NUM];//數據接收緩沖區/*******************************************************************//**//*延時函數*//**//*******************************************************************/voiddelay(intms){while(ms--){uchari;for(i=0;i<250;i++){_nop_();_nop_();_nop_();_nop_();}}}/*******************************************************************//**//*檢查LCD忙狀態*//*lcd_busy為1時,忙,等待。lcd-busy為0時,閑,可寫指令與數據。*//**//*******************************************************************/voidDelay1ms(uintz){uintt1,y;for(t1=z;t1>0;t1--)for(y=110;y>0;y--);}ucharBusyTest(void){bitresult;rs=0;//根據規定,RS為低電平,RW為高電平時,可以讀狀態rw=1;en=1;//E=1,才允許讀寫_nop_();//空操作_nop_();_nop_();_nop_();//空操作四個機器周期,給硬件反應時間result=BF;//將忙碌標志電平賦給resulten=0;//將E恢復低電平returnresult;}voidwrite_com(ucharcom){while(BusyTest()==1);rs=0;rw=0;en=0;Delay1ms(2);P0=com;Delay1ms(4);en=1;Delay1ms(4);en=0;}voidwrite_data(uchardt)//bunengyongdata{while(BusyTest()==1);rs=1;rw=0;en=0;Delay1ms(2);P0=dt;Delay1ms(4);en=1;Delay1ms(4);en=0;}voidlocade(ucharlocade){write_com(0x80+locade);}voidinitial_lcd()//henyongyiwangjigaibufen{Delay1ms(20);write_com(0x38);//16*2xianshi,5*7xianshi,8weishijujiekouDelay1ms(5);write_com(0x38);//16*2xianshi,5*7xianshi,8weishijujiekouDelay1ms(5);write_com(0x38);//16*2xianshi,5*7xianshi,8weishijujiekouDelay1ms(5);write_com(0x0c);//kaixianshi,buxianshiguangbiaoDelay1ms(5);write_com(0x06);//xueyigezifuhouacjia1Delay1ms(5);write_com(0x01);Delay1ms(5);locade(0);rs=0;}/*******************************************************************//**//*設定顯示位置*//**//*******************************************************************//******************************************************************//**//*數據處理與顯示*//*將采集到的數據進行16進制轉換為ASCLL碼。*//**//******************************************************************/show_value(ucharad_data){dis[2]=ad_data/51;//AD值轉換為3為BCD碼,最大為5.00V。dis[2]=dis[2]+0x30;//轉換為ACSII碼dis[3]=ad_data%51;//余數暫存dis[3]=dis[3]*10;//計算小數第一位dis[1]=dis[3]/51;dis[1]=dis[1]+0x30;//轉換為ACSII碼dis[3]=dis[3]%51;dis[3]=dis[3]*10;//計算小數第二位dis[0]=dis[3]/51}////函數名稱:iic_start()//函數功能:啟動I2C總線子程序//voidiic_start(void){//時鐘保持高,數據線從高到低一次跳變,通信開始SDA=1;SCL=1;delayNOP();//延時5usSDA=0;delayNOP();SCL=0;}////函數名稱:iic_stop()//函數功能:停止I2C總線數據傳送子程序//voidiic_stop(void){SDA=0;//時鐘保持高,數據線從低到高一次跳變,I2C通信停止SCL=1;delayNOP();SDA=1;delayNOP();SCL=0;}////函數名稱:iicInit_()//函數功能:初始化I2C總線子程序//voidiicInit(void){SCL=0;iic_stop();}///函數名稱:slave_ACK//函數功能:從機發送應答位子程序//voidslave_ACK(void){SDA=0;SCL=1;delayNOP();SCL=0;}////函數名稱:slave_NOACK//函數功能:從機發送非應答位子程序,迫使數據傳輸過程結束//voidslave_NOACK(void){SDA=1;SCL=1;delayNOP();SDA=0;SCL=0;}////函數名稱:check_ACK//函數功能:主機應答位檢查子程序,迫使數據傳輸過程結束//voidcheck_ACK(void){SDA=1;//將p1.1設置成輸入,必須先向端口寫1SCL=1;askflag=0;delayNOP();if(SDA==1)//若SDA=1表明非應答,置位非應答標志askflagaskflag=1;SCL=0;}////函數名稱:IICSendByte//入口參數:ch//函數功能:發送一個字節//voidIICSendByte(ucharch){unsignedcharidatan=8;//向SDA上發送一位數據字節,共八位while(n--){if((ch&0x80)==0x80)//若要發送的數據最高位為1則發送位1{SDA=1;//傳送位1SCL=1;delayNOP();//SDA=0;SCL=0;}else{SDA=0;//否則傳送位0SCL=1;delayNOP();SCL=0;}ch=ch<<1;//數據左移一位}}////函數名稱:IICreceiveByte//返回接收的數據//函數功能:接收一字節子程序//ucharIICreceiveByte(void){ucharidatan=8;//從SDA線上讀取一上數據字節,共八位uchartdata=0;while(n--){SDA=1;SCL=1;tdata=tdata<<1;//左移一位if(SDA==1)tdata=tdata|0x01;//若接收到的位為1,則數據的最后一位置1else{tdata=tdata&0xfe;//否則數據的最后一位置0SCL=0;}return(tdata);}////函數名稱:DAC_PCF8591//入口參數:slave_add從機地址,n要發送的數據個數//函數功能:發送n位數據子程序//voidDAC_PCF8591(ucharcontrolbyte,ucharw_data){iic_start();//啟動I2CdelayNOP();IICSendByte(PCF8591_WRITE);//發送地址位check_ACK();//檢查應答位if(askflag==1){SystemError=1;return;//若非應答,置錯誤標志位}IICSendByte(controlbyte&0x77);//Controlbytecheck_ACK();//檢查應答位if(askflag==1){SystemError=1;return;//若非應答,置錯誤標志位}IICSendByte(w_data);//databytecheck_ACK();//檢查應答位if(askflag==1){SystemError=1;return;//若非應答表明器件錯誤或已壞,置錯誤標志位SystemError}iic_stop();//全部發完則停止delayNOP();delayNOP();delayNOP();delayNOP();}////函數名稱:ADC_PCF8591//入口參數:controlbyte控制字//函數功能:連續讀入4路通道的A/D轉換結果到receivebuf//voidADC_PCF8591(ucharcontrolbyte){ucharidatareceive_da,i=0;iic_start();IICSendByte(PCF8591_WRITE);//控制字check_ACK();if(askflag==1){SystemError=1;return;}IICSendByte(controlbyte);//控制字check_ACK();if(askflag==1){SystemError=1;return;}iic_start();//重新發送開始命令IICSendByte(PCF8591_READ);//控制字check_ACK();if(askflag==1){SystemError=1;return;}IICreceiveByte();//空讀一次,調整讀順序slave_ACK();//收到一個字節后發送一個應答位while(i<4){receive_da=IICreceiveByte();receivebuf[i++]=receive_da;slave_ACK();//收到一個字節后發送一個應答位}slave_NOACK();//收到最后一個字節后發送一個非應答位iic_stop();}////函數名稱:main//函數功能:主程序////補充液晶程序//idatauchartable1[]="Temp";idatauchartable1[]="T1:";//3,13idatauchartable2[]="T2:";//3,13voidchai(doubleshu){longzhengshu,xiao;ucharchaishu[8],bb;uchari;zhengshu=(long)shu;xiao=(int)((shu-zhengshu)*1000);chaishu[0]=zhengshu/10000000;chaishu[1]=zhengshu%10000000/1000000;chaishu[2]=zhengshu%1000000/100000;chaishu[3]=zhengshu%100000/10000;chaishu[4]=zhengshu%10000/1000;chaishu[5]=zhengshu%1000/100;chaishu[6]=zhengshu%100/10;chaishu[7]=zhengshu%10;for(i=0;i<8;i++){if(chaishu[i]!=0){break;}}for(i;i<8;i++){write_data(0x30+chaishu[i]);}if(zhengshu==0){write_data(0x30);}chaishu[0]=xiao/100;chaishu[1]=xiao%100/10;chaishu[2]=xiao%10;if(xiao!=0){write_data(0x2e);for(i=2;i>0;i--){if(chaishu[i]!=0){bb=i;break;}}for(i=0;i<=bb;i++){write_data(0x30+chaishu[i]);}}//locade(0);}//按鍵部分測試uchartemcnt=25;sbitup=P1^5;sbitdown=P1^6;sbitflag=P1^7;sbitxuanze1=P1^3;sbitxuanze2=P1^4;ucharg1;voidkeyscan()//檢測確定鍵{if(flag==0){Delay1ms(5);if(flag==0){while(!flag);g1=1;}}}voidkeyscan1()//加減鍵的掃描{if(up==0){Delay1ms(5);if(up==0){while(!up);temcnt++;locade(0x45);chai(temcnt);}}if(down==0){Delay1ms(5);if(down==0){while(!down);temcnt--;locade(0x45);chai(temcnt);}}}idatauchartable3[]="tempset";//3,13voidled()//LED燈改變{LED1=1;LED2=0;}ucharg2,g3;voidkeyscan2()//檢測顯示1的掃描{if(xuanze1==0){Delay1ms(5);if(xuanze1==0){while(!xuanze1);g2=1;g3=0;}}}voidkeyscan3()//檢測顯示2的掃描{if(xuanze2==0){Delay1ms(5);if(xuanze2==0){while(!xuanze2);g2=0;g3=1;}}}voidxianshi(doublex){locade(0x03);chai(x);write_data('C');write_data('');write_data('');write_data('');write_data('');write_data('');write_data('');}voidmain(){doublet1,t2;uchari;LED1=0;LED2=1;delay(10);//延時initial_lcd();//初始化LCDlocade(0x00);for(i=0;i<16;i++)write_data(table3[i]);locade(0x45);chai(temcnt);g1=0;while(1)

溫馨提示

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

評論

0/150

提交評論