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

📄 lcd_osd.c

📁 液晶显示器程序代码
💻 C
📖 第 1 页 / 共 5 页
字号:

	OSD_Line(row,col+5,12,((color_slider<<4) & 0xf0),2);
	Data[0] = 6;
	Data[1] = Y_INC;
	Data[2] = OSD_ADDR_MSB_90;

	Data[6] = 0;

 	for (row = 0; row < length; row++)
    	{
		Data[3] = (unsigned char)((((usStart_Addr + col + row + 5) >> 8 ) & 0x0f ) | 0x50);
    		Data[4] = (unsigned char)( (usStart_Addr + col + row + 5) & 0x00ff);

		if( row == 0 || row == (length-1) )
		{
			if( bound )
			{
				if( bound >= (range*3) )
				{
					Data[5] = (row==0) ? 0x13 : 0x1e;
					bound = bound - range*3;
				}
				else
				{
			       	color   = (bound << 4) / (range*3);
					bound = 0;
	
					if (4 > color)
						Data[5] = (row==0) ? 0x10 : 0x1b;	
					else if (8 > color)
						Data[5] = (row==0) ? 0x11 : 0x1c;
					else if (12 > color)
						Data[5] = (row==0) ? 0x12 : 0x1d;
					else
						Data[5] = (row==0) ? 0x13 : 0x1e;
				}
			}
			else
			{
				Data[5] = (row==0) ? 0x10 : 0x1b;	
			}
		}
		else
		{
			if( bound )
			{
				if( bound >= (range*6) )
				{
					Data[5] = 0x1a;
					bound = bound - range*6;
				}
				else
				{
					color   = (bound << 4) / (range*6);
					bound = 0;
	
					if (1 > color)
						Data[5] = 0x14;
					else if (4 > color)
						Data[5] = 0x15;
					else if (6 > color)
						Data[5] = 0x16;
					else if (9 > color)
						Data[5] = 0x17;
					else if (11 > color)
						Data[5] = 0x18;
					else if (14 > color)
						Data[5] = 0x19;
					else
						Data[5] = 0x1a;
				}
			}
			else
			{
				Data[5] = 0x14;
			}
		
		}

		RTDWrite(Data);
		
	}

	range	= value / 10;
	row		= value - (range * 10);	// x1
	color	= range / 10;			// x100
	range	= range - (color * 10);	// x10

	row		= row + 0x01;
	range	= (range || color) ? range + 0x01 : 0x00;
	color	= color ? color + 0x01 : 0x00;

	Data[0] = 5;
	Data[1] = Y_INC;
	Data[2] = OSD_ADDR_MSB_90;
	Data[3] = (unsigned char)((((usStart_Addr + col) >>8 ) & 0x0f ) | 0x50);
	Data[4] = (unsigned char)( (usStart_Addr + col ) & 0x00ff);
	Data[5] = 0;
	RTDWrite(Data);

	Data[0] = 6;
	Data[1] = N_INC;
	Data[2] = OSD_DATA_92;
	Data[3] = color;		// Number x100
	Data[4] = range;		// Number x10
	Data[5] = row;		// Number x1
	Data[6] = 0;
	RTDWrite(Data);

}


void Init_Page(unsigned char index)
{
	index = index;
	OSD_Position(OSD_ENABLE);
	OSD_Clear(5, 11, 15, 1);	//Need to be modified case by case.
	if( ucOSD_Page_Index == 1)
		RTDOSDW(OSD_Window_Setting);
}

void Show_Osd_Page(unsigned char Page_Num,unsigned char* Page_Attr,unsigned char OSD_Table_Num)
{
	Init_Page(Page_Num);
	RTDOSDW(Page_All_Atb);
	RTDOSDW(OSD_PAGE_All_TABLE[0][stGUD1.FUNCTION & 0x07]);
	RTDOSDW(Page_Attr);
	RTDOSDW(OSD_PAGE_TABLE[OSD_Table_Num][stGUD1.FUNCTION & 0x07]);
	Show_Mode();
}

void OSD_Clear(unsigned char row_start, unsigned char height, unsigned char col_start, unsigned char width)
{
	width = width;
	if (height)
	{
		do
		{
			OSD_Line(row_start, col_start, Row_Info[0][row_start+1], 0x00, 3);
			//OSD_Line(row_start, col_start, width, 0x00, 3);
			row_start++;
		}
		while (--height);
	}
}

