📄 main.c
字号:
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_VideoMode()
{
TitleFlag = 1;
VolumeFlag = 0;
MenuFlag = 0;
Input_Num = 0;
Show_Subwin(0x00);
OSDTimer = 1000;
if ( Screen_mode )
OSD_SubWin_Attr(7,7,1,9,2,0);
else
OSD_SubWin_Attr(7,3,1,9,2,0);
if ( Source_type == TV_CHL )
{
memcpy(buf, OSD_Table_Video[12], 9);
Show_Number(Channel,&buf[3]);
memcpy(buf+9, OSD_Table_Video_Type[Video_SYS],9);
if ( Video_SYS == PAL )
memcpy(buf+13,OSD_Table_Sound_Type[SIF],3);
if ( Video_SYS == SECAM )
memcpy(buf+15,OSD_Table_Sound_Type[SIF],3);
}
else
{
memcpy(buf, OSD_Table_Video[Source_type], 9);
memcpy(buf+9, OSD_Table_Video_Type[8],9);
}
Write_OSDCode(buf, 9, 2, 0); //Write OSD Code buffer
OSD_Attribute(0, 18, FG_COLOR, BG_COLOR); //Set Title line attribute
Show_Subwin(0x80);
}
/**--------------------------------------------------------------------------
* Name Show_Bar(BYTE *buf, BYTE input)
*
* Description Show Mtc on screen
*
* Flow Chart
*
* Return
*
* DATE Author Description
* ===========================================================================
* 2005-06-23 Microntek Created
*/
void Show_Bar(BYTE *buf, BYTE value)
{
BYTE i;
if ( value >= 50 )
value = 51;
buf[0] = 0x3E;
buf[18] = 0x42;
for (i=0; i< 17; i++)
{
if (value<=i*3)
buf[i+1] = 0x41;
else if (value >= (i+1)*3)
buf[i+1] = 0x82;
else
buf[i+1] = 0x7F + value%3;
}
}
void Show_TV_Bar(BYTE *buf, unsigned long int Fp_P)
{
BYTE value;
if ( (Fp_P >= Fp_UHF_Start) && (Fp_P <= Fp_UHF_End) )
value = (Fp_P-Fp_UHF_Start)*52/(Fp_UHF_End-Fp_UHF_Start);
else if ( (Fp_P >= Fp_VH_Start) && (Fp_P < Fp_UHF_Start) )
value = (Fp_P-Fp_VH_Start)*52/(Fp_UHF_Start-Fp_VH_Start-1);
else if ( (Fp_P >= Fp_VL_Start) && (Fp_P < Fp_VH_Start) )
value = (Fp_P-Fp_VL_Start)*52/(Fp_VH_Start-Fp_VL_Start-1);
else
value = 0;
Show_Bar(buf,value);
}
void Set_HV()
{
// BYTE buf[2];
// Show_Subwin(0x00);
V46X_HV(Horizontal,Vertical);
/*
buf[0] = 0x00;
buf[1] = 0x00;
if ( Horizontal )
buf[0] = 0x80;
if ( Vertical )
buf[1] = 0x80;
Write_OSDReg(buf, SEL_OSDCTRLREG, 2, 0x04);
Show_HV();
*/
}
void Power_On()
{
OnOff = 1; // On Off flag
// POWER = 0;
LED_R = 1;
Horizontal = 0;
Vertical = 0;
Load_Factory();
V46X_Init();
Load_Parameter();
Set_VideoPP(0);
Set_HV();
V46X_Set_ScreenMode(Screen_mode);
C_Input = 0;
Input_Num = 0;
Idle_Mode();
Set_SourceType();
MuteFlag = 0;
_Volume = 0xFF;
_Hue = 0xFF;
MuteFlag = 0;
;//AUDIO_MUTE = 0;
}
void Power_Off()
{
;//AUDIO_MUTE = 1;
OnOff = 0;
LED_R = 0;
Mute();
PanelOFF;
ScreenOFF;
}
void To_Idle_Mode()
{
if ( MenuFlag || TitleFlag || VolumeFlag )
{
Idle_Mode();
Show_Mute();
}
}
void Idle_Mode()
{
Show_Subwin(0x00);
Clr_OSDCode();
Search_Flag = 0;
VolumeFlag = 0;
MenuFlag = 0;
TitleFlag = 0;
Menu_mode = 0;
OSDTimer = 0;
C_Input = 0;
Input_Num = 0;
}
void MCU_Init()
{
OPTION = 0x21; // Double clock, P7.7 Enable
PADMOD0 = 0x00; // AD3-AD0/P6.3-P6.0
PADMOD1 = 0x1F; // P5.5-P5.0/DA5-DA0
PADMOD3 = 0xDF; // P5.7-P5.0 Output/Input
PADMOD4 = 0x00; // P6.7-P6.0 Output/Input
PADMODF = 0xC0; // P7.7-P7.6 Output/Input
;//AUDIO_MUTE = 1;
// ISP_CHECK
EINT1PEN = 0x80;
if ( P3_3 == 1 ) // Debug Mode
{
PADMOD2 = 0; // ISP DIsable
}
Timer_Init(); //Setting 8051 baud rate and timer clock //
}
void Mute()
{
;//AUDIO_MUTE = 1;
Adj_Volume(0);
}
void SpkOut()
{
;//AUDIO_MUTE = 0;
Adj_Volume(Volume);
}
/*
void SoundSystem_Check()
{
if ( (SoundEN&0x1F) == 0x00 )
SoundEN = 0x1F;
}
*/
void SoundSystem_Up()
{
for(;;)
{
if (SIF < 4)
SIF++;
else
SIF = 0;
if ( (0x1<<SIF) & SoundEN )
{
if ( (Video_SYS == NTSC || Video_SYS == PALM || Video_SYS == PALN) && SIF == M )
return;
else if ( Video_SYS == PAL && (SIF == BG || SIF == DK || SIF == I ) )
return;
else if ( Video_SYS == SECAM && (SIF == BG || SIF == DK || SIF == L ) )
return;
if ( Video_SYS == NTSC443 && SIF == M )
return;
}
}
}
void SoundSystem_Down()
{
for(;;)
{
if (SIF != 0)
SIF--;
else
SIF = 4;
if ( (0x1<<SIF) & SoundEN )
{
if ( (Video_SYS == NTSC || Video_SYS == PALM || Video_SYS == PALN ) && SIF == M )
return;
else if ( Video_SYS == PAL && (SIF == BG || SIF == DK || SIF == I ) )
return;
else if ( Video_SYS == SECAM && (SIF == BG || SIF == DK || SIF == L ) )
return;
if ( Video_SYS == NTSC443 && SIF == M )
return;
}
}
}
/*
void ColorSystem_Check()
{
switch ( ColorEN )
{
case 0x00 :
ColorEN = 0x02;
case 0x02 :
Video_SYS = PAL;
return;
case 0x01 :
Video_SYS = NTSC;
return;
case 0x04 :
Video_SYS = SECAM;
return;
default :
ColorEN = ColorEN | 0x08;
break;
}
if ( (0x1<<Video_SYS) & ColorEN )
return;
Video_SYS = 3;
return;
}
*/
void ColorSystem_Up()
{
for(;;)
{
if (Video_SYS < NTSC443)
Video_SYS++;
else
Video_SYS = 0;
if ( (0x1<<Video_SYS) & ColorEN )
return;
}
}
void ColorSystem_Down()
{
for(;;)
{
if (Video_SYS != 0)
Video_SYS--;
else
{
Video_SYS = NTSC443;
}
if ( (0x1<<Video_SYS) & ColorEN )
return;
}
}
//------------------------------------------------------------------------------
// TV Subroutine
//------------------------------------------------------------------------------
void Channel_Up()
{
BYTE chl;
// ScreenOFF;
for (chl=(Channel+1)&0x7F;chl!=Channel; chl=(chl+1)&0x7F)
{
if (chl > 99 )
chl = 99;
if ( !(TV_Skip[chl/8] & (1<<(chl%8))) )
{
Channel = chl;
break;
}
if (chl >= 99)
chl = 0x7F;
}
if (Source_type == TV_CHL )
{
Show_Channel();
Show_VideoMode();
}
else
{
S_Source_type = Source_type = TV_CHL;
Set_SourceType();
}
}
void Channel_Down()
{
BYTE chl;
// ScreenOFF;
for (chl=(Channel-1)&0x7F;chl!=Channel; chl=(chl-1)&0x7F)
{
if (chl >= 0x7F)
chl = 99;
if ( !(TV_Skip[chl/8] & (1<<(chl%8))) )
{
Channel = chl;
break;
}
}
if (Source_type == TV_CHL )
{
Show_Channel();
Show_VideoMode();
}
else
{
S_Source_type = Source_type = TV_CHL;
Set_SourceType();
}
}
void Set_Channel_Skip()
{
if (Skip)
TV_Skip[Channel/8] = TV_Skip[Channel/8] | (1<<(Channel%8)) ;
else
TV_Skip[Channel/8] = TV_Skip[Channel/8] & (~(1<<(Channel%8))) ;
}
bit Get_Channel_Skip()
{
return (TV_Skip[Channel/8] & (1<<(Channel%8)));
}
void Save_Channel()
{
Save_Channel_Info();
Save_Channel_Skip();
}
void Save_Channel_Info()
{
BYTE channel_data[4];
channel_data[0]=Fp_Position%256;
channel_data[1]=Fp_Position/256;
channel_data[2]=Video_SYS|(SIF<<4);
channel_data[3]=Fine_Turn;
/*
if(cn>63)
{
cn-=36;
I2C_Write(EEPROM_WRID,cn*4, 0x4, channel_data);
}
else
I2C_Write(EEPROM_WRID|0x2,cn*4, 0x4, channel_data);
Delay(2000);
*/
if ( Channel <64 )
I2C_Write(EEPROM_WRID|0x2, Channel*4, 0x4, channel_data);
else if ( Channel <100 )
{
I2C_Write(EEPROM_WRID, (Channel-36)*4, 0x4, channel_data);
}
Delay(3000);
Set_Channel_Skip();
}
void Save_Channel_Skip()
{
I2C_Write(EEPROM_WRID, 0x20, 0x10, TV_Skip); //Write TV skip info
Delay(3000);
}
void Load_Channel()
{
BYTE channel_data[4];
if ( Channel <64 )
I2C_Read(EEPROM_WRID|0x2, Channel*4, 0x4, channel_data);
else if ( Channel <100 )
I2C_Read(EEPROM_WRID, (Channel-36)*4, 0x4, channel_data);
Fp_Position = channel_data[1]*256 + channel_data[0];
Video_SYS = channel_data[2]&0xF;
SIF = channel_data[2]>>4;
Fine_Turn = channel_data[3];
if ( (Fp_Position < Fp_VL_Start) || (Fp_Position > Fp_UHF_End) )
Fp_Position = Fp_VL_Start;
if ( SIF > L )
SIF = BG;
if ( Video_SYS >= 5 )
Video_SYS = NTSC;
if (Fine_Turn>0x8A || Fine_Turn<0x76)
Fine_Turn = 0x80;
I2C_Read(EEPROM_WRID, 0x20, 0x10, TV_Skip); //Read TV skip info
Skip = Get_Channel_Skip();
}
void Show_Channel()
{
ScreenOFF;
Mute();
Delay(4000);
Load_Channel();
Set_CS(Video_SYS);
Set_SIF(SIF);
Set_DEMOD();
Set_Fosc(Fp_Position,Fine_Turn);
Delay(4000);
Auto_Detect_TV_in();
Auto_Detect_TV_in();
Auto_Detect_TV_in();
}
void Save_Channel_Default()
{
Fp_Position = Fp_VL_Start;
Video_SYS = NTSC;
SIF = M;
Skip = 1;
Fine_Turn = 0x80;
for(Channel=0; Channel<128; Channel++)
Save_Channel_Info();
Save_Channel_Skip();
}
void Search_TV()
{
if ( !Search_Flag )
return ;
OSDTimer = 1000;
switch (Search_Flag)
{
case 3:
if (Fp_Position<= Fp_VL_Start)
Fp_Position = Fp_UHF_End;
else
Fp_Position--;
break;
case 4:
if (Fp_Position>= Fp_UHF_End )
Fp_Position = Fp_VL_Start;
else
Fp_Position++;
break;
case 5:
if ( Auto_Start )
{
Auto_Start = 0;
break;
}
if ( Fp_Position >= Fp_UHF_End )
{
Skip = 1;
for (;Channel <= 99; Channel++ )
Set_Channel_Skip();
Save_Channel_Skip();
Channel = 0;
Show_Channel();
Idle_Mode();
Show_VideoMode();
return;
}
else
Fp_Position ++;
break;
}
Set_Fosc(Fp_Position, 0x80 );
Show_MainMenu1();
Show_MainMenu2();
Delay(20000);
if ( TV_If_Locked() )
{
Delay(30000);
if ( V46X_If_Signal_In() )
{
if( (Search_Flag == 3) || (Search_Flag == 4) )
{
Search_Flag = 0;
Save_Channel();
}
else
{
Skip = 0;
Save_Channel();
// Delay(20);
// Auto_Detect_TV_in();
Delay(20000);
Skip = 1;
Channel = (Channel+1)&0x7F;
if ( Channel > 99 )
{
Channel = 0;
Show_Channel();
Idle_Mode();
Show_VideoMode();
return;
}
}
}
}
}
//------------------------------------------------------------------------------
// Language Subroutine
//------------------------------------------------------------------------------
void Language_Check()
{
if ( !Language_Enable[Language] )
Language = 0;
}
void Language_Up()
{
for(;;)
{
if (Language<7)
Language ++;
else
Language =0;
if ( Language_Enable[Language] )
return;
}
}
void Language_Down()
{
for(;;)
{
if (Language)
Language --;
else
Language =7;
if ( Language_Enable[Language] )
return;
}
}
void Screen_Blue()
{
if ( Blue_back )
CVD1_ReadWrite(W_TYPE, 0x07, 0x20);
else
CVD1_ReadWrite(W_TYPE, 0x07, 0x30);
}
//------------------------------------------------------------------------------
// Parameter Subroutine
//------------------------------------------------------------------------------
void Save_Parameter()
{
I2C_Write(EEPROM_WRID, 0x10, 0x10, Adj_Value); //Write Preset Data to EEPROM
Delay(3000);
}
void Load_Parameter()
{
I2C_Read(EEPROM_WRID, 0x00, 0x10, Adj_Value);
if (memcmp(Adj_Value, "MTC_46X_CL_V7111", 16)) //Compares EEPROM 0x00~0x10 has "MTC logo"
{
Save_Channel_Default(); // Save Channel with Fosc1, V_AUTO, SIF, Skip=1
Volume = 25; // Volume
S_Brightness = 25; // Brightness;
S_Contrast = 25; // Contrast;
S_Saturation = 25; // Saturation;
S_Sharpen = 25; // Sharpen
S_Hue = Hue = 25; // Hue
Screen_mode = 0x00; // Display Mode
Blue_back = 1; // Hue;
Language = 0; // Language
S_Horizontal = Horizontal = 0; // Horizontal
S_Vertical = Vertical = 0; // Vertical
S_Source_type = Source_type = VIDEO1; // Input Source
Power_OnOff = 1;
HPosition = 32;
VPosition = 0;
Channel = 0;
I2C_Write(EEPROM_WRID, 0x10, 0x10, Adj_Value); //Write Preset Data to EEPROM
Delay(3000);
memcpy(Adj_Value, "MTC_46X_CL_V7111", 16); //No, the ID not equal, so set default value
I2C_Write(EEPROM_WRID, 0x00, 0x10, Adj_Value); //Write ID string to EEPROM
Delay(3000);
I2C_Read(EEPROM_WRID, 0x10, 0x10, Adj_Value);
}
else
{ //Yes, read data from EEPROM
I2C_Read(EEPROM_WRID, 0x10, 0x10, Adj_Value);
Source_type = S_Source_type;
Horizontal = S_Horizontal;
Vertical = S_Vertical;
Hue = S_Hue;
Language_Check();
}
if (Source_type > VIDEO2)
Source_type = VIDEO2;
S_Source_type = Source_type = VIDEO2; // Input Source
}
//------------------------------------------------------------------------------
// Factory Mode Subroutine
//------------------------------------------------------------------------------
void Factory_Mode()
{
Menu_mode = 1;
Menu_item = 0;
ScreenOFF;
Horizontal = 0;
Vertical = 0;
Set_HV();
Load_Factory();
Factory_Menu_Init();
for(;;)
Factory_Key_Check();
}
void Save_Factory()
{
memcpy(buf,"FA",2);
buf[2] = ColorEN;
buf[3] = SoundEN;
I2C_Write(EEPROM_WRID, 0x40, 4, buf); //Write Preset Data to EEPROM
Delay(3000);
I2C_Write(EEPROM_WRID, 0x44, 10, UserOSD);
Delay(3000);
}
void Load_Factory()
{
// ColorEN = 0x19;
// SoundEN = 0x01;
return;
I2C_Read(EEPROM_WRID, 0x40, 4, buf);
I2C_Read(EEPROM_WRID, 0x44, 10, UserOSD);
if ( memcmp(buf, "FA", 2) )
{
ColorEN = 0x19;
SoundEN = 0x01;
UserOSD[0] = 0x59;
UserOSD[1] = 0x59;
UserOSD[2] = 0x0C;
UserOSD[3] = 0x18;
UserOSD[4] = 0x17;
UserOSD[5] = 0x10;
UserOSD[6] = 0x15;
UserOSD[7] = 0x12;
UserOSD[8] = 0x59;
UserOSD[9] = 0x59;
Save_Factory();
}
else
{
ColorEN = buf[2];
SoundEN = buf[3];
}
}
void Factory_Menu_Init()
{
BYTE i;
Show_Subwin(0x00);
Clr_OSDCode();
OSDTimer = 1000;
if ( Menu_mode == 1 )
{
OSD_SubWin_Attr(0,13,3,8,8,0);
OSD_SubWin_Attr(1,25,3,6,8,64);
for (i=0;i<64;i++)
{
buf[i] = OSD_Factory_Menu[Menu_mode-1][i];
}
Write_OSDCode(buf,8,8,0); //Write OSD Code buffer
Factory_Menu_1();
Factory_Menu_HL();
Show_Subwin(0x03);
}
if ( Menu_mode == 2 )
{
OSD_SubWin_Attr(0,13,3,16,1,0);
OSD_SubWin_Attr(1,13,5,10,2,16);
memcpy(buf,OSD_Factory_OSD,8);
Write_OSDCode(buf,8,1,0); //Write OSD Code buffer
Factory_Menu_1();
OSD_Attribute(0, 16, FG_COLOR, BG_COLOR);
OSD_Attribute(16, 10, FG_COLOR_H, BG_COLOR);
OSD_Attribute(26, 10, FG_COLOR, BG_COLOR);
Show_Subwin(0x03);
}
}
void Factory_Menu_HL()
{
BYTE hl;
hl = Menu_item;
OSD_Attribute(0, 112, FG_COLOR, BG_COLOR);
OSD_Attribute(hl*8, 8, FG_COLOR_H, BG_COLOR);
OSD_Attribute(64+hl*6, 6, FG_COLOR_H, BG_COLOR);
}
void Factory_Menu_1()
{
BYTE i, EN[2], DIS[3];
if ( Menu_mode == 1 )
{
EN[0] = 0x0E;
EN[1] = 0x17;
DIS[0]= 0x54;
DIS[1]= 0x54;
DIS[2]= 0x59;
for (i=0; i<48; i++)
buf[i] = 0x59;
if ( Menu_mode == 1 )
{
if ( ColorEN&0x1 )
memcpy(&buf[0],EN,2);
else
memcpy(&buf[0],DIS,3);
if ( ColorEN&0x2 )
memcpy(&buf[6],EN,2);
else
memcpy(&buf[6],DIS,3);
if ( ColorEN&0x4 )
memcpy(&buf[12],EN,2);
else
memcpy(&buf[12],DIS,3);
if ( SoundEN&0x1 )
memcpy(&buf[18],EN,2);
else
memcpy(&buf[18],DIS,3);
if ( SoundEN&0x2 )
memcpy(&buf[24],EN,2);
else
memcpy(&buf[24],DIS,3);
if ( SoundEN&0x4 )
memcpy(&buf[30],EN,2);
else
memcpy(&buf[30],DIS,3);
if ( SoundEN&0x8 )
memcpy(&buf[36],EN,2);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -