📄 tuner.c
字号:
if(bIsFm) {
FmFreq = uitemp;
if( FmFreq > FreqArray[TunerArea].FmMax || FmFreq < FreqArray[TunerArea].FmMin){
FmFreq = FreqArray[TunerArea].FmMin;
bPreset = 0;
}
}
else {
AmFreq = uitemp;
if( AmFreq > FreqArray[TunerArea].AmMax || AmFreq < FreqArray[TunerArea].AmMin){
AmFreq = FreqArray[TunerArea].AmMin;
bPreset = 0;
}
}
GotoFreq();
DisplayTunerCurrentFreq();
}
#if 0
void PresetUp()
{
if(bIsFm){
if(!bPreset) {
bPreset = 1;
FmPresetNo=1;
TunerBand = 1;
}
FmPresetNo++;
if((FmPresetNo %6 ) ==1 ) TunerBand++;
if(FmPresetNo > MAX_FMSTATION_NO){
FmPresetNo = 1;
TunerBand = 1;
}
GotoPreset(FmPresetNo);
}
else{
if(!bPreset) {
bPreset = 1;
AmPresetNo=1;
}
TunerBand = 4;
AmPresetNo++;
if(AmPresetNo > MAX_AMSTATION_NO) AmPresetNo = 1;
GotoPreset(AmPresetNo);
}
}
void PresetDown()
{
if(bIsFm){
if(FmPresetNo == 1) {
FmPresetNo = MAX_FMSTATION_NO;
TunerBand = 3;
}
else{
FmPresetNo--;
if( (TunerBand % 6 ) == 1) TunerBand--;
}
GotoPreset(FmPresetNo);
}
else{
if(AmPresetNo == 1) AmPresetNo = MAX_AMSTATION_NO;
else AmPresetNo--;
GotoPreset(AmPresetNo);
}
}
#endif
/*************************************************
func: calculate the real preset no
fm (band-1)*6 + number
am number
argu: tunerband
return real preset no
*************************************************/
unsigned char GetRealPresetNo(unsigned char number)
{
if(TunerBand == 4){
AmPresetNo = number;
return number;
}
else{
FmPresetNo = number;
return (TunerBand - 1)*6 + number;
}
}
//在主循环调用,处理收音机部分的定时处理或滚动显示.
void TunerTimeHandle()
{
}
//收音的追台处理程序,被TunnerFunc调用.
unsigned char TunerSeekFunc(int key,unsigned char *para)
{ para=para;
switch(key)
{
case SD_KEY:
if(IsStation()){
//ShowLcdString(0x40,"sd high");
SetTimerFunc(TIME_100MS,IFCOUNT_KEY);
StartCountIf();
}
else{
//ShowLcdString(0x40,"sd low");
if( (bIsAscan || bIsPscan) && IsFreqOverFlow() ){//at the end, stop
ReturntoMainMode();
}
else{
if(bIsUp) FreqUp();
else FreqDown();
GotoSeekMode();
}
}
break;
case IFCOUNT_KEY:
if(IsIfOk()){
if(bIsAscan == 0 && bIsPscan == 0) ReturntoMainMode();
else {
StopSeekStation();
GotoFreq();
DisplayTunerCurrentFreq();
if(bIsAscan) SetTimerFunc(TIME_3SEC,AS_TIMEOUT);
else SetTimerFunc(TIME_5SEC,PS_TIMEOUT);
if(bIsFm){
if(bIsAscan) FmPresetNo++;
bPreset = 0;
if(bIsAscan){
SavePreset(FmPresetNo);
bPreset = 1;
}
if(bIsAscan){
if(FmPresetNo < 7) TunerBand = 1;
else if(FmPresetNo < 13) TunerBand = 2;
else TunerBand = 3;
}
if(FmPresetNo>=18 && bIsAscan) ReturntoMainMode() ;
else if (FmPresetNo>=18 && bIsPscan) FmPresetNo=1;
}
else{
TunerBand = 4;
bPreset = 0;
AmPresetNo++;
if(bIsAscan){
SavePreset(AmPresetNo);
bPreset = 1;
}
if(AmPresetNo >= 6 && bIsAscan) ReturntoMainMode();
else if (AmPresetNo>=6 && bIsPscan) AmPresetNo=1;
}
DisplayTunerCurrentFreq();
}
}
else{
if( (bIsAscan || bIsPscan) && IsFreqOverFlow() ){//at the end, stop
ReturntoMainMode();
}
else{
if(bIsUp) FreqUp();
else FreqDown();
GotoSeekMode();
}
}
break;
case AS_TIMEOUT:
case PS_TIMEOUT:
if( IsFreqOverFlow()) ReturntoMainMode();
else{
FreqUp();
GotoSeekMode();
}
//TimeMessage = 0;
break;
case REDRAW_KEY:
RedrawTuner();
break;
case CLEARSCREEN_KEY:
FpClearStr();
FPDisplayIcon(FP_INFO_MHZ,0);
FPDisplayIcon(FP_INFO_KHZ,0);
FPDisplayIcon(FP_INFO_DX,0);
FPDisplayIcon(FP_INFO_ST,0);
FPDisplayIcon(FP_INFO_DOT_MIN2,0);
break;
default:
if(bIsAscan) {
if(key==POWER_KEY) ReturntoMainMode();
}
else if(bIsPscan){
if(key==PS_KEY || key==ENTER_KEY) ReturntoMainMode();
}
else ReturntoMainMode();
break;
}
return 0;
}
//收音的主处理程序,被TunnerFunc调用.
unsigned char TunerMainFunc(int key,unsigned char *para)
{
para=para;
if(AudioToneMode){
AudioToneDealFunc(key);
return 0;
}
switch(key){
case MODE_KEY:
case VOL_UP_KEY:
case VOL_DOWN_KEY:
case MUTE_KEY:
case VERSION_KEY:
case TEST_LCD_KEY:
case POWER_KEY:
defDealKey(key);
break;
case TONE_KEY:
AudioToneDealFunc(key);
break;
case LOCAL_KEY:
bIsLocal = ~bIsLocal;
Set_Local();
if(bIsLocal) FPDisplayIcon(FP_INFO_DX,0);
else FPDisplayIcon(FP_INFO_DX,1);
DisplayTunerCurrentFreq();
break;
case ST_KEY:
bIsStereo = ~bIsStereo;
Set_Stereo();
break;
case BAND_KEY:
TunerBand++;
bPreset = 0;
if(TunerBand > 4) TunerBand = 1;
if(TunerBand == 4){
bIsFm = 0;
}
else{
bIsFm = 1;
}
MuteOn();
Set_Band();
GotoFreq();
DisplayTunerCurrentFreq();
{ unsigned int i;
for(i=0;i<1000;i++);
}
MuteOff();
break;
case NUM1_KEY:
case NUM2_KEY:
case NUM3_KEY:
case NUM4_KEY:
case NUM5_KEY:
case NUM6_KEY:// it is from ir
{
unsigned char uctemp = key - NUM1_KEY + 1;
uctemp = GetRealPresetNo(uctemp);
GotoPreset(uctemp);
}
break;
case P1_KEY:
case P2_KEY:
case P3_KEY:
case P4_KEY:
case P5_KEY:
case P6_KEY: // it is from pannel
{
unsigned char uctemp = key - P1_KEY + 1;
uctemp = GetRealPresetNo(uctemp);
GotoPreset(uctemp);
}
break;
case M1_KEY:
case M2_KEY:
case M3_KEY:
case M4_KEY:
case M5_KEY:
case M6_KEY:
{
unsigned char uctemp = key - M1_KEY + 1;
uctemp = GetRealPresetNo(uctemp);
SavePreset(uctemp);
FpClearStr();
SetTimerFunc(TIME_500MS,REDRAW_KEY);
}
break;
case UP_KEY:
FreqUp();
break;
case DOWN_KEY:
FreqDown();
break;
case SEEKUP_KEY:
case SEEKDOWN_KEY:
if(key == SEEKUP_KEY ) {
bIsUp = 1;
FreqUp();
}
else{
bIsUp = 0;
FreqDown();
}
bIsAscan = 0;
bIsPscan = 0;
GotoSeekMode();
break;
case AS_KEY:
case PS_KEY:
bIsAscan = 0;
bIsPscan = 0;
if(key == AS_KEY) bIsAscan = 1;
else
bIsPscan = 1;
bIsUp = 1;
if(bIsFm) {
if(bIsAscan) {
FmFreq = FreqArray[TunerArea].FmMin;
FmPresetNo = 0;
}
else if(bIsPscan) {
if(FmFreq>= FreqArray[TunerArea].FmMax) FmFreq = FreqArray[TunerArea].FmMin;
}
}
else{
if(bIsAscan){
AmFreq = FreqArray[TunerArea].AmMin;
AmPresetNo = 0;
}
else if(bIsPscan) {
if(AmFreq>= FreqArray[TunerArea].AmMax) AmFreq = FreqArray[TunerArea].AmMin;
}
}
GotoFreq();
DisplayTunerCurrentFreq();
GotoSeekMode();
break;
case INIT_KEY:
TunerInit();
RecoverFreq();
Set_Local();
break;
case RECOVER_KEY:
RecoverFreq();
break;
case REDRAW_KEY:
if(bNeedSaveTone){
bNeedSaveTone = 0;
SaveTone();
}
RedrawTuner();
SetTimerFunc(TIME_1SEC,SAVE_CURRENT_FREQ_KEY);
break;
case SAVE_CURRENT_FREQ_KEY:
if(bIsFm){
if(CurrentFreq != FmFreq) SaveFreq();
if(bIsStereo){
if(IsStereo()){
FPDisplayIcon(FP_INFO_ST,1);
}
else{
FPDisplayIcon(FP_INFO_ST,0);
}
}
}
else{
if(CurrentFreq != AmFreq) SaveFreq();
FPDisplayIcon(FP_INFO_ST,0);
}
SetTimerFunc(TIME_1SEC,SAVE_CURRENT_FREQ_KEY);
break;
}
return 0;
}
//收音的主处理程序,当当前的状态是收音机时,所有的按键都交给它处理,包括定时消息.
unsigned char TunerFunc(int key,unsigned char *para)
{
switch(TunerMode){
case TUNER_SEEK_MODE:
TunerSeekFunc(key,para);
break;
default :
TunerMainFunc(key,para);
break;
}
return 0;
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -