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

📄 menu.c

📁 LCD OSD 程序用於8051 開發lcd
💻 C
📖 第 1 页 / 共 3 页
字号:
  else if (menuItem->DrawItemMethod==DWI_2x2Icon)
    { Draw2x2Icon(menuItem);
    }
  else // full text
    { BYTE i;
      BYTE xPos;
    #define len itemIndex

      len=strlen(menuItem->DisplayText());
      if (menuItem->DrawItemMethod==DWI_FullText)
      	xPos=menuItem->XPos;
      else if (menuItem->DrawItemMethod==DWI_FullCenterText || menuItem->DrawItemMethod==DWI_CenterText)
        xPos=(OsdWindowWidth-len)/2; // get center position

      Osd_DrawStr(xPos, menuItem->YPos, menuItem->DisplayText());
      if (menuItem->DrawItemMethod!=DWI_CenterText) // full text
        { for (i=0; i<xPos; i++)
            Osd_DrawChar(i, menuItem->YPos, ' '); // fill space
          for (i=xPos+len; i<OsdWindowWidth; i++)
            Osd_DrawChar(i, menuItem->YPos, ' ');
        }
    #undef len
    }
}

//=========================================================================
// draw menu item display value
void DrawOsdMenuItemValue(BYTE itemIndex, DrawValueType *valueItem)
{ if (valueItem->DrawRadioGroup)
    DrawOsdMenuItemRadioGroup(itemIndex, valueItem->DrawRadioGroup);
  if (valueItem->DrawNumber)
    DrawOsdMenuItemNumber(itemIndex, valueItem->DrawNumber);
  if (valueItem->DrawGuage)
    DrawOsdMenuItemGuage(itemIndex, valueItem->DrawGuage);
}

//=========================================================================
// draw number
void DrawOsdMenuItemNumber(BYTE itemIndex, DrawNumberType *numberItem)
{ itemIndex=0;
#if Multi_Number
  { NumberType *number;
    BYTE i;

    number=numberItem->DisplayNumber;
    if (number)
      { i=0;
        if ((CurrentMenuItem.DisplayValue->DrawNumber)!=numberItem)
          Osd_SetTextColor(CP_BlackColor, numberItem->BackColor);
        else
          Osd_SetTextColor(numberItem->ForeColor, numberItem->BackColor);
      #define drawItem	(number+i)
      #define xPos itemIndex
        while (1)
          { xPos=drawItem->XPos;
            if (xPos==0)
              { xPos=(OsdWindowWidth-4)/2-1;
              }
            Osd_DrawNum(xPos, drawItem->YPos, drawItem->GetValue());
      	    if (drawItem->Flags&dwiEnd)
      	      break;
      	    i++;
          }
      #undef xPos
      #undef drawItem
      }
  }
#else
 #define xPos itemIndex
  xPos=numberItem->XPos;
  if (xPos==0)
    { xPos=(OsdWindowWidth-4)/2-1;
    }
  if (MenuPageIndex==FactoryMenu)
    { if (CurrentMenuItem.DisplayValue.DrawNumber==numberItem)
        Osd_SetTextColor(numberItem->ForeColor, numberItem->BackColor);
    }
  if (numberItem->Flags&dwiHex)
    Osd_DrawHex(xPos, numberItem->YPos, numberItem->GetValue());
  else
    Osd_DrawNum(xPos, numberItem->YPos, numberItem->GetValue());
 #undef xPos
#endif
}


