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

📄 power.c

📁 一个ST7系列的车载dvd系统源代码
💻 C
字号:
/*********************************************************
	Project:		ST FST(TDA7540)
	File name:	power.c
	Description:	
	Write/Modify:	Perry Liang
	Time:		2006-1-24- 15:35:12
*********************************************************/

#include "public.h"

/*********************************************
	Function:		AccCheck
	Description:	
	Write/Modify:	Perry.Liang
	Time:		2006-1-24- 15:39:37
*********************************************/
void AccCheck(void)
{
	switch (AccState)
	{
		case ACC_OFF:
			if (Pin_ACC)
			{
				AccDelay = 100;		// 1s
				AccState = ACC_ONTEST;
				//AudioMute(HARDON);
			}
			break;
		
		case ACC_ONTEST:
			if (!Pin_ACC)
			{
				AccState = ACC_OFF; 
				//AudioMute(HARDOFF);
			}
			else
			{
				if (AccDelay != 0)break;
				AccState = ACC_ON;
				System.AccMode=ACCMODE_ACCONREQ;
			}
			break;
		case ACC_ON:
			if (!Pin_ACC)
			{
				AccDelay = 5;			//50ms
				AccState = ACC_OFFTEST;
			}
			break;
		
		case ACC_OFFTEST:
			if (Pin_ACC)
			{
				AccState = ACC_ON;
			}
			else
			{
				if (AccDelay != 0)break;
				AccState = ACC_OFF;
				System.AccMode=ACCMODE_ACCOFFREQ;
			}			
			break;
	}
}


/*********************************************
	Function:		AccMain
	Description:	
	Write/Modify:	Perry.Liang
	Time:		2006-1-24- 15:39:39
*********************************************/
void AccMain(void)
{
	AccProc();	
	AccDisp();

}
void AccDisp(void)
{
	/*if((System.AccMode==ACCMODE_ACCONINIT||System.AccMode==ACCMODE_ACCOFFINIT)&&AccWaitTimer==0)
	{
		if(AniCounter<1&&System.PowerMode==POWERMODE_POWEROFF)
		{
			Animation(ANIMATION_RUN);
			Clock_display=0;
		}
		else 
		{
			Animation(ANIMATION_STOP);
			Clock_display=1;
		}
	}*/
}

void AccProc(void)
{
	unsigned char i;
	switch(System.AccMode)
	{
		case ACCMODE_ACCON:
			break;
		case ACCMODE_ACCONREQ:
			Pin_POWER=1;
			Pin_LCDINH=1;
			Wait1ms(100);
			ADCCSR|=y00100000;	/* A/D Convert Enable */
			CDPowerOn();
			Animation(ANIMATION_START, "        WELCOME        ",1);
			AccWaitTimer=8;
			System.AccMode=ACCMODE_ACCONINIT;
			break;
			
		case ACCMODE_ACCONINIT:
			if(AccWaitTimer>0)break;
			if(AniCounter==0&&F_DispAnimation==1)break;
			else Animation(ANIMATION_STOP);
			if(System.PowerMode==POWERMODE_POWERON)
			{
				Enable_RDS_Int();
				AudioCalc(AUDIO_ALL_VAL);
				AudioSend(AUDIO_AREA_ALL);
				ChangeFWorkmode(System.FWorkMode.Save);
				AudioMute(HARDOFF);
				ResetIconBuffer();
			}
			else
			{
				AudioMute(HARDON);
			}
			AccWaitTimer=5;
			System.AccMode=ACCMODE_ACCONWAIT;
			break;
			
		case ACCMODE_ACCONWAIT:
			if(AccWaitTimer>0)break;
			System.AccMode=ACCMODE_ACCON;
			break;

		case ACCMODE_ACCOFF:
           		if(WakeUpTimer==0 )
           		{
				Pin_LCDINH=0;
				#ifdef MCU8_664M
				TACR1 = 0;// Timer1 Output Compare Int Disable */
           			asm WFI;
           			TACR1 = 0x40;// Timer1 Output Compare Int Enable */
           			#else
           			asm HALT;
           			#endif
           		}
           		if(Pin_ACC)   /*  ACC ON */
           		{
           			WakeUpTimer=50;
           		}
			break;


		case ACCMODE_ACCOFFREQ:
			if (F_MuteKey)
			{
				F_MuteKey=0;
				AudioMute(SOFTOFF);
			}
			CDPowerOff();
			Disable_RDS_Int();
			if(System.PowerMode==POWERMODE_POWERON)
			{
				System.FWorkMode.Save=System.FWorkMode.Current;
				ChangeFWorkmode(WORKMODE_STANDBY);
				BackupIconBuffer();
			}
			AudioMute(HARDON);
			ADCCSR&=y11011111;	//A/D Convert Disable */
			Animation(ANIMATION_START, "        SEE YOU       ",1);
			System.AccMode=ACCMODE_ACCOFFINIT;
			AccWaitTimer=10;
			break;

		case ACCMODE_ACCOFFINIT:
			if(AccWaitTimer>0)break;
			if(AniCounter==0&&F_DispAnimation==1)break;
			else Animation(ANIMATION_STOP);
			Pin_LCDINH=0;
			Pin_POWER=0;
			AccWaitTimer=2;
			System.AccMode=ACCMODE_ACCOFFWAIT;
			break;

		case ACCMODE_ACCOFFWAIT:
			if(AccWaitTimer>0)break;
    			System.AccMode=ACCMODE_ACCOFF;
			break;
		
	}
	
}

/*********************************************
	Function:		PowerMain
	Description:	
	Write/Modify:	Perry.Liang
	Time:		2006-1-24- 15:39:41
*********************************************/
void PowerMain(void)
{
	PowerDisp();
	PowerProc();
}
void PowerDisp(void)
{

}

void PowerProc(void)
{
	switch(System.PowerMode)
	{
		case POWERMODE_POWERON:
			break;
			
		case POWERMODE_POWERONREQ:
			Enable_RDS_Int();
			AudioCalc(AUDIO_ALL_VAL);
			AudioSend(AUDIO_AREA_ALL);
			ChangeFWorkmode(System.FWorkMode.Save);
			ResetIconBuffer();
			Animation(ANIMATION_STOP);
			//accordo_initial();
			PowerWaitTimer=5;
			System.PowerMode=POWERMODE_POWERONWAIT;
			break;
			
		case POWERMODE_POWERONWAIT:
			if(PowerWaitTimer>0)break;
			AudioMute(HARDOFF);
			System.PowerMode=POWERMODE_POWERON;
			break;

		case POWERMODE_POWEROFF:
			break;
			
		case POWERMODE_POWEROFFREQ:
			if (F_MuteKey)
			{
				F_MuteKey=0;
				AudioMute(SOFTOFF);
			}
			Disable_RDS_Int();
			Animation(ANIMATION_STOP);
			if(System.FWorkMode.Current!=WORKMODE_STANDBY)
			{
				System.FWorkMode.Save=System.FWorkMode.Current;
				ChangeFWorkmode(WORKMODE_STANDBY);
			}
			AudioMute(HARDON);
			BackupIconBuffer();
			System.PowerMode=POWERMODE_POWEROFFWAIT;
			PowerWaitTimer=5;
			break;

		case POWERMODE_POWEROFFWAIT:
			if(PowerWaitTimer>0)break;
    			System.PowerMode=POWERMODE_POWEROFF;
			break;
		
	}
	
}

/*********************************************
	Function:		PowerOff
	Description:	
	Write/Modify:	Perry.Liang
	Time:		2006-1-24- 15:39:43
*********************************************/
void PowerOff (void)
{
	System.PowerMode=POWERMODE_POWEROFFREQ;

}

/*********************************************
	Function:		PowerOn
	Description:	
	Write/Modify:	Perry.Liang
	Time:		2006-1-24- 15:39:46
*********************************************/
void PowerOn (void)
{
	System.PowerMode=POWERMODE_POWERONREQ;
}

/*********************************************
	Function:		PowerInit
	Description:	
	Write/Modify:	Perry.Liang
	Time:		2006-1-24- 15:40:16
*********************************************/
void PowerInit(void)
{
	
       PD_ACC=0; //Pin PF7//pull up input
	PO_ACC=1;
       Pin_ACC=0; 
	//PD_ACC=1;
	//PO_ACC=1;
	//Pin_ACC=1;
	

	PD_POWER=1;//Pin PF0//push-pull output
	PO_POWER=1;
	Pin_POWER=1;
	
	MCCSR = 0x0E;//MCU control and status reg
	
	AccState = ACC_OFF;


	System.PowerMode=POWERMODE_POWEROFF;
	System.AccMode=ACCMODE_ACCOFF;
}

/*********************************************
	Function:		PowerTimer10ms
	Description:	
	Write/Modify:	Perry.Liang
	Time:		2006-1-24- 15:40:18
*********************************************/
void PowerTimer10ms(void)
{
	if(AccDelay>0)AccDelay--;
	if(AccWaitTimer>0)AccWaitTimer--;
	if(PowerWaitTimer>0)PowerWaitTimer--;
}

/*********************************************
	Function:		PowerTimer1s
	Description:	
	Write/Modify:	Perry.Liang
	Time:		2006-1-24- 15:40:20
*********************************************/
void PowerTimer1s(void)
{
	
	
}



void ACCTimer100ms(void)
{
       if(WakeUpTimer>0)WakeUpTimer--;
}

/*********************************************************
				File End
*********************************************************/

⌨️ 快捷键说明

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