📄 main.c
字号:
{
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 + -