//=========================================================================
// draw guage
void DrawOsdMenuItemGuage(BYTE itemIndex, DrawGaugeType *gaugeItem)
{ itemIndex=0;
#if Multi_Gauge
  { BYTE i;
    GaugeType *gauge;
    gauge=gaugeItem->DisplayGauge;
    if (gauge)
      { i=0;
     	Osd_SetTextColor(gaugeItem->ForeColor, gaugeItem->BackColor);
      #define drawItem	(gauge+i)
      #define xPos	itemIndex
        while (1)
          { xPos=drawItem->XPos;
            if (xPos==0)
              { xPos=(OsdWindowWidth-gaugeItem->Length)/2;
              }
            Osd_DrawGuage(xPos, drawItem->YPos, gaugeItem->Length, drawItem->GetValue());
            if (drawItem->Flags&dwiEnd)
               break;
            i++;
          }
      #undef xPos
      #undef drawItem
      }
  }
#else
 #define xPos	itemIndex
  xPos=gaugeItem->XPos;
  if (xPos==0)
    { xPos=(OsdWindowWidth-gaugeItem->Length)/2;
    }
  Osd_DrawGuage(xPos, gaugeItem->YPos, gaugeItem->Length, gaugeItem->GetValue());
 #undef xPos
#endif
}
#if OSDStartPos
void DrawFullCenterText(BYTE xPos, BYTE yPos, BYTE *str)
{ BYTE len, i;
  if (xPos==1)
    { len=strlen(str);
      if (MenuPageIndex>RootMenu && MenuPageIndex<AutoMenu)
        xPos=(OsdWindowWidth-len-4)/2+3;
      else
        xPos=(OsdWindowWidth-len)/2;
      for (i=3; i<xPos; i++)
        Osd_DrawChar(i, yPos, ' ');
      for (i=xPos+len; i<OsdWindowWidth-4; i++)
        Osd_DrawChar(i, yPos, ' ');
    }
  Osd_DrawStr(xPos, yPos, str);
}

#else
void DrawFullCenterText(BYTE xPos, BYTE yPos, BYTE *str)
{ BYTE len, i;
  if (xPos==1)
    { len=strlen(str);
      if (MenuPageIndex>RootMenu && MenuPageIndex<AutoMenu)
        xPos=(OsdWindowWidth-len-2)/2+2;
      else
        xPos=(OsdWindowWidth-len)/2;
      for (i=3; i<xPos; i++)
        Osd_DrawChar(i, yPos, ' ');
      for (i=xPos+len; i<OsdWindowWidth-2; i++)
        Osd_DrawChar(i, yPos, ' ');
    }
  Osd_DrawStr(xPos, yPos, str);
}
#endif
//=========================================================================
// draw radio
void DrawOsdMenuItemRadioGroup(BYTE itemIndex, DrawRadioGroupType *radioItem)
{ RadioTextType *radioText;

  radioText=radioItem->RadioText;
  if (radioText)
    { BYTE i=0;
//      BYTE xPos;

      itemIndex=0xFF;
      if (radioItem->GetValue)
        { if (CurrentMenuItem.DisplayValue.DrawRadioGroup)// == radioItem)
            itemIndex=radioItem->GetValue();
      	}
    #define drawItem	(radioText+i)
      while (1)
        { // set high color
          // if (itemIndex==i)
          if (drawItem->DisplayText)
            {
              if (drawItem->Flags&dwiTittle)
	      	Osd_SetTextColor(CP_BlueColor, CP_GrayColor);
	      else if (itemIndex<0xFF)
	      	{ if (itemIndex==i)
	      	    Osd_SetTextColor(CP_RedColor, CP_BlueColor);
	          else
	      	    Osd_SetTextColor(CP_WhiteColor, CP_BlueColor);
	      	}
	      else
	      	Osd_SetTextColor(radioItem->ForeColor, radioItem->BackColor);
              //  xPos=(OsdWindowWidth-strlen(drawItem->DisplayText()))/2;
              DrawFullCenterText(drawItem->XPos, drawItem->YPos, drawItem->DisplayText());
              //else
              //  Osd_DrawStr(xPos, drawItem->YPos, drawItem->DisplayText());
            }
          if (drawItem->Flags&dwiEnd)
            break;
          //radioText++;
          i++;
        }
    #undef drawItem
    }
}

void DrawTimingInfo(void)
{ WORD freq;

  Osd_SetTextColor(CP_BlackColor, CP_GrayColor);
  freq=HFreq(SrcHPeriod);

  Osd_Draw4Num(OSDStartPos+6, OSDStartPos+8, freq%10);
  Osd_Draw4Num(OSDStartPos+4, OSDStartPos+8, freq/10);

  freq=VFreq(freq, SrcVTotal);
  Osd_Draw4Num(OSDStartPos+16, OSDStartPos+8, freq%10);
  Osd_Draw4Num(OSDStartPos+14, OSDStartPos+8, freq/10);

  Osd_DrawChar(OSDStartPos+10, OSDStartPos+8, '.');
  Osd_DrawStr(OSDStartPos+12, OSDStartPos+8, "KHz");
  Osd_DrawChar(OSDStartPos+20, OSDStartPos+8, '.');
  Osd_DrawStr(OSDStartPos+22, OSDStartPos+8, "Hz");

  freq=mStar_ReadWord(SPRVDC_H)&0xFFFE;
if(freq>1000)
  Osd_Draw4Num(OSDStartPos+14, OSDStartPos+9, freq);
else
  Osd_Draw4Num(OSDStartPos+13, OSDStartPos+9, freq);

  freq=mStar_ReadWord(SPRHDC_H)&0xFFFE;
  Osd_Draw4Num(OSDStartPos+9, OSDStartPos+9, freq);
  Osd_DrawChar(OSDStartPos+15, OSDStartPos+9, 'x');
  Osd_DrawChar(OSDStartPos+16, OSDStartPos+8, '/');

}