void Bright_Contrast_Adjust(unsigned char* variable,unsigned char Key)
{
//	if (NOTIFY_RIGHT_KEY == Key)
    if (NOTIFY_LEFT_KEY == Key)
	{
		if (100 <= *variable)
			return;
 
		if (KEY_TURBO_ENABLE > ucKey_Issued)
			*variable   = 100 > *variable ? *variable + 1 : 100;
		else
			*variable   = 99 > *variable ? *variable + 2 : 100;
	}
	else
	{
		if (0 == *variable)
			return;

		if (KEY_TURBO_ENABLE > ucKey_Issued)
			*variable   = 0 < *variable ? *variable - 1 : 0;
		else
			*variable   = 1 < *variable ? *variable - 2 : 0;
	}
}

void Osd_Change_Item(unsigned char Pess_Key,unsigned char Item_Num)
{
	if (ucOSD_Item_Index0)
	{
		// Select and highlight the next/previous item
		//OSD_Window( 6, 150, 282, (54 + (ucOSD_Item_Index0-1)*(29+4)), (84 + (ucOSD_Item_Index0-1)*(29+4))
		//	, 0, 0, 14, 251, 0, 1, 0);
		if (NOTIFY_RIGHT_KEY == Pess_Key)
			ucOSD_Item_Index0   = (Item_Num == ucOSD_Item_Index0) ? 1 : (ucOSD_Item_Index0 + 1);
		else
			ucOSD_Item_Index0   = (1 == ucOSD_Item_Index0) ? Item_Num : (ucOSD_Item_Index0 - 1);

		// Move window 6
		OSD_Window( 6, 150, 282, (54 + (ucOSD_Item_Index0-1)*(29+4)), (84 + (ucOSD_Item_Index0-1)*(29+4))
			, 1, 1, 14, 251, 0, 1, 25);
	}
	else
	{
		// Change to next/previous main page
		//OSD_Window( 5, 150, 282, (54 + (ucOSD_Page_Index-1)*(29+4)), (84 + (ucOSD_Page_Index-1)*(29+4))
		//	, 0, 0, 14, 251, 0, 1, 0);
		if (NOTIFY_RIGHT_KEY == Pess_Key)
			ucOSD_Page_Index    = GetNextPageIdx(ucOSD_Page_Index);
		else
			ucOSD_Page_Index    = GetPrevPageIdx(ucOSD_Page_Index);
	} 
}

