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

📄 radio_1.c.bak

📁 ROHM 公司BU9432:application:应用范围
💻 BAK
📖 第 1 页 / 共 5 页
字号:
				u08h_tuner_scc = 0x09;
			}
			}
			break;



		case KEY_PROG:				//PST
			gu16_timer_delay=DISP_DELAY_TIME;
			gu08_flg_pst=1;

			gu08_timer_SetVolume = 0;
			if ( u08h_tuner_scc != 0 )
			{
				u08h_tuner_scc = 0x0e;
			}
			if ( ( u08h_dts_df & B00000010 ) == 0 )
			{
				u08h_dts_df |= B00001001;					// set PROG & PRESET mode bit flag
				gu08_timer_Blink = 50;					// set Blink timer
				gu08_flg_Blink = 1;
				gu16_prog_timer = 15000;					// 30sec timer
			}
			else
			{
				gu16_prog_timer = 0;
				u08h_tuner_scc &= B11110101;				// clear PROG mode bit & PROG ALLOW bit flag

				Address_Cal(  );
				u08_workspace[0] = u16_rdata;
				u08_workspace[1] = u16_rdata >> 8;
				Wr_Eeprom( 2 );
				Save_No(  );
			}
			break;


		case KEY_PMODE:					//MO_ST
			gu16_timer_delay=DISP_DELAY_TIME;
//			gu08_mode_disp=0;		
			gu08_timer_SetVolume = 0;
			if ( u08h_tu_stat[1] & TU_STAT_AM1 )
			{	// AM
				return;
			}
			else
			{	// FM
				if ( ( u08h_tu_stat[1] & TU_STAT_MONO ) == 0 )
				{	// STEREO
					u08h_tu_stat[1] |= TU_STAT_MONO;
					u08_mono = 1;
				}
				else
				{
					u08h_tu_stat[1] &= ~TU_STAT_MONO;
					u08_mono = 0;
				}
			}
			Send_Pll(  );
			break;

		case KEY_PLAY:
		case KEY_TUNER:						//Band
			gu16_timer_delay=DISP_DELAY_TIME;

			gu08_timer_SetVolume = 0;
			u08h_dts_df &= B11110101;
			if ( ( u08h_tuner_o & B00000001 ) == 0 )
			{
				DrvLCD_ALL_Off(  );
				Radio_Amute_Sens_On(  );
				Save_Com_Mem(  );
				if ( u08h_tu_stat[1] & TU_STAT_AM1 )			//if AM
				{	// change to FM
					u08h_tu_stat[1] &= ~TU_STAT_AM1;
				}
				else
				{	//change to AM
					u08h_tu_stat[1] |= TU_STAT_AM1;
				}
				u08h_rmute = 0x01;
				u08_mono = 0;
				Load_Com_Mem(  );
				Preset2Data(  );
				DrvLCD_Equalizer_Init(  );
				gu16_timer_wait = 0;
				TUCtrl_SendPll(  );
			}
			break;


		case KEY_POWER:
//		case KEY_POWER1:		//AD
		case KEY_POWER_OFF:
/*			gu08_timer_SetVolume = 0;
			u08h_tuner_scc = 0x00;
			Radio_Amute_Sens_On(  );
			if(gu08_mode_alm1==1)
				{
				gu08_mode_alm1=0;
				gu08_flg_24halm1=0;
				gu16_timer_24halm1=60000/10;
				}

			if(gu08_mode_alm2==1)
				{
				gu08_mode_alm2=0;
				gu08_flg_24halm2=0;
				gu16_timer_24halm2=60000/10;
				}				

			gu08_power_df = 0;
			Save_Eeprom(  );
			Stdby_Port_Init(  );				*/
			POWER_Off();
			break;


//		case KEY_TEST:			//AD
//			DrvLCD_Clr_On(  );
//			Erase_Eeprom(  );
//			Common_Wait_ms( 20 );
//			break;

//		case KEY_DISPLAY:
//			UserCtrl_DispChange();		
//			break;

	}
	gu08_KeyBuffer = KEY_EMPTY;
	return;
}



void Que_Radio_Preset( void )
{
	gu08_timer_SetVolume = 0;
	if ( ( u08h_dts_df & B00000010 ) == 0 )
	{
		if ( u08h_dts_df & B00001000 )
		{
			u08h_dts_df |= B00000010;					// set PROG allow bit flag
//			u08_rno = 1;
			return;
		}

		if ( ( u08h_dts_df & B00000001 ) == 0 )
		{
			u08h_dts_df |= B00000001;					// set PRESET mode ON
//			u08_rno = 1;
		}
		else
		{
			Preset_No_Check(  );
		}
	}
	else
	{
		Preset_No_Check(  );
	}

	Save_Com_Mem(  );
	if ( ( u08h_dts_df & B00001000 ) == 0 )
	{
		Radio_Amute_Sens_On(  );
		Address_Cal(  );
		Rd_Eeprom( 2 );
		u16_rdata = u08_workspace[1];
		u16_rdata = u16_rdata << 8 | u08_workspace[0];
		Init_Station(  );
		Freq_Cal(  );

		u08_mono = 0;
		u08h_tuner_scc = 0x0e;
	}
	return;
}


