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

📄 microt02.c

📁 本要求适用于Microcon-T02半导体冰箱控制板(以下简称控制板)。本控制板由电源板、显示控制板两部分组成。
💻 C
📖 第 1 页 / 共 3 页
字号:
    for(rCount2=255;rCount2!=0;rCount2--)
      {
      rCount3++;
      rCount3=rCount3+2;
       }   
     }
  }
*/
//----------------------------------------------------------------------------

//----------------------------------------------------------------------------
void sT02DispDriver()
{
            if(rCount1&0x10)pLedSegA=0;            
            if(rCount1&0x04)rCount2=rCount2&0xDF; //pLedSegB=0; 
            if(rCount1&0x02)rCount2=rCount2&0xEF; //pLedSegC=0;
            if(rCount1&0x40)rCount2=rCount2&0xBF; //pLedSegD=0;  
            if(rCount1&0x80)rCount2=rCount2&0xF7; //pLedSegE=0;                            
            if(rCount1&0x20)pLedSegF=0;
            if(rCount1&0x08)rCount2=rCount2&0xFB; //pLedSegG=0; 
       } 
       
void sDh01DispDriver()   
{             
    if(rCount1&0x80)pLedSegA=0;  
    if(rCount1&0x08)rCount2=rCount2&0xDF; //pLedSegB=0;    
    if(rCount1&0x20)rCount2=rCount2&0xEF; //pLedSegC=0;   
    if(rCount1&0x04)rCount2=rCount2&0xBF; //pLedSegD=0;  
    if(rCount1&0x10)rCount2=rCount2&0xF7; //pLedSegE=0;  
    if(rCount1&0x02)pLedSegF=0; 
    if(rCount1&0x40)rCount2=rCount2&0xFB; //pLedSegG=0;
  }  
//--------------------------------------------------------------
//------------2006-7-5 12:43
//--------------------------------------------------------------
void  sOnDelayCheck()  //发生了温度设定更改,判断是否发生了切换
{
   rCount1=rTempValue&0x7F;
      
   if(rTempValue&0x80)rCount1=20-rCount1;
   else  rCount1=rTempValue+20;
     
   rCount2=rSetTemp+20-cNegSetTemp;
   
   if(!fOnDelay)rOnDelay=constOnDelay; //正在延时中,则不对延时时间重置
    
   if(fColdOut) //温度设定前是制冷状态
   {
    if(rCount1<(rCount2-4))  //新的设定温度超过当前温度5度,需要制热延时
                    fOnDelay=1;   //需要延时       
     }    
   if(fHotOut) //温度设定前是制热状态
   {
     if(rCount1>(rCount2+4)) //需要从制热转到制冷
                    fOnDelay=1; //需要延时   
    }  
 
  } 
//-------------------------------------------------------------- 

//--------------------------------------------------------------  
void  sDelay500us()
{
  rCount1=170;
  while(--rCount1);  
  }   
