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

📄 main.c

📁 mtv512mg + mx88v462 液晶电视驱动C完整程序
💻 C
📖 第 1 页 / 共 3 页
字号:
#include	<string.h>

#define 	_MAIN_

#include 	"..\inc\public2.h"

#include 	"..\inc\OSD_Table.h"

extern	code	unsigned int	Fp_Table[403];

extern	BYTE	RegB,RegC,RegE;

code	BYTE	MainMenuItem_TV[3][7] = { 0,1,2,3,18,0xFF,0xFF,
										  6,8,9,4,7,5,0xFF,
										  12,13,14,15,16,17,0xFF };

code	BYTE	MainMenuItem_AV[3][7] = { 0,1,2,3,18,0xFF,0xFF,
										  6,4,7,0xFF,0xFF,0xFF,0xFF,
										  0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF };

BYTE	MainMenuItem[3][7];

code	BYTE	Source_Enable[16] ={1,1,0,0,0,0,0,0,0,0,0,0, 0,0,0,0};

BYTE	Language_Enable[8]= {1,1,1,1,1,1,1,1} ;

BYTE	Adj_Value[16];			// 0 Volume
								// 1 Brightness
								// 2 Contrast
								// 3 Saturation
								// 4 Sharpen
								// 5 Hue
								
								// 7 Language
								// 8 Horizontal
								// 9 Vertical
								// 10 Source_type								
								// 11 Video_PP
								// 12 Video_SYS
								
								// 15 Channel

BYTE	ColorEN = 0x1F;	// PALN, PALM, PAL, NTSC
BYTE	SoundEN = 0x1F;	// 6.5M, 6.0M, 5.5M, 4.5M

BYTE	Video_SYS;
BYTE	Source_type,Brightness,Contrast,Saturation,Sharpen,Hue,Horizontal=0,Vertical=0;

xdata BYTE	TV_Skip[16];

unsigned	int	Fp_Position;

BYTE		Search_Flag=0;
BYTE		SIF;
bit			Skip;

BYTE	Fine_Turn;
BYTE	Video_type;

BYTE	Menu_mode, Menu_item;
BYTE	MenuFlag,TitleFlag,VolumeFlag,SleepFlag,PPFlag,SleepEnable;

bit		MuteFlag = 0;
bit		One_Flag = 0, Input_Num = 0;
BYTE	CVD1_3A,CVD1_3C;

BYTE	Subwin;

bit		OnOff,Auto_Start=0;

BYTE	C_Input = 0;
	
void	HV_Change();

void	Factory_Mode();
void	Save_Factory();
void	Load_Factory();
void	Factory_Menu_Init();
void	Factory_Menu_HL();
void	Factory_Menu_Menu();
void	Factory_Menu_1();
void	Factory_Key_Check();
void	Factory_Clear_All();

void	ColorSystem_Check();
void	ColorSystem_Up();
void	ColorSystem_Down();

void	SoundSystem_Check();
void	SoundSystem_Up();
void	SoundSystem_Down();

void	Show_VideoMode();

void	Show_CInput();
void	Show_MainMenu_Init();
void	Show_MainMenu_HL();
void	Show_MainMenu1();
void	Show_MainMenu2();
void	Show_Volume(BYTE);
void	Show_Mute();
void 	Show_Bar(BYTE *, BYTE);
void 	Show_TV_Bar(BYTE *, unsigned long int);

void	Show_HV(void);

void	Screen_Blue();
void	Save_Channel();
void	Save_Channel_Info();
void	Save_Channel_Skip();
void	Save_Channel_Default();
void	Load_Channel();
void 	Show_Channel();
void	Show_Number(BYTE,BYTE*);
	
void	Auto_Detect_TV_in(void);						//	-------
void	Key_Check(void);
void	Save_Parameter(void);
void	Load_Parameter(void);

void	Set_SourceType(void);
void 	Set_HV(void);

void	MCU_Init();
void	Power_On();
void	Power_Off();
void	To_Idle_Mode();
void	Idle_Mode();

void	Search_TV();
bit		Get_Channel_Skip();
void	Set_Channel_Skip();
void 	Channel_Up();
void 	Channel_Down();

void	Language_Down();
void	Language_Up();
void	Language_Check();