void Preset_No_Check( void )
{
	if( gu08_KeyBuffer == KEY_DIR_UP )
	{
		u08_rno++;
		if ( ( u08h_tu_stat[1] & TU_STAT_AM1 ) == 0 )
		{	// FM
			if ( u08_rno >= 21 )
			{
				u08_rno = 1;
			}
		}
		else
		{	// AM
			if ( u08_rno >= 13 )
			{
				u08_rno = 1;
			}
		}
	}
	else
	{
		u08_rno--;
		if ( ( u08h_tu_stat[1] & TU_STAT_AM1 ) == 0 )
		{	// FM
			if ( u08_rno == 0 )
			{
				u08_rno = 20;
			}
		}
		else
		{	// AM
			if ( u08_rno == 0 )
			{
				u08_rno = 12;
			}
		}
	}
	return;
}




void Init_Station( void )
{
//	volatile UINT16 u16_station[6];				
	volatile UINT16 u16_station[5];						//051228				

	if ( ( u08h_tu_stat[1] & TU_STAT_AM1 ) == 0 )
	{	// FM
		if ( ( u08h_tuner_o & B00000010 ) == 0 )
		{	// FM EUR
//			u16_station[6] = { 0+1, 12+1, 50+1, 210+1, 370+1, 410+1 };	// 87.5 88.1 90.0 98.0 106.0 108.0
/*			u16_station[0] = 1;
			u16_station[1] = 13;
			u16_station[2] = 51;
			u16_station[3] = 211;
			u16_station[4] = 371;
			u16_station[5] = 411;		*/

			u16_station[0] = 1;
			u16_station[1] = 51;
			u16_station[2] = 211;
			u16_station[3] = 371;
			u16_station[4] = 411;		

		}
		else
		{	// FM USA
//			u16_station[6] = { 0+1, 2+1, 22+1, 102+1, 182+1, 200+1 };	// 87.9 88.1 90.1 98.1 106.1 107.9
/*			u16_station[0] = 1;
			u16_station[1] = 3;
			u16_station[2] = 23;
			u16_station[3] = 103;
			u16_station[4] = 183;
			u16_station[5] = 201;		*/

			u16_station[0] = 1;
			u16_station[1] = 23;
			u16_station[2] = 103;
			u16_station[3] = 183;
			u16_station[4] = 201;		

		}
	}
	else
	{	// AM
		if ( ( u08h_tuner_o & B00000100 ) == 0 )
		{	// AM EUR
//			u16_station[6] = { 0+1, 9+1, 16+1, 53+1, 98+1, 122+1 };		// 522 603 666 999 1404 1620
/*			u16_station[0] = 1;
			u16_station[1] = 10;
			u16_station[2] = 17;
			u16_station[3] = 54;
			u16_station[4] = 99;
			u16_station[5] = 123;			*/

			u16_station[0] = 1;
			u16_station[1] = 10;
			u16_station[2] = 54;
			u16_station[3] = 99;
			u16_station[4] = 123;
			
		}
		else
		{	// AM USA
//			u16_station[6] = { 0+1, 8+1, 15+1, 48+1, 88+1, 119+1 };		// 520 600 670 1000 1400 1710
/*			u16_station[0] = 1;
			u16_station[1] = 9;
			u16_station[2] = 16;
			u16_station[3] = 49;
			u16_station[4] = 89;
			u16_station[5] = 120;		*/

			u16_station[0] = 1;
			u16_station[1] = 9;
			u16_station[2] = 49;
			u16_station[3] = 89;
			u16_station[4] = 120;

		}
	}

	if ( u16_rdata == 0xffff )
	{
		if ( u08_rno < 7 )
		{
			u16_rdata = u16_station[u08_rno-1];
		}
	}
	Data2Preset(  );
	return;
}



void Address_Cal( void )
{
	if ( ( u08h_tu_stat[1] & TU_STAT_AM1 ) == 0 )
	{	// FM
		u08h_eeword =( u08_rno-1 ) * 2;
	}
	else
	{	// AM
		u08h_eeword = ( u08_rno-1 ) * 2 + 0x40;
	}
	return;
}


