基于的溫度控制系統(tǒng)設計C語言源程序(完整資料)_第1頁
基于的溫度控制系統(tǒng)設計C語言源程序(完整資料)_第2頁
基于的溫度控制系統(tǒng)設計C語言源程序(完整資料)_第3頁
基于的溫度控制系統(tǒng)設計C語言源程序(完整資料)_第4頁
基于的溫度控制系統(tǒng)設計C語言源程序(完整資料)_第5頁
已閱讀5頁,還剩90頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

基于的溫度控制系統(tǒng)設計C語言源程序(完整資料)(可以直接使用,可編輯優(yōu)秀版資料,歡迎下載)

/*********************************************************/基于的溫度控制系統(tǒng)設計C語言源程序(完整資料)(可以直接使用,可編輯優(yōu)秀版資料,歡迎下載)/*程序名稱:溫度監(jiān)控系統(tǒng)*//*程序功能:利用89C52單片機和DS18B20溫度傳感器實現環(huán)境*//*溫度的實時測量和高、低溫報警*//*程序版本:v1.0*//*作者:*//*編寫時間:*//*********************************************************/#include<reg52.h>#include<intrins。h>//含_nop_()延時函數//定義數據類型#defineucharunsignedchar#defineuintunsignedint//定義端口#defineLEDP0//段碼輸出口sbitDQ=P3^2;//傳感器數據口sbitSMG_q=P1^0; //定義數碼管陽級控制腳(千位)sbitSMG_b=P1^1;?//定義數碼管陽級控制腳(百位)sbitSMG_s=P1^2;?//定義數碼管陽級控制腳(十位)sbitSMG_g=P1^3;?//定義數碼管陽級控制腳(個位)sbitbuzzer=P1^5;//蜂鳴器 sbitled_low=P2^6;//低溫指示燈sbitled_high=P2^7;//高溫指示燈sbitled_ok=P2^5;//溫度正常指示燈sbitled_work=P2^4;//工作指示燈sbitset=P3^7;//設置按鍵sbitadd=P3^4;//加一按鍵sbitdec=P3^5;//減一按鍵//定義變量和常量intcount=0;//按鍵次數寄存器inth;//主函數用循環(huán)計數器uinttemp;//溫度值ucharr;//溫度值整數形式ucharhigh=35,low=20;//上下限初值//共陽LED段碼表”0""1”"2"”3”"4”"5”"6””7""8""9”"不亮”"-"ucharcodeLED_code[12]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};ucharcodeLED_code1[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};ucharcodeditab[16]={0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09};//小數部分轉換碼表uchardatatemp_data[2]={0x00,0x00};//存儲從傳感器讀出的溫度值uchardatadp[5]={0x00,0x00,0x00,0x00,0x00};//顯示單元數據,共4個數據和一個運算//子函數聲明voidds_reset();//DS18B20初始化函數voidds_write(uchards_wrdata);//DS18B20寫數據函數uchards_read();//DS18B20讀數據函數read_temp();//讀取溫度函數voidchange_temp(uinttem);//溫度數據處理voidxianshi(inthorl);//溫度顯示轉換voiddisplay();//數碼管顯示函數voidkeyscan();//按鍵查詢函數voidwarn_led();//超限報警voiddelay(uintt);//延時函數,單次25us/********************主函數*********************/voidmain(){ LED=0x00;//初始化顯示端口?led1=0;?led2=0;?led3=0;?led4=0; for(h=0;h<4;h++)?{ dp[h]=8; } while(1)//循環(huán)執(zhí)行顯示和溫度讀取 { ?uchari;??for(i=0;i〈200;i++)??{? ?warn_led();//指示燈控制?? display();//顯示 ? keyscan();//按鍵掃描 ?}? change_temp(read_temp());//溫度數據讀取和處理 ??}}/***********************************************//*函數名稱:ds_reset()*//*函數功能:DS18B20初始化*//*入口參數:無*//*輸出參數:無*//*調用函數:delay();_nop_();*//*全局變量:無*//*局部變量:presence*//***********************************************/voidds_reset(void){?charpresence=1; while(presence)?{??while(presence)? { ??DQ=1;//傳感器數據段先置高電平? _nop_();???_nop_();???//適當延時???DQ=0;//傳感器數據段從高電平拉到低電平 ?delay(50);//延時???DQ=1;//再置高電平?? delay(6);//延時 ?presence=DQ;//初始化成功,繼續(xù)下一步 }??delay(45);//延時??presence=~DQ;?} DQ=1;//拉高電平 led_work=0; ? ?//開工作指示燈}/***********************************************//*函數名稱:ds_write()*//*函數功能:向DS18B20寫數據*//*入口參數:ds_wrdata*//*輸出參數:無*//*調用函數:delay();_nop_();*//*全局變量:無*//*局部變量:ds_wrdata*//***********************************************/voidds_write(uchards_wrdata){ uchari; for(i=8;i>0;i--)?{ ?DQ=1;_nop_(); _nop_();??DQ=0; ?_nop_(); _nop_(); _nop_(); _nop_();??DQ=ds_wrdata&0x01;//最低位移出 ?delay(6); ?ds_wrdata=ds_wrdata/2;//右移1位 } DQ=1; delay(1);}/***********************************************//*函數名稱:ds_read()*//*函數功能:從DS18B20讀數據*//*入口參數:無*//*輸出參數:value*//*調用函數:delay();_nop_();*//*全局變量:*//*局部變量:i;value;*//***********************************************/uchards_read(void){?uchari; ucharvalue=0;?for(i=8;i>0;i-—)?{??DQ=1;_nop_();??_nop_();? value〉>=1;? DQ=0; _nop_(); ?_nop_();? _nop_(); _nop_(); ?DQ=1;? _nop_();? _nop_();??_nop_(); ?_nop_(); ?if(DQ)value|=0x80;??delay(6); } DQ=1;?return(value);}/***********************************************//*函數名稱:read_temp()*//*函數功能:讀溫度數據數據*//*入口參數:無*//*輸出參數:yemp*//*調用函數:ds_reset();ds_write();ds_read();*//*delay();*//*全局變量:temp*//*局部變量:temp_data[];*//***********************************************/read_temp(){ ds_reset();//傳感器初始化 delay(200);?ds_write(0xcc);//發(fā)跳過讀取序列號命令?ds_write(0x44);//發(fā)溫度轉換命令 ds_reset();?delay(1);?ds_write(0xcc);? ??ds_write(0xbe); //讀18B20中存儲器?temp_dat(yī)a[0]=ds_read();//讀溫度值的低字節(jié)命令 temp_data[1]=ds_read();//讀溫度值的高字節(jié)?temp=temp_data[1]; temp<<=8; temp=temp|temp_data[0];//兩字節(jié)合成一個整型變量 returntemp;//返回溫度值}/***********************************************//*函數名稱:chang_temp()*//*函數功能:將溫度傳感器中獨到的數據進行轉換*//*入口參數:tem*//*輸出參數:dp[]*//*調用函數:無*//*全局變量:dp[];ditab[];r;*//*局部變量:tem*//***********************************************/voidchange_temp(uinttem){?ucharn=0;?if(tem〉6348)//溫度值正負判斷 { ?tem=65536-tem;//負溫度求補碼 n=1;//標志位置1?}?dp[4]=tem&0x0f;//取小數部分的值?dp[0]=ditab[dp[4]];//存入小數部分顯示值?dp[4]=tem〉〉4;//取中間八位,即整數部分的值 dp[3]=dp[4]/100;//取百位數據 dp[1]=dp[4]%100;//取后兩位數據?dp[2]=dp[1]/10;//取十位數據?dp[1]=dp[1]%10;//個位?r=dp[1]+dp[2]*10+dp[3]*100;//實際溫度值(十進制) if(!dp[3])? //符號位顯示判斷?{??dp[3]=0x0a;//最高位為0時不顯示??if(?。鋚[2]) ?{???dp[2]=0x0a;//次高位為0時不顯示 } }?if(n)?{ dp[3]=0x0b; ?//負溫度時最高位顯示"—”?}}/***********************************************//*函數名稱:xianshi()*//*函數功能:溫度數據轉換成顯示所需LED段碼*//*入口參數:horl*//*輸出參數:dp[]*//*調用函數:無*//*全局變量:dp[];*//*局部變量:n;*//***********************************************/voidxianshi(inthorl){ intn=0;?if(horl>128) ? ?//負數補碼轉換?{ horl=256—horl; n=1; } dp[3]=horl/100; dp[3]=dp[3]&0x0f;//百位?dp[2]=horl%100/10;? //十位?dp[1]=horl%10; //個位 dp[0]=0; ??//小數位?if(!dp[3]) ? ?//高位為零不顯示 { dp[3]=0x0a;? if(!dp[2])? {?? dp[2]=0x0a; ?}?}?if(n)? ? //負數最高位顯示“-”?{ ?dp[3]=0x0b;?}}/***********************************************//*函數名稱:display()*//*函數功能:數碼管顯示*//*入口參數:無*//*輸出參數:無*//*調用函數:delay()*//*全局變量:dp[];LED_code[];LED_code1[];*//*led1;led2;led3;led4;*//*局部變量:j;*//***********************************************/voiddisplay(){ intj;?for(j=0;j〈4;j++)//4位LED掃描控制?{ switch(j)? {? ?case0:LED=LED_code[dp[0]];?? ?led4=1; ? ?delay(450); ???led4=0;? break;//小數位 ??case1:LED=LED_code1[dp[1]];? ? led3=1; ??delay(450); ? ?led3=0; break;//個位 ? case2:LED=LED_code[dp[2]];? ? led2=1; delay(450);??? led2=0; ??break;//十位???case3:LED=LED_code[dp[3]]; led1=1; ? ?delay(450); ? led1=0;????break;//百位 } }}/***********************************************//*函數名稱:keyscan()*//*函數功能:按鍵查詢*//*入口參數:無*//*輸出參數:無*//*調用函數:delay();display();xianshi();*//*全局變量:count;high;low;*//*局部變量:無*//***********************************************/voidkeyscan(){?if(set==0) ? //set鍵按下 { ?while(1)??{ ?delay(500);? ?//延時去抖動? if(set==0) ??//重新判斷set鍵是否按下? {? count++; ?? while(!set) //按鍵彈起繼續(xù)顯示前面內容 ? display();? } ??if(count==1) ?//set按下一次執(zhí)行此段?? { ??xianshi(high);?//轉換上限溫度為段碼并顯示 ??display();????if(add==0) //add鍵是否按下????{ ??? while(?。醖d)?//彈起時上限溫度加一并顯示?? ? display();?? ? high+=1; ? ?} ???if(dec==0) ?//dec鍵是否按下? {? ???while(!dec)?//彈起時上限溫度減一并顯示?? ??display(); ??? high-=1; }? } if(count==2)? //set鍵按下兩次執(zhí)行此段 ?{ ? xianshi(low);?//轉換下限溫度為段碼并顯示????display(); ?? if(add==0) ?//add鍵是否按下 ??{? ? ?while(!add)?//彈起時下限溫度加一并顯示 ? ?display(); ? low+=1;?? }? ? //dec鍵是否按下??? if(dec==0)? ??{ ?? while(!dec) //彈起時下限溫度減一并顯示 ?? display(); ? low-=1;?? ?}? }?? if(count>=3)??//set鍵按下三次回到溫度顯示狀態(tài)? ?{ ? count=0;? ?break;???} ?}?}}/***********************************************//*函數名稱:warn_led()*//*函數功能:工作情況指示燈控制*//*入口參數:無*//*輸出參數:無*//*調用函數:無*//*全局變量:high;low;r;*//*局部變量:無*//***********************************************/voidwarn_led(){?if(r>high) //溫度高于上限溫度?{ ?led_low=1; ? ?//“低溫”指示燈滅 ?led_high=0;?? //“高溫”指示燈亮 led_ok=1;??? //“正常"指示燈滅 buzzer=0;????//蜂鳴器發(fā)聲 } elseif(r〈low) ?? //溫度低于下限溫度 { ?led_low=0; ???//“低溫"指示燈亮 led_high=1;? ? //“高溫”指示燈滅??led_ok=1;? ?//“正常”指示燈滅 buzzer=0; ?//蜂鳴器發(fā)聲?}?else ? //溫度正常?{??led_low=1; ???//“低溫”指示燈滅? led_high=1;?? //“高溫”指示燈滅 ?led_ok=0;? ??//“正?!敝甘緹袅??buzzer=1;? ??//蜂鳴器不發(fā)聲 }}/***********************************************//*函數名稱:delay()*//*函數功能:延時函數,單次25us左右延時*//*入口參數:t;*//*輸出參數:無*//*調用函數:無*//*全局變量:無*//*局部變量:t;*//***********************************************/voiddelay(uintt){?for(;t〉0;t--);}/*******************程序結束********************/#include<reg51.h>unsignedintx,y;voiddelayms(unsignedintz)//延時{?unsignedinti,j; for(i=z;i〉0;i——)?for(j=150;j〉0;j——);}voidOn_all()//開啟所有燈{ P0=0x00;P1=0x00;P2=0x00;P3=0x00;}voidOff_all()//關閉所有燈{?P0=0xff;P1=0xff;P2=0xff;P3=0xff;}voidls()//正向流水燈{?P0=0x00;delayms(400);?P2=0x00;delayms(400); P3=0x00;delayms(400);?P1=0x00;delayms(400); P0=0x01;delayms(50);?P0=0x02;delayms(50);?P0=0x04;delayms(50); P0=0x08;delayms(50); P0=0x10;delayms(50); P0=0x20;delayms(50);?P0=0x40;delayms(50); P0=0x80;delayms(50); P0=0x00;?P2=0x01;delayms(50); P2=0x02;delayms(50);?P2=0x04;delayms(50);?P2=0x08;delayms(50); P2=0x10;delayms(50);?P2=0x20;delayms(50);?P2=0x40;delayms(50); P2=0x80;delayms(50); P2=0x00;?P3=0x80;delayms(50); P3=0x40;delayms(50); P3=0x20;delayms(50);?P3=0x10;delayms(50); P3=0x08;delayms(50);?P3=0x04;delayms(50);?P3=0x02;delayms(50);?P3=0x01;delayms(50);?P3=0x00; P1=0x80;delayms(50);?P1=0x40;delayms(50);?P1=0x20;delayms(50);?P1=0x10;delayms(50); P1=0x08;delayms(50); P1=0x04;delayms(50); P1=0x02;delayms(50); P1=0x01;delayms(50); P1=0x00;Off_all();?P0=0xfe;delayms(50); P0=0xfd;delayms(50); P0=0xfb;delayms(50); P0=0xf7;delayms(50); P0=0xef;delayms(50);?P0=0xdf;delayms(50);?P0=0xbf;delayms(50);?P0=0x7f;delayms(50); P0=0xff;?P2=0xfe;delayms(50); P2=0xfd;delayms(50); P2=0xfb;delayms(50); P2=0xf7;delayms(50);?P2=0xef;delayms(50); P2=0xdf;delayms(50); P2=0xbf;delayms(50);?P2=0x7f;delayms(50);P2=0xff; P3=0x7f;delayms(50);?P3=0xbf;delayms(50);?P3=0xdf;delayms(50); P3=0xef;delayms(50);?P3=0xf7;delayms(50); P3=0xfb;delayms(50); P3=0xfd;delayms(50);?P3=0xfe;delayms(50);?P3=0xff; P1=0x7f;delayms(50); P1=0xbf;delayms(50); P1=0xdf;delayms(50);?P1=0xef;delayms(50); P1=0xf7;delayms(50); P1=0xfb;delayms(50);?P1=0xfd;delayms(50);?P1=0xfe;delayms(50);?P1=0xff; P0=0xfe;delayms(50); P0=0xfc;delayms(50); P0=0xf8;delayms(50); P0=0xf0;delayms(50);?P0=0xe0;delayms(50);?P0=0xc0;delayms(50);?P0=0x80;delayms(50);?P0=0x00;delayms(50);?P2=0xfe;delayms(50); P2=0xfc;delayms(50);?P2=0xf8;delayms(50);?P2=0xf0;delayms(50); P2=0xe0;delayms(50); P2=0xc0;delayms(50); P2=0x80;delayms(50);?P2=0x00;delayms(50); P3=0x7f;delayms(50); P3=0x3f;delayms(50);?P3=0x1f;delayms(50); P3=0x0f;delayms(50);?P3=0x07;delayms(50); P3=0x03;delayms(50); P3=0x01;delayms(50); P3=0x00;delayms(50); P1=0x7f;delayms(50);?P1=0x3f;delayms(50);?P1=0x1f;delayms(50);?P1=0x0f;delayms(50);?P1=0x07;delayms(50);?P1=0x03;delayms(50);?P1=0x01;delayms(50); P1=0x00;delayms(50);}voidfan_ls()//反向流水燈{Off_all();delayms(300);On_all();delayms(300);Off_all();delayms(300);?P1=0x00;delayms(400);?P3=0x00;delayms(400);?P2=0x00;delayms(400);?P0=0x00;delayms(400);?P1=0x01;delayms(50);?P1=0x02;delayms(50); P1=0x04;delayms(50); P1=0x08;delayms(50); P1=0x10;delayms(50);?P1=0x20;delayms(50); P1=0x40;delayms(50); P1=0x80;delayms(50); P1=0x00;?P3=0x01;delayms(50); P3=0x02;delayms(50);?P3=0x04;delayms(50); P3=0x08;delayms(50);?P3=0x10;delayms(50); P3=0x20;delayms(50);?P3=0x40;delayms(50);?P3=0x80;delayms(50); P3=0x00; P2=0x80;delayms(50); P2=0x40;delayms(50); P2=0x20;delayms(50); P2=0x10;delayms(50); P2=0x08;delayms(50);?P2=0x04;delayms(50); P2=0x02;delayms(50); P2=0x01;delayms(50); P2=0x00;?P0=0x80;delayms(50); P0=0x40;delayms(50); P0=0x20;delayms(50); P0=0x10;delayms(50);?P0=0x08;delayms(50); P0=0x04;delayms(50);?P0=0x02;delayms(50);?P0=0x01;delayms(50); P0=0x00;Off_all();?P1=0xfe;delayms(50); P1=0xfd;delayms(50); P1=0xfb;delayms(50); P1=0xf7;delayms(50);?P1=0xef;delayms(50); P1=0xdf;delayms(50); P1=0xbf;delayms(50); P1=0x7f;delayms(50);?P1=0xff;?P3=0xfe;delayms(50); P3=0xfd;delayms(50);?P3=0xfb;delayms(50);?P3=0xf7;delayms(50);?P3=0xef;delayms(50); P3=0xdf;delayms(50);?P3=0xbf;delayms(50);?P3=0x7f;delayms(50);?P3=0xff; P2=0x7f;delayms(50); P2=0xbf;delayms(50); P2=0xdf;delayms(50);?P2=0xef;delayms(50);?P2=0xf7;delayms(50);?P2=0xfb;delayms(50); P2=0xfd;delayms(50);?P2=0xfe;delayms(50);?P2=0xff; P0=0x7f;delayms(50); P0=0xbf;delayms(50); P0=0xdf;delayms(50);?P0=0xef;delayms(50);?P0=0xf7;delayms(50); P0=0xfb;delayms(50);?P0=0xfd;delayms(50);?P0=0xfe;delayms(50); P0=0xff;?P1=0xfe;delayms(50); P1=0xfc;delayms(50);?P1=0xf8;delayms(50);?P1=0xf0;delayms(50); P1=0xe0;delayms(50); P1=0xc0;delayms(50);?P1=0x80;delayms(50); P1=0x00;delayms(50);?P3=0xfe;delayms(50);?P3=0xfc;delayms(50); P3=0xf8;delayms(50); P3=0xf0;delayms(50); P3=0xe0;delayms(50); P3=0xc0;delayms(50);?P3=0x80;delayms(50); P3=0x00;delayms(50); P2=0x7f;delayms(50); P2=0x3f;delayms(50);?P2=0x1f;delayms(50);?P2=0x0f;delayms(50); P2=0x07;delayms(50); P2=0x03;delayms(50); P2=0x01;delayms(50); P2=0x00;delayms(50); P0=0x7f;delayms(50);?P0=0x3f;delayms(50); P0=0x1f;delayms(50); P0=0x0f;delayms(50);?P0=0x07;delayms(50);?P0=0x03;delayms(50); P0=0x01;delayms(50); P0=0x00;delayms(50);Off_all();On_all();Off_all();On_all();Off_all();}voidban_shan()//半邊交替閃{Off_all(); P1=0x00;P3=0x00;delayms(50);P0=0xff;P2=0xff;delayms(50);?P1=0xff;P3=0xff;delayms(50);P0=0x00;P2=0x00;delayms(50);?P1=0x00;P3=0x00;delayms(50);P0=0xff;P2=0xff;delayms(50);?P1=0xff;P3=0xff;delayms(50);P0=0x00;P2=0x00;delayms(50); P1=0x00;P3=0x00;delayms(50);P0=0xff;P2=0xff;delayms(50);?P1=0xff;P3=0xff;delayms(50);P0=0x00;P2=0x00;delayms(50);?P1=0x00;P3=0x00;delayms(50);P0=0xff;P2=0xff;delayms(50); P1=0xff;P3=0xff;delayms(50);P0=0x00;P2=0x00;delayms(50); P1=0x00;P3=0x00;delayms(50);P0=0xff;P2=0xff;delayms(50); P1=0xff;P3=0xff;delayms(50);P0=0x00;P2=0x00;delayms(50);}voidshangxia_shan()//上下交替閃{On_all();Off_all();?P0=0x00;P1=0x00;delayms(50);P2=0xff;P3=0xff;delayms(50); P0=0xff;P1=0xff;delayms(50);P2=0x00;P3=0x00;delayms(50);?P0=0x00;P1=0x00;delayms(50);P2=0xff;P3=0xff;delayms(50); P0=0xff;P1=0xff;delayms(50);P2=0x00;P3=0x00;delayms(50);?P0=0x00;P1=0x00;delayms(50);P2=0xff;P3=0xff;delayms(50);?P0=0xff;P1=0xff;delayms(50);P2=0x00;P3=0x00;delayms(50);?P0=0x00;P1=0x00;delayms(50);P2=0xff;P3=0xff;delayms(50); P0=0xff;P1=0xff;delayms(50);P2=0x00;P3=0x00;delayms(50); P0=0x00;P1=0x00;delayms(50);P2=0xff;P3=0xff;delayms(50);?P0=0xff;P1=0xff;delayms(50);P2=0x00;P3=0x00;delayms(50);}voidhuayang_shan()//花樣閃爍{On_all();delayms(400); P0=0xff;P2=0x00;P3=0x00;P1=0x00;delayms(200); P0=0x00;P2=0xff;P3=0x00;P1=0x00;delayms(200); P0=0x00;P2=0x00;P3=0xff;P1=0x00;delayms(200); P0=0x00;P2=0x00;P3=0x00;P1=0xff;delayms(200);?P0=0x00;P2=0x00;P3=0xff;P1=0x00;delayms(200); P0=0x00;P2=0xff;P3=0x00;P1=0x00;delayms(200);?P0=0xff;P2=0x00;P3=0x00;P1=0x00;delayms(200);On_all();delayms(400);?P0=0x00;P2=0x00;P3=0x00;P1=0xff;delayms(200);?P0=0x00;P2=0x00;P3=0xff;P1=0x00;delayms(200); P0=0x00;P2=0xff;P3=0x00;P1=0x00;delayms(200); P0=0xff;P2=0x00;P3=0x00;P1=0x00;delayms(200); P0=0x00;P2=0xff;P3=0x00;P1=0x00;delayms(200); P0=0x00;P2=0x00;P3=0xff;P1=0x00;delayms(200); P0=0x00;P2=0x00;P3=0x00;P1=0xff;delayms(200);On_all();delayms(400);Off_all();delayms(400); P0=0x00;delayms(200); P3=0x00;delayms(200);?P1=0x00;delayms(200);?P2=0x00;delayms(200);On_all();delayms(400);Off_all();delayms(400);?P1=0x00;delayms(200);?P2=0x00;delayms(200);?P0=0x00;delayms(200); P3=0x00;delayms(200);On_all();delayms(400);Off_all();delayms(50);On_all();delayms(50);Off_all();delayms(50);On_all();delayms(50);Off_all();delayms(50);}voidmain(){On_all();delayms(300);Off_all();delayms(300);On_all();delayms(300);Off_all();delayms(300);On_all();delayms(300);Off_all();delayms(300);ls();//正向流水fan_ls();//反向流水ban_shan();//半邊交替閃shangxia_shan();//上下交替閃爍huayang_shan();//花樣閃爍}(2014屆)畢業(yè)設計題目:基于PID的溫度控制系統(tǒng)設計學院:********專業(yè):電氣工程及其自動化班級:電氣***學號:**********姓名:某某某指導教師:某某某教務處制年月日誠信聲明我聲明,所呈交的論文是本人在老師指導下進行的研究工作及取得的研究成果。據我查證,除了文中特別加以標注和致謝的地方外,論文中不包含其他人已經發(fā)表或撰寫過的研究成果,也不包含為獲得______或其他教育機構的學位或證書而使用過的材料.我承諾,論文中的所有內容均真實、可信.論文作者簽名:簽名日期:年月日授權聲明學校有權保留送論文交的原件,允許論文被查閱和借閱,學校可以公布論文的全部或部分內容,可以影印、縮印或其他復制手段保存論文,學校必須嚴格按照授權對論文進行處理,不得超越授權對論文進行任意處置。論文作者簽名:簽名日期:年月日基于PID的溫度控制系統(tǒng)設計摘要溫度是工業(yè)上最基本的參數,與人們的生活緊密相關,實時測量溫度在工業(yè)生產中越來越受到重視,離不開溫度測量所帶來的好處,因此研究控制和測量溫度具有及其重要的意義。本設計介紹了以AT89C52單片機為主控器件,基于PID的溫度控制系統(tǒng)的設計方案和設計的基本原理.由DS18B20收集溫度信號,并以數字信號的方式送給單片機進行處理,從而達到溫度控制的目標。主要包括硬件電路的設計和系統(tǒng)程序的設計.硬件電路由主控器件、溫測電路、溫控電路和顯示電路等組成。軟件設計部分包括:顯示電路、溫度信號處理,超溫警報、繼電器控制、按鍵處理等程序。關鍵詞:溫度檢測,溫度控制,PID算法DesignofTemperatureControlSystemBasedonPIDAbstractTemperatureisthemostbasicparametersofindustrialandcloselyrelatedwithpeople'slives,real-timemeasurementoftemperatureinindustrialproductionandmoreattention,whichisinseparablefromthebenefitsofthetemperat(yī)uremeasurement,temperaturecontrolandmeasurementstudythereforehasitssignificance.ThisdesignintroducesthebasicprinciplestoAT89C52microcontroller—basedcontrollerpiecestemperaturecontrolsystemdesignanddesign.CollectedbytheDS18B20temperaturesignal,anddigitalsignalsentbywayofthemicrocontrollerforprocessing,soastoachievethetargettemperaturecontrol。Includingthedesignofhardwarecircuitdesignandsystemprograms.Hardwarecircuitincludesamasterdevice,thetemperaturemeasuringcircuit,temperaturecontrolcircuitanddisplaycircuit.Softwaredesign,including:displayelectrical,temperature,signalprocessing,over-temperaturealarm,relaycontrol,keyhandlingprocedures.Keywords:temperaturedetection,temperat(yī)urecontrol,PIDalgorithm目錄TOC\*MERGEFORMAT摘要PAGEREF_Toc13802IIIAbstractPAGEREF_Toc22970IV1緒論PAGEREF_Toc174911.1課題的來源PAGEREF_Toc65611.2課題的意義PAGEREF_Toc2461411.3課題研究的主要內容PAGEREF_Toc185712硬件設計PAGEREF_Toc3169432。1單片機控制模塊的設計PAGEREF_Toc927832.1.1AT89C52單片機簡介PAGEREF_Toc347532。1.2單片機的引腳功能PAGEREF_Toc276942。1。3單片機控制模塊的電路設計PAGEREF_Toc98052。1。4電源設計PAGEREF_Toc1261762.2溫度采集模塊的設計PAGEREF_Toc2441172.2。1DS18B20芯片的簡介PAGEREF_Toc2918372。2.2DS18B20的內部結構PAGEREF_Toc2533682。2.3DS18B20的供電方式PAGEREF_Toc22286102。2。4DS18B20的引腳功能PAGEREF_Toc8376102。3溫度控制模塊的設計PAGEREF_Toc8493112.4按鍵及顯示模塊的設計PAGEREF_Toc23016122.4.1LCD1602的參數和引腳功能PAGEREF_Toc18967122。4.2LCD1602的特點PAGEREF_Toc4184132.4.3按鍵電路的設計PAGEREF_Toc1883132.5報警模塊的設計PAGEREF_Toc23150143軟件設計PAGEREF_Toc14481163。1主程序的設計PAGEREF_Toc22789163.2DS18B20讀溫度程序的設計PAGEREF_Toc17472163.3鍵盤掃描程序的設計PAGEREF_Toc25913173.4報警處理程序的設計PAGEREF_Toc16640183.5PID控制算法PAGEREF_Toc32133184系統(tǒng)仿真84922參考文獻PAGEREF_Toc2992027致謝PAGEREF_Toc1668928附錄PAGEREF_Toc15295291緒論1。1課題的來源在食品加工、化工、冶煉等工業(yè)控制和生產中,在工業(yè)生產和日常生活中經常要用到溫度檢測和控制。以及各種各樣的加熱爐、熱處理器等,都對溫度有著嚴格的要求。傳統(tǒng)的測溫元件有熱電偶和熱電阻。而熱電偶和熱電阻測出的通常是電壓,再轉換成相應的溫度值,在硬件方面是個難點,而且從設計和調試的角度來講都是很復雜的,以及高昂的制作成本。但采用DS18B20作為溫測元件,然后用單片機對溫度進行控制,可以大幅度提高溫度控制的技術指標,而且還具有控制方便、簡單、靈活等特點.單片機已經滲透到我們生活的各領域,儀表儀器、家用電器、航空航天、計算機通訊網絡和數據的傳輸,包括工業(yè)自動化的實時控制和數據處理等,這些都離不開單片機。用單片機可構成豐富多樣的數據采集系統(tǒng)和控制系統(tǒng)。像工廠流水線智能化的管理、電梯智能化的控制、多種報警系統(tǒng),都可以與計算機聯網構成二級控制系統(tǒng)等.1.2課題的意義溫度傳感器是測量溫度的關鍵,現在溫度傳感器正由模擬式向數字式、集成化向智能化、網絡化的方向發(fā)展。在測量溫度的電路中,使用熱敏電阻之類的器件利用其感溫效應,將隨被測溫度變化的電壓或電流采集過來,先進行A/D轉換,然后用單片機進行數據的處理,再在顯示電路上,將被測溫度顯示出來。這種設計需要用到A/D轉換電路,因此電路的設計比較復雜.繼而想到可以采用智能溫度傳感器來設計數字溫度計。本數字溫度計的設計采用美國半導體公司DALLAS推出的一種改進型智能溫度傳感器DS18B20作為檢測元件,其溫度值可以直接被讀出來,通過單片機AT89C52的讀寫和顯示,然后用LCD1602來進行顯示.它的測溫范圍為-55℃~+125℃,最大分辨率可達0.0625℃。而且采用3線制與單片機相連,減少了外部的硬件電路,具有低成本和易使用的特點。1。3課題研究的主要內容1、總體設計的內容總體設計的主要內容有:利用單片機作為系統(tǒng)的主控制器,利用DS18B20作為溫度傳感器,將信號送入單片機進行處理,經過PID算法后,單片機的輸出用來控制加熱棒的輸出功率,從而實現對溫度的控制。2、總體設計的基本要求總體布置的基本要求主要有:(1)溫度控制系統(tǒng)的總體設計和思路;(2)各部分原理說明;(3)溫度控制系統(tǒng)硬件設計,有理論依據,有分析計算過程,主要元件有原理和說明,所有元件必須要有型號和參數;(4)溫度控制系統(tǒng)軟件設計,可以使用匯編語言或C語言編程.主要軟件必須能在設計好的硬件電路上正確運行.2硬件設計硬件設計方框圖如圖2-1所示,它主要由五個模塊組成:單片機控制模塊;溫度采集模塊;溫度控制模塊;按鍵及顯示模塊;報警模塊。圖2-1硬件設計方框圖2。1單片機控制模塊的設計方案一:采用8031芯片,其內部沒有程序存儲器,需要進行外部擴展,這給電路增加了復雜度.方案二:采用2051芯片,其內部有2KB單元的程序存儲器,不需外部擴展程序存儲器。但由于系統(tǒng)用到較多的I/O口,因此此芯片資源不夠用。方案三:采用AT89C52單片機,其內部有4KB單元的程序存儲器,不需外部擴展程序存儲器,而且它的I/O口也足夠本次設計的要求。方案評價:比較這三種方案,綜合考慮單片機的各部分資源,本次設計選用方案三。2。1.1AT89C52單片機簡介AT89C52是ATMEL公司生產的51系列單片機。片內含8kbytes的可反復擦寫的Flash只讀程序存儲器和256bytes的隨機存取數據存儲器(RAM),器件采用ATMEL公司的高密度,兼容51指令系統(tǒng),Flash存儲單元和8位中央處理器置于片內,AT89C52單片機功能強大,在許多復雜的應用場合都可以用到。單片機是微型機的一個分支,單片機的最大特點就是在超大規(guī)模的集成電路芯片上集成了定時器、存儲器、CPU、和多種輸入/輸出接口電路.由于單片機的這種結構,相應的它具有很多的特點。它的特點包括:可靠性高;抗干擾能力強;控制能力強;性價比高;低電壓;能擴展了多種串行口。2.1.2單片機的引腳功能AT89C52單片機的引腳圖如圖2—2所示。圖2—2AT89C52引腳圖電源引腳VCC和VSSVCC(40引腳):電源端,+5V。VSS(20引腳):接地端.外接晶體引腳XTAL2和XTAL1XTAL2(18引腳):接微調電容和外部晶體的端口。作為振蕩電路的輸出端。XTAL1(19引腳):接微調電容和外部晶體的端口。作為振蕩電路的輸入端。控制信號引腳RST、ALE、PSEN、EARST(9引腳):復位信號輸入端,高電平有效。完成復位操作,輸入端必須為兩機器周期(即為24個時鐘振蕩周期)的高電平。ALE/PROG(30引腳):地址鎖存允許信號端。當單片機上電正常工作后,ALE引腳不斷向外輸出正脈沖信號,此頻率為振蕩器平率的1/6.輸出信號作為鎖存低8位地址的控制信號。如果想確認單片機芯片的好壞,可用示波器查看ALE端是否有脈沖信號輸出.若有脈沖信號輸出,則單片機基本上是好的。PSEN(29引腳):程序存儲允許輸出信號端。EA(31引腳):外部程序存儲器地址允許輸入端/固化編程電壓輸入端.輸入/輸出端口P0、P1、P2和P3P0端口(P0.0~P0.7,39~32引腳)P1端口(P1.0~P1.7)P2端口(P2.0~P2.7)P3端口(P3。0~P3.7)P3端口還用于一些復用功能,如表2—1所示.表2-1P3各口線與第2功能表口線替代的第2功能P3。0RXD(串行口輸入)P3。1TXD(串行口輸出)P3.2INT0(外部中斷0輸入)P3.3INT1(外部中斷1輸入)P3。4T0(定時器0的外部輸入)P3。5T1(定時器1的外部輸入)P3.6WR(片外數據存儲器“寫選通控制”輸出)P3。7RD(片外數據存儲器“讀選通控制”輸出)2.1。3單片機控制模塊的電路設計單片機的最小系統(tǒng)如圖2-3所示,由單片機芯片、電源、時鐘振蕩電路與復位電路組成.時鐘振蕩電路的設計:單片機XIAL1和XIAL2分別接30pF的電容,中間再并個12MHz的晶振,形成單片機的晶振電路.電容器C1和C2可穩(wěn)定頻率并對振蕩頻率有微調作用.復位電路的設計:復位操作有按鍵手動復位和上電自動復位兩種。本設計采用的是上電自動復位:RST引腳是復位信號的輸入端。復位信號是高電平有效,其有效時間應持續(xù)24個振蕩周期(即二個機器周期)以上。電容端瞬間通電,電容C通過電阻R充電,RST端為正脈沖,用以復位。只要電源VCC的上升時間不超過1ms,就可以實現自動上電復位,即接通電源就完成了系統(tǒng)的復位初始化.關于參數的選定,在振蕩穩(wěn)定后應保證復位高電平持續(xù)時間(即正脈沖寬度)大于2個機器周期。當采用的晶體頻率為6MHz時,可取C=22μF,R=1kΩ;當采用的晶體頻率為12MHz時,可取C=10μF,R=8.2kΩ。圖2-3單片機的最小系統(tǒng)圖2。1.4電源設計220V交流電轉5V直流電的電源設計如圖2—4所示是由3個部分組成:變壓器、橋式整流電路和三端穩(wěn)壓器。圖2-45V直流電電源設計圖變壓器:將220V交流電變成9V左右,由此可知變壓器變比為220/9=25/1;橋式整流電路:經過濾波整流后,電壓有效值增大為10V。如圖2-5所示為橋式整流電路電壓波形圖;三端穩(wěn)壓器:一般用于直流電路的保護電路,起到降壓、穩(wěn)壓的作用。圖2-5橋式整流電路電壓波形圖2。2溫度采集模塊的設計方案一:傳統(tǒng)的測溫元件有熱電偶和熱電阻。一般來說熱電偶和熱電阻測出的電壓,再轉換成相應的溫度,要比較多外部硬件的支持,其缺點有:硬件電路較復雜;軟件調試較復雜;制作成本較高。方案二:結合單片機電路的設計,決定使用溫度傳感器DS18B20,它是最新推出的一種智能型溫度傳感器,它的優(yōu)點是可以直接讀出被測的溫度.主要是對溫度信號進行采集和轉換工作,電路由DS18B20溫度傳感器和單片機部分組成.溫度傳感器DS18B20把收集到的溫度送到單片機的P2。6口,單片機接受溫度,然后存儲下來。因為電路部分只用到了溫度傳感器和單片機,所以硬件方面比較簡單.方案評價:方案一這種設計需要用到A/D轉換電路,感溫電路比較麻煩.但方案二電路比較簡單,軟件設計容易實現,故實際設計中擬采用方案二。2。2.1DS18B20芯片的簡介DS18B20是美國著名半導體公司推出的一種可以直接讀出被測溫度值的溫度傳感器,而且采用寄生供電方式與單片機相連,具有成本低和易使用的特點。輸出信號為數字信號,方便單片機控制和處理,很多外圍電路因此可以減掉。且該芯片的線形較好,物理、化學性也相對穩(wěn)定,在工業(yè)生產中可以用來做測量溫度的元件。由于AT89C52能夠帶多個DSB1820,因此容易實現多點測量的目的。輕松的構建傳感器網絡,并且單片機可以同時進行數碼顯示與鍵盤控制,也可以通過RS232串口與上位機進行數據通訊,達到全方位立體監(jiān)控的效果。采用溫度芯片DS18B20測量溫度,可以更方便的實現多點測溫,也體現了數據數字化的好處,便于測溫數據集成顯示,也方便了后期對數據的處理及其記錄。2。2.2DS18B20的內部結構DS18B20芯片的內部結構如圖2—6所示。DS18B20主要包括上下限觸發(fā)器、儲存器與控制邏輯、CRC發(fā)生器電源、溫度傳感器、64位ROM單線借口暫存器。圖2—6DS18B20芯片的內部結構圖DS18B20溫度數字對應關系表如表2-2所示。表2—2DS18B20溫度數字對應關系表溫度/℃二進制表示十六進制表示+125000001111101000007D0H+8500000101010100000550H+25.062500000001100100000191H+10.125000000001010000100A2H+0。500000000000000100008H000000000000010000000H-0。51111111111110000FFF8HDS18B20溫度值格式表如表2-3所示.表2-3DS18B20溫度值格式表高字節(jié)15141312111098SSSSS2625241/01/01/01/01/0643216低字節(jié)76543210232221202_12_22_32_484210。50。250.1250.0625DS18B20的工作過程:發(fā)復位DS18B20的負脈沖;收DS18B20的回應脈沖;發(fā)ROM命令(33H);發(fā)儲存和控制命令。DS18B20儲存控制命令共有6種,如表2—4所示.表2-4DS18B20存儲器控制指令指令約定代碼復制48H讀數據BEH讀電源供電方式B4H溫度轉換44H讀EERAMB8H寫數據4EH主機操作ROM的命令有5種,如表2-5所示。表2-5DS18B20的ROM指令指令約定代碼讀ROM33H匹配ROM55H跳過ROMCCH搜索ROM0F0H報警搜索ECHDS18B20的執(zhí)行序列:初始化;執(zhí)行ROM命令,用于定位;執(zhí)行DS18B20的儲存控制命令,用于轉換和讀數據;DS18B20的I/O信號有回應脈沖、復位脈沖、寫0,讀0,寫1,讀1等幾種。2.2.3DS18B20的供電方式在硬件上,DS18B20與單片機的連接有兩種方法,一種是用寄生電源供電,此時,VCC、GND接地,I/O接單片機I/O;另外一種是VCC接外部電源,GND接地,I/O與單片機的I/O線相連。無論是內部寄生電源還是外部供電,I/O口線要接5kΩ左右的上拉電阻。如圖2-7所示,本設計采用的是外部電源供電的方式,且選用的上拉電阻為4。7kΩ。圖2-7DS18B20外部電源供電方式圖2。2.4DS18B20的引腳功能引腳功能說明:GND為地;I/O是數據輸入/輸出腳(單線接口,可作寄生供電);UDD為外接供電電源輸入端(在寄生電源接線方式時接地)。DS28B20的引腳如圖2—8所示。圖2—8DS18B20引腳圖DS18B20的特點說明:采用單總線技術,與單片機通信只需要一根I/O線,在一根線上可以掛接多個DS18B20。每只DS18B20具有一個獨有的,不可修改的64位序列號,根據序列號訪問相應的器件。低壓供電,電源范圍從3.0~5。5V,可以本地供電,也可以直接從數據線竊取電源(寄生電源方式)。測溫范圍為-55℃~+125℃,在—10℃~+85℃范圍內誤差為±0.5℃??删庉嫈祿椋埂?位,轉換12位溫度時間為750ms(最大)。用戶可自設定報警上下限溫度。報警搜索命令可識別和尋址超過程序限定溫度(溫度報警條件)的器件。DS18B20的分辨率由用戶通過EEPROM設置為9~12位。DS18B20可將檢測到溫度值直接轉化為數字量,并通過串行通信的方式與主控制器進行數據通信。負電壓特性,電源極性接反時,溫度計不會因為發(fā)

溫馨提示

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

評論

0/150

提交評論