void	Mute();
void	SpkOut();
void	Show_CInput_A();
void	Show_OneTwo();

void	Menu_Up();
void	Menu_Down();
void	Menu_Show(BYTE, BYTE *);

BYTE	idata 	buf[66];

bit		Factory_Flag = 0, Fac_Clr = 0;

void Delay(unsigned int value)
{
	while(value>0) 
		value--;
}
	
void main(void)
{
	PanelOFF;
	
	MCU_Init();									// MCU init

	Mute();			
		
/*
	if ( (P0&0x7F) == (MENU & UP) )
	{
		OnOff = 1;					// On Off flag
	
//		LED_G = 0;
		LED_R = 1;
		
		Load_Factory();
		V46X_Init();
	 	
//		AUDIO_STBY = AUDIO_MUTE = 0;

		Factory_Mode();
	}
*/
	Load_Parameter();
			
	if ( 1 )	//Power_OnOff == 1 )
	{
		Power_On();
		Auto_Detect_TV_in();
		PanelON;
	}
	else
		Power_Off();

	while(1)
	{
		Delay(1000);
		
		if ( OnOff )
		{
												//***************************************
												//---	Process the UART service	-----
												//***************************************
			UART_ParseFun();				// Jump into UART_ParseFun() function
						

//			buf[0] = Key_Input>>4;
//			buf[1] = Key_Input&0xF;	
//			Write_OSDCode(buf, 2, 1, 0);
			
			ScreenON;
			
			if ( OSDTimer == 0 )
			{
				if ( (Source_type == TV_CHL) && Input_Num  )
				{
					Channel = C_Input;
					Show_Channel();
					Show_VideoMode();
					Save_Parameter();
				}
				else
					To_Idle_Mode();
			}
		
			if ( (Source_type <= YCbCr) && (!Search_Flag) )
			{
				Auto_Detect_TV_in();
			}

			if ( MuteFlag || Search_Flag != 0 )
				Mute();
			else
			{
				if  ( V46X_If_Signal_In() )
					SpkOut();
				else
					Mute();
			}

			if ( V46X_Get_ColorSystem() == NTSC && V46X_If_Signal_In() )
			{
				if ( Source_type == TV_CHL )
					Adj_Hue(Hue);
				else
					Adj_Hue(Hue);
			}
			else
				Adj_Hue(25);
			
			Search_TV();
		}
		else	
			Mute();

		Key_Check();
	}
}

/**--------------------------------------------------------------------------
* Name          void	Auto_Detect_TV_in()
*
* Description	
*
* Flow Chart
*
* Return			
*
* DATE          Author          Description
* ===========================================================================
* 2005-09-21	Microntek       Write
*/
void	Auto_Detect_TV_in(void)
{
	if ( Source_type > YCbCr)
		return;
		
	if ( Source_type == TV_CHL)
	{
		V46X_Detect_ScanLines();
		if ( Video_SYS != V46X_Get_ColorSystem() )
			V46X_ColorSystem(Video_SYS);
	}
	else
	{
		V46X_Detect_ColorSystem_AV();
	}

	return;
}

