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

📄 main.c

📁 一个LCD TV的源程序, 用的是realtek的IC
💻 C
字号:
/*********************************************************************

      COPYRIGHT  (C)  Himax Technologies, Inc.

      File name     : main.c

      Description   : Main Programm

      Author        : Taylor

      Create date   : 2005/06/10

      Modifications :
*********************************************************************/

#define _MAIN_C

/********************** Include Section *****************************/

#include "main.h"
#include "mcu_io.h"
#include "i2c_control.h"
#include "common.h"
#include "hx8824.h"
#include "rs232.h"
#include "Key.h"
#include "OSD.h"

idata unsigned char Osd_Status, Item, bOSDPOS, bVideo, Mode, b60hz, bBurnInMode,
                    bVideo_Status, Status_Change, New_Status = 0x02, Old_Status,bDithering,
                    bPanel_Change, Panel_Type, bVGA, bSwitchInput, border_flag,
                    bVGA_Status = 0x01, bSource, pre_status = 0x00, now_status = 0x02, TV_Mode, Channel,
                    bNo_Signal, logo_fg, Pre_Channel;
idata unsigned char timer_cnt = 100;
idata unsigned int ParaAddress;


void Initial_Parameters(void);

/********************* Main Program Section *************************/
void main(void)
{
    Byte Bypass = 0, temp;
    if(Bypass)  // Bypass for compile warning 2004/8/26 05:30pm
    {
        Init_OSD();
        //OsdSetPallete();
        I2CWrtCNByte(0x0,0x0,0x0,0x0);
        HexTobyStr(0x0);
        temp = ReadWord();
        temp = Get_UART();
        Init_HX8824();
        Init_SAA7111();
        Init_SAA7114();
        DelayX10ms(1);
        Select_Video_Input(0x0);
        Contrast_Adj(0);
        Print_String(2, 2, 0x00, 0x07, "ABCDEFGH");
        test();
        Switch_Input(0);
        Initial_Tuner();
        Set_Channel(0);
        Auto_Scan();  	  
	Initial_Parameters();
    }

	sInitSys();    // Initial System

    while(1)
    {
        Get_Key();
        Key_Proc();
        //Signal_Detect();
    }
}

/******************* Main Relative Function Implement *****************/
/* -------------------------------------------------------------------
  Name    : sInitSys
  Purpose : Initial system
  Passed  :
  Returns :
  Notes   :
  ------------------------------------------------------------------- */
void sInitSys(void)
{
    LED1 = 0;
	LED2 = 1;
    BL_CTRL = 1;   // turn back light ON; 1: for old inverter/ 0: for new inverter
    ResetN = 0;    // HX8824 Reset Active Low

    DelayX1ms(5);  // Delay A While

    ResetN = 1;    // PA8824 Reset OK

    P1 = 0x9F;     // input pin setting
    LEDG = 1;      // turn on green LED
    LEDR = 0;

    S1 = 0;        //  switch to CCIR
    S2 = 1;

    //S1 = 1;      //  switch to VGA
    //S2 = 0;
    Osd_Status = Item = bBurnInMode = Second = bVGA = border_flag = bNo_Signal = logo_fg = 0;
    Status_Change = bVideo = Panel_Type = bDithering = 1;
	Mode = 0;
    
    Init_UART();   // Initial UART, Timer 1 was used

    EX0	= 1;       // int0 interrupt enable

    IT0 = 1;       // set INT0 : falling edge trigger, remote controller

    EA = 1;        // Enable interrupt ALL

    Init_I2C();    // Initial I2C Bus
    //Puts_UART("[1]MPC Reset OK!\r\n");  // Intialization MPU
    DelayX1ms(5);  // Delay A While

#if EEPROM 
	Check_EEPROM();	  // check if new EEPROM   
#endif	  

	DelayX1ms(5);
    Init_PLL();    // Initial PLL
    DelayX1ms(5);  // Delay A While
    //Init_SAA7111();
    Init_SAA7114();
	DelayX1ms(5);
    Init_HX8824();  //Initial HX8824
    DelayX1ms(5);
    Init_OSD();
    DelayX1ms(5);
    Gamma_Adj();
    DelayX1ms(5);
    DelayX1ms(5); 
#if TV
    //TV_Mode = TV_AIR;
    TV_Mode = CATV_STD;
    //Channel = 0;
    Initial_Tuner();
    DelayX1ms(5);
    Set_Channel(Channel);
#endif	
#if EEPROM 
    Initial_Parameters();
#endif	  
    Puts_UART("Initial OK!\r\n");
    BL_CTRL = 0;   // turn back light ON; 1: for old inverter/ 0: for new inverter	  
    LED1 = 1;
    LED2 = 0;
//           for pattern gen
    Get_Key();
	if(bBurnInMode == 1)
	{
       	Stand_alone_mode();
       	LEDG = 0;
       	LEDR = 1;
//     	I2CWriteByte(HX8824_ADDR, 0x80, 0x00);    // for 1st version CF design error,
       	I2CWriteByte(HX8824_ADDR, HX8824_TEST_PATTERN, 0x40);
      	Puts_UART("BurnInMode in initial\r\n");
	}
}
/* -------------------------------------------------------------------
  Name    : Signal_Detect
  Purpose : Detect the video & VGA signal
  Passed  :
  Returns :
  Notes   :
  ------------------------------------------------------------------- */
void Signal_Detect()
{
    if(bVideo)
    {
        //Puts_UART("enter if(bVideo)!\r\n");
        Video_Detect();          // detect if video signal exist?
        if(bVideo_Status)
        {
            //Puts_UART("bVideo_Status = 1!\r\n");
            if(Status_Change || bPanel_Change)      //if(Status_Change)
            {
                //Puts_UART("Status Change!\r\n");
                //Puts_UART("Panel Change!\r\n");
                switch (b60hz)
                {
                    case 0:            //  PAL
                        if(Panel_Type == 0x0) // 800x600 panel
                        {
                            Mode = 8;
//                            I2CWriteByte(HX8824_ADDR, 0x81, 0x3C);
//                            I2CWriteByte(HX8824_ADDR, 0x80, 0x02);
                        }
                        else if(Panel_Type == 0x01)  // 800x480 panel
                            Mode = 9;
                        else if(Panel_Type == 0x02)  // 640x480 panel
                            Mode = 10;
                        else if(Panel_Type == 0x03)  // 620x240 panel
                            Mode = 11;
                        //Puts_UART("PAL!\r\n");
//                        I2CWriteByte(HX8824_ADDR, 0x80, 0x09);    // for 1st version CF design error,
                    break;
                    case 1:          // NTSC
                        if(Panel_Type == 0x0) // 800x600 panel
                            Mode = 4;
                        else if(Panel_Type == 0x01) // 800x480 panel
                            Mode = 5;
                        else if(Panel_Type == 0x02)  // 640x480 panel
                            Mode = 6;
                        else if(Panel_Type == 0x03)  // 320x240 panel
                            Mode = 7;
                        //Puts_UART("NTSC!\r\n");
//                        I2CWriteByte(HX8824_ADDR, 0x80, 0x00);    // for 1st version CF design error,
                    break;
                    default:
                    break;
                }
                Change_Video_Frequency();  // set SAA7114
                Display();
                BlueScreen_OFF();
                OSD_OFF();
                Item = 0;
                Osd_Status = 0;    // 1: OSD_ON ; 0: OSD_OFF
                //OsdDrawing();
                //Puts_UART("OSD OFF!\r\n");
                //Puts_UART("Video Normal Display!\r\n");
            }
            bPanel_Change = 0;
            //Puts_UART("bPanel_change = 0!\r\n");
//            Status_Change = 0;
        }
        else
        {
            if(Status_Change || bPanel_Change)      //if(Status_Change)
            {
            	if(bSource < 0x03)
            	{
//          		New_Status = 0x02;
            		//Puts_UART("No Video!\r\n");
            		No_Signal();
            		//Puts_UART("OSD ON!\r\n");
            		//Puts_UART("No Video Signal!\r\n");
            	}
            	else
            	{
                	OSD_OFF();
                	Item = 0;
                	Osd_Status = 0;    // 1: OSD_ON ; 0: OSD_OFF
                	//OsdDrawing();
            	}
            }
        }
    }
    else if(bVGA)
    {
        //Puts_UART("enter if(bVGA)!\r\n");
        VGA_Detect();
        if(bVGA_Status)
        {
            //Puts_UART("bVGA status!\r\n");
            if(bPanel_Change  || Status_Change)
            {
                Puts_UART("VGA status change!\r\n");
                if(Panel_Type == 0x0)
                    Mode = 0x0;
                if(Panel_Type == 0x01)
                    Mode = 0x01;
                if(Panel_Type == 0x02)
                    Mode = 0x02;
                if(Panel_Type == 0x03)
                    Mode = 0x03;
                BlueScreen_OFF();
                Display();
                OSD_OFF();
                Item = 0;
                Osd_Status = 0;    // 1: OSD_ON ; 0: OSD_OFF
                //OsdDrawing();
                //OSD_OFF();
                //Osd_Status = 0;    // 1: OSD_ON ; 0: OSD_OFF
                Puts_UART("VGA Normal Display!\r\n");
            }
            bPanel_Change = 0;
        }
        else
        {
            if(bPanel_Change  || Status_Change)
            {
            	//Puts_UART("No VGA!\r\n");
            	No_Signal();
            	//Puts_UART("OSD ON!\r\n");
            	Puts_UART("No VGA Signal!\r\n");
            }
        }
//        bPanel_Change = 0;
//        Status_Change = 0;
    }

}

/* -------------------------------------------------------------------
  Name    : Initial_Parameters
  Purpose : read parameter from EEPROM and write them to other IC
  Passed  :
  Returns :
  Notes   :
  ------------------------------------------------------------------- */

void Initial_Parameters(void)
{

  //---Check wrong eeprom for MCU---//
  /*
  if((EE_MCU_Byte_Read(EE_BURN1)!=EEPROM[EE_BURN1/16][EE_BURN1%16])||
     (EE_MCU_Byte_Read(EE_BURN2)!=EEPROM[EE_BURN2/16][EE_BURN2%16])||
     (EE_MCU_Byte_Read(EE_BURN3)!=EEPROM[EE_BURN3/16][EE_BURN3%16])) {
    Burning_EEPROM();
    }
  */

  //-----System-----//
  //Byte I2CReadByte(Byte device, Byte subaddress)
/*  
  bSource = I2CReadByte(EEPROM_MCU | ((EE_SOURCE/256)*2), (EE_SOURCE%256));
  Switch_Input(bSource);                                                             // switch to input source last time saved in EEPROM
*/
  //Language=I2CReadByte((EEPROM_MCU | (EE_LANGUAGE/256)*2), (EE_LANGUAGE%256));

  //-----Audio-----//
  //Volume=I2CReadByte((EEPROM_MCU | (EE_VOLUME/256)*2), (EE_VOLUME%256));
  //Treble=I2CReadByte((EEPROM_MCU | (EE_TREBLE/256)*2), (EE_TREBLE%256));
  //Bass=I2CReadByte((EEPROM_MCU | (EE_BASS/256)*2), (EE_BASS%256));
  //Balance=I2CReadByte((EEPROM_MCU | (EE_BALANCE/256)*2), (EE_BALANCE%256));
  //Mute=I2CReadByte((EEPROM_MCU | (EE_MUTE/256)*2), (EE_MUTE%256));

  //-----TV-----//
  //TV_Mode=I2CReadByte((EEPROM_MCU | (EE_TV_MODE/256)*2), (EE_TV_MODE%256));
  Channel = I2CReadByte(EEPROM_MCU | ((Channel_EEPROM_Address()/256)*2), Channel_EEPROM_Address());
  //Puts_UART("Read from EEPROM device addr ");HexTobyStr(EEPROM_MCU | (Channel_EEPROM_Address()/256)*2);Puts_UART(byStr);Puts_UART("\r\n");
  //Puts_UART("Read from EEPROM address");HexTobyStr(Channel_EEPROM_Address());Puts_UART(byStr);Puts_UART("\r\n");
  //Puts_UART("Read from EEPROM value");HexTobyStr(Channel);Puts_UART(byStr);Puts_UART("\r\n");

  //-----OSD-----//
  //OSD_HPosition=I2CReadByte((EEPROM_MCU | (EE_OSD_HPOS/256)*2), (EE_OSD_HPOS%256));
  //OSD_VPosition=I2CReadByte((EEPROM_MCU | (EE_OSD_VPOS/256)*2), (EE_OSD_VPOS%256));

  //----VIDEO---//

  I2CWriteByte(HX8824_ADDR, HX8824_BRIGHTNESS, I2CReadByte(EEPROM_MCU | (((ParaAddress + EE_BRIGHTNESS)/256)*2), (ParaAddress + EE_BRIGHTNESS)));
  I2CWriteByte(HX8824_ADDR, HX8824_CONTRAST, I2CReadByte(EEPROM_MCU | (((ParaAddress + EE_CONTRAST)/256)*2), (ParaAddress + EE_CONTRAST)));

  //Puts_UART("Read from EEPROM device addr ");HexTobyStr(EEPROM_MCU | (((ParaAddress + EE_SHARPNESS)/256)*2));Puts_UART(byStr);Puts_UART("\r\n");
  //Puts_UART("Read from EEPROM address");HexTobyStr(ParaAddress + EE_SHARPNESS);Puts_UART(byStr);Puts_UART("\r\n");
  //Puts_UART("Read from EEPROM value");HexTobyStr(I2CReadByte(EEPROM_MCU | (((ParaAddress + EE_SHARPNESS)/256)*2), (ParaAddress + EE_SHARPNESS)));Puts_UART(byStr);Puts_UART("\r\n");
  //Puts_UART("Read from EEPROM value");HexTobyStr(temp);Puts_UART(byStr);Puts_UART("\r\n");
  I2CWriteByte(HX8824_ADDR, HX8824_SHARPNESS, I2CReadByte(EEPROM_MCU | (((ParaAddress + EE_SHARPNESS)/256)*2), (ParaAddress + EE_SHARPNESS)));
  //Puts_UART("Write to HX8824 device addr ");HexTobyStr(HX8824_ADDR);Puts_UART(byStr);Puts_UART("\r\n");
  //Puts_UART("Write to HX8824 address");HexTobyStr(HX8824_SHARPNESS);Puts_UART(byStr);Puts_UART("\r\n");
  //Puts_UART("Write to HX8824 value");HexTobyStr(I2CReadByte(EEPROM_MCU | (((ParaAddress + EE_SHARPNESS)/256)*2), (ParaAddress + EE_SHARPNESS)));Puts_UART(byStr);Puts_UART("\r\n");
  I2CWriteByte(HX8824_ADDR, HX8824_SATSINHUE, I2CReadByte(EEPROM_MCU | (((ParaAddress + EE_SAT_SIN_HUE)/256)*2), (ParaAddress + EE_SAT_SIN_HUE)));
  I2CWriteByte(HX8824_ADDR, HX8824_SATSINHUE + 1, I2CReadByte(EEPROM_MCU | (((ParaAddress + EE_SAT_SIN_HUE)/256)*2), (ParaAddress + EE_SAT_SIN_HUE + 1)));
  I2CWriteByte(HX8824_ADDR, HX8824_SATCOSHUE, I2CReadByte(EEPROM_MCU | (((ParaAddress + EE_SAT_COS_HUE)/256)*2), (ParaAddress + EE_SAT_COS_HUE)));
  I2CWriteByte(HX8824_ADDR, HX8824_SATCOSHUE + 1, I2CReadByte(EEPROM_MCU | (((ParaAddress + EE_SAT_COS_HUE)/256)*2), (ParaAddress + EE_SAT_COS_HUE + 1)));
}

⌨️ 快捷键说明

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