📄 radio_1.c.bak
字号:
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 + -