void Show_Mode(void)
{
	unsigned int idata usStart_Addr;
	unsigned char idata ucTemp;

	OSD_Line(3, 12, 15, 0, 1);                       // Attribute
	usStart_Addr = FONT_SELECT_ADDRESS;

	//The address of the first character Cn1 in Row n = FONT_SELECT_ADDRESS + Row0_length + Row1_length +...+Row(n-1)_length
	for(ucTemp = 1; ucTemp < 3+1; ucTemp ++)
		usStart_Addr += Row_Info[0][ucTemp];

	Data[0] = 5;
	Data[1] = Y_INC;
	Data[2] = OSD_ADDR_MSB_90;
	Data[3] = (unsigned char)( (((usStart_Addr + 12)  & 0x0fff) >> 8 ) | 0x50);
	Data[4] = (unsigned char)( (usStart_Addr + 12) & 0x00ff);
	Data[5] = 0;
	RTDWrite(Data);
	
	

	switch (ucMode_Curr)
	{   
	/*
		case MODE_NOSIGNAL:     // NO SIGNAL
			OSD_Line(11, 2, 24, CHINESE_T <= (stGUD1.FUNCTION & 0x07) ? 0x80 | COLOR_BLUE : COLOR_BLUE, 0);

			if ((SOURCE_VGA == (stGUD1.INPUT_SOURCE & 0x07)) && (VGA_ONLINE != bVGA_CONNECT))
				RTDOSDW(OSD_REMK_TABLE[0][stGUD1.FUNCTION & 0x07]);
			else
				RTDOSDW(OSD_REMK_TABLE[1][stGUD1.FUNCTION & 0x07]);
			break;

		case MODE_UNDEFINED0:
		case MODE_UNDEFINED1:
		case MODE_NOSUPPORT:
			OSD_Line(11, 2, 24, CHINESE_T <= (stGUD1.FUNCTION & 0x07) ? 0x80 | COLOR_BLUE : COLOR_BLUE, 0);
			RTDOSDW(OSD_REMK_TABLE[2][stGUD1.FUNCTION & 0x07]);
			break;

		case MODE_VIDEO60HZ:    // NTSC 60HZ
			OSD_Line(11, 2, 24, COLOR_BLUE, 0);     // Set characters to blue
			RTDCodeW(Remark_Mode);

			switch(ucAV_Mode)
			{
				case 0x01:  RTDCodeW(Remark_V60_0); break;
				case 0x11:  RTDCodeW(Remark_V60_1); break;
				case 0x21:  RTDCodeW(Remark_V60_2); break;
				case 0x31:  RTDCodeW(Remark_V60_3); break;
				case 0x41:  RTDCodeW(Remark_V60_4); break;
				case 0x03:  RTDCodeW(Remark_V60_5); break;
			}
			break;
			
		case MODE_VIDEO50HZ:    // PAL 50HZ
			OSD_Line(11, 2, 24, COLOR_BLUE, 0);     // Set characters to blue
			RTDCodeW(Remark_Mode);

			switch(ucAV_Mode)
			{   
				case 0x02:  RTDCodeW(Remark_V50_0); break;
				case 0x12:  RTDCodeW(Remark_V50_1); break;
				case 0x22:  RTDCodeW(Remark_V50_2); break;
				case 0x32:  RTDCodeW(Remark_V50_3); break;
				case 0x03:  RTDCodeW(Remark_V50_5); break;
			}
			break;

		case MODE_YUV60HZ:
		case MODE_YUV50HZ:
		break;
*/
		default :
			//OSD_Line(11, 2, 24, COLOR_BLUE, 0);     // Set characters to blue

			{
			unsigned int    usHwid;
			unsigned char   ucTemp;

			usHwid  = usIPH_ACT_WID;

			if (SOURCE_VGA == (stGUD1.INPUT_SOURCE & 0x07))
			{
				if (MODE_1600x1200x60HZ == ucMode_Curr)
				{
					usHwid  = 1600;
				}
				else 
				{
					if (MODE_1600x1200x60HZ > ucMode_Curr)
					{
						if (MODE_1280x0960x60HZ <= ucMode_Curr)
							usHwid  = 1280;
						else if (MODE_1152x0864x75HZ <= ucMode_Curr)
						usHwid  = 1152;
					}
					else
					{
						if (MODE_USER1600x1200 == ucMode_Curr)
							usHwid  = 1600;
						else if (MODE_USER1280x960 <= ucMode_Curr)
							usHwid  = 1280;
						else if (MODE_USER1152x864 <= ucMode_Curr)
							usHwid  = 1152;
					}
				}
					//anson 050512
				if	((MODE_0640x0400x70HZ == ucMode_Curr)||(MODE_0720x0400x70HZ == ucMode_Curr))
				{
					if(stGUD1.FUNCTION & 0x10)
						usHwid  = 640;
					else
						usHwid  = 720;
				}
			}

			//RTDCodeW(Remark_Mode);

			Data[0] = 12;
			Data[1] = N_INC;
			Data[2] = OSD_DATA_92;

			ucTemp  = usHwid / 100;

			if (10 <= ucTemp)
			{
				Data[3] = _1_;
				Data[4] = ucTemp - 10 + _0_;
			}
			else
			{
				Data[3] = 0;
				Data[4] = ucTemp + _0_;
			}

			ucTemp  = usHwid - ((unsigned int)100 * ucTemp);
        
			Data[5] = ucTemp / 10;
			
			Data[6] = ucTemp - (10 * Data[5]) + _0_;
			Data[5] = Data[5] + _0_;
			Data[7] = 0x0e;

			ucTemp      = usIPV_ACT_LEN / 100;
			Data[12]    = usIPV_ACT_LEN - ((unsigned int)100 * ucTemp);

			if (10 <= ucTemp)
			{
				Data[0]     = 13;
				Data[8]     = _1_;
				Data[9]     = ucTemp - 10 + _0_;
				Data[10]    = Data[12] / 10;
				Data[11]    = Data[12] - (10 * Data[10]) + _0_;
				Data[10]    = Data[10] + _0_;
				Data[12]    = 0x00;
				Data[13]    = 0;
			}
			else
			{
				Data[8]     = ucTemp + _0_;
				Data[9]     = Data[12] / 10;
				Data[10]    = Data[12] - (10 * Data[9]) + _0_;
				Data[9]     = Data[9] + _0_;
				Data[11]    = 0x00;
				Data[12]    = 0;
			}

			Data[12]    = 0;
			RTDWrite(Data);

			// Show Refresh Rate
			//RTDCodeW(Remark_Rate);

			Data[0] = 7;
			Data[1] = N_INC;
			Data[2] = OSD_DATA_92;
			Data[3] = ucRefresh / 10;
			Data[4] = ucRefresh - (Data[3] * 10) + _0_;
			Data[3] = Data[3] + _0_;
			Data[5] = 0x27;
			Data[6] = 0x59;
			Data[7] = 0;
			RTDWrite(Data);
			if (10 <= ucTemp)
				OSD_Line( 3, 21, 1, 0x8c, 0);
			else
				OSD_Line( 3, 20, 1, 0x8c, 0);
			}

			break;
			
	}
}   

