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

📄 display.c

📁 一个电表的程序
💻 C
📖 第 1 页 / 共 2 页
字号:
			return;
		}
	}
	Stop_Disp = 0;
	CtDown_Disp = RShftDspTm_Dtr[0];
	RttPnter_Disp++;
	if(RttPnter_Disp > 15)
	{
		RttPnter_Disp = 0;
	}
	else
	{
		if(RRttDspNo_Dtr[RttPnter_Disp] > 0x17)
		{
			RttPnter_Disp = 0;
		}
	}
}

/*===================================================================
====函数说明:键显子函数。
====		 
====函数入口:无。
====函数出口:无。
====================================================================*/
void KeyTrig_Disp(void)
{
	KeyPnter_Disp++;
	if(KeyPnter_Disp > 15)
	{
		KeyPnter_Disp = 0;
	}
	else
	{
		if(RKeyDspNo_Dtr[KeyPnter_Disp] > 0x17)
		{
			KeyPnter_Disp = 0;
		}
	}
}


/*===================================================================
====函数说明:判断当前是应当开显示还是关显示。
====		 
====函数入口:无。
====函数出口:无。
====================================================================*/
void ClsLcd_Jdg_Disp(void)
{
	Open_Disp = 0;
  	if(		(ROpnClsLcd_Dtr[1] == ROpnClsLcd_Dtr[3]) 
  		&&  (ROpnClsLcd_Dtr[0] == ROpnClsLcd_Dtr[2])  
      )
  	{
    	Open_Disp = 1;
   	}
    
  	else if( 	(ROpnClsLcd_Dtr[1] < ROpnClsLcd_Dtr[3])
  			 || (	   (ROpnClsLcd_Dtr[1] == ROpnClsLcd_Dtr[3]) 
  			 		&& (ROpnClsLcd_Dtr[0] < ROpnClsLcd_Dtr[2])
  			 	)
  		   )
  	{
   		if(	   (RTm_Dtr[2] > ROpnClsLcd_Dtr[1]) 
   			&& (RTm_Dtr[2] < ROpnClsLcd_Dtr[3])
   		  )
   		{
   			Open_Disp = 1;
   		}
   		else if (	(RTm_Dtr[2] > ROpnClsLcd_Dtr[1]) 
   				 && (	  (RTm_Dtr[2] == ROpnClsLcd_Dtr[3]) 
   				 	   && (RTm_Dtr[1] < ROpnClsLcd_Dtr[2])
   				 	)
   				)
   		{
   			Open_Disp = 1;
   		}
   		else if (	 (RTm_Dtr[2] == ROpnClsLcd_Dtr[1])
   		 		  && (RTm_Dtr[1] > ROpnClsLcd_Dtr[0])
   		 		  && (RTm_Dtr[2] == ROpnClsLcd_Dtr[3]) 
   		 		  && (RTm_Dtr[1] < ROpnClsLcd_Dtr[2])
   		 		)
   		{
   			Open_Disp = 1;
   		}
   		else if (	 (RTm_Dtr[2] == ROpnClsLcd_Dtr[1]) 
   				  && (RTm_Dtr[1] > ROpnClsLcd_Dtr[0])
   				  && (RTm_Dtr[2] < ROpnClsLcd_Dtr[3])
   		 		)
   		{
   			Open_Disp = 1;
   		}
   	}//else if end
  	else 
  	{ 
   		if(	   (	  (RTm_Dtr[2] > ROpnClsLcd_Dtr[1])
   				 ||   (	    (RTm_Dtr[2] == ROpnClsLcd_Dtr[1]) 
   				 		 && (RTm_Dtr[1] > ROpnClsLcd_Dtr[0])
   			   		  )
   			   ) 
   			&& (	  (RTm_Dtr[2] > ROpnClsLcd_Dtr[3])
   				 ||   (		(RTm_Dtr[2] == ROpnClsLcd_Dtr[3])
   						 && (RTm_Dtr[1] > ROpnClsLcd_Dtr[2])
   					  )
   			   )
   		  )
   		{
   			Open_Disp = 1;
   		}//if end 
   		if(	   (	 (RTm_Dtr[2] < ROpnClsLcd_Dtr[1])
   				  || (		(RTm_Dtr[2] == ROpnClsLcd_Dtr[1]) 
   						&&  (RTm_Dtr[1] < ROpnClsLcd_Dtr[0])
   					 )
   			   ) 
   			&& (	 (RTm_Dtr[2] < ROpnClsLcd_Dtr[3])
   				  || (		(RTm_Dtr[2] == ROpnClsLcd_Dtr[3])
   						&&	(RTm_Dtr[1] < ROpnClsLcd_Dtr[2])
   					 )
   			   )
   		  )
   		{
   			Open_Disp = 1;
   		}//if end       
   }//else end
} 


