
#include "GUI.h"

uint8_t  PrescalerVSpeed = 0; 
GaugesCtrlStruct GaugesCtrl;
//uint16_t Vspeed_Seg_Disp[] = {0, 0, 0, 0, 0};
//uint8_t  Vspeed_Seg_Count  = 0;
//uint16_t Espeed_Seg_Disp[] = {0, 0, 0, 0, 0};
//uint8_t  Espeed_Seg_Count  = 0;
/******************************************************************************
函数名：GUI_Animation_Frame_Display
功  能: 显示开机动画的指定一帧
参  数: Frame：帧编号
返回值：无
******************************************************************************/
void GUI_Animation_Frame_Display(uint8_t Frame)
{
	TFT_LCD_Display_Sprite(LAYER_BEIJING, SN_AnimationLeft_0001_png + Frame, 0, 0, 64);
	TFT_LCD_Display_Sprite(LAYER_BEIJING1, SN_AnimationRight_0001_png + Frame, 400, 0, 64);
}
/******************************************************************************
函数名：GUI_BG_Clock_Display
功  能：时间显示
参  数：
返回值：无
******************************************************************************/
void GUI_BG_Clock_Display(uint8_t Mode)
{
  if (Mode == GUI_DISP_MODE_NORMAL)
  {	
    GUI_General_Digit_Display(RTC_HOUR,   DIGIT_FONT_TIME, 2, 0, LAYER_Time_Hour1,   GUIBGClockHourPosX, 438, 64);
    GUI_General_Digit_Display(RTC_MINUTE, DIGIT_FONT_TIME, 2, 0, LAYER_Time_Minute1, GUIBGClockMinutePosX, 438, 64);
    if (FLASH_SYNC_1Hz)
    {
	    TFT_LCD_Display_Sprite(LAYER_Time_Dot, SN_NB_16_maohao_png, 306, 444, 64);	
		}
		else
		{
			TFT_LCD_Clear_Layer(LAYER_Time_Dot);
		}   
  }
  else
    TFT_LCD_Clear_Multi_Layer(LAYER_Time_Hour1, LAYER_Time_Minute2);
}
/******************************************************************************
函数名：GUI_BG_TEMP_Display
功  能：温度显示             
参  数：
返回值：无
******************************************************************************/
void GUI_BG_TEMP_Display(uint8_t Mode)
{
  uint16_t TEMP;
  
  TEMP = 0;
  // if (Mode == GUI_DISP_MODE_NORMAL)
  // if ((!(AMB_STATUS & CAN_MSG_LOST)) && (IO_DISP_TEST_OFF_TIME>75))
  if (AMB_STATUS & CAN_MSG_LOST)
    TFT_LCD_Clear_Multi_Layer(LAYER_TUINT, LAYER_TEMP3);
  else
  {	
    TEMP = Ambient_Air_TemperatureH << 8;
    TEMP = TEMP + Ambient_Air_TemperatureL;
    TEMP = TEMP >> 5;
    if (TEMP == 0)
    {
      TFT_LCD_Clear_Multi_Layer(LAYER_TUINT, LAYER_TEMP3);
    }
    else
    {
      TFT_LCD_Display_Sprite(LAYER_TUINT, SN_wendufuhao_png, 503, 436, 64);
      if (TEMP < 273)
      {
        TEMP = 273 - TEMP;
        if (TEMP > 99)
          TEMP = 99;
  	    GUI_General_Digit_Display(TEMP, DIGIT_FONT_TIME, 2, 1, LAYER_TEMP1, GUITempPosX, 438, 64);
  	    TFT_LCD_Display_Sprite(LAYER_TEMP3, SN_fuhao_png, 456, 449, 64);	
  		}
  		else
  		{
  		  TEMP = TEMP - 273;
  		  if (TEMP > 99)
  		    TEMP = 99;
  		  GUI_General_Digit_Display(TEMP, DIGIT_FONT_TIME, 2, 1, LAYER_TEMP1, GUITempPosX, 438, 64);
  			TFT_LCD_Clear_Layer(LAYER_TEMP3);
  		} 
		}  
  }    
}
/******************************************************************************
函数名：GUI_BG_TRIP_A_Display
功  能：小计里程 A B
参  数：
返回值：无
******************************************************************************/
void GUI_BG_TRIP_A_Display(uint8_t ValidA, uint16_t TripA, uint8_t TripA_Mode)
{
  if (TripA_Mode == GUI_DISP_MODE_BLANK)
  {  
    TFT_LCD_Clear_Multi_Layer(LAYER_Trip, LAYER_Trip4) ;
  }
  else
  {  	
    if (TripA > 9999)
      TripA = 9999;
    
    TFT_LCD_Display_Sprite(LAYER_Trip, SN_daxiaoji_02_png, 594, 440, 64);	
    GUI_General_Digit_Display(TripA, DIGIT_FONT_TIME, 4, 2, LAYER_Trip1, GUITirpPosX, 438, 64);                                                      
  }
}

/******************************************************************************
函数名：GUI_BG_ODO_Display
功  能：总计里程
参  数：
返回值：无
******************************************************************************/
void GUI_BG_ODO_Display(uint8_t Mode, uint32_t Mileage)
{
  uint32_t MileageDisp;
  if (Mode == GUI_DISP_MODE_BLANK)
  {    
    TFT_LCD_Clear_Multi_Layer(LAYER_ODO, LAYER_ODO6);
  }
  else
  {
    MileageDisp = Mileage / 10;
    if (MileageDisp > 999999)
      MileageDisp = 999999;
    if (Mode == GUI_DISP_MODE_NORMAL)
    {
      TFT_LCD_Display_Sprite(LAYER_ODO, SN_daxiaoji_01_png, 27, 440, 64);
      GUI_General_Digit_Display(MileageDisp, DIGIT_FONT_TIME, 6, 5, LAYER_ODO1, GUIODOPosX, 438, 64);
    }
  }
}

/******************************************************************************
函数名：GUI_BG_Gear_Alarm_Display
功  能：档位显示
参  数：
返回值：无
******************************************************************************/
void GUI_BG_Gear_Alarm_Display(uint8_t Mode)
{ 
  if (Mode == GUI_DISP_MODE_NORMAL)
  {	
    switch (ActualGearPosition)
    {
      case 0x00:
        TFT_LCD_Display_Sprite(LAYER_Gear, SN_GEAR_N_png, 367, 428, 64);
        TFT_LCD_Clear_Layer(LAYER_Gear1);
        TFT_LCD_Clear_Layer(LAYER_Gear2);
        break;
      case 0x01:
      case 0x02:
      case 0x03:
      case 0x04:
      case 0x05:
      case 0x06:
      case 0x07:
      case 0x08:
        TFT_LCD_Display_Sprite(LAYER_Gear,  SN_GEAR_D_png, 367, 428, 64);
        TFT_LCD_Display_Sprite(LAYER_Gear1, SN_NB_16_8_01_png + ActualGearPosition - 1, 419, 448, 64); 
        break;
      case 0x09:
        TFT_LCD_Display_Sprite(LAYER_Gear,  SN_GEAR_R_png, 367, 428, 64);
        TFT_LCD_Display_Sprite(LAYER_Gear1, SN_GEAR_L_png, 419, 448, 64); //SN_NB_16_8_0_png 档位小数字
        break;
      case 0x0A: 
        TFT_LCD_Display_Sprite(LAYER_Gear,  SN_GEAR_R_png, 367, 428, 64);
        TFT_LCD_Display_Sprite(LAYER_Gear1, SN_GEAR_H_png, 419, 448, 64); //SN_NB_16_8_0_png 档位小数字
        break;
      default:
        TFT_LCD_Clear_Multi_Layer(LAYER_Gear, LAYER_Gear2);
        break;     
    }
    /*if ((ActualGearPosition > 0) && (ActualGearPosition < 9))
    {
      if ((EGSM_NearShiftGearTip > 0) && (EGSM_NearShiftGearTip < 9))
      {
        if (EGSM_ShiftGearTip == 1)
          TFT_LCD_Display_Sprite(LAYER_Gear2, SN_dangweixiajiantou_1_png + EGSM_NearShiftGearTip - 1, 428, 428, 64); 
        else if (EGSM_ShiftGearTip == 2)
          TFT_LCD_Display_Sprite(LAYER_Gear2, SN_dangweishangjiantou_1_png + EGSM_NearShiftGearTip - 1, 427, 427, 64); 
        else
          TFT_LCD_Clear_Layer(LAYER_Gear2);
      }
      else
        TFT_LCD_Clear_Layer(LAYER_Gear2);
    }
    else
      TFT_LCD_Clear_Layer(LAYER_Gear2);
    */
  }
  else
    TFT_LCD_Clear_Multi_Layer(LAYER_Gear, LAYER_Gear2);
}
/******************************************************************************
函数名：GUI_BG_Gear_Display
功  能：档位显示
参  数：
返回值：无
******************************************************************************/
void GUI_BG_Gear_Display(uint8_t Mode)
{ 
  if (TCU_ICM_Display1_STATUS & CAN_MSG_LOST)
  {
    TFT_LCD_Clear_Multi_Layer(LAYER_Gear, LAYER_Gear2); //20190618
    return;
  }
  if (Mode == GUI_DISP_MODE_NORMAL)
  {	
    switch (Gear_Display)
    {
      case 0x00:
        TFT_LCD_Clear_Multi_Layer(LAYER_Gear, LAYER_Gear2); //20190618
        break;
      case 0x01:
      case 0x02:
      case 0x03:
      case 0x04:
      case 0x05:
      case 0x06:
        TFT_LCD_Display_Sprite(LAYER_Gear,  SN_GEAR_M_png, 367, 428, 64);
        TFT_LCD_Display_Sprite(LAYER_Gear1, SN_NB_16_8_01_png + Gear_Display - 1, 419, 448, 64); 
        break;
      case 0x21:
      case 0x22:
      case 0x23:
      case 0x24:
      case 0x25:
      case 0x26:
        TFT_LCD_Display_Sprite(LAYER_Gear,  SN_Gear_Ax367y427_png, 367, 427, 64);
        TFT_LCD_Display_Sprite(LAYER_Gear1, SN_NB_16_8_01_png + Gear_Display - 0x21, 419, 448, 64); 
        break;        
      case 0x30:
        TFT_LCD_Display_Sprite(LAYER_Gear,  SN_GEAR_R_png, 367, 428, 64);
        TFT_LCD_Clear_Layer(LAYER_Gear1);
        break;
      case 0x40: 
        TFT_LCD_Display_Sprite(LAYER_Gear,  SN_GEAR_N_png, 367, 428, 64);
        TFT_LCD_Clear_Layer(LAYER_Gear1);
        break;
      default:
        TFT_LCD_Clear_Multi_Layer(LAYER_Gear, LAYER_Gear2);
        break;     
    }
  }
  else
    TFT_LCD_Clear_Multi_Layer(LAYER_Gear, LAYER_Gear2);
}
/******************************************************************************
函数名：GUI_BG_Vehicle_Display
功  能：车速显示
参  数：
返回值：无
******************************************************************************/
void GUI_BG_Vehicle_Display(uint8_t SegNum)
{
  if (SegNum > 17)
    SegNum = 17; 	
  // TFT_LCD_Display_Sprite(LAYER_EngineLB, SN_kmh__x442__y346_png, 442, 346, 64);
  if (SegNum < 8)
  {
    TFT_LCD_Display_Sprite(LAYER_VehicleL, SN_chesu_16_1_00_png + SegNum, 29, 328, 64);
    TFT_LCD_Display_Sprite(LAYER_VehicleR, SN_chesu_16_2_08_png, 400, 328, 64);
  }
  else
  {
    TFT_LCD_Display_Sprite(LAYER_VehicleL, SN_chesu_16_1_08_png, 29, 328, 64);
    TFT_LCD_Display_Sprite(LAYER_VehicleR, SN_chesu_16_2_08_png + SegNum - 8, 400, 328, 64);
  } 
  //GUI_General_Digit_Display(DATA_VEHICLE_SPEED_DISPLAYING / 10, DIGIT_FONT_VEHICLE, 3, 2, LAYER_Vehicle1, GUIVehPosX3,294, 64);  
}

void SEG_LCD_Vehicle_Speed_Num_Display(uint16_t Value)
{
  GUI_General_Digit_Display(Value / 10 , DIGIT_FONT_VEHICLE, 3, 2, LAYER_Vehicle1, GUIVehPosX3,294, 64);    
}
/******************************************************************************
函数名：GUI_BG_Engine_Display
功  能：转速显示
参  数：
返回值：无
******************************************************************************/
void GUI_BG_Engine_Display(uint8_t SegNum)
{ 
  if (SegNum > 10)
    SegNum = 10; 	
  
  // TFT_LCD_Display_Sprite(LAYER_EngineLB, SN_zhuansu_1_00_png, 99, 56, 64);
  // TFT_LCD_Display_Sprite(LAYER_EngineRB, SN_zhuansu_2_05_png, 399, 56, 64); 
  // TFT_LCD_Display_Sprite(LAYER_EUINT, SN_1000rpm__x441__y110_png, 441, 110, 64);
  
  if (SegNum < 6)
  {
      TFT_LCD_Display_Sprite(LAYER_EngineL, SN_zhuansu_1_00_png + SegNum, 29, 53, 64);
      TFT_LCD_Display_Sprite(LAYER_EngineR, SN_zhuansu_2_05_png, 400, 53, 64);
  }
  else 
  {
      TFT_LCD_Display_Sprite(LAYER_EngineL, SN_zhuansu_1_05_png, 29, 53, 64);
      TFT_LCD_Display_Sprite(LAYER_EngineR, SN_zhuansu_2_05_png + SegNum - 5, 400, 53, 64);
  }

  // TFT_LCD_Clear_Multi_Layer(LAYER_EngineL, LAYER_EngineR);       

 
  //TFT_LCD_Display_Sprite(LAYER_EngineDot, SN_NB_32_5_dian_png, 390, 111, 64);
  //GUI_General_Digit_Display(DATA_ENGINE_SPEED_DISPLAYING / 100, DIGIT_FONT_ENGINE, 2, 0, LAYER_Engine1, GUIEngPosX, 86, 64); 
}

void SEG_LCD_Engine_Speed_Num_Display(uint16_t Value)
{
  TFT_LCD_Display_Sprite(LAYER_EngineDot, SN_NB_32_5_dian_png, 390, 111, 64);
  GUI_General_Digit_Display(DATA_ENGINE_SPEED_DISPLAYING / 100, DIGIT_FONT_ENGINE, 2, 0, LAYER_Engine1, GUIEngPosX, 86, 64);  
}

/******************************************************************************
函数名：GUI_BG_GAS1_Display
功  能：气压1显示
参  数：
返回值：无
******************************************************************************/
void GUI_BG_GAS1_Display(uint8_t SegNum)
{ 
  if (SegNum > 16)
    SegNum = 16; 	
  TFT_LCD_Display_Sprite(LAYER_AirL1, SN_zuoqiya00_png + SegNum, 0, 45, 64);
  // TFT_LCD_Display_Sprite(LAYER_AirL2, SN_zuoqiyashuzi_png, 15, 86, 64);
}
/******************************************************************************
函数名：GUI_BG_GAS2_Display
功  能：气压2显示
参  数：
返回值：无
******************************************************************************/
void GUI_BG_GAS2_Display(uint8_t SegNum)
{ 
  if (SegNum > 16)
    SegNum = 16; 	
  TFT_LCD_Display_Sprite(LAYER_AirR1, SN_youqiya00_png + SegNum, 673, 45, 64); 
  //TFT_LCD_Display_Sprite(LAYER_AirR2, SN_youqiyashuzi_png, 737, 86, 64);
}
/******************************************************************************
函数名：GUI_General_Popup_Display
功  能：通用弹出信息显示程序
参  数：PopupID：弹出信息名称
返回值：无
******************************************************************************/
void GUI_General_Popup_Display(uint8_t PopupID)
{
  //TFT_LCD_Clear_Layer(1);  
  if (PopupID >= POPUP_MSG_NUMBER_TOTAL)
    return; 
  //if ((PopupID == POPUP_MSG_Press_Brake_Start) || (PopupID == POPUP_MSG_Press_clutch_Start) || (PopupID == POPUP_MSG_N_Level_Start))
  //  TFT_LCD_Display_Sprite(LAYER_MENU01, GUIGeneralPopupTable[PopupID].HImage, 266, 162, 64);
  TFT_LCD_Clear_Multi_Layer(LAYER_MENU01, LAYER_MENU12); 
  
  if (PopupID == POPUP_MSG_POWEROFF_WithoutN)
    TFT_LCD_Display_Sprite(LAYER_MENU13, GUIGeneralPopupTable[PopupID].HImage, 266, 162, 64);
  
  else if ((PopupID == POPUP_MSG_Press_Brake_Start) || (PopupID == POPUP_MSG_Press_clutch_Start)
           || (PopupID == POPUP_MSG_N_Level_Start) || (PopupID == POPUP_MSG_Key_Battery_Low) || (PopupID == POPUP_MSG_Key_Not_Found))
    TFT_LCD_Display_Sprite(LAYER_MENU13, GUIGeneralPopupTable[PopupID].HImage, 265, 140, 64); 
  else if (PopupID == POPUP_MSG_Running_Err)  
    TFT_LCD_Display_Sprite(LAYER_MENU13, GUIGeneralPopupTable[PopupID].HImage, 219, 180, 64); 
  else
    TFT_LCD_Display_Sprite(LAYER_MENU13, GUIGeneralPopupTable[PopupID].HImage, 285, 179, 64);  
  
  //TFT_LCD_Display_Sprite(LAYER_MENU02, GUIGeneralPopupTable[PopupID].SImage, GUIPopupTextwenziPosX[0], GUIPopupTextwenziPosY[0], 64);
  if (PopupID == POPUP_MSG_POWEROFF_WithoutN)
    TFT_LCD_Display_Sprite(LAYER_MENU14, SN_ALARM_22_png, 360, 193, 64);
  else
    TFT_LCD_Clear_Layer(LAYER_MENU14);
}