void DrawModeInfo(void)
{WORD freq;
 Osd_SetTextColor(CP_RedColor, CP_GrayColor);
  freq=HFreq(SrcHPeriod);
  Osd_Draw4Num(5, 2, freq%10);
  Osd_Draw4Num(3, 2, freq/10);
  
  freq=VFreq(freq, SrcVTotal);
  Osd_Draw4Num(15, 2, freq%10);
  Osd_Draw4Num(13, 2, freq/10);

  Osd_DrawChar(9, 2, '.');
  Osd_DrawStr( 11, 2, "KHz");
  Osd_DrawChar(19, 2, '.');
  Osd_DrawStr( 21, 2, "Hz"); 
  freq=mStar_ReadWord(SPRVDC_H)&0xFFFE;
if(freq>1000)
  Osd_Draw4Num(13, 3, freq);
else
  Osd_Draw4Num(12, 3, freq);

  freq=mStar_ReadWord(SPRHDC_H)&0xFFFE;
  Osd_Draw4Num(8, 3, freq);
  Osd_DrawChar(14, 3, 'x');
  Osd_DrawChar(15, 2, '/');

  Osd_DrawStr(7, 5, PresetUserModeText());
}

void DrawOutOfRangeInfo(void)
{WORD freq;
 Osd_SetTextColor(CP_BlackColor, CP_GrayColor);
  freq=HFreq(SrcHPeriod);
  Osd_Draw4Num(6, 2, freq%10);
  Osd_Draw4Num(4, 2, freq/10);
  
  freq=VFreq(freq, SrcVTotal);
  Osd_Draw4Num(16, 2, freq%10);
  Osd_Draw4Num(14, 2, freq/10);

  Osd_DrawChar(10, 2, '.');
  Osd_DrawStr( 12, 2, "KHz");
  Osd_DrawChar(20, 2, '.');
  Osd_DrawStr( 22, 2, "Hz"); 
 
  Osd_DrawChar(16, 2, '/');

  
}

BYTE GetPrevItem(MenuItemType *menuItem)
{ signed char i;

  if (MenuItemIndex)
    { for (i=MenuItemIndex-1; i>=0; i--)
        { if (menuItem[i].Flags&mibDVIDisable && SrcInputType==Input_Digital)
            continue;
          if (menuItem[i].Flags&mibFactoryItem && !FactoryModeFlag)
            continue;
          if (menuItem[i].Flags&mibSelectable)
            return i;
  	}
    }
  for (i=MenuItemCount-1; i>=0; i--)
    { if (menuItem[i].Flags&mibDVIDisable && SrcInputType==Input_Digital)
        continue;
      if (menuItem[i].Flags&mibFactoryItem && !FactoryModeFlag)
        continue;
      if (menuItem[i].Flags&mibSelectable)
        return i;
    }
  return MenuItemIndex;
}
BYTE GetNextItem(MenuItemType *menuItem)
{ BYTE i;

  if (MenuItemIndex<MenuItemCount-1) // current item is not last item.
    { for (i=MenuItemIndex+1; i<MenuItemCount; i++)
        { if (menuItem[i].Flags&mibDVIDisable && SrcInputType==Input_Digital)
            continue;
          if (menuItem[i].Flags&mibFactoryItem && !FactoryModeFlag)
            continue;
          if (menuItem[i].Flags&mibSelectable)
            return i;
  	}
    }
  for (i=0; i<MenuItemIndex; i++)
    { if (menuItem[i].Flags&mibDVIDisable && SrcInputType==Input_Digital)
        continue;
      if (menuItem[i].Flags&mibFactoryItem && !FactoryModeFlag)
        continue;
      if (menuItem[i].Flags&mibSelectable)
        return i;
    }
  return MenuItemIndex;
}