void	Key_Check(void)
{
	if (KeyFlag && Key == ONOFF)
	{
		KeyFlag = 0;
		if ( OnOff )
		{
			Power_OnOff = 0;
			Save_Parameter();
			Power_Off();
		}
		else
		{
			Power_OnOff = 1;
			Save_Parameter();
			Power_On();
			Auto_Detect_TV_in();
		//	Delay(20000);
			Delay(20000);
			PanelON;
		}
	}
	
	if (OnOff && KeyFlag)
	{
		if ( (Key == ENTER)  )
		{
			Idle_Mode();
			
			KeyFlag = 0;
			
			for (;;)
			{
				if (Source_type >= RGB666)
					Source_type = VIDEO1;
				else
					Source_type++;
					
				if (Source_Enable[Source_type] == 1)
					break;
			}

			S_Source_type = Source_type;
			Set_SourceType();
			Save_Parameter();
		}
		switch (Key)
		{
			case MENU :

				KeyFlag = 0;
				
				if ( Menu_mode == 0 )
				{
					if ( V46X_Get_ColorSystem() == NTSC )
						MainMenuItem[0][4] = 18;
					else
						MainMenuItem[0][4] = 0xFF;
				}
					
				if ( Menu_mode == 3 )
					To_Idle_Mode();
				else
				{
					Menu_mode ++;
					if ( MainMenuItem[Menu_mode-1][0] == 0xFF )
						To_Idle_Mode();
					else
					{
						Menu_item = 0;
						Show_MainMenu_Init();
					}
				}
				break;
			
			case MUTE :
				
				KeyFlag = 0;
				
				MuteFlag = !MuteFlag;
				if ( MuteFlag )
					;//AUDIO_MUTE = 1;
				else
					;//AUDIO_MUTE = 0;
				Show_Volume(Volume);
				break;
				
			case CALL :
				
				KeyFlag = 0;
								
				if ( Source_type != TV_CHL )
					break;

				if ( Search_Flag == 0 )
				{				
					Menu_mode = 3;
					Menu_item = 5;
					Fine_Turn = 0x80;
					Search_Flag = 5;
					Fp_Position = Fp_VL_Start;
					Channel = 0;	
					Show_MainMenu_Init();
					break;
				}
				else
				{
					Channel = 0;
					Show_Channel();
					Idle_Mode();
					Show_VideoMode();
					break;
				}

			case N_SW :
				
				KeyFlag = 0;
				
				if ( Source_type != TV_CHL )
					break;
				One_Flag = !One_Flag;
				C_Input = 0;
				Input_Num = 0;
				Show_OneTwo();
				break;
				
			case N_0 :
			case N_1 :
			case N_2 :
			case N_3 :
			case N_4 :
			case N_5 :
			case N_6 :
			case N_7 :				
			case N_8 :
			case N_9 :
				
				KeyFlag = 0;
				
				if ( Source_type != TV_CHL )
					break;
				if (!One_Flag)
				{
					C_Input = IR_NUM;
					Show_CInput();
					Delay(20000);
					Channel = C_Input;
					C_Input = 0;
					Show_Channel();
					Show_VideoMode();
					Save_Parameter();
				}
				else
				{	
					if	(!Input_Num)
					{
						Input_Num = 1;				
						C_Input = IR_NUM;
						Show_CInput_A();
					}
					else
					{
						Input_Num = 0;
						C_Input = C_Input*10 + IR_NUM;
						Show_CInput_A();
						
						Delay(20000);
						Channel = C_Input;
						C_Input = 0;
						Show_Channel();
						Show_VideoMode();
						Save_Parameter();
					}
					
				}
				break;
		}
	}
	
	if ( OnOff && Key )
	{
		if (KeyFlag == 1 || KeyTimer > 60 )
		{
			if ( KeyFlag )
				KeyFlag = 0;
			else
				KeyTimer = 45;
				
			switch ( Key )
			{
				case DOWN:
					if ( Menu_mode != 0 )
					{
						OSDTimer = 1000;
						
						while(1)
						{
							if ( Menu_item <6 )
								Menu_item++;
							else
								Menu_item = 0;
						if (MainMenuItem[Menu_mode-1][Menu_item] != 0xFF)
							break;
						}		
						Show_MainMenu2();
						Show_MainMenu_HL();
					}
					else if ( Source_type == TV_CHL )
					{
						OSDTimer = 1000;
						Channel_Down();
						Save_Parameter();
					}
					Search_Flag = 0;
					break;

				case UP:
					if ( Menu_mode != 0 )
					{
						OSDTimer = 1000;
						
						while(1)
						{
							if ( Menu_item == 0 )
								Menu_item = 6;
							else
								Menu_item--;
						if (MainMenuItem[Menu_mode-1][Menu_item] != 0xFF)
							break;
						}		
						Show_MainMenu2();
						Show_MainMenu_HL();
					}
					else if ( Source_type == TV_CHL )
					{
						OSDTimer = 1000;
						Channel_Up();
						Save_Parameter();
					}
					Search_Flag = 0;
					break;

				case LEFT:
					if ( Menu_mode != 0 )
					{
						OSDTimer = 1000;
						Menu_Down();
					}

					else
					{
						if ( Volume > 0 )
						{
							Volume --;
						}
						MuteFlag = 0;
						Show_Volume(Volume);
						Save_Parameter();						
					}

					break;
				
				case RIGHT:
					if ( Menu_mode != 0 )
					{
						OSDTimer = 1000;
						Menu_Up();
					}

					else
					{
						if ( Volume < 50 )
						{
							Volume ++;
						}
						MuteFlag = 0;
						Show_Volume(Volume);
						Save_Parameter();						
					}

					break;

			}
		}
	}	
}