void Key_Ctrl( void )
{
	static UINT08 sts_ctrl;

	switch ( sts_ctrl )					//偙傟偼揔摉偵娫堷偔
	{	//奺儌僕儏乕儖偼仐4倣俽俤俠枅偲側傞
		case 0:
			DrvKEY_RemoteKey(  );
			DrvKEY_ScanKey(  );
			DrvKEY_ScanAlm1SW();				//060207
			sts_ctrl = 1;
			break;

		case 1:
//			Sync_Rec(  );
			DrvKEY_ScanSlideSW(  );
//			if(gu08_alm_sel==ALM_SLIDE)
//				{

				DrvKEY_ScanAlm2SW();
//		DrvKEY_ScanAlm1SW();
//				}
			sts_ctrl = 0;
			break;
 	}
	return;
}




//======================================================
//          E2PROM ROUTINE
//======================================================
void Rd_Eeprom( UINT08 count )
{
	volatile UINT08 i;

	if ( count != 0 )
	{
		Wrbyt_Sa(  );
		Ee_Start(  );
		WrByt( 0xa1 );								// Send Slave addr

		for ( i = 0; i < count ; i++ )
		{
			u08_workspace[i] = Rdbyt(  );
			if ( i != ( count-1 ) )
			{
				Data0_Clk(  );
			}
			else
			{
				Data1_Clk(  );
			}
		}
		Ee_Stop(  );
	}
	return;
}


void Data1_Clk( void )
{
	CPU_PIO3 &= ~CPU_EE_SCL;						// Clr SCL
	CPU_PIO3 |= ( CPU_EE_SDA | CPU_EE_SCL );		// Set SDA & SCL
	CPU_PIO3 &= ~CPU_EE_SCL;						// Clr SCL
	return;
}


void Data0_Clk( void )
{
	CPU_PIO3 &= ~CPU_EE_SDA;						// Clr SDA
	Clk_Com( );
	return;
}



void Wr_Eeprom( UINT08 count )
{
	volatile UINT08 i;

	if ( count != 0 )
	{
		Wrbyt_Sa(  );
		for( i = 0; i < count; i++)
		{
			WrByt( u08_workspace[i] );
		}
		Ee_Stop(  );
	}
	return;
}


void Wrbyt_Sa( void )
{
	Ee_Start(  );
	WrByt( 0xa0 );									// slave address send
	WrByt( u08h_eeword );							// EE address send
	return;
}



void Ee_Start( void )
{
	CPU_LCD_SIOSR3 &= ~( CPU_EE_SCL | CPU_EE_SDA);	// SCL & SDA output mode
	CPU_PIO3 |= ( CPU_EE_SCL | CPU_EE_SDA );		// Set SCL & SDA high
	Clk_Com(  );
	return;
}



void Ee_Stop( void )
{

	CPU_PIO3 &= ~( CPU_EE_SCL | CPU_EE_SDA );		// Set SCL & SDA low
	CPU_PIO3 |= CPU_EE_SCL;
	CPU_PIO3 |= CPU_EE_SDA;
	Common_Wait_ms( 5 );
//	gu16_timer_wait=1;			//051215
	return;
}



void WrByt( UINT08 wr_data )
{
	volatile UINT08 i;

	for ( i = B10000000; i ; i >>= 1 )
	{
		if( wr_data & i )
		{
			Data1_Clk(  );
		}
		else
		{
			CPU_PIO3 &= ~CPU_EE_SDA;
			Clk_Com(  );
		}
	}
	Data1_Clk(  );
	return;
}



void Clk_Com( void )
{
	CPU_PIO3 |= CPU_EE_SCL;							// Set SCL
	CPU_PIO3 &= ~CPU_EE_SDA;						// Clr SDA
	CPU_PIO3 &= ~( CPU_EE_SCL | CPU_EE_SDA );		// Clr SCL & SDA
	return;
}



UINT08 Rdbyt( void )
{
	volatile UINT08 rd_data = 0x00 ;
	volatile UINT08 i;

	CPU_LCD_SIOSR3 |= CPU_EE_SDA;					// EE_SDA (i/p)
	CPU_LCD_SIOSR3 &= ~CPU_EE_SCL;					// EE_CLK (o/p)

	for ( i = B10000000; i ; i >>= 1 )
	{
		CPU_PIO3 |= CPU_EE_SCL;						// SCL high
		if ( CPU_PIO3 & CPU_EE_SDA )
		{
			rd_data |= i;
		}
		CPU_PIO3 &= ~CPU_EE_SCL;					// SCL low
	}

	CPU_LCD_SIOSR3 &= ~( CPU_EE_SDA | CPU_EE_SCL );	// SCL & SDA (o/p)
	return rd_data;
}