/*=======================================================================
=====函数说明:该函数用来测试要显示的几位数据从最高位开始不为0,
=====		  因为数据的最高几位都为0时则不用显示。
=====		  由于显示器只有6位,除去两位必须显示,我们就只需要最多测试4位。
=====入口:	  unsigned char *p    ;要测试的数据的起始地址。
=====出口:	  无。
========================================================================*/
void  GetRidOf0_Disp(unsigned char *p)
{
	unsigned char i=0;
   	for(;i<5;)
   	{  	
   		if (*p != 0)
   		{    
   			break;
   		}
      	else
      	{
      		*p = 16;
      		p++;
      		i++;
      	}
   	}
   	return;
}


/*=======================================================================
=====函数说明:电量显示函数。
=====		 
=====		 
=====入口:要显示的数据标识。	  
=====出口:无。	  
========================================================================*/

void Engy_Disp(unsigned int Sign)
{
	unsigned char i,*p,Pointer;
	unsigned int length;
	if(Sign > 0xe300)
	{
		if(F_BlckRead_Eeprm(HstryEngy_Pter,&Pointer,1))
	 	{
			RMtWd_Dtr[0] &= 0xfd;	//存储芯片无错
		}
		else
		{
			RMtWd_Dtr[0] |= 0x02;	//存储芯片出错
		} 
	    if((Sign + (Pointer * 0x0010)) > 0xe3cf)
		 {
			Sign = Sign + Pointer * 0x0010 - 0x00c0;
		 }
		else
		 {
			Sign = Sign + Pointer * 0x0010;
		 }
	 }
	p = F_GetData_Sys(Sign,0,&length);
    for(i=0;i < 4;i++)
      {
        LcdBuf_Disp[7-2*i] = (*(p+i) & 0x0f);
        LcdBuf_Disp[6-2*i] = (*(p+i) & 0xf0) >>4;
       }
//	GetRidOf0_Disp(LcdBuf_Disp);  					//

    for(i=0;i<8;i++)
     {
       LcdBuf_Disp[i] =Lcd_Data[LcdBuf_Disp[i]];
     }
   LcdBuf_Disp[5] |= 0x80;	//小数点显示
   LcdBuf_Disp[8] |= 0x01;	//kwh显示	
   LcdBuf_Disp[9] |= 0x08;	//电量显示
}


/*=======================================================================
=====函数说明:时间、日期显示函数。
=====		 
=====		 
=====入口:	  
=====出口:	  
========================================================================*/
void RDtWk_Dtr_Disp(void)			//日期显示
{
  unsigned char i;
  for(i=0;i<3;i++)
   {
     LcdBuf_Disp[7-2*i] = Lcd_Data[RDtWk_Dtr[(i+1)] & 0x0f];
     LcdBuf_Disp[6-2*i] = Lcd_Data[(RDtWk_Dtr[(i+1)] & 0xf0) >> 4]; 
   }
  LcdBuf_Disp[5] |= 0x80; 
  LcdBuf_Disp[3] |= 0x80;
  LcdBuf_Disp[9] |= 0x04;			//时间显示
  
}    
 
void RTm_Dtr_Disp(void)			//时间显示
{
  unsigned char i;
  for(i=0;i<3;i++)
   {
     LcdBuf_Disp[7-2*i] = Lcd_Data[RTm_Dtr[i] & 0x0f];
     LcdBuf_Disp[6-2*i] = Lcd_Data[(RTm_Dtr[i] & 0xf0) >> 4]; 
   }
  LcdBuf_Disp[5] |= 0x80; 
  LcdBuf_Disp[3] |= 0x80;
  LcdBuf_Disp[2] |= 0x80;
  LcdBuf_Disp[4] |= 0x80;
  LcdBuf_Disp[9] |= 0x04;			//时间显示
}  


/*=======================================================================
=====函数说明:上行为自动抄表日、时  下行为脉冲常数(imp/kWh)。
=====		 
=====		 
=====入口:	  
=====出口:	  
========================================================================*/

void AUtRdTm_Disp(void)   		//脉冲常数
{	
  unsigned char i;
  for(i=0;i<2;i++)
   {
     LcdBuf_Disp[7-2*i] = Lcd_Data[RMtCt_Dtr[i] & 0x0f];
     LcdBuf_Disp[6-2*i] = Lcd_Data[(RMtCt_Dtr[i] & 0xf0) >>4];
    }
}


/*=======================================================================
=====函数说明:用户号显示
=====		 
=====		 
=====入口:	  
=====出口:	  
========================================================================*/

void UsrNoTobuf_Disp(void) 			//表号显示
{	
  unsigned char i;
  for(i=0;i<4;i++)
   {
     LcdBuf_Disp[7-2*i] = Lcd_Data[RMtNo_Dtr[i] & 0x0f];
     LcdBuf_Disp[6-2*i] = Lcd_Data[(RMtNo_Dtr[i] & 0xf0) >>4] ;    
    }
  LcdBuf_Disp[7] |= 0x80;			//表号显示
	
}