void	Set_SourceType()
{
	ScreenOFF;
	
	Mute();
	
	Show_Subwin(0x00);

	if ( Source_type == TV_CHL )
		memcpy(MainMenuItem,MainMenuItem_TV,21);
	else 
		memcpy(MainMenuItem,MainMenuItem_AV,21);
		
	if (Source_type == TV_CHL)
	{
		Delay(20000);
	
		TV_Init();
		Show_Channel();
		AUDIO_CHANEL1 = 0;
		AUDIO_CHANEL2 = 1;
	}
	else
	{
		AUDIO_CHANEL1 = 0;
		AUDIO_CHANEL2 = 0;
	}

	Horizontal = S_Horizontal;
	Vertical = S_Vertical;
		
	V46X_VideoSource(Source_type);
	Auto_Detect_TV_in();
	Auto_Detect_TV_in();
	Auto_Detect_TV_in();
	
	if ( Source_type == TV_CHL)
		Screen_Blue();
	else
		CVD1_ReadWrite(W_TYPE, 0x07, 0x20);

	Set_VideoPP(0);
	Show_VideoMode();
}


void	Show_MainMenu_Init()
{
	BYTE	i,j;
	
	TitleFlag = 0;
	VolumeFlag = 0;
	MenuFlag = 1;
	Input_Num = 0;
	
	Show_Subwin(0x00);
	Clr_OSDCode();
	
	OSDTimer = 1000;

	OSD_SubWin_Attr(0,13,4,11,6,0);
	OSD_SubWin_Attr(1,25,4,6,6,66);

	OSD_SubWin_Attr(2,11,11,19,1,102);
	
	for (i=0; i<6; i++)
	{
		if ( MainMenuItem[Menu_mode-1][i] == 0xFF )
			for (j=0;j<11;j++ ) buf[i*11+j] = 0x59;
		else
			memcpy(&buf[i*11],OSD_Table_Main[Language][MainMenuItem[Menu_mode-1][i]],11);
	}

	Write_OSDCode(buf,11,6,0);	//Write OSD Code buffer

	Show_MainMenu1();	
	Show_MainMenu2();	
	Show_MainMenu_HL();
	Show_Subwin(0x07);
		
//	Show_HV();
}

void	Show_MainMenu_HL()
{
	BYTE	hl;
	
	hl = Menu_item;
/*
	if ( Vertical )
		hl = 5 - Menu_item;
*/		
	OSD_Attribute(0, 102, FG_COLOR, BG_COLOR);
	OSD_Attribute(hl*11, 11, FG_COLOR_H, BG_COLOR);
	OSD_Attribute(66+hl*6, 6, FG_COLOR_H, BG_COLOR);

	OSD_Attribute(102, 19, FG_COLOR_H, BG_COLOR);
}

void	Show_MainMenu1()
{
	BYTE	i;
	
	for (i=0; i<36; i++)
		buf[i] = 0x59;
		
	for (i=0; i<6; i++)
		Menu_Show(MainMenuItem[Menu_mode-1][i],&buf[i*6]);

	Write_OSDCode(buf, 6, 6, 66);						//Write OSD Code buffer
}

void	Show_MainMenu2()
{
	BYTE	i;
	
	if ( Menu_mode == 1 )
	{
		if ( Menu_item <= 3)
			Show_Bar(buf,Adj_Value[Menu_item+1]);
		else if ( Menu_item == 4)
			Show_Bar(buf,S_Hue);
	}
	else if ( Menu_mode == 3 )
	{
		Show_TV_Bar(buf,Fp_Position);
	}
	else
		for (i=0; i<19; i++ ) buf[i] = 0x59;

	Write_OSDCode(buf, 19, 1, 102);						//Write OSD Code buffer
}