/******************************************************************************
函数名：Clear_TFT
功  能：清屏函数
参  数：无
返回值：无
******************************************************************************/
void Clear_TFT(void)
{
  TFT_LCD_Clear_Multi_Layer (0, YVC_LYR_NUM_CPU - 1); //初始化清图
}
/******************************************************************************
函数名：TFT_LCD_General_Digit_Display
功  能：通用数字显示程序
参  数：Digit：要显示的数字
        Font ：数字字体
        Len  : 需要显示的数字长度
        Blank：首位数字为零消隐位数,从最高位起算
        Layer：显示数字的起始图层
        *px  ：各位数字的x坐标列表(从最低位数字开始)
        y    ：最末位数字的y坐标(数字显示右对齐)
返回值：无
******************************************************************************/
void GUI_General_Digit_Display(uint32_t Digit, uint16_t Font, uint8_t Len, uint8_t Blank, uint8_t Layer,  const uint16_t *px,  uint16_t y, uint8_t Scale)
{
  uint8_t i;
  uint8_t ActLen;
  uint8_t d[10];

  //以10进制形式拆分数字并计算实际数字长度
  ActLen = 0;
  while (Digit)
  {
    d[ActLen] = Digit % 10;
    Digit /= 10;
    ActLen++;
  }

  //数字为0时的特殊处理
  if (ActLen == 0)
  {
    ActLen = 1;
    d[0] = 0;
  }

  //对未计算到的数字位作0填充
  for (i = ActLen; i < Len; i++ )
    d[i] = 0;

  //数字首部按消隐位数做零消隐
  i = (Len - 1);
  while ((d[i] == 0) && (i >= (Len - Blank)))
  {
    d[i] = 0xFF;
    i--;
  }
  //显示数字
  for (i = 0; i < Len; i++)
  {
    if (d[i] == 0xFF)
      TFT_LCD_Clear_Layer(Layer + i);
    else
      TFT_LCD_Display_Sprite(Layer + i, Font + d[i], *(px + i),  y, Scale);
  }
}
/******************************************************************************
函数名：TFT_LCD_General_Digit_Display                  
功  能：通用数字显示程序
参  数：Digit：要显示的数字
        Font ：数字字体
        Len  : 需要显示的数字长度
        Blank：首位数字为零消隐位数,从最高位起算
        Layer：显示数字的起始图层
        x    ：最末位数字的x坐标(数字显示右对齐)
        *py  ：各位数字的y坐标列表(从最低位数字开始)      
返回值：无
******************************************************************************/
/*void GUI_General_Digit_Display(uint32_t Digit, uint16_t Font, uint8_t Len, uint8_t Blank, uint8_t Layer, const uint16_t x, uint16_t *py, uint8_t Scale)
{
  uint8_t i;
  uint8_t ActLen;
  uint8_t d[10];

  //以10进制形式拆分数字并计算实际数字长度
  ActLen = 0;
  while (Digit)
  {
    d[ActLen] = Digit % 10;
    Digit /= 10;
    ActLen++;
  }

  //数字为0时的特殊处理
  if (ActLen == 0)
  {
    ActLen = 1;
    d[0] = 0;
  }

  //对未计算到的数字位作0填充
  for (i = ActLen; i < Len; i++ )
    d[i] = 0;

  //数字首部按消隐位数做零消隐
  i = (Len - 1);
  while ((d[i] == 0) && (i >= (Len - Blank)))
  {
    d[i] = 0xFF;
    i--;
  }
  //显示数字
  for (i = 0; i < Len; i++)
  {
    if (d[i] == 0xFF)
      TFT_LCD_Clear_Layer(Layer + i);
    else
      TFT_LCD_Display_Sprite(Layer + i, Font + d[i], x, *(py + i) , Scale);
  }
}*/
/***************************************************************
车速表断码走动方式
****************************************************************/
uint8_t  V_DELAY_Timer;
uint8_t  V_DELAY_Mode;
uint16_t V_DELAY_Backup;

void Gauges_VSpeed_LCD_Status(void)
{
	uint16_t VSpeed;
	uint16_t Delta;
	
	VSpeed = DATA_VEHICLE_SPEED_DISPLAYING;

  //if ((ESpeed >= 500) && (ESpeed <= 1000)) //20200109
	if ((VSpeed >= 10) && (VSpeed <= 1600))
	{
		V_DELAY_Timer++;

		if (VSpeed > V_DELAY_Backup )
			Delta = VSpeed - V_DELAY_Backup;
		else
			Delta = V_DELAY_Backup - VSpeed;

		if (V_DELAY_Mode == 0)
		{
			if (Delta < 30)
			{
				if (V_DELAY_Timer >= 20)
				{
					V_DELAY_Mode  = 1;
					V_DELAY_Timer = 0;
				}
			}
			else
				V_DELAY_Timer = 0;

			V_DELAY_Backup = VSpeed;
		}
		else
		{
			if (Delta < 30)
			{
				if (V_DELAY_Timer >= 100)              //怠速模式下每1秒转速数据更新一次
				{
					V_DELAY_Timer  = 0;
					V_DELAY_Backup = VSpeed;
				}
				else
					VSpeed = V_DELAY_Backup;
			}
			else                                     //转速变化大于等于300立即退出怠速模式
			{
				V_DELAY_Mode   = 0;
				V_DELAY_Timer  = 0;
				V_DELAY_Backup = VSpeed;
			}
		}
	}
	else
	{
		V_DELAY_Mode   = 0;
		V_DELAY_Timer  = 0;
		V_DELAY_Backup = VSpeed;
	}	
				
  if (VSpeed > GaugesCtrl.VSpeedBackup)        //车速增加,查上升表
  {
    while (GaugesCtrl.VSpeedSeg < GAUGES_TOTAL_SPEEDOMETER_SEG)
    {
      if (VSpeed < GaugesSpeedoMeterSegIncTable[GaugesCtrl.VSpeedSeg])
        break;
      GaugesCtrl.VSpeedSeg++;
    }
  }
  else if (VSpeed < GaugesCtrl.VSpeedBackup)   //车速减小,查下降表
  {
    while (GaugesCtrl.VSpeedSeg)
    {
      if (VSpeed >= GaugesSpeedoMeterSegDecTable[GaugesCtrl.VSpeedSeg - 1])
        break;
      GaugesCtrl.VSpeedSeg--;
    }
  }
  
  GaugesCtrl.VSpeedBackup = V_DELAY_Backup;
  //SEG_LCD_Vehicle_Speed_Seg_Display(GaugesCtrl.VSpeedSeg);
}

/***************************************************************
速转表断码走动方式
****************************************************************/
uint8_t  E_DELAY_Timer;
uint8_t  E_DELAY_Mode;
uint16_t E_DELAY_Backup;