///////////////////////////////////////////////////////////////////////////////////////////
//anson
///////////////////////////////////////////////////////////////////////////////////////////
void FACTORY_Key_Key(void)
{
	ucOSD_Page_Index = PAGE_Factory;
	ucOSD_Item_Index0 = PAGEFact_ITEM_Recall;
}
///////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////

void Page0_Left_Right_Key(unsigned char Key)
{
//    RTDSetByte(HOSTCTRL_02, 0x40);  // Wake RTD up
// Although you can add ending animation here, I don't think it is necessary.
//    RTDSetBit(OVL_CTRL_6D, 0xfe, 0x00);
//    RTDOSDW(OSD_Reset);            // Clear OSD
	//usOSD_Timer         = 5;     // 20 sec
    if (!b_rgb_VOLUME_STATUS)
    {
      OSD_Position(OSD_ENABLE);
      RTDOSDW(rgb_OSD_VOLUME);
	RTDOSDW(strTabVOLUME_Atb[stGUD1.FUNCTION & 0x07]);		//anson
      RTDSetBit(OVL_CTRL_6D, 0xfe, 0x01);
      b_rgb_VOLUME_STATUS = 1;
    }
	//OSD_Window( 5, 10, 136, 54, 84, 1, 1, 14, 251, 0, 1, 25);
	if(NOTIFY_LEFT_KEY == Key)
	{
        if (stGUD3.VOLUME > 0x00) stGUD3.VOLUME--;
        SetVolume();
        Save_GUD3();
		rgb_OSD_Slider(0, 7, 24, 0x1f - stGUD3.VOLUME, 0x1f, 4, 14);
	}

	else if(NOTIFY_RIGHT_KEY == Key)
	{
        if (stGUD3.VOLUME < 0x1f) stGUD3.VOLUME++;
        SetVolume();
        Save_GUD3();
		rgb_OSD_Slider(0, 7, 24, 0x1f - stGUD3.VOLUME, 0x1f, 4, 14);
    }


}

void Page0_Enter_Key(void)
{
	if((stGUD3.TV_SETTING & 0x08) == 0x08 )//Factory Mode		//anson
	{
		//Into Factory mode
		ucOSD_Page_Index    = PAGE_Factory;
		ucOSD_Item_Index0   = PAGEFact_ITEM_Recall;
		ucOSD_Item_Index1   = 0;
		ucOSD_Item_Index2   = 0;
	}
	else
	{
		// Change to OSD Main Page 1 and Main Program will show it
		ucOSD_Page_Index    = 1;
		ucOSD_Item_Index0   = 0;
		ucOSD_Item_Index1   = 0;
		ucOSD_Item_Index2   = 0;
		b_rgb_VOLUME_STATUS = 0;
	}
}

void Page0_LR_Key(void)
{
	// Go to Hidden Function Page
	if (SOURCE_VGA == (stGUD1.INPUT_SOURCE & 0x07))
	{
		ucOSD_Page_Index    = 8;
		ucOSD_Item_Index0   = 1;
		ucOSD_Item_Index1   = 0;
		ucOSD_Item_Index2   = 0;
	}
}

void Page1_Enter_Key(void)
{
	if (0 == ucOSD_Item_Index0)
	{
		if (MODE_NOSIGNAL != ucMode_Curr && MODE_NOSUPPORT != ucMode_Curr)
		{
			// Select and highlight the first item
			ucOSD_Item_Index0   = PAGE1_ITEM_CONTRAST;

⌨️ 快捷键说明

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