//-------------------------------------------------
// BD3871 CONTROL ROUTINE
//-------------------------------------------------
// MUTE & INITIALIZATION ROUTINE

void Audio_Init( void )
{
	CPU_PIO9 &= ~CPU_AMUTE;								// Amute ON

	BD3871_Data1( B11000000 );						// All channel mute
	BD3871_Data2( B10101110 );						// Max attenuation
	BD3871_Data3( B00000000 );						// No Bass, No Treble

	Save_Vol(  );
	return;
}



void BD3871_Data1( UINT08 input_data )
{
	BD3871_Outbit( input_data, 8 );
	BD3871_Outbit( 0x00, 1 );

	Common_Wait_us( 2 );
	CPU_PIO8 &= ~CPU_ASP_SI;
	Common_Wait_us( 2 );
	CPU_PIO8 |= CPU_ASP_SC;
	Common_Wait_us( 2 );
	CPU_PIO8 |= CPU_ASP_SI;
	Common_Wait_us( 2 );
	CPU_PIO8 &= ~CPU_ASP_SC;
	Common_Wait_us( 2 );
	CPU_PIO8 &= ~CPU_ASP_SI;
	Common_Wait_us( 2 );
	return;
}



void BD3871_Data2( UINT08 input_data )
{
	BD3871_Outbit( input_data, 8 );
	BD3871_Outbit( 0x00, 1 );

	Common_Wait_us( 2 );
	CPU_PIO8 |= CPU_ASP_SI;
	Common_Wait_us( 2 );
	CPU_PIO8 |= CPU_ASP_SC;
	Common_Wait_us( 4 );
	CPU_PIO8 &= ~CPU_ASP_SC;
	Common_Wait_us( 2 );
	CPU_PIO8 &= ~CPU_ASP_SI;
	Common_Wait_us( 2 );
	return;
}



void BD3871_Data3( UINT08 input_data )
{
	BD3871_Outbit( input_data, 8 );
	BD3871_Outbit( 0x80, 1 );

	Common_Wait_us( 2 );
	CPU_PIO8 &= ~CPU_ASP_SI;
	Common_Wait_us( 2 );
	CPU_PIO8 |= CPU_ASP_SC;
	Common_Wait_us( 2 );
	CPU_PIO8 |= CPU_ASP_SI;
	Common_Wait_us( 2 );
	CPU_PIO8 &= ~CPU_ASP_SC;
	Common_Wait_us( 2 );
	CPU_PIO8 &= ~CPU_ASP_SI;
	Common_Wait_us( 2 );
	return;
}



void BD3871_Outbit( UINT08 input_data, UINT08 count )
{
	volatile UINT08 i;

	for ( i = 0; i < count; i++ )
	{
		if ( ( input_data & B10000000 ) == 0 )
		{
			CPU_PIO8 &= ~CPU_ASP_SI;
		}
		else
		{
			CPU_PIO8 |= CPU_ASP_SI;
		}
		Common_Wait_us( 2 );
		CPU_PIO8 |= CPU_ASP_SC;
		Common_Wait_us( 2 );
		CPU_PIO8 &= ~CPU_ASP_SI;
		Common_Wait_us( 2 );
		CPU_PIO8 &= ~CPU_ASP_SC;
		input_data = input_data << 1;
	}
	return;
}




void TunerPort_Init( void )
{
//-------------------------------------------------------
// 	LCD clear

//	DrvLCD_ALL_Off(  );
//	if(gu08_kind_Display ==DISP_LCD)
	if(gu08_kind_tuner!=3)
	{

		DrvLCD_ALL_Off(  );			//for LCD clear

//		CPU_LCD_CR = B11000011;				//LCD ON, 1/4duty, Fsub/300 <- choose @fosc=4.2MHz
//		CPU_LCD_CSR = B00001111;			// COM0-3 = LCD common

//		CPU_LCD_SSR0 = B11111111;			//SEG07-00: LCD segment
//		CPU_LCD_SSR1 = B11111111;			//SEG15-08: LCD segment		

//		CPU_LCD_SSR2 = B00111111;			//SEG23-16: PIO(0)/SEG(1)
//		CPU_LCD_SIOSR2 = B00000000;			//SEG23-22: input(1)/output(0)
//		CPU_LCD_SIODR2 = B00000000;			//initial all "L"

	}

//	if(gu08_kind_Display==DISP_LED)
	else	
	{
		CPU_LCD_CR = B00000000;			
		CPU_LCD_CSR = B00000000;			// COM0-3 = io

//		CPU_LCD_SSR0 = B00000000;			//SEG07-00: PIO mode
//		CPU_LCD_SSR1 = B00000000;			//SEG15-08: PIO

⌨️ 快捷键说明

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