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

📄 main.c

📁 7541数字高频头源程序
💻 C
字号:

#define ROOT


#include "public.h"

void main(void)
{
	unsigned int i;
	unsigned char *p;
	
	for(i=0x0200;i<0x0880;i++)
	{
		p=(unsigned char *)(i);
		*p=0x00;
	}
	
	MCUInit();
	GetOptionFromDiode();
	SystemInit();
	PowerInit();
	KeyInit();
	DisplayInit();
	AudioInit();
	RadioInit();
	ClockInit();
	RDSInit();
	AlignInit();
	Wait1ms(100);
	for(;;)
	{
		//Pin_test=~Pin_test;
		
		AccCheck();
		SystemKey();
		WorkModeChange();
		KeyMain();
		DisplayMain();
		AudioMain();
		PowerMain();
		RadioMain();
		ClockMain();
		RDSMain();
		AlignMain();
	}
}

void MCUInit(void)
{

	Pin_test=0;//why other Port not initial :Yete ask
	PD_test=1;
	PO_test=1;

	Pin_I2CData=0;
	PD_I2CData=1;//DDR:0--input,1---output
	PO_I2CData=1;

	Pin_I2CClk=0;
	PD_I2CClk=1;
	PO_I2CClk=1;


	/*PINDDR51=0;
	PINOR51=0;
	PIN51=1;*/

	asm sim;

	// Interrupt
	ITSPR0=y01111111;
	ITSPR1=y01110001;
	ITSPR2=y01010001;
	ITSPR3=y11110101;
	EICR=0x88;                 //yete: exerternal interrupt for RDS
	
	TACR2=0x08;			/* Clock divided by 8 */
	TACR1=0x40;			/* Output Compare Int Enable */

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

}

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();
			}
			else
			{
				PowerOn();
			}
			break;

		case S_AD_MODE:
			switch (System.FWorkMode.Current)
			{
				case WORKMODE_RADIO:
					ChangeFWorkmode(WORKMODE_ALIGN);
					break;

				case WORKMODE_ALIGN:
					if(Align.Mode!=ALIGN_STANDBY)
						break;
					ChangeFWorkmode(WORKMODE_RADIO);
					break;
			}
			break;

	}

}

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;

	
}

void WorkModeChange(void)
{
	switch(System.FWorkMode.Requst)
	{
		case WORKMODE_RADIO:
			System.DispMode.Requst=DISPMODE_RADIO;
			break;
		case WORKMODE_CD:
			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;
	}

}


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;

	NOP;
}

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

⌨️ 快捷键说明

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