P2=0x0F; //P2 P3=0xFF; //P3 }
//------------------------------------------------------------------- //TIMER_init:初始化定时器
//------------------------------------------------------------------- void TIMER_init(void) {
TMOD=0x11; //定时器0和1配置为模式1
TH1=0x3C; //100ms,根据波特率和单片机计算出 TL1=0xB0;
ET1=1; //允许定时器1中断
TH0=0x3C; //100ms,根据波特率和单片机计算出 TL0=0xB0;
ET0=1; //允许定时器0中断 }
void delay(uint z) //延时子函数 {
uint x,y;
for(x=z;x>0;x--) for(y=110;y>0;y--); }
//main:主函数
void main(void) {
io_init(); //端口初始化 SP=0x5F; MOT=0; HET=0; MOTS=0; HETS=0; P1=0xFF; TIMER_init(); flag=0; flag_buz=0; EA=1;
while(LOW==1)BUZ=0; //有水检测,防止干烧
23
while(KEY==1); //判键 delay(10);
while(KEY==1); if(HIG) {
HETS=1; //水位不超,开始工作 LEDS=1; TR1=1; }
while(1) //循环检测 {
//////////////////////////////////////////
if(LOW) //水烧干,停止工作,LED灭 {
HETS=0; MOTS=0; LEDS=0; TR1=0; BUZS=1; }
if(MOTS==1) MOT=0; //到打浆时间,电机工作 else MOT=1;
if(HETS==1) HET=0; else HET=1;
if(LEDS==1) LED=0; else LED=1;
if(BUZS==1) BUZ=0; else BUZ=1; if(flag_buz) {
for(i=0;i<10;i++) {
delay(1500); BUZ=!BUZ; } } } }
//-------------------------------------------------------------------
//Timer1Int:定时中断子程序,用于显示输出及按键延时计时,1ms //------------------------------------------------------------------- void Timer1Int(void) interrupt 3 {
TH1=0x3C; //定时1s
24
TL1=0xB0;
Num1++; //超时计数 /////////////////////////////////////////////////
if(Num1<=1800) {
/////////////
if(HIG==0) delay(1000); if(HIG==0) {
HETS=0; //加热3分钟内碰防溢电极 停止工作 MOTS=0; TR1=0; BUZ=0; } else { HETS=1; //1500W 加热3分钟 MOTS=0; }
//////////////// }
/////////////////////////////////////////////// if(Num1>1800&&Num1<=3000) {
//////////
if(HIG==0) delay(1000); if(HIG==0) {
HETS=0; //加热2分钟内碰防溢电极停止T1 TR1=0; TR0=1; MOTS=1; } else { HETS=1; //1500W加热2分钟 电机运行2分钟 MOTS=1; }
////////////////// }
25
//////////////////////////////////////////////// if(Num1>3000&&Num1<=3600) {
if(HIG==0) delay(1000); if(HIG==0) {
TR1=0;//加热1分钟内碰防溢电极停止T1 TR0=1; HETS=0; MOTS=1; } else { if((Num1>3000 && Num1<=3020)||(Num1>3075 && Num1<=3095)||(Num1>3150 Num1<=3170)||(Num1>3225 && Num1<=3245)||(Num1>3300 && Num1<=3320)||(Num1>3375 Num1<=3395)||(Num1>3450 && Num1<=3470)||(Num1>3525 && Num1<=3545)) HETS=1; //400W 加热1分钟 else HETS=0; MOTS=1; }
///////////////////////////////////////////// }
/////////////////////////////////////////////
//////////////////////////////
if( Num1>3600&&Num1<=6000) {
if(Num1>3600&&Num1<=3900)
MOTS=1;
else
MOTS=0;
Cond1=(Num1>3600 && Num1<=3620)||(Num1>3675 && Num1<=3695)||(Num1>3750 Num1<=3770)||(Num1>3825 && Num1<=3845)||(Num1>3900 && Num1<=3920)||(Num1>3975 Num1<=3995)||(Num1>4050 && Num1<=4070)||(Num1>4125 && Num1<=4145)||(Num1>4200 Num1<=4220)||(Num1>4275 && Num1<=4295)||(Num1>4350 && Num1<=4370)||(Num1>4425 Num1<=4445)||(Num1>4500 && Num1<=4520)||(Num1>4575 && Num1<=4595)||(Num1>4650 Num1<=4670)||(Num1>4725 && Num1<=4745)||(Num1>4800 && Num1<=4820)||(Num1>4875 Num1<=4895)||(Num1>4850 && Num1<=4870)||(Num1>4925 && Num1<=4945); Cond2=(Num1>5000 && Num1<=5020)||(Num1>5075 && Num1<=5095)||(Num1>5150 Num1<=5170)||(Num1>5225 && Num1<=5245)||(Num1>5300 && Num1<=5320)||(Num1>5375 Num1<=5395)||(Num1>5450 && Num1<=5470)||(Num1>5525 && Num1<=5545)||(Num1>5600
26
&& &&
&& && && && && && && && &&
Num1<=5620)||(Num1>5675 && Num1<=5695)||(Num1>5750 && Num1<=5770)||(Num1>5825 && Num1<=5845)||(Num1>5900 && Num1<=5920)||(Num1>5975 && Num1<=5995); if(Cond1||Cond2) HETS=1; //350W 加热4分钟 else HETS=0;
if(HIG==0) delay(1000); if(HIG==0) { TR0=1; } }
/////////////////////////////////////// if(Num1>6000) {
LEDS=0; //时间到,全部停止 HETS=0; TR0=0; MOTS=0; TR1=0; flag_buz=1; } }
void Timer0Int(void) interrupt 1 {
TH0=0x3C; //定时1s TL0=0xB0;
Num2++; //超时计数 Num3++; //超时计数 ////////////////////////////////////////// if(Num1>1800&&Num1<=3000) { if( Num2<=50) { HETS=0; //停止加热5s } if(Num2>50&&Num2<=100) { HETS=1; //加热5s }
27