模糊PID控制温控系统方案C语言程序代码
/********************************************************************
模糊PID控制温控系统仿真设计C程序代码
********************************************************************/
#include
#define uchar unsigned char
#define uint unsigned int
#define PULSE 200
#define number 0.035
sbit SDO = P2^0;
sbit SDI = P2^1;
sbit CS = P2^2;
sbit CLK = P2^3;
sbit EOC = P2^4;
sbit RS = P2^5;
sbit RW = P2^6;
sbit EN = P2^7;
sbit KEY1= P3^0;
sbit KEY2= P3^1;
sbit KEY3= P3^2;
sbit KEY4= P3^3;
sbit KEY5= P3^4;
sbit IN1 = P3^5;
sbit IN2 = P3^6;
sbit ENA = P3^7;
uchar flag;
uchar flag_start;
float S_temp=60.0;
float P_temp=20.0;
float Kp;
float Ki;
float Kd;
float Err=0.0;
float Last_Err=0.0;
float D_Err=0.0;
float Sum_Err=0.0;
float U=0.0;
/******************************
函数功能:延时
******************************/
void delay_ms(uchar z)
{
uchar i;
uchar j;
for(i=z;i>0;i--)
for(j=360;j>0;j--);
}
void delay_us(uchar z)
{
uchar i;
for(i=z;i>0;i--);
}
void LCD_WriteData(uchar Dat)
{
RS = 1;
P1 = Dat;
delay_us(10);
EN = 1;
delay_us(10);
EN = 0;
}
void LCD_WriteCOM(uchar com)
{
RS = 0;
P1 = com;
delay_us(10);
EN = 1;
delay_us(10);
EN = 0;
}
void Show_Num(uchar x,uchar y,uchar n,float num)
{
uchar a[3];
uchar i;
uint Temp;
Temp=(int)num;
for(i=0;i
{
a[i] = Temp%10;
Temp = Temp/10;
}
if(y%2 == 1)
LCD_WriteCOM(0x80+x);
else
LCD_WriteCOM(0x80+0x40+x);
for(i=n;i>0;i--)
LCD_WriteData(a[i-1]+0x30);
}
void Show_Ki(uchar num_Ki)
{
uchar Temp;
num_Ki=Ki*100;
Temp=(uchar)num_Ki;
Show_Num(10,2,1,Temp%10);
Temp=Temp/10;
Show_Num(9,2,1,Temp%10);
Temp=Temp/10;
Show_Num(7,2,1,Temp);
}
void Show_char(uchar x,uchar y,uchar ch)
{
if(y%2 == 1)
LCD_WriteCOM(0x80+x);
else
LCD_WriteCOM(0x80+0x40+x);
LCD_WriteData(ch);
}
void LCD_Init(void)