/*=======================================================================
=====函数说明:电池电压显示
=====		 
=====		 
=====入口:	  
=====出口:	  

/*=======================================================================
=====函数说明:全显
=====		 
=====		 
=====入口:	  
=====出口:	  
========================================================================*/

void AllToBuf_Disp(void)
{
	unsigned char i;
	for(i=0;i<11;i++)
	{	 		
		LcdBuf_Disp[i] 	= 0xff; 
	}
}


/*=======================================================================
=====函数说明:关、停显
=====		 
=====		 
=====入口:	  
=====出口:	  
========================================================================*/


void	Load_LcdRam(void)
{  
 unsigned char i;
 for(i=0;i<12;i++)
  {
     LCDRAM.LCD_RAM[2+i] = LcdBuf_Disp[i];//eb;
   }
}                   
/*=======================================================================
=====函数说明:HELLO ERROR  END (E2 ERROR) (R8025 ERROR)
=====		 
=====		 
=====入口:	  
=====出口:	  
========================================================================*/

void CommTrig_Disp(unsigned char CommTrig_Flag)
{
	switch(CommTrig_Flag)
	{
		case HELLO_Code: 	
		LcdBuf_Disp[3] 	= 0x67;
		LcdBuf_Disp[4] 	= 0x1f;
		LcdBuf_Disp[5] 	= 0x0d; 		
		LcdBuf_Disp[6] 	= 0x0d;
		LcdBuf_Disp[7]  = 0x7d;
		LcdBuf_Disp[0] = 0x00;
		LcdBuf_Disp[1] = 0x00;
		LcdBuf_Disp[2] = 0x00;
		break;
		
		case END_Code: 	
		LcdBuf_Disp[5] 	= 0x1f; 		
		LcdBuf_Disp[6] 	= 0x46; 
		LcdBuf_Disp[7] = 0x6e; 
		LcdBuf_Disp[0] = 0x00;
		LcdBuf_Disp[1] = 0x00;
		LcdBuf_Disp[2] = 0x00;
		LcdBuf_Disp[3] = 0x00;
		LcdBuf_Disp[4] = 0x00;
		break;
		
/*		case ERROR_Code: 	
		LcdBuf_Disp[2] 	= 0xd7;
		LcdBuf_Disp[3] 	= 0xb7;
		LcdBuf_Disp[8] 	= 0xf8;
		LcdBuf_Disp[7] 	= 0xee;
		LcdBuf_Disp[6] 	= 0xee; 		
		LcdBuf_Disp[5] 	= 0xbe; 
		LcdBuf_Disp[4] = 0xee; 
		LcdBuf_Disp[9] = 0x00;
		LcdBuf_Disp[10] = 0x00;
		LcdBuf_Disp[11] = 0x00;	
		LcdBuf_Disp[01] |= 0x40;	
        break;*/
		
/*		case E2ERR_Code: 	
		LcdBuf_Disp[2] 	= 0x06;
		LcdBuf_Disp[3] 	= 0xb7;
		LcdBuf_Disp[8] 	= 0xf8;
		LcdBuf_Disp[7] 	= 0xee;
		LcdBuf_Disp[6] 	= 0xee; 		
		LcdBuf_Disp[5] 	= 0xbe; 
		LcdBuf_Disp[4] = 0xee; 
		LcdBuf_Disp[9] = 0x00;
		LcdBuf_Disp[10] = 0x00;
		LcdBuf_Disp[11] = 0x00;		
		LcdBuf_Disp[01] |= 0x20;
        break;
		
		case R8025ERR_Code: 	
		LcdBuf_Disp[2] 	= 0xe3;
		LcdBuf_Disp[3] 	= 0xb7;
		LcdBuf_Disp[8] 	= 0xf8;
		LcdBuf_Disp[7] 	= 0xee;
		LcdBuf_Disp[6] 	= 0xee; 		
		LcdBuf_Disp[5] 	= 0xbe; 
		LcdBuf_Disp[4] = 0xee; 
		LcdBuf_Disp[9] = 0x00;
		LcdBuf_Disp[10] = 0x00;
		LcdBuf_Disp[11] = 0x00;		
		LcdBuf_Disp[01] |= 0x20;
    	break;*/
		
		default:
		break;
	}		
}

void  Clr_Buffer(void)
{
  unsigned char i;
  for(i=0;i<8;i++)
   {
     LcdBuf_Disp[i] =0x00;
    }
  if(Power_Flg.BYTE ==  0x01)
   {
      LcdBuf_Disp[8] = 0x00;
    }
  else
   {
     LcdBuf_Disp[8] &= 0x0a;
    }
  LcdBuf_Disp[9] &= 0x00;
  Load_LcdRam();  
}

⌨️ 快捷键说明

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