void Gauges_ESpeed_LCD_Status(void)
{
  uint16_t ESpeed;
	uint16_t Delta;
  
  ESpeed = DATA_ENGINE_SPEED_DISPLAYING;
	//if ((ESpeed >= 500) && (ESpeed <= 1000)) //20200109
	if ((ESpeed > 1000) && (ESpeed <= 6000)) //20200421
	{
		E_DELAY_Timer++;

		if (ESpeed > E_DELAY_Backup)
			Delta = ESpeed - E_DELAY_Backup;
		else
			Delta = E_DELAY_Backup - ESpeed;

		if (E_DELAY_Mode == 0)
		{
			if (Delta < 300)
			{
				if (E_DELAY_Timer >= 200)
				{
					E_DELAY_Mode  = 1;
					E_DELAY_Timer = 0;
				}
			}
			else
				E_DELAY_Timer = 0;

			E_DELAY_Backup = ESpeed;
		}
		else
		{
			if (Delta < 300)
			{
				if (E_DELAY_Timer >= 200)              //怠速模式下每2秒转速数据更新一次
				{
					E_DELAY_Timer = 0;
					E_DELAY_Backup = ESpeed;
				}
				else
					ESpeed = E_DELAY_Backup;
			}
			else                                     //转速变化大于等于300立即退出怠速模式
			{
				E_DELAY_Mode   = 0;
				E_DELAY_Timer  = 0;
				E_DELAY_Backup = ESpeed;
			}
		}
	}
	else
	{
		E_DELAY_Mode   = 0;
		E_DELAY_Timer  = 0;
		E_DELAY_Backup = ESpeed;
	}					
  if (ESpeed > GaugesCtrl.ESpeedBackup)        //转速增加,查上升表
  {
    while (GaugesCtrl.ESpeedSeg < GAUGES_TOTAL_TACHOMETER_SEG)
    {
      if (ESpeed < GaugesTachoMeterSegIncTable[GaugesCtrl.ESpeedSeg])
        break;
      GaugesCtrl.ESpeedSeg++;
    }
  }
  else if (ESpeed < GaugesCtrl.ESpeedBackup)   //转速减小,查下降表
  {
    while (GaugesCtrl.ESpeedSeg)
    {
      if (ESpeed >= GaugesTachoMeterSegDecTable[GaugesCtrl.ESpeedSeg - 1])
        break;
      GaugesCtrl.ESpeedSeg--;
    }
  }     
    GaugesCtrl.ESpeedBackup = ESpeed;  	
}

/***************************************************************
气压1表断码走动方式
****************************************************************/
void Gauges_GAS1_LCD_Status(void)
{
  //气压1
  if (DATA_COOLANT_GAS1_SEG_DISPLAYING > GaugesCtrl.GAS1Backup) //增加,查上升表
  {
    while (GaugesCtrl.GAS1Seg < GAUGES_GAS1_SEG)
    {
      if (DATA_COOLANT_GAS1_SEG_DISPLAYING < GaugesGAS1IncTable[GaugesCtrl.GAS1Seg])
        break;
      GaugesCtrl.GAS1Seg++;
    }
  }
  else if (DATA_COOLANT_GAS1_SEG_DISPLAYING < GaugesCtrl.GAS1Backup) //减小,查下降表
  {
    while (GaugesCtrl.GAS1Seg)
    {
      if (DATA_COOLANT_GAS1_SEG_DISPLAYING >= GaugesGAS1DecTable[GaugesCtrl.GAS1Seg - 1])
        break;
      GaugesCtrl.GAS1Seg--;
    }
  }    
    GaugesCtrl.GAS1Backup = DATA_COOLANT_GAS1_SEG_DISPLAYING;
}
/***************************************************************
气压2表断码走动方式
****************************************************************/
void Gauges_GAS2_LCD_Status(void)
{
  //气压2
  if (DATA_COOLANT_GAS2_SEG_DISPLAYING > GaugesCtrl.GAS2Backup) //增加,查上升表
  {
    while (GaugesCtrl.GAS2Seg < GAUGES_GAS2_SEG)
    {
      if (DATA_COOLANT_GAS2_SEG_DISPLAYING < GaugesGAS2IncTable[GaugesCtrl.GAS2Seg])
        break;
      GaugesCtrl.GAS2Seg++;
    }
  }
  else if (DATA_COOLANT_GAS2_SEG_DISPLAYING < GaugesCtrl.GAS2Backup) //减小,查下降表
  {
    while (GaugesCtrl.GAS2Seg)
    {
      if (DATA_COOLANT_GAS2_SEG_DISPLAYING >= GaugesGAS2DecTable[GaugesCtrl.GAS2Seg - 1])
        break;
      GaugesCtrl.GAS2Seg--;
    }
  }   
    GaugesCtrl.GAS2Backup = DATA_COOLANT_GAS2_SEG_DISPLAYING;           
}

uint8_t Overspeed_RVM = 0;