void ClearArrow(void)
{ Osd_SetTextColor(CP_GrayColor, CP_GrayColor);
  Osd_DrawStr(OSDStartPos+14, OSDStartPos+5, tSpace2);
  Osd_DrawStr(OSDStartPos+14, OSDStartPos+7, tSpace2);
  Osd_DrawChar(OSDStartPos+12, OSDStartPos+6, ' ');
  Osd_DrawChar(OSDStartPos+17, OSDStartPos+6, ' ');
}

BYTE GetMenuItemIndex(BYTE menuPageIndex)
{ if (MenuPageIndex==MainMenu || MenuPageIndex==FactoryMainMenu)
    { if (menuPageIndex==TrackingMenu)
	{ Osd_SetTextColor(CP_GrayColor, CP_GrayColor);
        //  Osd_DrawStr(OSDStartPos+25, OSDStartPos+3+MenuItemIndex*3, tSpace3);
          return 1;
        }
      else if (menuPageIndex==PositionMenu)
        { ClearArrow();
          return 2;
      	}
      else if (menuPageIndex==ColorMenu)
	{ Osd_SetTextColor(CP_GrayColor, CP_GrayColor);
        //  Osd_DrawStr(OSDStartPos+25, OSDStartPos+4+MenuItemIndex, tSpace3);
	  
          return 3;
      	}
      else if (menuPageIndex==OtherMenu)
        { return 4;
      	}
      else if (menuPageIndex==BriConMenu)
        { ClearArrow();
          return 0;
      	}
      else if (menuPageIndex==Factory1Menu)
      	return 5;
      else if (menuPageIndex==Factory2Menu)
      	return 6;
      else if (FreeRunModeFlag)
        return 5;
      else
      	{ if (MenuPageIndex==MainMenu)
      	    return MenuItemPrevIndex%5;
          else
      	    return MenuItemPrevIndex%7;
      	}
    }
  else if (MenuPageIndex==ColorMenu)
    { if (UserPrefColorTemp==CTEMP_USER)
        return 1;
    }
  return 0;
}

void SaveUserPrefSetting(BYTE menuPageIndex)
{ 

	if (MenuPageIndex==MainMenu || MenuPageIndex==RootMenu || MenuPageIndex==FactoryMainMenu)
    	{ 
    		if (menuPageIndex==BriConMenu || menuPageIndex==BriteMenu)
        	{ NVRam_WriteByte(nvrMonitorAddr(Brightness), UserPrefBrightness);
        	  NVRam_WriteByte(nvrMonitorAddr(Contrast), UserPrefContrast);
        	}
      		else if (menuPageIndex==TrackingMenu)
	        { NVRam_WriteByte(nvrModeAddr(Phase), UserPrefPhase);
       	   NVRam_WriteWord(nvrModeAddr(HTotal), UserPrefHTotal);
      		}
      		else if (menuPageIndex==PositionMenu)
        	{ NVRam_WriteWord(nvrModeAddr(HStart), UserPrefHStart);
          	  NVRam_WriteWord(nvrModeAddr(VStart), UserPrefVStart);
      		}
      		else if (menuPageIndex==OtherMenu)
        	{ NVRam_WriteByte(nvrMonitorAddr(Language), UserPrefLanguage);
          	  NVRam_WriteByte(nvrMonitorAddr(OsdHStart), UserPrefOsdHStart);
      		}
      		else if (menuPageIndex==ColorMenu)
        	{ NVRam_WriteByte(nvrMonitorAddr(ColorTemp), UserPrefColorTemp);
        	  NVRam_WriteByte(nvrMonitorAddr(ColorTemp1), UserPrefColorTemp1);
        	  NVRam_WriteByte(nvrMonitorAddr(BlueColor), UserPrefBlueColor);
        	  NVRam_WriteByte(nvrMonitorAddr(GreenColor), UserPrefGreenColor);
        	  NVRam_WriteByte(nvrMonitorAddr(RedColor), UserPrefRedColor);
      		}
    	}

	 if(MenuPageIndex==MuteMenu || MenuPageIndex==VolumeMenu)
	{	//only for save audio
         	NVRam_WriteByte(nvrMonitorAddr(MonitorFlag), MonitorFlags);
	}
		
  	Clr_SaveSettingFlag();
}


⌨️ 快捷键说明

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