资源描述:
《基于单片机温度控制液晶显示电路图及程序》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、温度控制.c文档#include#include"delay.h"#include"LCD_1602.h"#include"ds18b20.h"#defineucharunsignedchar#defineuintunsignedintsbitkaitong=P2^0;intcc,dd=0,Er,Er0,Er1,Er2,SetPoint,PrevError=0,LastError=0,Error=0,dError=0;longintSumError;floatProportion=0.5,Integral=0.0003,Derivative=0.07;intSv,Sv1=
2、0,Sv2=0,Sv3=0,Sv4=0;intb0,b1,a,b,c;intj=0,i;/*====================================================================================================PID计算部分=====================================================================================================*/intPIDCalc(intNextPoint){Error=SetPoint-Ne
3、xtPoint;//偏差if(Error>=100)b=20;elseif(Error>=85)b=Error/7+5;elseif(Error>=55)b=Error/8+5;elseif(Error>=30)b=Error/7+2;elseif((NextPoint-SetPoint)<=5){SumError+=Error;//积分dError=Error-LastError;//当前微分LastError=Error;a=Proportion*Error+Integral*SumError+Derivative*dError;if(a>20)b=20;elseb=a;}if((Ne
4、xtPoint-SetPoint)>5)b=0;returnb;}/*按键扫描*/voidscan_key(){P1=0XFF;if(P1==0XFE)//s7{delayl(7);if(P1==0XFE){Sv1++;if(Sv1>9){Sv2++;Sv1=0;}}}elseif(P1==0xDF)//s13{delayl(7);if(P1==0XDF){Sv1--;if(Sv1<0){if(Sv2>0){Sv2--;Sv1=9;}elseif(Sv2==0){Sv2=0;Sv1=0;}}}}elseif(P1==0XFD)//s9{delayl(7);if(P1==0XFD){Sv2+
5、+;}}elseif(P1==0xFB)//s10{delayl(7);if(P1==0XFB){Sv2--;if(Sv2<0){Sv2=0;}}}SetPoint=Sv2*100+Sv1*10;}/*确定键扫描*/voidscan_key1(){P1=0XFF;if(P1==0xF7)//S12{delayl(7);if(P1==0XF7){Sv3=1;}}elseif(P1==0xEF)//S11{delayl(7);if(P1==0XEF){Sv3=0;}}}/*温度调节*/voidduty(intz){cc=z;}voidadjust(intnow_value){duty(PIDC
6、alc(now_value));}/*屏幕显示*/voidLCD_display(void){inti;setPosition(1,0);prints("SV:");printc(Sv2+'0');printc(Sv1+'0');printc(0xDF);printc('C');setPosition(2,0);i=readtemp();adjust(i);IntToStr(i,buffer,3);prints("PV:");printc(buffer[0]);printc(buffer[1]);printc('.');printc(buffer[2]);printc(0xDF);prin
7、tc('C');if(i>SetPoint)Er=i-SetPoint;elseEr=SetPoint-i;Er0=Er/100+'0';Er1=(Er/10)%10+'0';Er2=Er%10+'0';setPosition(1,9);prints("Er:");printc(Er0);printc(Er1);printc('.');printc(Er2);}/*占空比显示*/voidB_display(){setPo