void Telltale_LCD_Display(void)
{  
  //----hyq--20190504--屏幕指示灯标志
	//驾驶员报警系统(玉柴)
	if (TelltaleLCDFlag.Sig.LCD01 == 1)
	{
    if (NVM_CONFIG_WEI > 0)
	  {
  	  if ((DrivabilityRestrictionsystem == 3) || (DrivabilityRestrictionsystem == 5)) 
  	    TFT_LCD_Display_Sprite(LAYER_LED01, SN_zhishideng_01_png, 40, 9, 64);
  	   else
  	    TFT_LCD_Display_Sprite(LAYER_LED01, SN_zhishideng_01_1_png, 40, 9, 64);  
	  }
	  else
	    TFT_LCD_Display_Sprite(LAYER_LED01, SN_zhishideng_01_1_png, 40, 9, 64); //技术需求33
	 }
	else 
    TFT_LCD_Clear_Layer(LAYER_LED01); 
	
	//制动气压低报警灯
	if (TelltaleLCDFlag.Sig.LCD02 == 1) 
	  TFT_LCD_Display_Sprite(LAYER_LED02, SN_zhishideng_02_png, 85, 9, 64); //技术需求17
	else 
	  TFT_LCD_Clear_Layer(LAYER_LED02);
	
	//空滤阻塞  硬线    21
	if (TelltaleLCDFlag.Sig.LCD03 == 1)
	  TFT_LCD_Display_Sprite(LAYER_LED03, SN_zhishideng_03_png, 130, 9, 64);
	else 
	  TFT_LCD_Clear_Layer(LAYER_LED03);
	
	//EBS EBS红灯警告   42
	if (TelltaleLCDFlag.Sig.LCD04 == 1)
	{
	  //if (EBSRedWarningSignal == 1)
	  //  TFT_LCD_Display_Sprite(LAYER_LED04, SN_zhishideng_29_png, 175, 9, 64);
	  //else if (ABS_EBS_AmberWarningSignal == 1)
	    TFT_LCD_Display_Sprite(LAYER_LED04, SN_zhishideng_04_png, 175, 9, 64);
  }
	else 
	  TFT_LCD_Clear_Layer(LAYER_LED04);
	
	//天然气状态指示灯
  if (TelltaleLCDFlag.Sig.LCD31 == 1)
	{
	   TFT_LCD_Display_Sprite(LAYER_LED31, SN_zhishideng_32X592Y190_png, 592, 190, 64);
  }
	else 
	  TFT_LCD_Clear_Layer(LAYER_LED31);
	
	//天然气泄露指示灯
  if (TelltaleLCDFlag.Sig.LCD32 == 1)
	{
	   TFT_LCD_Display_Sprite(LAYER_LED32, SN_zhishideng_32X123Y190_png, 123, 190, 64);
  }
	else 
	  TFT_LCD_Clear_Layer(LAYER_LED32);
	
	//天然气气量低状态指示灯
  if (TelltaleLCD_Flag33 == 1)
	{
	   TFT_LCD_Display_Sprite(LAYER_LED33, SN_zhishideng_31X592Y230_png, 592, 230, 64);
  }
	else 
	  TFT_LCD_Clear_Layer(LAYER_LED33);	
	
	//制动系统故障灯   11   采用气压信号，低有效 此处为行车制动报警，制动气压或制动液位低时，该灯也要亮起
	
  /*
	if (TelltaleLCDFlag.Sig.LCD05 == 1) //超速
	  TFT_LCD_Display_Sprite(LAYER_LED05, SN_zhishideng_30_png, 223, 12, 64);
	else 
	  TFT_LCD_Clear_Layer(LAYER_LED05);
  */

  //超速报警与RVM灯同一位置
  if ((TelltaleLCDFlag.Sig.LCD05 == 1) && (LED_T_BOX_RVM == 1))
  {
    if (Overspeed_RVM <= 40) //4s
    {
      Overspeed_RVM ++;
    }
    else
    {
      Overspeed_RVM = 0;
    }
    if (Overspeed_RVM <= 20)
    {
      TFT_LCD_Display_Sprite(LAYER_LED05, SN_zhishideng_30_png, 223, 12, 64);
    }
    else
    {
      TFT_LCD_Display_Sprite(LAYER_LED05, SN_lamp_12_png, 223, 12, 64); //先用前雾灯试试，正式名应该是：SN_lamp_12_png
    }      
  }
  else if ((TelltaleLCDFlag.Sig.LCD05 == 1) && (LED_T_BOX_RVM == 0)) //超速
  {
    TFT_LCD_Display_Sprite(LAYER_LED05, SN_zhishideng_30_png, 223, 12, 64);
    Overspeed_RVM = 0;
  }
  else if ((TelltaleLCDFlag.Sig.LCD05 == 0) && (LED_T_BOX_RVM == 1)) //RVM
  {
    TFT_LCD_Display_Sprite(LAYER_LED05, SN_lamp_12_png, 223, 12, 64);
    Overspeed_RVM = 0;
  }
  else
  {
    TFT_LCD_Clear_Layer(LAYER_LED05);
  }    
  	
	//门开报警灯     KL30     技术需求15
	if (TelltaleLCDFlag.Sig.LCD06 == 1)
	  TFT_LCD_Display_Sprite(LAYER_LED06, SN_zhishideng_06_png, 265, 9, 64);
	else 
	  TFT_LCD_Clear_Layer(LAYER_LED06);
	
	//驾驶室未锁止报警灯 低有效    16
	if (TelltaleLCDFlag.Sig.LCD07 == 1) 
	  TFT_LCD_Display_Sprite(LAYER_LED07, SN_zhishideng_07_png, 310, 9, 64);
	else 
	  TFT_LCD_Clear_Layer(LAYER_LED07);
	
	// 高排气温度报警灯    38    只有康明斯有该功能
	if (TelltaleLCDFlag.Sig.LCD08 == 1) 
	  TFT_LCD_Display_Sprite(LAYER_LED08, SN_zhishideng_08_png, 355, 9, 64);
	else 
	  TFT_LCD_Clear_Layer(LAYER_LED08);
	
	// 发动机预热    32
	if (TelltaleLCDFlag.Sig.LCD09 == 1) 
	  TFT_LCD_Display_Sprite(LAYER_LED09, SN_zhishideng_09_png, 400, 9, 64);
	else 
	  TFT_LCD_Clear_Layer(LAYER_LED09);
	
	//AEB 灯     44
	if (TelltaleLCDFlag.Sig.LCD10 == 1) 
	  TFT_LCD_Display_Sprite(LAYER_LED10, SN_zhishideng_10_png, 445, 9, 64);
	else 
	  TFT_LCD_Clear_Layer(LAYER_LED10);
	
	//小灯     KL15，KL30        48
	if (TelltaleLCDFlag.Sig.LCD11 == 1) 
	  TFT_LCD_Display_Sprite(LAYER_LED11, SN_zhishideng_11_png, 490, 9, 64);
	else 
	  TFT_LCD_Clear_Layer(LAYER_LED11);
	
	//后视镜除霜   KL30       39
	if (TelltaleLCDFlag.Sig.LCD12 == 1)
	  TFT_LCD_Display_Sprite(LAYER_LED12, SN_zhishideng_12_png, 535, 9, 64);
	else 
	  TFT_LCD_Clear_Layer(LAYER_LED12);
	
	//变速器故障    41
	if (TelltaleLCDFlag.Sig.LCD13 == 1)
	  TFT_LCD_Display_Sprite(LAYER_LED13, SN_zhishideng_13_png, 580, 9, 64);
	else 
	  TFT_LCD_Clear_Layer(LAYER_LED13);
	
	//ESC 故障指示灯    13
	if (TelltaleLCDFlag.Sig.LCD14 == 1)
	  TFT_LCD_Display_Sprite(LAYER_LED14, SN_zhishideng_14_png, 625, 9, 64);
	else 
	  TFT_LCD_Clear_Layer(LAYER_LED14);
	
	//ESC OFF 关闭指示灯  14
	if (TelltaleLCDFlag.Sig.LCD15 == 1)
	  TFT_LCD_Display_Sprite(LAYER_LED15, SN_zhishideng_15_png, 670, 9, 64);
	else 
	  TFT_LCD_Clear_Layer(LAYER_LED15);
	
	//排气制动工作指示 24
	if (TelltaleLCDFlag.Sig.LCD16 == 1)
	  TFT_LCD_Display_Sprite(LAYER_LED16, SN_zhishideng_16_png, 715, 9, 64);
	else 
	  TFT_LCD_Clear_Layer(LAYER_LED16);
	
  //EPS故障指示灯  46	
  
  //近光灯
  if (TelltaleLCDFlag.Sig.LCD17 == 1)
	  TFT_LCD_Display_Sprite(LAYER_LED17, SN_zhishideng_31_png, 129, 103, 64);
	else 
	  TFT_LCD_Clear_Layer(LAYER_LED17);
	
	//ASR故障灯  8
	if (TelltaleLCDFlag.Sig.LCD18 == 1)
	  TFT_LCD_Display_Sprite(LAYER_LED18, SN_zhishideng_19_png, 130, 149, 64);
	else 
	  TFT_LCD_Clear_Layer(LAYER_LED18);
	
	//EPB 故障灯  45
	if (TelltaleLCDFlag.Sig.LCD19 == 1)
	  TFT_LCD_Display_Sprite(LAYER_LED19, SN_zhishideng_20_png, 130, 188, 64);
	else 
	  TFT_LCD_Clear_Layer(LAYER_LED19);
	
	//燃油中有水 23   WaterInFuelIndicator
	if (TelltaleLCDFlag.Sig.LCD20 == 1)
	  TFT_LCD_Display_Sprite(LAYER_LED20, SN_zhishideng_21_png, 130, 227, 64);
	else 
	  TFT_LCD_Clear_Layer(LAYER_LED20);
	
	//保养指示灯（按里程）47
	if (TelltaleLCDFlag.Sig.LCD21 == 1)
	  TFT_LCD_Display_Sprite(LAYER_LED21, SN_zhishideng_22_png, 130, 266, 64);
	else 
	  TFT_LCD_Clear_Layer(LAYER_LED21);
	  
	//Auto hold 指示灯绿色  20
	if (TelltaleLCDFlag.Sig.LCD22 == 1)
	  TFT_LCD_Display_Sprite(LAYER_LED22, SN_zhishideng_23_png, 130, 305, 64);
	else 
	  TFT_LCD_Clear_Layer(LAYER_LED22);   

	// 制动液位低报警灯    9
	if (TelltaleLCDFlag.Sig.LCD23 == 1)
	  TFT_LCD_Display_Sprite(LAYER_LED23, SN_zhishideng_17_png, 625, 110, 64);
	else 
	  TFT_LCD_Clear_Layer(LAYER_LED23);
	
	//ACC 绿灯           43
	if (TelltaleLCDFlag.Sig.LCD24 == 1)
	  TFT_LCD_Display_Sprite(LAYER_LED24, SN_zhishideng_24_png, 625, 149, 64);
	else 
	  TFT_LCD_Clear_Layer(LAYER_LED24);
	
	//怠速起停功能开启绿色   40     潍柴:没有；康明斯:有；玉柴:没有
	if (TelltaleLCDFlag.Sig.LCD25 == 1)
	  TFT_LCD_Display_Sprite(LAYER_LED25, SN_zhishideng_25_png, 625, 188, 64);
	else 
	  TFT_LCD_Clear_Layer(LAYER_LED25);
	
	//怠速起停功能关闭红色   40     潍柴:没有；康明斯:有；玉柴:没有
	if (TelltaleLCDFlag.Sig.LCD26 == 1)
	  TFT_LCD_Display_Sprite(LAYER_LED26, SN_zhishideng_26_x625_y219_png, 625, 227, 64);
	else 
	  TFT_LCD_Clear_Layer(LAYER_LED26);
	
	//PTO 工作指示灯      18
	if (TelltaleLCDFlag.Sig.LCD27 == 1)
	 TFT_LCD_Display_Sprite(LAYER_LED27, SN_zhishideng_27_png, 625, 266, 64);
	else 
	  TFT_LCD_Clear_Layer(LAYER_LED27);
	
	//制动灯断丝报警灯     19
	if (TelltaleLCDFlag.Sig.LCD28 == 1)
	  TFT_LCD_Display_Sprite(LAYER_LED28, SN_zhishideng_28_png, 625, 305, 64);
	else 
	  TFT_LCD_Clear_Layer(LAYER_LED28);
	//前桥蹄片报警灯     12
	if (TelltaleLCDFlag.Sig.LCD29 == 1)
	  TFT_LCD_Display_Sprite(LAYER_LED29, SN_qiya1_png, 20, 249, 64);
	else 
	  TFT_LCD_Clear_Layer(LAYER_LED29);
	//后桥蹄片报警灯     12
	if (TelltaleLCDFlag.Sig.LCD30 == 1)
	  TFT_LCD_Display_Sprite(LAYER_LED30, SN_qiya2_png, 735, 249, 64);
	else 
	  TFT_LCD_Clear_Layer(LAYER_LED30);
}

