📄 fmtuner.c
字号:
configvalue[3] = 0x00;// Mute off
Reset_Tuner_Config();
break;
}
//Delay_X_ms(600);
}
}
}
#if 0
else
{
configvalue[2] = 0x00;// SD mode off
configvalue[3] = 0x00;// Mute off
Reset_Tuner_Config();
#ifdef TEST_IF_COUNT
Fmtuner_Read(0x00,&temp,1);
if_count = temp&0x3;
#endif
}
#endif
return search_station;
}
BYTE Check_Station()
{
BYTE temp;
//P3_2=1;
if (fmamflag== 0) // 0:fm 1:am
Set_Freq(fmbak);
else
Set_Freq(ambak);
configvalue[3] = 0x10;// Mute on
Reset_Tuner_Config();
//Delay_X_ms(100);
search_station = 0;
if (P3_2 == 0)
{
configvalue[2] = 0x02;// SD mode on
Reset_Tuner_Config();
found_station = 0;
temp = 0x02;
Fmtuner_Write(0x83, &temp, 1);
Delay_X_ms(100);
Fmtuner_Read(0x00,&temp,1);
if ((temp & 0x01)== 0x01)
{
found_station = 1;
search_station = 1;
configvalue[2] = 0x00;// SD mode off
configvalue[3] = 0x00;// Mute off
Reset_Tuner_Config();
}
}
else
{
configvalue[2] = 0x00;// SD mode off
configvalue[3] = 0x00;// Mute off
Reset_Tuner_Config();
}
return search_station;
}
void Set_Station(BYTE stationnum)
{
if (fmamflag == 0)
{
WriteToEeprom(stationnum, fmbak);
fm_ch=stationnum;
}
else
{
WriteToEeprom(stationnum, ambak);
am_ch=stationnum;
}
}
BYTE Get_Station(BYTE stationnum)
{
if (fmamflag == 0)
{
if (ReadFromEeprom(stationnum) == 0)
{
fm_ch=stationnum;
curfmfreq = fmbak*FM_STEP_WIDTH- FM_IF_FREQ;
return 0;
}
}
else
{
if (ReadFromEeprom(stationnum) == 0)
{
am_ch=stationnum;
curamfreq = ambak*AM_STEP_WIDTH- AM_IF_FREQ;
return 0;
}
}
return 1;
}
BYTE Index_Station(BYTE dir)
{
if (fmamflag == 0)
{
if (dir == 0) //cur
{
if (ReadFromEeprom(fm_ch) == 1)
{
fmbak = FM_MIN_COUNT;
fm_ch = 1;
WriteToEeprom(fm_ch,fmbak);
}
}
else if (dir == 1) // prev
{
if ( (fm_ch > 1))
{
fm_ch --;
while ((ReadFromEeprom(fm_ch) == 1) && (fm_ch >1))
{
fm_ch--;
}
}
}
else if (dir == 2) // next
{
if ( (fm_ch < FM_MAX_MEM_BAND))
{
fm_ch ++;
while ((ReadFromEeprom(fm_ch) == 1) && (fm_ch <FM_MAX_MEM_BAND))
{
fm_ch++;
}
}
}
curfmfreq = fmbak*FM_STEP_WIDTH- FM_IF_FREQ;
return fm_ch;
}
else
{
if (dir == 0) //cur
{
if (ReadFromEeprom(am_ch) == 1)
{
ambak = AM_MIN_COUNT;
am_ch = 1;
WriteToEeprom(am_ch, ambak);
}
}
else if (dir == 1) // prev
{
if (am_ch >1)
{
am_ch--;
if (ReadFromEeprom(am_ch) == 1)
{
am_ch++;
ReadFromEeprom(am_ch);
}
}
else
{
am_ch = AM_MAX_MEM_BAND;
ReadFromEeprom(am_ch);
}
}
else if (dir == 2) // next
{
if (am_ch < AM_MAX_MEM_BAND)
{
am_ch++;
if (ReadFromEeprom(am_ch) == 1)
{
am_ch--;
ReadFromEeprom(am_ch);
}
}
else
{
am_ch = 1;
ReadFromEeprom(am_ch);
}
}
curamfreq = ambak*AM_STEP_WIDTH- AM_IF_FREQ;
return am_ch;
}
}
void Tuner_Delete_Station()
{
}
BYTE Tuner_Store_Station_Start()
{
BYTE i;
for(i = 1;i<=FM_MAX_MEM_BAND;i++)
{
if (ReadFromEepromtest(i) == 1)// get empty station
{
return i;
}
}
//return 0;
return fm_ch;// current channel
}
void Tuner_Store_Station_Stop(BYTE userinputnum)
{
Set_Station(userinputnum);
}
void Tuner_Store_Preset_Station()
{
Set_Station(fm_ch);
}
void Step_Search(BYTE dir)
{
if (fmamflag == 0) // 0:fm 1:am
{
if (dir == 1) // up
{
fmbak++;
if (fmbak > FM_MAX_COUNT)
fmbak = FM_MIN_COUNT;
}
else
{
fmbak--;
if (fmbak < FM_MIN_COUNT)
fmbak = FM_MAX_COUNT;
}
curfmfreq = fmbak*FM_STEP_WIDTH-FM_IF_FREQ;
Check_Station();
}
else
{
if (dir == 1) // up
{
ambak++;
if (ambak > AM_MAX_COUNT)
ambak = AM_MIN_COUNT;
}
else
{
ambak--;
if (ambak < AM_MIN_COUNT)
ambak = AM_MAX_COUNT;
}
curamfreq = ambak*AM_STEP_WIDTH-AM_IF_FREQ;
Check_Station();
}
}
void Manual_Search(BYTE dir)
{
if (fmamflag == 0) // 0:fm 1:am
{
while(1)
{
if (dir == 1) // up
{
fmbak++;
if (fmbak > FM_MAX_COUNT)
{
fmbak = FM_MAX_COUNT;
break;
}
}
else
{
fmbak--;
if (fmbak < FM_MIN_COUNT)
{
fmbak = FM_MIN_COUNT;
break;
}
}
curfmfreq = fmbak*FM_STEP_WIDTH-FM_IF_FREQ;
if (Is_Station()== 1)
break;
}
}
else
{
while(1)
{
if (dir == 1) // up
{
ambak++;
if (ambak > AM_MAX_COUNT)
{
ambak = AM_MAX_COUNT;
break;
}
}
else
{
ambak--;
if (ambak < AM_MIN_COUNT)
{
ambak = AM_MIN_COUNT;
break;
}
}
curamfreq = ambak*AM_STEP_WIDTH-AM_IF_FREQ;
if (Is_Station()== 1)
break;
}
}
}
void Auto_Installation_Search()
{
BYTE i;
BYTE search_end;
search_end = 0;
i=0;
if (fmamflag == 0)
fmbak = FM_MIN_COUNT;
else
ambak = AM_MIN_COUNT;
while(1)
{
while(1)
{
if (fmamflag == 0)
{
fmbak++;
if (fmbak > FM_MAX_COUNT)
{
fmbak = FM_MAX_COUNT;
search_end = 1;
break;
}
}
else
{
ambak++;
if (ambak >AM_MAX_COUNT)
{
ambak = AM_MAX_COUNT;
search_end = 1;
break;
}
}
if (Is_Station()== 1)
break;
}
if(search_station==1)
{
i++;
Set_Station(i);
search_station = 0;
}
if(search_end == 1)
{
search_station = 0;
// goto first
Set_Station(1);
Check_Station();
break;
}
}
}
void Set_Freq(WORD freq)
{
BYTE temp;
temp = freq&0xff;
configvalue[6]=temp;
temp = (freq>>8)&0xff;
configvalue[7]=temp;
}
void Tuner_Main()
{
#if 0 //def TEST_IF_COUNT
BYTE temp;
if ((P3_2 == 0) && (if_count_flag == 0))
{
temp = 0x02;
Fmtuner_Write(0x83, &temp, 1);
Delay_X_ms(70);
Fmtuner_Read(0x00,&temp,1);
if_count = temp&0x0f;
if ((temp & 0x01)== 0x01)
{
search_station = 1;
if_count_flag = 1;
}
}
else
{
if_count_flag = 0;
}
#endif
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -