Lcd_main.c
上传用户:xmyjxjd
上传日期:2013-05-04
资源大小:1517k
文件大小:11k
开发平台:

C/C++

  1. //echo note :
  2. //modify last date : 2004.07.16
  3. #define __MAIN__
  4. #include "reg52.h"
  5. #include "intrins.h"
  6. #include "HeaderMAIN_DEF.H"
  7. #include "HeaderCONFIG.H"
  8. #include "HeaderACCESS.H"
  9. #include "HeaderLCD_COEF.H"
  10. #include "HeaderLCD_FUNC.H"
  11. #include "HeaderLCD_AUTO.H"
  12. #include "HeaderLCD_MSG.H"
  13. #include "HeaderLCD_MAIN.H"
  14. #include "HeaderLCD_OSD.H"
  15. #include "HeaderFONT.H"
  16. #include "HeaderOSD.H"
  17. #include "HeaderINITIAL.H"
  18. #include "HeaderFRAME_SYNC.H"
  19. #include "HeaderSRC_CTRL.H"
  20. #include "HeaderDDC.H"
  21. #include "Headeruart.h"
  22. #include "HeaderDevOS.h"
  23. #include "HeaderKsv.h"
  24. #include "Headerrgb_echo.H"
  25. #include "HeaderMTV512.h"
  26. #if(BURNIN_MODE)
  27. void BurnIn()
  28. {
  29.   static unsigned char Color = 1;
  30.   static unsigned char ColorCounter = 100;
  31.   
  32.   unsigned char ucTemp;
  33.        if (ColorCounter)      
  34.       ColorCounter   -= 1;
  35.        else
  36.        {  
  37.            Color += 1;
  38.    if(Color == 17)
  39.         Color = 1;
  40.    ucTemp = 0x0d | (Color << 4);
  41. //    if (PANEL_ON == bPANEL_PWR)
  42.        if ( _ON == bPanel_Status)
  43.        {
  44.               Free_Background();
  45.               Wait_For_Event(EVENT_IEN_STOP);     // Wait for Frame End
  46.               RTDSetBit(OVL_CTRL_6D,0x3f,0x00); //Red
  47.               RTDSetByte(BGCOLOR_CONTROL_6C,BurnInColor[0][Color]);
  48. RTDSetBit(OVL_CTRL_6D,0x3f,0x40); //Green
  49.               RTDSetByte(BGCOLOR_CONTROL_6C,BurnInColor[1][Color]);
  50. RTDSetBit(OVL_CTRL_6D,0x3f,0x80); //Blue
  51.               RTDSetByte(BGCOLOR_CONTROL_6C,BurnInColor[2][Color]);
  52. RTDSetBit(VDIS_CTRL_20,0x5f,0x20 | DHS_MASK);
  53.    }
  54.            ColorCounter = 255;
  55.               
  56.        }     
  57. }
  58. #endif
  59. void Set_Task(unsigned char state)
  60. {
  61.     switch (state)
  62.     {
  63.     case STATE_POWERUP :
  64.     case STATE_SOURCECHANGE :
  65.         ucOSD_Page_Index    = 0;
  66.         ucOSD_Item_Index0   = 0;
  67.         ucOSD_Item_Index1   = 0;
  68.         ucOSD_Item_Index2   = 0;
  69.         b_rgb_VOLUME_STATUS = 0;
  70.         usTaskCnt   = BEGIN_SOURCECHANGE;
  71.         break;
  72.     case STATE_MODECHANGE :
  73. #if (RTDDEBUG == 0)
  74.         ucOSD_Page_Index    = 0;
  75.         ucOSD_Item_Index0   = 0;
  76.         ucOSD_Item_Index1   = 0;
  77.         ucOSD_Item_Index2   = 0;
  78.         b_rgb_VOLUME_STATUS = 0;
  79. #endif
  80.         if (BEGIN_MODECHANGE > usTaskCnt)   
  81.         {
  82.             usTaskCnt   = BEGIN_MODECHANGE;
  83.         }
  84.         break;
  85.     case STATE_POWERDOWN :
  86.         // In this code, we do nothing
  87.         break;
  88.     }
  89. }
  90. void Run_Task(void)
  91. {
  92.     // Task of each state :
  93.     // STATE0. (BEGIN_SOURCECHANGE > usTaskCnt >= BEGIN_MODECHANGE) 
  94.     //  - Show input source note text. Clear note text and go to State1 after 3sec or OSD window triggered.
  95.     // STATE1. (BEGIN_MODECHANGE > usTaskCnt >= BEGIN_SHOWHINT)
  96.     //  - Wait for input signal being stable for 2 sec. When input signal changed, 
  97.     //    Input Mode Detector will set task state to 1 if current task state is 2. After 2sec, hint text
  98.     //    will be shown if input isn't valid and no OSD window on screen and go to State2, else stay in STATE1.
  99.     // STATE2. (BEGIN_SHOWHINT > usTaskCnt >= 0)
  100.     //  - If OSD window is on screen, go to State1. Else if input isn't valid, show hint text for 5sec and 
  101.     //    then turn off panel.
  102.     if (usTaskCnt)      usTaskCnt   -= 1;
  103.     if (BEGIN_MODECHANGE <= usTaskCnt)
  104.     {
  105.         // STATE0 : (BEGIN_SOURCECHANGE > usTaskCnt >= BEGIN_MODECHANGE)
  106.         if (ucOSD_Page_Index)         
  107.         {
  108.             usTaskCnt   = BEGIN_MODECHANGE;
  109.         }
  110.     }
  111.     else if (BEGIN_SHOWHINT <= usTaskCnt)
  112.     {
  113.         // STATE1 : (BEGIN_MODECHANGE > usTaskCnt >= BEGIN_SHOWHINT)
  114.         if (BEGIN_SHOWHINT == usTaskCnt)
  115.         {
  116.             // Stay in STATE1 if input signal is valid or OSD window is on screen
  117.             if (ucOSD_Page_Index || (MODE_NOSUPPORT != ucMode_Curr && MODE_NOSIGNAL != ucMode_Curr && !bOverSpec))
  118.             {
  119.                 usTaskCnt   = BEGIN_SHOWHINT + OSD_TO_HINT_DELAY;
  120.             }
  121.         }
  122.     }
  123.     else
  124.     {
  125.         // Task State 2 : (BEGIN_SHOWHINT > usTaskCnt >= 0)
  126.         if (ucOSD_Page_Index)
  127.         {
  128.             usTaskCnt   = BEGIN_SHOWHINT + OSD_TO_HINT_DELAY;    // Go back to Task State 1
  129.         }
  130.         else if (0 == usTaskCnt)
  131.         {
  132.             usTaskCnt   = BEGIN_SHOWHINT - 1;   // Stay in Task State 2
  133.         }
  134.     }
  135. }
  136. void ISP_Check_Sum(void)
  137. {
  138. #if(ISPACK)
  139.     RTDSetByte(DDC_SET_SLAVE_F0,0x6a);
  140. #endif
  141. }
  142. #if(USE_MCU_DDC)
  143. void MCU_DDC_Process(void)
  144. {
  145.     unsigned char i,j;
  146. MCU_Init();
  147.     for(j=0;j<8;j++)
  148.     {
  149.          I2CRead(ADDR_EDID1, j*16, 16);
  150.          for( i = 0; i < 16; i++)
  151.           byMTV512_DDCRAMA[i+(j*16)] = Data[i];  // prepare DDC_RAM_1
  152.     } 
  153.     Delay_Xms(250);
  154.     Delay_Xms(250);
  155.     Delay_Xms(250);
  156.     Delay_Xms(250);
  157.     Delay_Xms(250);
  158.     MCU_Init();
  159.     Firmware_Init();
  160.     EDID_Process();
  161.     EnableDDC(); 
  162. }
  163. #endif
  164. void Signal_Stable(unsigned char Notify)
  165. {
  166.  // When input format changed, OSD will be cleared. OSD_Proc() can only runs when input signal is stable.
  167.             if (bStable)
  168.             {
  169.                 OSD_Dispatcher(Notify);
  170.                 if (MODE_OSDFORCE == ucMode_Curr)   // OSD force to reset
  171.                 {
  172.                     Reset_Mode();
  173.                     Set_Task(STATE_MODECHANGE);     // Notify Task State Machine
  174.                 }
  175.                 else
  176.                 {
  177.                     if (BEGIN_SHOWHINT <= usTaskCnt)
  178.                     {
  179. //                        if (PANEL_OFF == bPANEL_PWR)
  180.                         if( _OFF == bPanel_Status)
  181.                         {
  182.                             Set_Panel(1);   // Turn on panel
  183.                         }
  184.                         
  185.     //RTDCodeW(OSD_Enable);
  186.         //Set_Bright_Contrast();
  187. if(((ucMode_Curr == MODE_NOSUPPORT)||(ucMode_Curr == MODE_NOSIGNAL)))
  188.                              RTDSetBit(VDIS_CTRL_20, 0x5f, 0x20 | DHS_MASK);        // Normal display
  189. else
  190.      RTDSetBit(VDIS_CTRL_20, 0x5f, DHS_MASK);        // Normal display
  191.                         
  192. /*
  193. #if(BURNIN_MODE)
  194.                         if(((ucMode_Curr == MODE_NOSUPPORT)||(ucMode_Curr == MODE_NOSIGNAL)))
  195.                              RTDSetBit(VDIS_CTRL_20, 0x5f, 0x20 | DHS_MASK);        // Normal display
  196. else
  197.      RTDSetBit(VDIS_CTRL_20, 0x5f, DHS_MASK);        // Normal display
  198. #else
  199.                          RTDSetBit(VDIS_CTRL_20, 0x5f, DHS_MASK);        // Normal display
  200. #endif
  201. */
  202. #if(MCU_TYPE == MCU_WINBOND)
  203.                         bLIGHT_PWR  = LIGHT_ON;
  204. #else
  205.                         MCU_WriteBacklightPower(LIGHT_ON);
  206. #endif
  207. //New Mode Auto
  208. New_Mode_Auto(); //anson 05_0314
  209. #if(FIX_LAST_DHT)
  210.                         if(bFrameSync)
  211. {
  212. //    RTDSetBit(FX_LST_LEN_H_5A,0xff,0x10); //Enable the Fixed DVTOTAL & Last Line Lenghth Fucntion
  213. //    RTDSetByte(FX_LST_LEN_H_5A,0x1b); //Enable the Fixed DVTOTAL & Last Line Lenghth Fucntion
  214. }
  215.                          
  216. #endif
  217. #if(AS_DV_TOTAL)
  218.                         if(bFrameSync)
  219. {
  220.       RTDSetByte(DV_TOTAL_STATUS_3D,0x00);  //Write once to clear status
  221.                               RTDSetBit(DV_BKGD_STA_31,0x7f,0x80);
  222.      }
  223. #endif
  224.                     }
  225.                     else if ((1 == usTaskCnt && MODE_NOSIGNAL == ucMode_Curr)||
  226.                      (1 == usTaskCnt && MODE_NOSUPPORT == ucMode_Curr)) //anson
  227. //                    else if (1 == usTaskCnt && MODE_NOSIGNAL == ucMode_Curr)
  228.                     {
  229.                         //if (PANEL_ON == MCU_ReadPanelPower())
  230. if ( _ON == bPanel_Status)
  231.                         {
  232.                             Set_Panel(0);   // Turn off panel
  233.                             SetMute(0);
  234.                             // Set RTD3001 to power-saving mode, and ADC to power-down mode.
  235.                             // Do not power down TMDS or it can't detect input signal.
  236.                             // DO NOT put VDC and TMDS into power-down mode.
  237.                             // and VDC can not detect input when powered down.
  238.                             PowerDown_ADC();
  239.                             //Device_Power(ADC_POWER,OFF);
  240.                             RTDSetByte(HOSTCTRL_02, 0x42);
  241.                             
  242.                             Delay_Xms(250);
  243.                             Delay_Xms(250);
  244.                             Delay_Xms(250);
  245.                             Delay_Xms(250);
  246.                             Delay_Xms(250);
  247.                         }
  248.                     }
  249.                 }
  250.             }
  251. }
  252. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  253. // Main Program
  254. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  255. extern void UART_Initialize(void);
  256. void main(void)
  257. {
  258.     unsigned char idata     ucNotify;
  259. bRED_LED   = 1; //anson MTV512 1 = off 0 = on
  260. bGREEN_LED = 1; //     Tp2804 1 = on 0 = off
  261. #if(USE_MCU_DDC)
  262.     MCU_DDC_Process();
  263. #else
  264.    Firmware_Init();
  265. #endif
  266. #if(RS232_DEBUG)
  267. UART_Initialize();
  268. #endif
  269.     
  270. Power_Status_Init();
  271.     ISP_Check_Sum();
  272. #if(RS232_DEBUG)
  273. PutStringToScr("nMain Loop..");
  274. #endif
  275.     Delay_Xms(250);
  276.     Delay_Xms(250);
  277. //    Init_GUD();
  278. /*
  279. Delay_Xms(250);
  280.     Delay_Xms(250);
  281.     Delay_Xms(250);
  282. */    
  283. //    SetMute(1);//val = 1 open sound , val =0 close sound  //anson
  284.     RTDCodeW(OSD_Enable);
  285.     // Program Main Loop
  286.     while (1)
  287.     {
  288.         rgb_LED_LIGHT_CONTROL();
  289.         RTD_Test();
  290. #if (GETREGISTER)
  291.         RTD_Get_Set();
  292. #endif
  293.         if(Frame_Sync_Detector())
  294.    continue;
  295.         // The code below will be executed every 20ms (bNotify_Timer0_Int is set to 1)
  296.         // bNotify_Timer0_Int must and can only be cleared in the end of the iteration.
  297.         if (bNotify_Timer0_Int)
  298.         {   
  299. #if(RS232_DEBUG)
  300.         if(fTest==1)
  301. {
  302. fTest=0;
  303. DebugModeLoop();
  304. }
  305. #endif         
  306.             
  307.             // Key Translator 
  308.             ucNotify    = Key_Trans();
  309.             // Power Controller 
  310.             if(Power_Control(ucNotify))
  311.        continue;
  312.    
  313.             //Source Controller 
  314.             if(Source_Control())
  315.       continue;
  316.             // Input Mode Detector 
  317.             Input_Mode_Detector();
  318. #if(BURNIN_MODE)
  319. if(((ucMode_Curr == MODE_NOSUPPORT)||(ucMode_Curr == MODE_NOSIGNAL)) && bStable && ((stGUD3.TV_SETTING & 0x20) == 0x20)) //anson
  320. BurnIn();
  321. else if((MODE_NOSIGNAL != ucMode_Curr) && ((stGUD3.TV_SETTING & 0x20)==0x20 )) //anson
  322. {
  323. stGUD3.TV_SETTING &= 0xDF ;
  324. Save_GUD3();
  325. return;
  326. }
  327. else  
  328. #endif
  329.               Run_Task();
  330. Signal_Stable(ucNotify);
  331.         
  332.             bNotify_Timer0_Int  = 0;
  333.         }   
  334.         // End of main loop
  335.     }
  336. }