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

📄 mcu.c

📁 用了车载冰箱的程序控制用于批量生产
💻 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 + -