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

📄 总程序1.c

📁 基于51单片机的电烤箱proteus仿真系统及源程序
💻 C
字号:
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit mianbao=P3^0;
sbit hongkao=P3^1;
sbit shaokao=P3^2;
sbit jiedong=P3^3; //面包、烘烤、烧烤、解冻功能键
sbit inckey=P0^0; 
sbit deckey=P0^1;  //增加、减少键
sbit startkey=P0^2;//开始键
sbit tmpkey=P0^3;  //温度设定键
sbit timekey=P0^4; //时间设定键
sbit pausekey=P0^5;//暂停键
sbit wela1=P2^0;   //扫描端口
sbit wela2=P2^1;
sbit wela3=P2^2;
sbit wela4=P2^3;  
sbit out=P2^4;    //TLC2543与单片机接口
sbit din=P2^5;    
sbit cs=P2^6;     
sbit clk=P2^7; 
sbit sled=P3^4;
sbit pled=P3^5;  
sbit heat1=P3^6;  //继电器1、2控制口
sbit heat2=P3^7;  
char fen;         //分
uchar miao;       //秒
uchar ss;         //倒计时控制
uchar chuandi;    //功能键控制字符
uchar suoding;    //温度、时间键控制字符
uchar tcount;     //计数
uchar tmp;        //温度常数
uchar jian;       
uchar numge;      //温度个、十、百位
uchar numshi;
uchar numbai;    
uint tmpset;    //设定温度
uint realtmp;   //实际温度
uchar save1;
uchar save2;
uchar pause;
uchar t;
uint ad;       //ad转换结果
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xc6};//数码管显示列表
uchar code table2[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};
//********延时程序********//
void delay(uchar z)
{
  uchar x,y;
  for(x=z;x>0;x--)
   for(y=110;y>0;y--);
}
//********时间显示程序********//
void displaytime()
{
  wela1=1;
  P1=table[miao%10];
  delay(10);
  wela1=0;
  wela2=1;
  P1=table[miao/10];
  delay(10);
  wela2=0;
  wela3=1;
  P1=table2[fen%10];
  delay(10);
  wela3=0;
  wela4=1;
  P1=table[fen/10];
  delay(10);
  wela4=0;
}
//********温度显示程序********//
void displaytmp()
{
  numbai=tmpset/100;
  numshi=tmpset%100/10;
  numge=tmpset%10;
  wela1=1;
  P1=table[10];
  delay(10);
  wela1=0;
  wela2=1;
  P1=table[numge];
  delay(10);
  wela2=0;
  wela3=1;
  P1=table[numshi];
  delay(10);
  wela3=0;
  wela4=1;
  P1=table[numbai];
  delay(10);
  wela4=0;
}
//********时间设定程序********//
void settime()
{
  displaytime();
  while(!timekey)
  {
  displaytime();
    if(!inckey)
     {
	  delay(10);
	    if(!inckey)
         {
	     fen+=10;
             if(fen>99)
			 {
	         fen=99;
			 }
	     }		
	      while(!inckey)
	      {  
	      displaytime();
	      }	  
	 }
	else if(!deckey)
     {
	  delay(10);
	  if(!deckey)
	    {
	     fen-=10;
		 if((fen<1)&&(pause==0))
		 {
		 fen=1;
		 }
		 if((fen<1)&&(pause==1))
	      {
	     fen=0;
	      }
	    }	    
       
     }
	 while(!deckey)
	 {
	 displaytime();
	 }
  }
  if(!inckey)
  {
  t=0;
   delay(10);
   if(!inckey)
    {
	 fen++;
     displaytime();
	    if(fen>99)
		{
	    fen=99;
		}
	 }
	 }
    	TMOD=0x01; 
        TH0=15536/256; 
        TL0=15536%256; 
        TR0=1;  
	     while(!inckey)
	     {
        if(t==40)
         {
		 displaytime();
		 t=37;		 
        fen++;
		if(fen>99)
		{
	    fen=99;
		}
	         }
        if(TF0==1)
       {
        t++;
        TF0=0; 
        TH0=15536/256; 
        TL0=15536%256;
       }
	     displaytime();
	  }	
	  
  if(!deckey)
  {
  t=0;
   delay(10);
   if(!deckey)
    {
	if((fen<1)&&(pause==1))
	{
	fen=1;
	}
	if((fen<2)&&(pause==0))
	 fen=2;
	 fen--;
	 displaytime();
	}
		TMOD=0x01; 
        TH0=15536/256; 
        TL0=15536%256; 
        TR0=1;  
	     while(!deckey)
	     {
        if(t==40)
         {
		 displaytime();
		 t=37;		 
       if((fen<1)&&(pause==1))
	    {
	    fen=1;
	    }
	   if((fen<2)&&(pause==0))
	   fen=2;
	   fen--;
		 }
        if(TF0==1)
        {
        t++;
        TF0=0; 
        TH0=15536/256; 
        TL0=15536%256;
        }
	     displaytime();
	  }	
   }
}
//********温度设定程序********//
void settmp()
{ 
     displaytmp();
   	if(!inckey)
     { 
        delay(10);
       if(!inckey)
       {
	   if(tmpset>tmp)
           {       	   
           tmpset=55;
           }
	   tmpset=tmpset+15;
	        }	 
    while(!inckey)
      {
   	  displaytmp();
	  }
     }
     else if(!deckey)
     {
       delay(10);
       if(!deckey)
       {
         if(tmpset<85)
         {
          tmpset=jian;
         } 
	     tmpset=tmpset-15;
          }
      while(!deckey)
      {
  	   displaytmp();
	   }
	 }
  }  
  