void Menu1_1_Display(void) //菜单
{
  TFT_LCD_Display_Sprite(LAYER_MENU01, SN_menu01_png, 337, 150, 64);
  TFT_LCD_Display_Sprite(LAYER_MENU02, SN_menu04_png, 337, 184, 64);
  TFT_LCD_Display_Sprite(LAYER_MENU03, SN_menu02_png, 337, 218, 64);
  TFT_LCD_Display_Sprite(LAYER_MENU04, SN_menu03_png, 337, 252, 64);
  TFT_LCD_Display_Sprite(LAYER_MENU05, SN_menu00_png, 310, 150, 64);
}

void Menu2_3_Display(void) //胎压监测信息
{
  uint16_t tempt1 = 0;
  uint16_t tempt2 = 0;
  
  tempt1 = TireTEMPL;
  TFT_LCD_Clear_Multi_Layer(LAYER_MENU12, LAYER_MENU14);
  
  if (tempt1 == 0xFF)
  {
    TFT_LCD_Display_Sprite(LAYER_MENU05, SN_TPMS_fuhao_png, 309, 177, 64); //-
    TFT_LCD_Display_Sprite(LAYER_MENU06, SN_TPMS_fuhao_png, 296, 177, 64); //-
  }
  else
  {
    if (tempt1 >= 273)
    {
      tempt1 = tempt1 - 273;
    }
    else
    { 
      tempt1 = 273 - tempt1;        
      TFT_LCD_Display_Sprite(LAYER_MENU10, SN_TPMS_fuhao_png, 284, 177, 64); //-
    }   
    if (tempt1 > 99)
      tempt1 = 99;
    GUI_General_Digit_Display(tempt1, SN_TPMS_00_png, 2, 1, LAYER_MENU05, GUICurTTLPosX3, 170, 64); //
  }
  
  tempt2 = TireTEMPR;
  
  if (tempt2 == 0xFF)
  {
    TFT_LCD_Display_Sprite(LAYER_MENU08, SN_TPMS_fuhao_png, 461, 177, 64); //-
    TFT_LCD_Display_Sprite(LAYER_MENU09, SN_TPMS_fuhao_png, 449, 177, 64); //-
  }
  else
  {    
    if (tempt2 >= 273)
    {
      tempt2 = tempt2 - 273;      
    }
    else
    { 
      tempt2 = 273 - tempt2; 
      TFT_LCD_Display_Sprite(LAYER_MENU11, SN_TPMS_fuhao_png, 437, 177, 64); //-    
    }
    if (tempt2 > 99)
      tempt2 = 99;
    GUI_General_Digit_Display(tempt2, SN_TPMS_00_png, 2, 1, LAYER_MENU08, GUICurTTRPosX3, 170, 64); //
  }
  
  if (TirePL == 0xFF)
  {
    TFT_LCD_Display_Sprite(LAYER_MENU01, SN_TPMS_fuhao_png, 309, 153, 64); //-
    TFT_LCD_Display_Sprite(LAYER_MENU02, SN_TPMS_fuhao_png, 289, 153, 64); //-
  }
  else
  {
    GUI_General_Digit_Display(TirePL, SN_TPMS_00_png, 2, 0, LAYER_MENU01, GUICurTPLPosX2, 146, 64); // 
  }
  
  if (TirePL == 0xFF)
  {
    TFT_LCD_Display_Sprite(LAYER_MENU03, SN_TPMS_fuhao_png, 463, 153, 64); //-
    TFT_LCD_Display_Sprite(LAYER_MENU04, SN_TPMS_fuhao_png, 442, 153, 64); //-
  }
  else
  {
    GUI_General_Digit_Display(TirePR, SN_TPMS_00_png, 2, 0, LAYER_MENU03, GUICurTPRPosX2, 146, 64); // 
  }
  TFT_LCD_Display_Sprite(LAYER_MENU07, SN_carbody_png, 297, 141, 64);       //车体
  // TFT_LCD_Display_Sprite(LAYER_MENU09, SN_TPMS_BAR_png, 330, 145, 64);   //BAR
  // TFT_LCD_Display_Sprite(LAYER_MENU10, SN_TPMS_BAR_png, 483, 145, 64);   //BAR
  // TFT_LCD_Display_Sprite(LAYER_MENU11, SN_TPMS_uint_png, 329, 168, 64);  //温度单位
  // TFT_LCD_Display_Sprite(LAYER_MENU12, SN_TPMS_uint_png, 482, 168, 64);  //温度单位
  // TFT_LCD_Display_Sprite(LAYER_MENU13, SN_TPMS_Point_png, 303, 159, 64); //小数点
  // TFT_LCD_Display_Sprite(LAYER_MENU07, SN_TPMS_Point_png, 456, 159, 64); //小数点
}
 
void  GUI_TPMS_Display(uint8_t PopupID)
{
  uint16_t tempt3 = 0;
  uint16_t tempt4 = 0;
   
  tempt3 = TireTEMPL;
  tempt4 = TireTEMPR;     
  TFT_LCD_Display_Sprite(LAYER_MENU02, SN_Tire_Icon_x335y251_png, 335, 251, 64); //轮胎标志 
  TFT_LCD_Clear_Multi_Layer(LAYER_MENU04, LAYER_MENU14); 
  
  switch (PopupID)
  {
    case POPUP_MSG_noSignal_Left     :      
                                        TFT_LCD_Display_Sprite(LAYER_MENU01, SN_carbody2_png, 370, 150, 64);   //车体  
                                        TFT_LCD_Display_Sprite(LAYER_MENU03, SN_NSignal_FL_png, 365, 259, 64); //故障文字
      break;
    
    case POPUP_MSG_HighTEMP_Left     :     
                                        TFT_LCD_Display_Sprite(LAYER_MENU01, SN_carbody2_png, 370, 150, 64);  //车体
                                        TFT_LCD_Display_Sprite(LAYER_MENU03, SN_TTH_FL_png, 365, 259, 64);    //故障文字
                                        TFT_LCD_Display_Sprite(LAYER_MENU04, SN_TPMS_uint_png, 329, 168, 64); //温度单位    
                                        
                                        if (tempt3 >= 273)
                                        {
                                          tempt3 = tempt3 - 273; 
                                        }
                                        else
                                        { 
                                          tempt3 = 273 - tempt3;                                           
                                          TFT_LCD_Display_Sprite(LAYER_MENU07, SN_TPMS_fuhao_png, 284, 177, 64); //-
                                        }
                                        if (tempt3 > 99)
                                          tempt3 = 99;  
                                        GUI_General_Digit_Display(tempt3, SN_TPMS_00_png, 2, 1, LAYER_MENU05, GUICurTTLPosX3, 170, 64); //
      break;
      
    case POPUP_MSG_HighPRESSURE_Left : 
                                        TFT_LCD_Display_Sprite(LAYER_MENU01, SN_carbody2_png, 370, 150, 64);   //车体 
                                        TFT_LCD_Display_Sprite(LAYER_MENU04, SN_TPMS_BAR_png, 330, 145, 64);   //BAR
                                        TFT_LCD_Display_Sprite(LAYER_MENU05, SN_TPMS_Point_png, 303, 159, 64); //小数点                                       
                                        GUI_General_Digit_Display(TirePL, SN_TPMS_00_png, 2, 0, LAYER_MENU06, GUICurTPLPosX2, 146, 64); //
                                        TFT_LCD_Display_Sprite(LAYER_MENU03, SN_TPH_FL_png, 365, 259, 64);     //故障文字 
      break;
      
    case POPUP_MSG_LowPRESSURE_Left  :
                                        TFT_LCD_Display_Sprite(LAYER_MENU01, SN_carbody2_png, 370, 150, 64);   //车体 
                                        TFT_LCD_Display_Sprite(LAYER_MENU04, SN_TPMS_BAR_png, 330, 145, 64);   //BAR
                                        TFT_LCD_Display_Sprite(LAYER_MENU05, SN_TPMS_Point_png, 303, 159, 64); //小数点                                        
                                        TFT_LCD_Display_Sprite(LAYER_MENU03, SN_TPL_FL_png, 365, 259, 64);     //故障文字
                                        GUI_General_Digit_Display(TirePL, SN_TPMS_00_png, 2, 0, LAYER_MENU06, GUICurTPLPosX2, 146, 64); // 
      break;
      
    case POPUP_MSG_noSignal_Right    :                                          
                                        TFT_LCD_Display_Sprite(LAYER_MENU01, SN_carbody3_png, 370, 150, 64);   //车体 
                                        TFT_LCD_Display_Sprite(LAYER_MENU03, SN_NSignal_FR_png, 365, 259, 64); //故障文字 
      break;
    
    case POPUP_MSG_HighTEMP_Right    :    
                                        TFT_LCD_Display_Sprite(LAYER_MENU01, SN_carbody3_png, 370, 150, 64);   //车体 
                                        TFT_LCD_Display_Sprite(LAYER_MENU03, SN_TTH_FR_png, 365, 259, 64);     //故障文字
                                        TFT_LCD_Display_Sprite(LAYER_MENU04, SN_TPMS_uint_png, 482, 168, 64);  //温度单位
                                        
                                        if (tempt4 >= 273)
                                        {
                                          tempt4 = tempt4 - 273;                                            
                                        }
                                        else
                                        { 
                                          tempt4 = 273 - tempt4;
                                          TFT_LCD_Display_Sprite(LAYER_MENU07, SN_TPMS_fuhao_png, 437, 177, 64); //-
                                        } 
                                        if (tempt4 > 99)
                                          tempt4 = 99;     
                                        GUI_General_Digit_Display(tempt4, SN_TPMS_00_png, 2, 1, LAYER_MENU05, GUICurTTRPosX3, 170, 64); //
      break;
    
    case POPUP_MSG_HighPRESSURE_Right:  
                                        TFT_LCD_Display_Sprite(LAYER_MENU01, SN_carbody3_png, 370, 150, 64);   //车体 
                                        TFT_LCD_Display_Sprite(LAYER_MENU03, SN_TPH_FR_png, 365, 259, 64);     //故障文字
                                        TFT_LCD_Display_Sprite(LAYER_MENU04, SN_TPMS_BAR_png, 483, 145, 64);   //BAR
                                        TFT_LCD_Display_Sprite(LAYER_MENU05, SN_TPMS_Point_png, 456, 159, 64); //小数点   
                                        GUI_General_Digit_Display(TirePR, SN_TPMS_00_png, 2, 0, LAYER_MENU06, GUICurTPRPosX2, 146, 64); //                                   
      break;
    
    case POPUP_MSG_LowPRESSURE_Right : 
                                        TFT_LCD_Display_Sprite(LAYER_MENU01, SN_carbody3_png, 370, 150, 64);   //车体 
                                        TFT_LCD_Display_Sprite(LAYER_MENU03, SN_TPL_FR_png, 365, 259, 64);     //故障文字
                                        TFT_LCD_Display_Sprite(LAYER_MENU04, SN_TPMS_BAR_png, 483, 145, 64);   //BAR
                                        TFT_LCD_Display_Sprite(LAYER_MENU05, SN_TPMS_Point_png, 456, 159, 64); //小数点    
                                        GUI_General_Digit_Display(TirePR, SN_TPMS_00_png, 2, 0, LAYER_MENU06, GUICurTPRPosX2, 146, 64); //                                         
      break;
      
    case POPUP_MSG_TireIDStudy_Left  : 
                                        TFT_LCD_Display_Sprite(LAYER_MENU01, SN_carbody2_png, 370, 150, 64);  //车体 
                                        TFT_LCD_Display_Sprite(LAYER_MENU03, SN_NStudy_FL_png, 365, 259, 64); //故障文字   
      break;
      
    case POPUP_MSG_TireIDStudy_Right : 
                                        TFT_LCD_Display_Sprite(LAYER_MENU01, SN_carbody3_png, 370, 150, 64);  //车体 
                                        TFT_LCD_Display_Sprite(LAYER_MENU03, SN_NStudy_FR_png, 365, 259, 64); //故障文字 
      break;
      
    default                          :
      break;
  }
}
 
