?? mcu.c
字號:
#include"reg51.h"
#include"INTRINS.H"
#include"math.h"
#define uchar unsigned char
#define uint unsigned int
sbit key=P1^4; //開關輸入
sbit led0=P1^5; //led2輸出
sbit led1=P1^6; //led1輸出
sbit led2=P1^7; //led0輸出
sbit c_24v0=P3^3; //24v輸出控制o
sbit c_24v1=P3^2; //24v輸出控制1
sbit c_220v0=P3^4; //220v輸出控制0
sbit c_220v1=P3^5; //220v輸出控制1
sbit c_fan=P3^1; //電扇開啟
sbit RT1=P1^0; //內部溫度檢測s
sbit RT2=P1^1; //冰箱溫度檢測
sbit c_494=P3^0; //494關閉控制
sbit c_kaiguan=P3^7; //輸入控制
sbit c_hv=P1^2; //300v高壓檢測
sbit c_24in=P1^3; //32v電壓檢測
uchar step;
uchar keep;
bit one_sencond;
bit f_c;
bit f_c1;
uchar time0; //小時標志;
uint minute; //秒標志
uint mminute; //毫秒標志
delay(uint number)
{
while(number--)
{
_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
}
}
main()
{
uchar m_c=0;
uchar key_n=0;
c_24v0=1;
c_24v1=1;
f_c=0;
f_c1=0;
step=0;
keep=0;
time0=0;
minute=0;
mminute=124;
one_sencond=0;
TMOD=0X11;
TH0=0XFD;
TL0=0X12; //1500 3s 2000 4S
//TH0=0xff;
// TL0=0X06; //1500 3s 2000 4S
TH1=0xfe;
TL1=0x0c;
ET0=1;
ET1=1;
TR1=0;
EA=0;keep=0;one_sencond=0;
TR0=0; EA=1;
P1=0XFF;
delay(5);
//RT2=0;
// RT1=0;
while(key==1);/*{if(RT1==1) {delay(5);
if(RT1==1)led0=0;
else led0=1;}
if(RT2==1) {delay(5);
if(RT1==1)led1=0;
else led1=1;
}
}*/
while(1)
{
if(keep==10){ keep=0;key_n=0;}
if((key==0)&&(keep==0))
{
TR1=0;
time0=0; //小時標志;
minute=0; //秒標志
mminute=0;
f_c1=0;
if(key==0)
{ TR1=1;
key_n++;
if(key_n>=5) key_n=2;
while(key==0){ if(minute>=3)break;}
if(minute>=3) { key_n=0;
TR0=0;
c_220v0=1;
c_220v1=1;
TR1=0;
c_24v1=0;
c_24v1=0;c_494=1;
c_fan=1;led0=1;led1=1;led2=1;f_c=0;
while(key==0);delay(1000);
}
else{
time0=0; //小時標志;
minute=0; //秒標志
mminute=0;
f_c1=0;
}
delay(500);
if(key_n==1){ led0=0;
TR0=1;c_494=0;f_c1=0;c_fan=1;TR1=0;}
if(key_n==2) {led0=0;led1=0;led2=1; TR1=1;}
if(key_n==3) {led0=0;led1=1;led2=0; TR1=1;}
if(key_n==4) {led0=0;led1=1;led2=1; TR1=1;}
}
}
if((keep==0)&&(minute>=6)&&(f_c1==0))
{
TR1=0;
time0=0; //小時標志;
minute=0; //秒標志
mminute=0;
switch(key_n)
{
// case 1: led0=0;
// TR0=1;c_494=0;f_c1=0;c_fan=1;
// break;
case 2: if(f_c==1)
{c_24v0=0; c_24v1=0;TR1=1;f_c1=1;c_fan=1;}
else {c_24v0=0; c_24v1=1;TR1=0;f_c=1;f_c1=0;c_fan=0;}
//c_24v0=0; c_24v1=1;
led0=0;led1=0; led2=1;
break; //制熱
case 3: if(f_c==1)
{
c_24v0=0;
c_24v1=0; // c_24v0=1;
//c_24v1=0;
TR1=1;
c_fan=1;}
else{c_24v0=1; c_24v1=0;f_c=1;TR1=0;f_c1=0;c_fan=0;}
led0=0;led1=1;led2=0; f_c1=1;
break; //制冷
case 4: c_24v0=0;
c_24v1=0;
c_fan=1;
TR1=0;
led0=0;led1=1;led2=1;f_c1=0;
break; //什么都不做
}
}
if((keep==0)&&(minute>=330)&&(f_c1==1))
{
TR1=0;
time0=0; //小時標志;
minute=0; //秒標志
mminute=0;
switch(key_n)
{
case 2: c_24v0=0;
c_24v1=1;
f_c1=0; c_fan=0;
break; //制熱
case 3: c_24v0=1;
c_24v1=0;
f_c1=0;c_fan=0;
break; //制冷
}
}
if(RT1==1)
{delay(5);
if((RT1==1)&&(keep!=1))
{keep=1;
TR0=0;
c_220v0=1;
c_220v1=1;
c_24v0=0;
c_24v1=0;
c_fan=1;
c_494=1;
TR1=1;
} //內部溫度過高------模塊停止工作
}
if(RT1==0)
{delay(5);
if((RT1==0)&&(keep==1))
{
keep=0;
if(key_n==2) {led0=0;led1=0;led2=1;c_24v0=0; c_24v1=1; c_fan=0;}
if(key_n==3) {led0=0;led1=1;led2=0;c_24v0=1; c_24v1=0; c_fan=0;}
if(key_n==4) {led0=0;led1=1;led2=1; }
if(key_n!=0) {TR0=1;c_494=0;}
//led0=1;led1=1;led2=1;
if(c_kaiguan==1) //在出現報警的過程中發動機關閉信號產生,當報警恢復正常后,繼續計數,6小時后關閉系統
{ TR1=0;
time0=0; //小時標志;
minute=0; //秒標志
mminute=0;
} //毫秒標志
}
}
if(keep==1)
{
if(one_sencond==1)
{led0=1;led1=1;led2=1;}
else{led0=0;led1=1;led2=1;}
}
if(RT2==1)
{delay(5);
if((RT2==1)&&(keep!=2))
{keep=2;
c_24v0=0;
c_24v1=0;
c_fan=1;
TR1=1;
} //冰箱過熱 --------半導體制冷輸出關閉
}
if(RT2==0)
{delay(5);
if((RT2==0)&&(keep==2))
{
keep=0;
if(key_n==2) {led0=0;led1=0;led2=1;c_24v0=0; c_24v1=1; c_fan=0;}
if(key_n==3) {led0=0;led1=1;led2=0;c_24v0=1; c_24v1=0; c_fan=0;}
if(key_n==4) {led0=0;led1=1;led2=1; }
//led0=1;led1=1;led2=1;
if(c_kaiguan==1) //在出現報警的過程中發動機關閉信號產生,當報警恢復正常后,繼續計數,6小時后關閉系統
{ TR1=0;
time0=0; //小時標志;
minute=0; //秒標志
mminute=0;
} //毫秒標志
}
}
if(keep==2)
{
if(one_sencond==1)
{led0=1;led1=1;led2=1;}
else{led0=1;led1=0;led2=1;}
}
if(c_kaiguan==0){TR1=1;EA=1;;keep=6;} //發動機關-----------延時6個小時關閉模塊
if(c_hv==0)
{delay(5);
if((c_hv==0)&&(keep!=3))
{keep=3;
c_220v0=1;
c_220v1=1;
TR0=0;
c_24v0=0;
c_24v1=0;
c_fan=1;
c_494=1;
TR1=1;
}
}
if(c_hv==1)
{delay(5);
if((c_hv==1)&&(keep==3))
{
keep=0;
if(key_n==2) {led0=0;led1=0;led2=1;c_24v0=0; c_24v1=1; c_fan=0;}
if(key_n==3) {led0=0;led1=1;led2=0;c_24v0=1; c_24v1=0; c_fan=0;}
if(key_n==4) {led0=0;led1=1;led2=1; }
if(key_n!=0){TR0=1;c_494=0;}
if(c_kaiguan==1) //在出現報警的過程中發動機關閉信號產生,當報警恢復正常后,繼續計數,6小時后關閉系統
{ TR1=0;
time0=0; //小時標志;
minute=0; //秒標志
mminute=0;} //毫秒標志
} //超300v高壓----------模塊停止工作等恢復正常后在工作
}
if(keep==3)
{
if(one_sencond==1)
{led0=0;led1=0;led2=1;}
else{led0=1;led1=1;led2=1;}
}
if(c_24in==0)
{delay(5);
if((c_24in==0)&&(keep!=5))
{keep=5;
c_220v0=1;
c_220v1=1;
TR0=0;
c_24v0=0;
c_24v1=0;
c_fan=1;
c_494=1;
TR1=1;
}
}
if(c_24in==1)
{delay(5);
if((c_24in==1)&&(keep==5))
{
keep=0;
if(key_n==2) {led0=0;led1=0;led2=1;c_24v0=0; c_24v1=1; c_fan=0;}
if(key_n==3) {led0=0;led1=1;led2=0;c_24v0=1; c_24v1=0; c_fan=0;}
if(key_n==4) {led0=0;led1=1;led2=1; }
if(key_n!=0)
{TR0=1;c_494=0;}
if(c_kaiguan==1) //在出現報警的過程中發動機關閉信號產生,當報警恢復正常后,繼續計數,6小時后關閉系統
{ TR1=0;
time0=0; //小時標志;
minute=0; //秒標志
mminute=0;
} //毫秒標志
} //輸入超過32v---------模塊停止工作等恢復正常后在工作
}
if(keep==5)
{
if(one_sencond==1)
{led0=1;led1=1;led2=0;}
else{led0=1;led1=1;led2=1;}
}
} //while(1)
} //main()
time0_ser() interrupt 1 using 0
{
//EA=0;
TR0=0;
switch(step)
{
case 0:{TH0=0XFD;
TL0=0X12;
//TH0=0xff;
//TL0=0x83;
c_220v0=1;
c_220v1=1;
step++;
break;}
case 1:{TH0=0XF2;
TL0=0X54;
//TH0=0XeD;
//TL0=0X72;
c_220v0=0;
c_220v1=1;
step++;
break;}
case 2:{TH0=0XFD;
TL0=0X12;
//TH0=0xff;
//TL0=0x83;
c_220v0=1;
c_220v1=1;
step++;
break;}
case 3:{TH0=0XFD;
TL0=0X12;
// TH0=0xff;
// TL0=0x83;
c_220v0=1;
c_220v1=1;
step++;
break;}
case 4:{TH0=0XF2;
TL0=0X54;
//TH0=0XeD;
//TL0=0X72;
c_220v0=1;
c_220v1=0;
step++;
break;}
case 5:{TH0=0XFD;
TL0=0X12;
//TH0=0xff;
//TL0=0x83;
c_220v0=1;
c_220v1=1;
step=0;
break;}
}
//EA=1;
TR0=1;
}
time1_ser() interrupt 3 using 1
{
//TR1=0;
TH1=0xfe;
TL1=0x0c;
mminute++;
if(mminute<=500)
one_sencond=0;
else
one_sencond=1;
if(mminute==1000) {minute++;mminute=0;
} //1s
if(minute==3600) {time0++;minute=0; } //1h
if(time0==6){ TR0=0;
c_220v0=1;
c_220v1=1;
TR1=0;
c_24v1=0;
c_24v1=0;
keep=10;
} //關閉所有輸出
//TR1=1;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -