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

📄 power.c

📁 非常好的电源管理和按键处理
💻 C
📖 第 1 页 / 共 2 页
字号:
            if(Power_Timer>4)
            {
                Power_Timer=0;
                nPowerState=SWITCH_ON_DELAY1;
                ResetT100a();
                TFT_I2Cm_Reset_xn();
                SystemPowerUp();
                DimOnInit=0;
                //Iris=0;
            }
          #endif

          #if ResetJudge==ResetJudgeOld
            if(Power_Timer>1)
            {
                Power_Timer=0;
                nPowerState=SWITCH_ON_DELAY1;
                SystemPowerUp();
                break;
            }

            if(Power_Timer<=1)
            {
                CCFL_Power(false);
                ResetT100a();
                TFT_I2Cm_Reset_xn();
                DimOnInit=0;
                I2Cm_Init();
            }

            if(Power_Timer==1)
            if(Val_Initialize()==0)
            {
                RegD8=5;//debug;
                LoadFunSetting();//Must be called before LoadSetting();
                Set_Initialize();
                if(ValBit(Sys_Flag,F_StatusRAM)) //校验正确,是外部复位。MCU已经跑起来了
                {
                    SaveStatus();
                }
                else        //校验错误,MCU把RAM清零了。说明是上电复位
                {
                    LoadStatus();
                }
                ClrBit(Sys_Flag,F_StatusRAM);

                if(ValBit(Sys_Flag,F_External_Reset))//add_navy
                {
                    DefaultSetting(SETTING_DATA_NUMBER);
                    ClrBit(Sys_Flag,F_External_Reset);
                }
                else
                {
                    RegD8=6;//debug;
                    LoadSetting();
                    Send_Power_Off();
                    CheckPowerOff(MSG_POWER_OFF);//power off!
                }
                RegD9=Setting_Flag;//debug;
            }
            SaveSetting();
          #endif


            break;
        case SWITCH_ON_DELAY1:
            ResetT100a();
            TFT_I2Cm_Reset_xn();
            if(Power_Timer>=5)
            {
                Power_Timer=0;
                nPowerState=INITIAL_STEP1;
            }
            break;
        case INITIAL_STEP1:
            if(Power_Timer>=5)
            {
                Power_Timer=0;
                nPowerState=INITIAL_STEP2;
                I2Cm_Init();
            }
            break;
        case INITIAL_STEP2:

            ReleaseT100aReset();

            Power_Timer=0;
            nPowerState=INITIAL_STEP3;
            //因为从System_Power_UP到设置F_MachineState间隔一段时间
            //有可能TimerA被Disable,因此需要再次打开。
            Enable_TimerA();
            Enable_TimerB();

            IrTxStage=IrIdle;
            TotalIrBytes=0;

          #if ResetJudge==ResetJudgeNew
            RegD8=0;//debug;
            if(Val_Initialize()==0)
            {
                LoadFunSetting();//Must be called before LoadSetting();
                Set_Initialize();

                RegD9=0xaa;//debug;

                if(ManualResetCheck()!=ResetCheckSum)//power on
                {
                    LoadSetting();
                    RegD8=1;//debug;
                }
                else
                if(ValBit(SICSR,LVDRF)==0&&ValBit(SICSR,WDGRF)==0)//reset
                {
                    DefaultSetting(SETTING_DATA_NUMBER);
                    RegD8=2;//debug;
                }
                #if D_STARTUP_POWER_OFF
                #else
                if(!ValBit(Setting_Flag,F_On_Off))
                #endif
                {
                    Send_Power_Off();
                    CheckPowerOff(MSG_POWER_OFF);//power off!
                }
            }
            SaveSetting();
          #endif

            break;//

        case INITIAL_STEP3:

            if(Power_Timer>=2)
            {
                Power_Timer=0;
                T100I2CWriteByte(TW100, 0xC2, T100I2CReadByte(TW100, 0xC2)|0x12);//avoid ghost shape;
                TFT_Device_Init();

              #if POWER_ON_LOGO==0
                Source_Select(gobal_user_para.source);
              #endif

                SetBlueScreen();//enable full blue screen;
                Lcd_Mode_Select(gobal_user_para.lcd_mode);
                Lcd_Mirror_Select(gobal_user_para.mirror);

                OSDInit();

              #if POWER_ON_LOGO==0
                SetAutoBlueScreen();
              #endif

                nPowerState=INITIAL_STEP4;
                ClrBit(Setting_Flag,F_Audio_Mute);

              #if POWER_ON_LOGO==0
                DetectVideoExsit();
                AVSelectTimer=0;
              #endif
            }
            //Printf_Debug(0,1,Video_Format_mem);//debug;
              /*#if COM_WITH_DVBT==1
                if(IrTxStage==IrIdle&&TotalIrBytes==0)
                    DvbtPower(1);
              #endif
              */
            break;

        case INITIAL_STEP4:

            #if COM_WITH_DVBT==1
              if(IrTxStage==IrIdle&&TotalIrBytes==0)
                  DvbtPower(1);
            #endif

#define Delay1  1//50

          #if POWER_ON_LOGO==0
            DetectVideoExsit();
          #endif

#define CcflSlowUp  1

            //060603.{{{{{//逐渐加大亮度,避免黑屏;
            if(Power_Timer==Delay1)
            {
              #if CcflSlowUp!=0
                PwmAdjust(Power_Timer-Delay1);
              #else
                PwmAdjust(nBright);
              #endif

                PowerOffSource=POWER_ON;
              #if POWER_ON_LOGO==0
                DisplayAvInStr();
              #else
                DisplayPowerOnLogo(PowerOnLogoData);
              #endif
            }

            if(Power_Timer==Delay1+5)
                CCFL_Power(true);

            if(Power_Timer>Delay1&&nAutoDimmer_Flag==0)
            {
              #if CcflSlowUp!=0
                if((Power_Timer-Delay1)/3<=nBright)
                    PwmAdjust((int8u)((Power_Timer-Delay1)/3));
                //if( Div((Power_Timer-Delay1),3) <=nBright)//
                  //  PwmAdjust( Div((Power_Timer-Delay1),3) );
              #else
                PwmAdjust(nBright);
              #endif
            }


          #if POWER_ON_LOGO==0
            if(Power_Timer>=Delay1+90-10)
                Adject_Volume(gobal_user_para.volume);

            if(Power_Timer>=Delay1+90)
          #else

            if(Power_Timer>=250-10)
                Adject_Volume(gobal_user_para.volume);

            if(Power_Timer>=250)
          #endif
            {
                Power_Timer=0;
                nPowerState=SYSTEM_RUN;

              #if POWER_ON_LOGO!=0
                CCFL_Power(false);
                Source_Select(gobal_user_para.source);
              #endif

              #if GAMMA_DEBUG==1||BLACK_LEVEL_DEBUG==1
                RegD8=RegD9=0;//debug;
              #endif

                //if(0==ValBit(Setting_Flag,F_Audio_Mute))
                if(nVolume!=0) Mute_Audio_Clr;
                Adject_Volume(gobal_user_para.volume);

            }
            //060603.}}}}}//逐渐加大亮度,避免黑屏;

          #if SOFT_MUTE!=0
            /*逐渐加大音量会有扑扑声音
            //if(0==ValBit(Setting_Flag,F_Audio_Mute))
            {
                //Mute_Audio_Clr;
                if(Power_Timer>Delay1&&((Power_Timer&0x01)==0))
                {
                    if(Power_Timer-Delay1<=gobal_user_para.volume/VOL_INX)
                        Adject_Volume((Power_Timer-Delay1)*VOL_INX);
                    else
                        Adject_Volume(gobal_user_para.volume);
                }
            }*/
          #endif

#undef Delay1

            break;

        case SYSTEM_RUN:
            //Printf_Debug(0,3,RegD9);//debug;
            //Printf_Debug(0,6,Setting_Flag);//debug;

          #if COM_WITH_DVBT==1

            if(gobal_user_para.source==0 && 0==ValBit(Video_Flag,F_SysAvIn))//av1
            {
                  if(IrTxStage==IrIdle&&TotalIrBytes==0)
                  DvbtPower(1);
            }/*
            else
            {
                  if(Power_Timer==250)
                  {Power_Timer=0;
                  if(IrTxStage==IrIdle&&TotalIrBytes==0)
                  DvbtPower(0);
                  }
            }*/
          #endif

          #if POWER_ON_LOGO!=0
            if(Power_Timer<50)
                break;
            if(Power_Timer==50)
            {
                Power_Timer=60;
                OSDInit();
                SetAutoBlueScreen();//070227.
                CCFL_Power(true);
            }
            if(Power_Timer==60)
                Power_Timer--;
          #endif

            Set_Machine_Power();
            CheckPowerOff(nMsg.ID);

            break;

        case POWER_OFF:

          #if COM_WITH_DVBT==1

            /*if(Power_Timer>=200)
            {
                MCU_IO_Refresh();
                M5V_SW(false);
                Power_Timer=200;
            }*/
            /*
            if(CheckPowerOn(nMsg.ID))
            {
                MCU_IO_Init();//061017.
                MCCSR=0B00000010;//  Fcpu=Fosc2
                break;
            }*/

            if(Power_Timer<50)
            {
                if(Power_Timer==1)
                {
                    IrTxStage=IrIdle;
                    TotalIrBytes=0;
                }

                if(IrTxStage==IrIdle&&TotalIrBytes==0)
                    DvbtPower(0);
            }
            /*
            DetectVideoExsit();
            if(ValBit(Video_Flag,F_SysAvIn)&&Power_Timer<=50)
                break;
            else
                Power_Timer=1;
            */

          #endif


            Clr_Machine_Power();
            if(Power_Timer==1)//in order not to leave shadow on screen after power down.
            {
                OSDDisnable();
                CCFL_Power(false);
                T100I2CWriteByte(TW100,0x18,0x3f);//Switch Analog Source to NC pin
                //T100I2CWriteByte(TW100+4,0x00,0x01);//Switch Analog Source Mux to YUV
                T100I2CWriteByte(TW100,0xC2,0x12);//0213.avoid ghost shape;
                //T100I2CWriteByte(TW100+4,0x07,0x14);//enable full blue screen;
            }

            /*if(Power_Timer==3)
            {
                //T100I2CWriteByte(TW100+4,0x3f,0x01);//disnable comb filter.
                ResetT100a();//in order to avoid image shape stays on screen after power off.
            }*/

          #if SOFT_MUTE!=0
            if(Power_Timer<22)
            {
                if(Power_Timer/3<=7)
                //if( Div(Power_Timer,3) <=7 )//
                {
                    if(Power_Timer%3==0)
                    //if(Mod(Power_Timer,3)==0)
                    {
                        Adject_Volume(gobal_user_para.volume/8*(8-Power_Timer/3));
                        //Adject_Volume( (gobal_user_para.volume>>3)*(8-Div(Power_Timer,3)));//
                    }
                }
            }
          #endif

            if(Power_Timer==23)
            {
                //ReleaseT100aReset();
                Adject_Volume(0);
                Mute_Audio_Set;
                ResetT100a();//in order to avoid image shape stays on screen after power off.
            }
            if(Power_Timer==30)
            {
                MCU_IO_Refresh();
                M5V_SW(false);
                //Mute_Audio_Clr;//061016.In order to degrade standby current;38mA->15mA
            }

            if(Power_Timer==49)
            {
                Mute_Audio_Clr;//061016.In order to degrade standby current;38mA->15mA
            }

          #if ResetJudge==ResetJudgeNew
            if(ManualResetCheck()!=ResetCheckSum)//061106.power on or reset.
            {
                CheckPowerOn(nMsg.ID);
                break;
            }
          #endif

            if(Power_Timer>=50)
            {
                Power_Timer=50;
                //Disable_TimerA();               //070108.
                Disable_TimerB();               //070108.
                SetBit(Sys_Flag,F_SystemWait);  //070108.

                #if 0 //#if D_ADD_ACC_DETECT
                if(ValBit(Det_Flag,F_ACC_Det)!=0 && nCloseACCTimer!=0)
                {
                    Send_Power_On();
                    nMsg.ID = MSG_POWER_ON;//power on!
                }
                #endif

                if(CheckPowerOn(nMsg.ID))
                {
                    MCU_IO_Init();//061017.
                    //MCU_IO_Refresh();//061017.
                    MCCSR=0B00000010;//  Fcpu=Fosc2

                    //disable ei0;
                    //ISPR0=  (LEVEL_3<<6)  +  (LEVEL_3<<4)  +  (LEVEL_1<<2)  +  LEVEL_3  ;
                    break;
                }

                if(PowerOffSource==KEY_POWER_OFF)
                {
                    Reset_IO();

                    MCCSR=0B01110010;//  Fcpu=Fosc2/16
                    asm_wait();

                    //enable ei0;
                    //ISPR0=  (LEVEL_3<<6)  +  (LEVEL_1<<4)  +  (LEVEL_1<<2)  +  LEVEL_3  ;
                    //MCCSR=0B00000000;
                    //asm halt;

                    break;
                }
                /*if(CheckPowerOn(nMsg.ID))
                {
                    PowerOffSource=POWER_STANDBY;
                    break;
                }*/
            }
          #if COM_WITH_DVBT==1
            /*else
            {
                if(Power_Timer==1)
                {
                    IrTxStage=IrIdle;
                    TotalIrBytes=0;
                }
                if(IrTxStage==IrIdle&&TotalIrBytes==0)
                    DvbtPower(0);
            }*/
          #endif

            break;

        default:
            EnterPowerOff();
            break;
    }
    return;
}

⌨️ 快捷键说明

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