void	Show_Mute()
{
	if (MuteFlag)
	{
		Show_Subwin(0x00);
		
		if ( Screen_mode )
			OSD_SubWin_Attr(7,7,1,1,1,0);
		else
			OSD_SubWin_Attr(7,3,1,1,1,0);
		
		buf[0] = 0x51;
		Write_OSDCode(buf, 1, 1, 0);						//Write OSD Code buffer
		OSD_Attribute(0, 1, 0x0C, BG_COLOR);				//Set Title line attribute
		Show_Subwin(0x80);
	}
}

void	Show_Volume(BYTE volume)
{
	BYTE	i,color;
	
	if ( VolumeFlag == 0 )
	{
		TitleFlag = 0;
		VolumeFlag = 1;
		MenuFlag = 0;
		Input_Num = 0;
		Show_Subwin(0x00);
	}
	
	OSDTimer = 1000;
	
	if ( MuteFlag )
		color = 0x0C;
	else
		color = FG_COLOR;
	
	OSD_SubWin_Attr(1,11,10,19,2,0);
	
	OSD_Attribute(0, 19, color, BG_COLOR);		//Set Title line attribute	
	OSD_Attribute(19, 38, FG_COLOR_H, BG_COLOR);

	for (i=0; i<38; i++ ) buf[i] = 0x59;
	if ( MuteFlag)
		memcpy(&buf[1],OSD_Table_Mute[Language],13);
	else
		memcpy(&buf[1],OSD_Table_Volume[Language],13);
	
	buf[16] = volume/10;
	buf[17] = volume%10;

	Show_Bar(&buf[19],volume);

	Write_OSDCode(buf, 19, 2, 0);					//Write OSD Code buffer	

	Show_Subwin(0x02);
}

void	HV_Change()
{
	if ( Horizontal )
		Vertical = !Vertical;
	Horizontal = !Horizontal;

	S_Horizontal = Horizontal;
	S_Vertical = Vertical;

	Set_HV();	
}

void	Show_Number(BYTE num, BYTE *buf)
{
	buf[1] = buf[2] = 0x59;
	
	if (num >= 100)
	{
		buf[0] = num/100;
		buf[1] = num%100/10;
		buf[2] = num%10;
	}
	else if ( num >= 10)
	{
		buf[0] = num/10;
		buf[1] = num%10;
	}
	else
		buf[0] = num;
}

void	Show_CInput()
{
	TitleFlag = 1;
	VolumeFlag = 0;
	MenuFlag = 0;
	Show_Subwin(0x00);
	
	OSDTimer = 200;
	if ( Screen_mode )
		OSD_SubWin_Attr(7,7,1,2,1,0);
	else
		OSD_SubWin_Attr(7,3,1,2,1,0);
	buf[0] = C_Input;
	buf[1] = 0x59;
	Write_OSDCode(buf, 2, 1, 0);						//Write OSD Code buffer
	OSD_Attribute(0, 2, FG_COLOR, BG_COLOR);			//Set Title line attribute
	Show_Subwin(0x80);	
}

void	Show_CInput_A()
{
	TitleFlag = 1;
	VolumeFlag = 0;
	MenuFlag = 0;

	Show_Subwin(0x00);
	
	OSDTimer = 200;
	if ( Screen_mode )
		OSD_SubWin_Attr(7,7,1,2,1,0);
	else
		OSD_SubWin_Attr(7,3,1,2,1,0);
	if	(!Input_Num)
	{
		buf[0] = C_Input/10;
		buf[1] = C_Input%10;
	}
	else
	{
		buf[0] = C_Input;
		buf[1] = 0x54;
	}	
	Write_OSDCode(buf, 2, 1, 0);						//Write OSD Code buffer
	OSD_Attribute(0, 2, FG_COLOR, BG_COLOR);			//Set Title line attribute
	Show_Subwin(0x80);	
}
void	Show_OneTwo()
{
	TitleFlag = 1;
	VolumeFlag = 0;
	MenuFlag = 0;

	Show_Subwin(0x00);
	
	OSDTimer = 200;
	if ( Screen_mode )
		OSD_SubWin_Attr(7,7,1,2,1,0);
	else
		OSD_SubWin_Attr(7,3,1,2,1,0);
	if	(One_Flag)
	{
		buf[0] = 0x54;
		buf[1] = 0x54;
	}
	else
	{
		buf[0] = 0x54;
		buf[1] = 0x59;
	}	

⌨️ 快捷键说明

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