//********ad转换程序********//  
  uint read2543(uchar port)
{
uchar i;
clk=0;
cs=0;
port<<=4;
for(i=0;i<12;i++)
{
  if(out) ad|=0x01;
  din=(bit)(port&0x80);
  clk=1;
  delay(1);
  clk=0;
  delay(1);
  port<<=1;
  ad<<=1;
}
cs=1;
ad>>=1;
return(ad);
}

  
//********开始程序********//
void start()
  {
 tcount=0;
 ss=1;
 pause=0;
 pled=1;
 sled=0;
   switch(chuandi)
  {
  case 1:
  case 4:
  case 5:
  case 8:save1=0,save2=0;break;
  case 2:
  case 6:save1=1,save2=0;break;
  case 3:
  case 7:save1=0,save2=1;break;
  default:break;
  }
 
          TMOD=0x01; 
        TH0=15536/256; 
        TL0=15536%256; 
        TR0=1; 
		while(ss==1)
		{
		ad=read2543(0);   //开始进行AD转换 
		realtmp=ad/16;         //换算为实际温度  
       displaytime();
	       if(TF0==1) 
        { 
		  tcount++; 
	    if(tcount==15) 
            { 
              tcount=0; 
               if(miao==0) 
                { 

                  miao=60; 
		         fen--;
                } 
				miao--; 
				if((fen==0)&&(miao==0))
				{
				ss=0;
				heat1=1;
				heat2=1;
				pled=0;
				sled=1;
			       }
				  } 
          TF0=0; 
          TH0=15536/256; 
          TL0=15536%256;
		}
		      	  
 	      if(realtmp>tmpset)
         {
		  heat1=1;
          heat2=1;		  
		 }	 
    	 else
		 {
		 heat1=save1;
		 heat2=save2;
		 ad=0;
		 }
		
 		if(!pausekey)  //暂停
  	      {
		  delay(10);
		  if(!pausekey)
		    {
			pause=1;
		     heat1=1;
		    heat2=1;
		    ss=~ss;
			sled=1;
			pled=0;
			ad=0;
		    }
          }
	   
	}
}
//********主程序********//
void main()
{
while(P3==0xff)
{
miao=0;
fen=0;
displaytime();
}
while(1)
 {
 
        if(!mianbao)
    { 
     delay(10);
      if(!mianbao)
       {
	   tmpset=175;
	   miao=0;
	   fen=30;
	   chuandi=1;
	   tmp=220;
		jian=250;
		suoding=0;
		pause=0;
	   	}
	}
	
	  if(!hongkao)
    { 
     delay(10);
      if(!hongkao)
       {
	   tmpset=175;
	   chuandi=2;
	   miao=0;
		fen=30;
		tmp=160;
		jian=190;
		suoding=0;
		pause=0;
       }
	 }
	  
	 if(!shaokao)
    { 
     delay(10);
      if(!shaokao)
       {
	   tmpset=175;
	   chuandi=3;
	   miao=0;
		fen=30;
		tmp=160;
		jian=190;
		suoding=0;
		pause=0;
       }
	 }
	 
	 if(!jiedong)
    { 
     delay(10);
      if(!jiedong)
       {
	   tmpset=90;
	   chuandi=4;
	   miao=0;
		fen=30;
		suoding=0;
		pause=0;
	   }
	 }
	   
	switch(chuandi)
	{
	 case 1:
	 case 2:
	 case 3:
	 case 4:settime();break;
	 case 5:
	 case 6:
	 case 7:settmp();break;
	 case 8:displaytmp();break;
         default:break;
	}
		 
	   
	    if(suoding==1)
		{
		  if(!tmpkey)
		  {
		    delay(10);
		    if(!tmpkey)
		    {
		    chuandi=chuandi;
		    }
		  }
		}
		else
		{
		 if(!tmpkey)
          {
         delay(10);
         if(!tmpkey)
            {
		   suoding=1;
		   chuandi=chuandi+4;
		    }
          }
		}
	 
	   
	     if(!timekey)
		 {
		  delay(10);
		 if(!timekey)
		  {
		  if(suoding==1)
		  {
		   suoding=0;
		   chuandi=chuandi-4;
		   }
		  }
		 }
		 
	 if(!startkey)
	 {
	 delay(10);
	 if(!startkey)
	   {
	       start();
        }
     } 
  }
}

⌨️ 快捷键说明

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