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

📄 a123.c

📁 一个用仿真软件完成的简易温控器的程序
💻 C
字号:
#include <reg52.h>
#include <string.h> 
#include <intrins.h>
#define  uchar  unsigned  char
#define  uint  unsigned  int
//#define  addata    P1
//#define  disdata   P0
#define  t_set  25
uchar code sega_7[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};	 //共阳数码管无小数点 
uchar code segb_7[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};	 //共阳数码管有小数点 
sbit  aa=P2^0;       //数码管片选0
sbit  bb=P2^1;       //数码管片选1
sbit  cc=P2^2;       //数码管片选2
sbit  ysj=P2^3;	       //	压缩机
sbit  nx=P2^4;	       //逆转
sbit  qf=P2^5;	       //强风
sbit  zf=P2^6;	       //中风
sbit  rf=P2^7;         //弱风
sbit  keyset=P3^0;     //温度设定
sbit  keydown=P3^1;    //温度减 
sbit  keyup=P3^2;      //温度加 
sbit  adeoc=P3^6;      //EOC
sbit  adst=P3^3;       //START
sbit  adoe=P3^7;       //OE
uint  t0;              //设定温度
uint  t1;              //室温
uint  time_c;
uint  time_c1;
int q; 	  

//50ms定时	( 师傅的) 
void T0_time() interrupt 1 using 1
{
   TH0=(65536-50000)/256; //50ms延时
   TL0=(65536-50000)%256;
   time_c++;
}


void T1_time() interrupt 3 using 1
{
   
   TH1=(65536-50000)/256; //50ms延时
   TL1=(65536-50000)%256;
   time_c1++;
}
//(师傅的)
	void  delay(uint i)
	{
	   uint j;
	   for(;i>0;i--)
	       for(j=0;j<125;j++);
	} 

    void initial(void)
     {
       P2=0xff;
	   P1=0xff;
	   P0=0xff;
	   P3=0x17;
   	   t0=200;
	   EA=0;
	   time_c=0;
	   time_c1=0;
	   q=1;
	   //ysj=1;
	   //nx=1;
	   //qf=1;
	   //rf=1;
	   //zf=1;
	  }
   void display(uint temp)
	 {
	   
	   uint k;
       for(k=1;k<4;k++)
	   {		 
	     if (k==1) 
		    {
			  P0=sega_7[temp%10];//0
			  aa=0;
		     }
			else
		       {
		        if(k==2)
			          {
					    P0=segb_7[temp%100/10];//1
			         	bb=0;
					   }
					 else
                        {
						  if(k==3) 
						  {
						   P0=sega_7[temp/100];//2
						   cc=0;
						   }
						}
			    }
		  delay(20);
          aa=1;       
          bb=1;       
          cc=1;
	   }  
	} 

  

     uint  zh()
	 {
	   uint zz,tt;

       adst=0;
	   adst=1;
	   _nop_();
	   adst=0;

	   while(adeoc==0);
       //_nop_();

	   adoe=1;
	   zz=P1;
	   adoe=0;
	   tt=196*zz/100+78*zz/100000;   //转换温度,tt=500/255对应50度
	   return(tt);
	   }

	  void keyupscan()
	  {
		t0=t0+5;
        display(t0);
		while(keyup==0);
		}
	    void keydownscan()
	  {
	    
		t0=t0-5;
		display(t0); 
		while(keydown==0)	 ;
		}
	  void keyscan()
	  {

	      TR0=1;
		  while(time_c<=100)
		  {		    display(t0);
			if((keyup==0)||(keydown==0)||(keyset==0))
			{
			  delay(20);
			  time_c1=time_c1+time_c;
			   if((keyup==0)||(keydown==0)||(keyset==0))
			   {
			     time_c=0;
				 if(keyup==0) keyupscan();
				 if(keydown==0) keydownscan();
				 }
			   }
			   }
			   TR0=0;
			   time_c=0;
			   }

    void  fd()
	{
	    if(t0!=t1)
	     {
	      //int z;
  	      //z=ysj;
	      ysj=0;
		 // q=1;
	      //if(ysj!=z)
		     //time_c1=0;		
	         if(TR1!=1)
            {      
            
		     time_c1=0;
            }
             TR1=1;
		  if(t0>t1)
		    {
		        nx=0;
				q=nx;

				if((t0-t1)>=20)
		             {
		                qf=0;
		                 rf=1;
		            	zf=1;
			          }
				  else
				  			    {
				  zf=0;
				  qf=1;
				  rf=1;
				  }

		     }
		  if(t0<t1)
		    {
		        nx=1;
				if((t1-t0)>=20)
			  		    {
		                  qf=0;
		                  rf=1;
		               	  zf=1;
			             }
				 else
			    {
				  zf=0;
				  qf=1;
				  rf=1;
				  }
		     }
		  /* if(((t1-t0)>=20)||((t0-t1)>=20))
		    {
		        qf=0;
		    	rf=1;
		    	zf=1;
			}
			else
			    {
				  zf=0;
				  qf=1;
				  rf=1;
				  }*/
		 }

	else
		 {
		     rf=0;
			 qf=1;
			 zf=1;
			 nx=q;
			 if(time_c1<2400)
			 {
			   	//TR1=1;
				ysj=0;
				if(q==0)
				    nx=0;
	     	if((keyup==0)||(keydown==0)||(keyset==0))
		{
		  delay(20);
		  if((keyup==0)||(keydown==0)||(keyset==0))
		  {
		    
                    if(keyset==0) display(t0);
                    if(keyup==0)  keyupscan();
                    if(keydown==0) keydownscan();
                    keyscan();
			}
			}
				//if(time_c1==2400)
			//	{time_c=0;
			//	q=1;}
				      /*	if(keyset==0)
		{
		  delay(20);
		  if(keyset==0)
		  {
		    keyscan();
			}
		  }	 */
			 }
		//	 if((time_c==0) &&(time_c1>2400))
			if(time_c1>=2400)
              {ysj=1;
			 q=1;
             TR1=0;
			/* if(TR1!=1)
		      {
			     time_c1=0;
				}**/
			}
			 }
		}
	  
	    

	 void main()
	 {
	  initial();
	     TMOD=0X11;
         TH0=(65536-50000)/256; //50ms延时
         TL0=(65536-50000)%256;

         TH1=(65536-50000)/256; //50ms延时
         TL1=(65536-50000)%256;
         EA=1;
         ET0=1;
         ET1=1;

	   while(1)
      { 

	    t1=zh();
        fd();
        display(t1);	     
      	if((keyup==0)||(keydown==0)||(keyset==0))
		{
		  delay(20);
		  if((keyup==0)||(keydown==0)||(keyset==0))
		  {
		    
                    if(keyset==0) display(t0);
                    if(keyup==0)  keyupscan();
                    if(keydown==0) keydownscan();
                    keyscan();
			}
		  }
		  
		}
		}	  	 

	  
	   
	 
	   
   
	  


	

⌨️ 快捷键说明

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