/*-------------------------------------------------------------------------------

-------------------------------------------------------------------------------*/ 
void main()
{
  INTCON=0;
	OSCCON=0x65;	
	sDelay500us();
	sInitPort();
	sInitRam();
//-------------------------------------------------------------------
//-------产品型号识别-------
//----Dh01(RA4输出0,RA3检测为0) 
//----T02(RA3检测为高,上拉电阻10K)
//-------------------------------------------------------------------
  do
  {
  rCount2=0;
  if(pModelIn)rCount2=1;  
  if(pKeyInK4==0)rCount2|=0x02;         
  sDelay();
  
  rCount3=0;
  if(pModelIn)rCount3=1;
  if(pKeyInK4==0)rCount3|=0x02;  
    
   }while(rCount2!=rCount3);   //直到两次读取的值相等

   if(rCount2&0x01)fModeDH01=0;   //1为T02,0为DH01
   else   fModeDH01=1;
   
 //  fModeDH01=0;
   /*
   if(rCount2&0x02)           //自检按键是否按住
    {
      fSelfTest=1;
      rDispValue=0x88;  //全显示5s
      if(fModeDH01)fHotOut=1;
      else     fColdOut=1;  //制冷输出=1;
      rSelfTestTime=11;
      }
      */	
//----------------------------------------------------------------------------
	  rE2Data[0]=EEPROM_READ(0x10);
    rE2Data[1]=EEPROM_READ(0x11);
    rE2Data[2]=EEPROM_READ(0x12);
    rE2Data[3]=EEPROM_READ(0x13);    //接收EEPROM数据

	  rCount2=rE2Data[0]; //开机工作状态 
  	rCount2=rCount2+rE2Data[1]; //温度设定值
	  rCount2=rCount2+rE2Data[2];	 //常数
	  
	if(rCount2==rE2Data[3]&&rE2Data[2]==constE2Data)
	{
	  rSetTemp=rE2Data[1];	
	  if(rE2Data[0])
	  	 {
	  	 fInqPOwerOn=1;
	  	 if(fModeDH01)rInqOnTime=cDh01InqOnTime;
	  	 else   	rInqOnTime=cT02InqOnTime;
	  	  }  
	  }
	else
	{
	  rE2Data[0]=0x00;
	  rSetTemp=5+cNegSetTemp;  //5度 	  
	  rE2Data[1]=rSetTemp;
	  rE2Data[2]=constE2Data;     
	  } 
/*
    rTestValue=96; //Test only
    rSetTemp=70;  //Test only
    fInqPOwerOn=1; //Test only
  */  
//------------------------------------ 
	while(1)
	{
	  if(TMR0<8)
	  {
	    CLRWDT();   //2ms一次
	    
	    TMR0+=constTMR0;
//------------------------------------------------------    
         //关闭显示 
          pLedCom3=1;
          PORTC=0xFC;   
          PORTA=PORTA|0x31;
          sDelay500us();  
          pLedCom3=1;
//----------------------------                    
	        s2msTask(); 
	    
	         rTaskJump=rTaskJump<<1;
           if(rTaskJump==0)rTaskJump=0x01;
          
          rCount1=rPORT6.BYTE&0x30;
          if(fOnDelay)rCount1=0;     //延时关闭输出
          	
          if(fFanOut)rCount1|=0x40;  
          if(fNegVol)rCount1=0;	//电源反接故障
          	
        //-------------------------------------- 
          PORTB=rCount1|0x80; 
           
          if(rTaskJump&0x01)
          {
          	if(!--rDispTimeBrush)sPushData();  //更新显示缓冲区
            
            sCheckTime();  
                   		            
            rCount1=~DispTab[rDispValue&0x0F];
            
            rCount2=0xFF;
            rCount1=rCount1&0x0F;   //只显示高4位
            // 7-1  E D F A G B C
            if(fModeDH01)sDh01DispDriver();
            else   sT02DispDriver();
             
            PORTC=PORTC&rCount2;  
            pLedCom2=0;  
	         }
	         
          if(rTaskJump&0x02)
          {	         
	          rCount1=~DispTab[rDispValue&0x0F];
            
            rCount2=0xFF;
            rCount1=rCount1&0xF0;   //只显示低4位
            // 7-1  E D F A G B C
            if(fModeDH01)sDh01DispDriver();
            else   sT02DispDriver();
             
            PORTC=PORTC&rCount2;  
            pLedCom2=0;  
	         
	          }
	         
          if(rTaskJump&0x04)
          {
            rCount1=rDispValue>>4;
            rCount1=rCount1&0x0F;
            rCount1=~DispTab[rCount1];
            rCount1=rCount1&0x0F;  //只显示高4位
            rCount2=0xFF;
            if(fModeDH01)sDh01DispDriver();
            else   sT02DispDriver();
            PORTC=PORTC&rCount2; 
                        
            pLedCom1=0;              
            }
            
          if(rTaskJump&0x08)
          {              
            rCount1=rDispValue>>4;
            rCount1=rCount1&0x0F;
            rCount1=~DispTab[rCount1];
            rCount1=rCount1&0xF0;   //只显示低4位
            rCount2=0xFF;
            if(fModeDH01)sDh01DispDriver();
            else   sT02DispDriver();
            PORTC=PORTC&rCount2; 
                        
            pLedCom1=0;   
               
            rCount1=sRdAdVal(0x09); //RA2 温度
            rTempAd.PICINT=rTempAd.PICINT+rCount1;
               	
    	    rCount1=sRdAdVal(0x05);   //RA1 电源电压 
    	    rVoltageAd.PICINT=rVoltageAd.PICINT+rCount1;
     	    rAdConCount++;
     	       
          if(rAdConCount&0x10)  //rAdConCount==16?
    	    {
            rTempAd.WORD.ByteH=rTempAd.WORD.ByteH<<4;
            rTempAd.WORD.ByteL=rTempAd.WORD.ByteL>>4;
            rCurAdValue= rTempAd.WORD.ByteH|rTempAd.WORD.ByteL;  
            
            rVoltageAd.WORD.ByteH=rVoltageAd.WORD.ByteH<<4;
            rVoltageAd.WORD.ByteL=rVoltageAd.WORD.ByteL>>4;
            rVolAdValue= rVoltageAd.WORD.ByteH|rVoltageAd.WORD.ByteL;              
           
            rAdConCount=0;
            rTempAd.PICINT=0;
            rVoltageAd.PICINT=0;
            /*
            rVolAdValue=rTestValue; //Test only
            
            rCurAdValue=204;  //Test only
            */
            if(rVolAdValue<19)fNegVol=1;
            else   fNegVol=0; 	
            
            if(rCurAdValue>rAdValue)rCount1=rCurAdValue-rAdValue;
            else   rCount1=rAdValue-rCurAdValue;
            
            rAdValue=rCurAdValue;
            
            if(rCount1<5)
            {            
                    
             fSenError=0;
    		     //传感器故障检查    		    
    		    //------------------------------------ 
    		    if(rAdValue>250)
    		    	    {
    		    	    fSenError=1;
    		    	    fFanOut=0;
  	              fColdOut=0;
  	              fHotOut=0;   
    		    	     }
    		    else if(rAdValue<30)
    		    	    {
    		    	    fSenError=1;
    		    	    fFanOut=0;
  	              fColdOut=0;
  	              fHotOut=0;     		    	     
    		    	     }   
    		    else if(rAdValue>228)
    		    	   { 
    		    	     fColdOut=0;  //温度超过80度,风扇延时3分钟关闭
    		    	     
  	               fHotOut=0;
    		    	     if(!fTempMax80)    
    		    	     	    {
    		    	     	    fTempMax80=1;
  	                    rFanDelay180s=181;	   
    		    	     	    }
    		            }
    		    else    fTempMax80=0;
    		    //------------------------------------	
    		    	
    		    if(fSenError)rTempValue=0xED;
    		    else if(fTempMax80)rTempValue=0xDD;  
     		    else
     		      { 
     		        if(fModeDH01)rTempValue=Dh01TempTab[rAdValue-30];
     		        else   rTempValue=TempTab[rAdValue-30];
                }   
    		     fPowerUp=1;  //上电完成  

    		     if(fInqPOwerOn&&(rInqOnTime==0))
    		     {
    		     	 fPowerOn=1;  //自动开机
    		       fInqPOwerOn = 0;
    		        }
	          }
	       
	      }  
	           	       	     
	    }
//--------------------------------------------------------------------	    
          if(rTaskJump&0x10)
          { 

		       if(rNeedWrE2)    //每次写一个数据
		       {      
			      rNeedWrE2=rNeedWrE2<<1;
		 	               
	          if(rNeedWrE2&0x02)EEPROM_WRITE(0x10,rE2Data[0]); 
            if(rNeedWrE2&0x04)EEPROM_WRITE(0x11,rE2Data[1]);
            if(rNeedWrE2&0x08)EEPROM_WRITE(0x12,rE2Data[2]);
            if(rNeedWrE2&0x10)
           	{
     	       EEPROM_WRITE(0x13,rE2Data[3]);
             rNeedWrE2=0;
                }     
			       }

          if(fNeedSaveE2&&!rSaveDelay--) 
          {
           fNeedSaveE2=0;
            
            if(fPowerOn)rE2Data[0]=0x01;
            else       rE2Data[0]=0x0;
            rCount2=rE2Data[0];  
	        	rE2Data[1]=rSetTemp;
	        	rCount2=rCount2+rSetTemp;  
	        	rE2Data[2]=constE2Data;
	        	rCount2=rCount2+constE2Data;
	          rE2Data[3]=rCount2;	         
	          rNeedWrE2=1;
           
           //------------------------------------ 
              }
          	//---------显示温度符号--------------------------
                   
          if(fPowerOn)
          {	
          	if(fModeDH01)  //制冷制热显示控制
          	{
          	  pLedSegB=0;
          	  pLedSegE=0;
          	  if(fHotOut)pLedSegB=1; //制热状态指示
          	  if(fColdOut)pLedSegE=1;
          	  pLedCom3=0; 
          	  }
          	else   //DEK-T02  度和CF单位控制
          	{    
          	pLedSegD=0;
          	pLedSegG=0;
          	pLedSegB=0;
          	pLedSegC=0;
          	
          	if(fColdOut)pLedSegD=1;//制冷
          	if(fHotOut)pLedSegG=1;//制热
          	
          	if(rErrFlag.BYTE==0)  //没有故障
          	{
          	  if(rDispValue!=0xFF)
          	   {	
          	    if(fFDisp)pLedSegC=1; //F  让C不亮
          	    else      pLedSegB=1; //C  让F不亮          	   		
                }
               }
               if(fTempSetS)
               {
               	  pLedSegC=0;
               	  pLedSegB=1;           	  
               	}
            pLedCom3=0; 
              } 	
            } 

          if(!fNegVol)  //电源反接故障吗?
         	{
     	     sKeyCheckIn();
     	    /*
     	     if(fSelfTest)
     	     {
     	      if(fkeyprocess)sSelfDecodeKey();
     	      if(rSelfTestTime==0)sSelfDecodeKey();     
     	      } 
                  */
                  
    	     if(fkeyprocess)sDecodeKey(); 
    	      
           if(fPowerUp)  
           	  { 
           	  	sVolCheck();        
                if((!fTempSetS)&&(rErrFlag.BYTE==0))sConCheck();  // 控制    
               }
            }
            rTaskJump=0x0;
	           }
//--------------------------------------------------------------------		           
	  }	
	} 
}

⌨️ 快捷键说明

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