void Menu2_4_Display(void) //行车信息
{
   TFT_LCD_Display_Sprite(LAYER_MENU01, SN_V_Info_Display_png, 280, 178, 64);
   TFT_LCD_Display_Sprite(LAYER_MENU02, SN_V_Info_Display_uint_1_png, 302, 246, 64);
   //TFT_LCD_Display_Sprite(LAYER_MENU03, SN_Vehicle_Information_Display2_png, 458, 178, 64);
   
   //TFT_LCD_Display_Sprite(LAYER_MENU04, SN_Vehicle_Information_Display_uint_png, 367, 246, 64);
   //TFT_LCD_Display_Sprite(LAYER_MENU05, SN_Vehicle_Information_Display3_uint_png, 280, 246, 64);
   //TFT_LCD_Display_Sprite(LAYER_MENU06, SN_Vehicle_Information_Display_uint_png, 458, 246, 64);
   
   TFT_LCD_Display_Sprite(LAYER_MENU03, SN_NB_17_point_png, 391, 208, 64);
   GUI_General_Digit_Display(DataAvgFuelConsByLF, DIGIT_FONT_DTE, 3, 1, LAYER_MENU04, GUIRAFCPosX, 208, 64);  //平均油耗
   if (DataDTE >= 9999)
   DataDTE = 9999;
   GUI_General_Digit_Display(DataDTE, DIGIT_FONT_DTE, 4, 3, LAYER_MENU07, GUIDTEPosX3, 208, 64);              //续航里程
   
   TFT_LCD_Display_Sprite(LAYER_MENU11, SN_NB_17_point_png, 490, 208, 64);
   GUI_General_Digit_Display(FuelConsumptionRate, DIGIT_FONT_DTE, 3, 1, LAYER_MENU12, GUICurONPosX3,208, 64); //瞬时油耗 
   
}

uint8_t  Left_LDW_Count  = 0;
uint8_t  Right_LDW_Count = 0;
uint8_t  PCW_Count       = 0;
uint8_t  FCW_Count       = 0;
uint8_t  UFCW_Count      = 0;
uint8_t  Hz2_Count_L     = 0;
uint8_t  Hz2_Count_R     = 0; 
uint8_t  Hz2_Count_FCW   = 0; 
uint8_t  Hz2_Count_UFCW  = 0; 
uint8_t  Hz2_Count_PCW   = 0;
 
