📄 display.c
字号:
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 + -