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

C/C++

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