void GUI_ADAS_Display(void) //ADAS
{
  if ((!(ADAS_1_STATUS & CAN_MSG_LOST)) && (!(ADAS_2_STATUS & CAN_MSG_LOST)))
  {
    TFT_LCD_Clear_Multi_Layer(LAYER_MENU01, LAYER_MENU14); 
    //if ((ADAS_Maintenance == 1) || (ADAS_Failsafe == 1) || (ADAS_Error_Active == 0)) //ADAS    0有效
    if ((ADAS_Error_Code == 0x10) || (ADAS_Error_Code == 0x12) \
        || (ADAS_Error_Code == 0x13) || (ADAS_Error_Code == 0x20) \
        || (ADAS_Error_Code == 0x55) || (ADAS_Error_Code == 0x57))
      TFT_LCD_Display_Sprite(LAYER_MENU01, SN_adas_png, 271, 169, 64);
    else if (ADAS_Error_Code == 0x5A)
      TFT_LCD_Display_Sprite(LAYER_MENU01, SN_camera_shieding_png, 252, 165, 64); //20200925
    else
      TFT_LCD_Clear_Layer(LAYER_MENU01);
    /* if ((ADAS_Error_Code > 0) && (ADAS_Error_Code <= 99))
      GUI_General_Digit_Display(ADAS_Error_Code, SN_YELLOW_00__png, 2, 2, LAYER_MENU12, GUIADASPosX, 199, 64); //ADAS告警值
    else
    {
      TFT_LCD_Clear_Layer(LAYER_MENU12);
      TFT_LCD_Clear_Layer(LAYER_MENU13);
    }
    20200907*/ 
    if (LDW_Disable == 1) //fhl20200529
    { 
      if ((Left_LDW == 1) || (Right_LDW == 1))
      {
        if (Left_LDW == 1) //左车道偏离
        {
          if (DATA_VEHICLE_SPEED_DISPLAYING >= 550)
          {
            if (Left_LDW_Count <= 4) 
            {
              TFT_LCD_Display_Sprite(LAYER_MENU03, SN_chedaohuiyou_png, 437, 178, 64); 
              Hz2_Count_L++; 
              if (Hz2_Count_L <= 3)
              { 
                TFT_LCD_Clear_Layer(LAYER_MENU02);  
              }
              else
              {
                TFT_LCD_Display_Sprite(LAYER_MENU02, SN_chedaohuangzuo_png, 338, 178, 64);
              }
              if (Hz2_Count_L >= 6)
              {
                Hz2_Count_L = 0;
                Left_LDW_Count++;
              } 
            }
            else
            {
              TFT_LCD_Clear_Layer(LAYER_MENU02);
              TFT_LCD_Clear_Layer(LAYER_MENU03);
            }
          }
          else
          {
            Left_LDW_Count = 0;
            Hz2_Count_L    = 0;
            TFT_LCD_Clear_Layer(LAYER_MENU02);
            TFT_LCD_Clear_Layer(LAYER_MENU03);
          }
        }
        else if (Right_LDW == 1) //右车道偏离
        {
          if (DATA_VEHICLE_SPEED_DISPLAYING >= 550)
          {
            if (Right_LDW_Count <= 4) 
            {
              TFT_LCD_Display_Sprite(LAYER_MENU02, SN_chedaohuizuo_png, 338, 178, 64);
              Hz2_Count_R++; 
              if (Hz2_Count_R <= 3)
              {
                TFT_LCD_Clear_Layer(LAYER_MENU03); 
              }
              else
              { 
                TFT_LCD_Display_Sprite(LAYER_MENU03, SN_chedaohuangyou_png, 437, 178, 64);
              }
              if (Hz2_Count_R >= 6)
              {
                Hz2_Count_R = 0;
                Right_LDW_Count++; 
              }
            }
            else
            {
              TFT_LCD_Clear_Layer(LAYER_MENU02);
              TFT_LCD_Clear_Layer(LAYER_MENU03);
            } 
          }
          else
          {
            Right_LDW_Count = 0;
            Hz2_Count_R     = 0;
            TFT_LCD_Clear_Layer(LAYER_MENU02);
            TFT_LCD_Clear_Layer(LAYER_MENU03);             
          }
        }
      }
      else
      {
        Right_LDW_Count = 0;
        Hz2_Count_R     = 0;          
        Left_LDW_Count  = 0;
        Hz2_Count_L     = 0; 
        if ((Right_Lane_Tracking == 1) || (Leftt_Lane_Tracking == 1))           
        {
          if (Right_Lane_Tracking == 1) //右车道跟踪有效
          {
            TFT_LCD_Display_Sprite(LAYER_MENU03, SN_chedaohuangyou_png, 437, 178, 64);
            TFT_LCD_Display_Sprite(LAYER_MENU02, SN_chedaohuizuo_png, 338, 178, 64);
          }
          else if (Leftt_Lane_Tracking == 1) //左车道跟踪有效
          {
            TFT_LCD_Display_Sprite(LAYER_MENU02, SN_chedaohuangzuo_png, 338, 178, 64);
            TFT_LCD_Display_Sprite(LAYER_MENU03, SN_chedaohuiyou_png, 437, 178, 64);
          }
        }
        else
        {
          TFT_LCD_Clear_Layer(LAYER_MENU02);
          TFT_LCD_Clear_Layer(LAYER_MENU03);            
        }
      } 
    } 
    else //车道偏离预警未启用
    {
      TFT_LCD_Clear_Layer(LAYER_MENU02);
      TFT_LCD_Clear_Layer(LAYER_MENU03);
      Hz2_Count_R     = 0;
      Right_LDW_Count = 0;
      Left_LDW_Count  = 0;
      Hz2_Count_L     = 0;    
    }
    if (FCW == 1) //前碰撞
    {
      //TFT_LCD_Display_Sprite(LAYER_MENU05, SN_cheti2_png, 371, 237, 64);
      if (DATA_VEHICLE_SPEED_DISPLAYING >= 300)
      {
        Hz2_Count_UFCW = 0;
        UFCW_Count     = 0;
        if (FCW_Count <= 6)
        {
          Hz2_Count_FCW++; 
          if (Hz2_Count_FCW <= 3)
          {
            TFT_LCD_Display_Sprite(LAYER_MENU04, SN_adas_red_car_png, 376, 211, 64); //fhl20200529
          }      
          else
          {
            TFT_LCD_Clear_Layer(LAYER_MENU04);
          }
          if (Hz2_Count_FCW >= 6)
          {
            Hz2_Count_FCW = 0;
            FCW_Count++;
          }
        }
        else
        {
          Hz2_Count_FCW = 0;
          TFT_LCD_Display_Sprite(LAYER_MENU04, SN_adas_red_car_png, 376, 211, 64);
        }
      }
      else
      {
        Hz2_Count_FCW = 0;
        FCW_Count     = 0;
        if (UFCW_Count <= 2)
        {
          Hz2_Count_UFCW++;
          if (Hz2_Count_UFCW <= 5)
            TFT_LCD_Display_Sprite(LAYER_MENU04, SN_adas_red_car_png, 376, 211, 64);
          else
          {
            TFT_LCD_Clear_Layer(LAYER_MENU04);
          }
          if (Hz2_Count_UFCW >= 10)
          {
            Hz2_Count_UFCW = 0;
            UFCW_Count++;
          }
        }
        else
        {
          Hz2_Count_UFCW = 0;
          TFT_LCD_Display_Sprite(LAYER_MENU04, SN_adas_red_car_png, 376, 211, 64);
        }
      }
    }
    else
    {
      Hz2_Count_FCW  = 0;
      Hz2_Count_UFCW = 0;
      FCW_Count      = 0;
      UFCW_Count     = 0; 
      if (Headway_Warning == 1) //车距监测
      {
        // TFT_LCD_Display_Sprite(LAYER_MENU04, SN_cheti1_png, 371, 164, 64); //20200228
        TFT_LCD_Display_Sprite(LAYER_MENU05, SN_adas_green_car_png, 376, 211, 64); 
        if (DATA_VEHICLE_SPEED_DISPLAYING > 300)
        {
          if ((Headway_Measurement >= 1) && (Headway_Measurement <= 25)) 
          {
            TFT_LCD_Display_Sprite(LAYER_MENU08, SN_adas_green_point_png, 389, 171, 64);
            GUI_General_Digit_Display(Headway_Measurement, SN_adas_green_0_png, 2, 0, LAYER_MENU09, GUICurONPosX2, 171, 64); //车距
          }
          else
            TFT_LCD_Clear_Multi_Layer(LAYER_MENU08, LAYER_MENU11);
        }
        else
        {
          TFT_LCD_Clear_Multi_Layer(LAYER_MENU08, LAYER_MENU11);
        }
      }
      else if (Headway_Warning == 2) 
      {
        // TFT_LCD_Display_Sprite(LAYER_MENU04, SN_cheti2_png, 371, 164, 64); //20200228
        TFT_LCD_Display_Sprite(LAYER_MENU05, SN_adas_red_car_png, 376, 211, 64);
        if (DATA_VEHICLE_SPEED_DISPLAYING > 300)
        {
          if ((Headway_Measurement >= 1) && (Headway_Measurement <= 25)) 
          {
            TFT_LCD_Display_Sprite(LAYER_MENU08, SN_adas_red_point_png, 389, 171, 64);
            GUI_General_Digit_Display(Headway_Measurement, SN_adas_red_0_png, 2, 0, LAYER_MENU09, GUICurONPosX2, 171, 64); //车距
          }
          else
          {
            TFT_LCD_Clear_Multi_Layer(LAYER_MENU08, LAYER_MENU11);
          }
        }
        else
        {
          TFT_LCD_Clear_Multi_Layer(LAYER_MENU08, LAYER_MENU11);
        }
      }
      else
      {
        //TFT_LCD_Display_Sprite(LAYER_MENU05, SN_cheti1_png, 360, 237, 64);
        TFT_LCD_Clear_Layer(LAYER_MENU04);
        TFT_LCD_Clear_Layer(LAYER_MENU05);
        TFT_LCD_Clear_Multi_Layer(LAYER_MENU08, LAYER_MENU11); 
      }
    }
    
    if ((PCW == 1) && (DATA_VEHICLE_SPEED_DISPLAYING < 500)) // 行人碰撞
    {
      if (PCW_Count <= 6)
      {
        Hz2_Count_PCW++;
        if (Hz2_Count_PCW <= 3)
        {
          TFT_LCD_Display_Sprite(LAYER_MENU06, SN_ren1_png, 319, 155, 64);
        }
        else
          TFT_LCD_Clear_Layer(LAYER_MENU06);
        if (Hz2_Count_PCW >= 6)
        {
          Hz2_Count_PCW = 0;
          PCW_Count++;
        }
      }
    }
    else
    {
      Hz2_Count_PCW = 0;
      PCW_Count     = 0;
      TFT_LCD_Clear_Layer(LAYER_MENU06);
    }
    if ((Ped_In_Zone == 1) && (DATA_VEHICLE_SPEED_DISPLAYING < 500)) // 行人碰撞
    {
      TFT_LCD_Display_Sprite(LAYER_MENU07, SN_ren2_png, 319, 155, 64);
    }
    else
    {
      TFT_LCD_Clear_Layer(LAYER_MENU07);
    }
  }
  else
  {
    TFT_LCD_Clear_Multi_Layer(LAYER_MENU01, LAYER_MENU14);  
  }  
}