⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 水温控制系统,凌阳的61板做的
💻 C
📖 第 1 页 / 共 2 页
字号:
	{
	SACM_S480_Initial(1);
	SACM_S480_Play(GeWei,3,3);
	while((SACM_S480_Status()&0x0001)!=0)
		{
		ClearWDog;
		SACM_S480_ServiceLoop(); 
		}
	SACM_S480_Stop();
	}
	
SACM_S480_Initial(1);
SACM_S480_Play(11,3,3);
while((SACM_S480_Status()&0x0001)!=0)
	{
	ClearWDog;
	SACM_S480_ServiceLoop(); 
	}
SACM_S480_Stop();

SACM_S480_Initial(1);
SACM_S480_Play(DianHou,3,3);
while((SACM_S480_Status()&0x0001)!=0)
	{
	ClearWDog;
	SACM_S480_ServiceLoop(); 
	}
SACM_S480_Stop();

SACM_S480_Initial(1);
SACM_S480_Play(12,3,3);
while((SACM_S480_Status()&0x0001)!=0)
	{
	ClearWDog;
	SACM_S480_ServiceLoop(); 
	}
SACM_S480_Stop();
*P_INT_Ctrl_New|=0x0004;			//开2Hz中断
}



//=============================================
//函数: InputProg
//语法:void InputProg()
//参数:无
//说明:“输入温度”对应的函数
//==============================================
void InputProg()
{
if(ResetPress==1)return;
TempPress=1;
Num=0;
Disp(3);
}



//=============================================
//函数: ResetProg
//语法:void ResetProg()
//参数:无
//说明:“复位”对应的函数
//==============================================
void ResetProg()
{
if(TempPress==1)return;
Disp(8);
ResetPress=1;
}


//=============================================
//函数: DingBaoProg
//语法:void DingBaoProg()
//参数:无
//说明:“定时报音”对应的函数
//==============================================
void DingBaoProg()
{
if(DingShi)
	DingShi=0;
else
	{
	DingShiTime=0;
	DingShi=1;
	}
*P_IOB_Data^=0x0010;		//定时报音指示灯取反
}


//=============================================
//函数: NoProg
//语法:void NoProg()
//参数:无
//说明:“取消”对应的函数
//==============================================
void NoProg()
{
if(TempPress==1)
	{
	if(TempSet==0)
		{
		if(Num==0)
			{
			TempPress=0;
			Disp(7);
			return;
			}
		else
			{
			Num=0;
			Disp(3);
			return;
			}
		}
	else
		{
		Boil=0;
		TempPress=0;
		TempSet=0;
		stPID.TempValSet=TempValTemp;
		stPID.TempValShould=stPID.TempValSet;
		Disp(7);
		return;
		}
	}
else if(ResetPress==1)
	{
	ResetPress=0;
	Disp(7);
	return;
	}
else return;
}




//=============================================
//函数: YesProg
//语法:void YesProg()
//参数:无
//说明:“确定”对应的函数
//==============================================
void YesProg()
{
if(TempPress==1)
	{
	if(TempSet==0)
		{
		if(Num==2)
			{
			if(TempValTemp>30&&TempValTemp<100)
				{
				Num=0;
				TempSet=1;
				Disp(6);
				return;
				}
			else
				{
				Disp(5);
				Delay(0x00af);
				Num=0;
				Disp(3);
				return;
				}
			}
		else return;
		}
	else
		{
		Boil=1;
		TempPress=0;
		TempSet=0;
		stPID.TempValSet=TempValTemp;
		stPID.TempValShould=102;		//烧开温度
		Disp(7);
		return;
		}
	}
else if(ResetPress==1)
	{
	ResetPress=0;
	InitAll();
	return;
	}
else return;
}


//=============================================
//函数: NumProg
//语法:void NumProg(unsigned int i)
//输入参数:i:  输入的一位数字
//说明:“确定”对应的函数
//==============================================
void NumProg(unsigned int i)
{
if(TempPress==1&&TempSet==0)
	{
	if(Num==0)
		{
		TempValTemp=i;
		Num=1;
		Disp(4);
		return;
		}
	else if(Num==1)
		{
		TempValTemp=TempValTemp*10+i;
		Num=2;
		Disp(4);
		}
	}
}

//=============================================
//函数: PIDCal
//语法: void PIDCal()
//参数: 无
//说明: PID运算,得到应加热的时间
//=============================================
void PIDCal()
{
unsigned int Error,dError;
float ans;
Error=(unsigned int)(stPID.TempValShould-TempValNow)*10;          // 偏差
stPID.SumError+=Error;	// 积分
dError=stPID.LastError-stPID.PrevError;	// 当前微分
stPID.PrevError=stPID.LastError;
stPID.LastError=Error;
ans=stPID.Proportion*Error+stPID.Integral*stPID.SumError+stPID.Derivative*dError;	//PID运算
HeatTime=(unsigned int)ans*100;		//得到加热时间
}


//=============================================
//函数: AD2Temp
//语法: void AD2Temp()
//参数: 无
//说明: 读取10次AD,去掉最大最小,取8次的平均,转换成温度
//=============================================
void AD2Temp()
{
unsigned int i;
unsigned int max;
unsigned int min;
unsigned int sum;
max =ADCDataSave[0];
for(i=0;i<10;i++)
	{
    if(ADCDataSave[i]>max)     
    	max = ADCDataSave[i];       //取出最大值
    }
min = ADCDataSave[i];
for(i=0;i<10;i++)
	{
  	if(ADCDataSave[i]<min)
    	min = ADCDataSave[i];       //取出最小值
    }
for(i=0;i<10;i++)
	sum +=ADCDataSave[i];           //累计值
sum = sum - max-min;                //排除最大最小值
sum>>=3;							//除以8
TempValNow=(float)sum/10;

if(TempRecent[19]!=0)//20次都有值
	{
	for(i=0;i<19;i++)//加入当前温度
		TempRecent[i]=TempRecent[i+1];
	TempRecent[19]=TempValNow;
	
	max20=TempRecent[0];       //取出20次最大值
	for(i=0;i<20;i++)
		{
    	if(TempRecent[i]>max20)     
    		max20=TempRecent[i];
    	}
	min20=TempRecent[i];       //取出20次最小值
	for(i=0;i<20;i++)
		{
  		if(TempRecent[i]<min20)
    	min20= TempRecent[i];
    	}
	}
else//没到20次
	{
	i=0;
	while(TempRecent[i]!=0)
		i++;
	TempRecent[i]=TempValNow;
	}
ADOK=0;
}



//=============================================
//函数: Up2Com
//语法: void Up2Com()
//参数: 无
//说明: 将当前温度上传到计算机
//=============================================
void Up2Com()
{
unsigned int temp;
temp=(int)TempValNow*10;
F_UART_Write(temp);
}



//=============================================
//函数: Warn
//语法: void Warn()
//参数: 无
//说明: 干烧报警
//=============================================
void Warn()
{
*P_INT_Ctrl_New&=0xfffb;				//关2Hz中断
SACM_S480_Initial(1);
SACM_S480_Play(13,3,3);
while((SACM_S480_Status()&0x0001)!=0)
	{
	ClearWDog;
	SACM_S480_ServiceLoop(); 
	}
SACM_S480_Stop();
*P_INT_Ctrl_New|=0x0004;			//开2Hz中断
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -