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

📄 main.c

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

#define ROOT
#include "public.h"

/*********************************************
	Function:		main
	Description:	
	Write/Modify:	Perry.Liang
	Time:		2006-1-24- 15:40:45
*********************************************/
void main(void)
{
	unsigned int i;
	unsigned char *p;
	for(i=0x0200;i<0x0880;i++)
	{
		p=(unsigned char *)(i);
		*p=0x00;
	}
	
	MCUInit();
	LibInit();
	//GetOptionFromDiode();
	SystemInit();
	PowerInit();
	KeyInit();
	DisplayInit();
	AudioInit();
	RadioInit();
	ClockInit();
	RDSInit();
	CDInit();
	for(;;)
	{
		AccCheck(); 
		AccMain();
		if(WakeUpTimer>0 ||System.AccMode!=ACCMODE_ACCOFF)
		{
			SystemKey();
			WorkModeChange();
			KeyMain();
			DisplayMain();
			AudioMain();
			PowerMain();
			RadioMain();
			ClockMain();
			RDSMain();
			AuxMain();
			CDMain();
			//accordo_main();
		}
		
	}
}

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

	asm sim;

	// Interrupt
	ITSPR0=y01111111;
	ITSPR1=y01110111;
	ITSPR2=y01010100;
	ITSPR3=y11110111;
	EICR=0x88;
	
	TACR2=0x08;			/* Clock divided by 8 */
	TACR1=0x40;			/* Output Compare Int Enable */

	TBCR2=0x08;			/* Clock divided by 8 */
	TBCR1=0x40;			/* Output compare interrupt enable.*/

#ifdef HWI2C_ENABLE
	// I2C
	I2CCCR=0x85;
	I2CSR1=0;
	I2CSR2=0;
	I2COAR1=0;
	I2COAR2=0;
	I2CCR=y00100101;
#endif
	
	asm rim;

}

/*********************************************
	Function:		SystemKey
	Description:	
	Write/Modify:	Perry.Liang
	Time:		2006-1-24- 15:40:41
*********************************************/
void SystemKey(void)
{
	switch(KeyCode)
	{
		case S_AD_POWER:
		case L_AD_POWER:
			if(System.AccMode==ACCMODE_ACCOFF
				||System.AccMode==ACCMODE_ACCOFFREQ
				||System.AccMode==ACCMODE_ACCOFFWAIT)
				break;
			if (System.PowerMode==POWERMODE_POWERON
				||System.PowerMode==POWERMODE_POWERONREQ
				||System.PowerMode==POWERMODE_POWERONWAIT)
			{
				PowerOff();
				if(RDS.F_TAEnable)
				{
					RDS.F_TAEnable=0;
					if(F_InTASwitch)TaSwitchBack();
					#ifdef EON_ENABLE
						if(F_InEONTASwitch)EONTaSwitchBack();
					#endif

				}
			}
			else
			{
				PowerOn();
			}
			break;

		case S_AD_MODE:
			switch (System.FWorkMode.Current)
			{
			#ifdef CDMODE_ENABLE
				case WORKMODE_RADIO:
					ChangeFWorkmode(WORKMODE_DISC);
					break;
				case WORKMODE_DISC:
					ChangeFWorkmode(WORKMODE_USB);
					break;	
				case WORKMODE_USB:
					ChangeFWorkmode(WORKMODE_SD);
					break;	
				case WORKMODE_SD:
					ChangeFWorkmode(WORKMODE_AUX);
					break;	
				case WORKMODE_AUX:
					ChangeFWorkmode(WORKMODE_RADIO);
					break;
			#else
				case WORKMODE_RADIO:
					ChangeFWorkmode(WORKMODE_AUX);
					break;
				case WORKMODE_AUX:
					ChangeFWorkmode(WORKMODE_RADIO);
					break;
			#endif
			
			}
			if(F_MuteKey)
			{
				F_MuteKey=0;
			}
			if(RDS.F_TAEnable)
			{
				RDS.F_TAEnable=0;
				if(F_InTASwitch)TaSwitchBack();
				#ifdef EON_ENABLE
					if(F_InEONTASwitch)EONTaSwitchBack();
				#endif
			}
			break;

		case L_AD_MODE:
			if(F_MuteKey)break;
			DisplayClear(CLEARNUM);
			F_DISP_P=0;
			CopyString(DispNum,VERSION);
			DisplayNumber();
			DisplaySentData();

			CDSendCommand(CD_CMD_PLAY);
			break;
	}

}

/*********************************************
	Function:		SystemInit
	Description:	
	Write/Modify:	Perry.Liang
	Time:		2006-1-24- 15:40:40
*********************************************/
void SystemInit(void)
{
	System.FWorkMode.Last= WORKMODE_IDLE;
	System.FWorkMode.Current = WORKMODE_IDLE;
	System.FWorkMode.Next = WORKMODE_IDLE;
	System.FWorkMode.Requst= WORKMODE_STANDBY;
	System.FWorkMode.Save=WORKMODE_RADIO;

	System.DispMode.Last= DISPMODE_IDLE;
	System.DispMode.Current = DISPMODE_IDLE;
	System.DispMode.Next = DISPMODE_IDLE;
	System.DispMode.Requst= DISPMODE_STANDBY;
	System.DispMode.Save=DISPMODE_RADIO;

	
}

/*********************************************
	Function:		WorkModeChange
	Description:	
	Write/Modify:	Perry.Liang
	Time:		2006-1-24- 15:40:38
*********************************************/
void WorkModeChange(void)
{
	switch(System.FWorkMode.Requst)
	{
		case WORKMODE_RADIO:
			//System.DispMode.Requst=DISPMODE_RADIO;
			//if(F_InTASwitch)
			if(F_InTASwitch||F_InEONTASwitch)
			{
				System.DispMode.Requst=DISPMODE_RDS;
				RDSDispMode=RDSDISP_TRAFFIC;
			}
			else if(RDS.F_PSExist)
			{
				System.DispMode.Requst=DISPMODE_RDS;
				RDSDispMode=RDSDISP_PS;
			}
			else
			{
				System.DispMode.Requst=DISPMODE_RADIO;
				RDSDispMode=RDSDISP_IDLE;
			}
			break;
		case WORKMODE_DISC:
		case WORKMODE_USB:		
		case WORKMODE_SD:
			System.DispMode.Requst=DISPMODE_CD;
			break;
		case WORKMODE_CDC:
			System.DispMode.Requst=DISPMODE_CDC;
			break;
		case WORKMODE_AUX:
			System.DispMode.Requst=DISPMODE_AUX;
			break;
		case WORKMODE_PHONE:
			System.DispMode.Requst=DISPMODE_PHONE;
			break;
		case WORKMODE_STANDBY:
			System.DispMode.Requst=DISPMODE_STANDBY;
			break;
		case WORKMODE_ALIGN:
			System.DispMode.Requst=DISPMODE_ALIGN;
			break;
	}
	
	if(System.FWorkMode.Last!= WORKMODE_IDLE)
	{
		System.FWorkMode.Save=System.FWorkMode.Last;
		System.FWorkMode.Last= WORKMODE_IDLE;
	}
	if(System.FWorkMode.Next != WORKMODE_IDLE 
		&& System.FWorkMode.Current != System.FWorkMode.Next)
	{
		System.FWorkMode.Last= System.FWorkMode.Current;
		System.FWorkMode.Current = System.FWorkMode.Next;
	}
	System.FWorkMode.Next = WORKMODE_IDLE;
	if(System.FWorkMode.Requst != WORKMODE_IDLE 
		&& System.FWorkMode.Requst != System.FWorkMode.Next)
	{
		System.FWorkMode.Next = System.FWorkMode.Requst;
		System.FWorkMode.Requst= WORKMODE_IDLE;
	}

	if(System.DispMode.Last!= DISPMODE_IDLE)
	{
		System.DispMode.Save=System.DispMode.Last;
		System.DispMode.Last= DISPMODE_IDLE;
	}
	if(System.DispMode.Next != DISPMODE_IDLE 
		&& System.DispMode.Current != System.DispMode.Next)
	{
		System.DispMode.Last= System.DispMode.Current;
		System.DispMode.Current = System.DispMode.Next;
	}
	System.DispMode.Next = DISPMODE_IDLE;
	if(System.DispMode.Requst != DISPMODE_IDLE 
		&& System.DispMode.Requst != System.DispMode.Next)
	{
		System.DispMode.Next = System.DispMode.Requst;
		System.DispMode.Requst= DISPMODE_IDLE;
	}

}


/*********************************************
	Function:		ChangeFWorkmode
	Description:	
	Write/Modify:	Perry.Liang
	Time:		2006-1-24- 15:40:37
*********************************************/
void ChangeFWorkmode(unsigned char FMode)
{
	if(System.FWorkMode.Current==FMode)return;
	
	AudioMute(SOFTON);
	System.FWorkMode.Requst=FMode;

}


/*********************************************
	Function:		GetOptionFromDiode
	Description:	
	Write/Modify:	Perry.Liang
	Time:		2005-2-3- 14:13:46
*********************************************/
void GetOptionFromDiode(void)
{
	// Jumper
	/*Pin_J2=0;
	PD_J2=0;
	PO_J2=1;

	Pin_J3=0;
	PD_J3=0;
	PO_J3=1;

	Pin_J4=0;
	PD_J4=0;
	PO_J4=1;

	Pin_J5=0;
	PD_J5=0;
	PO_J5=1;

	O_J2=Pin_J2;
	O_J3=Pin_J3;
	O_J4=Pin_J4;
	O_J5=Pin_J5;*/

}


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

⌨️ 快捷键说明

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