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

📄 tuner.c

📁 nl81,收音头开发资料
💻 C
📖 第 1 页 / 共 2 页
字号:
		address = (presetno-1)*2 + ADDR_AMSTATION_START;
	}

    ReadEepromBytes(address,(unsigned char *)&uitemp,2);
    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()
{
	extern unsigned int idata TimeMessage,message_timer;
	unsigned char uctemp;
	if(TimeMessage==PS_TIMEOUT){
		uctemp = message_timer % TIME_1SEC;
		if( uctemp ==0){
			uctemp = message_timer / TIME_1SEC;
			uctemp &= 0x1;
			if(uctemp){
				SaveKeyToBuff(REDRAW_KEY);
			}
			else{
				SaveKeyToBuff(CLEARSCREEN_KEY);
			}
		}
	}
}


//收音的追台处理程序,被TunnerFunc调用.
unsigned char TunerSeekFunc(unsigned char key,unsigned char *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(countifok>=2||bIsLocal){
					DisplayTunerCurrentFreq();
					if(bIsAscan == 0 && bIsPscan == 0) ReturntoMainMode();
					else {
						StopSeekStation();
						GotoFreq();
						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;
						}
					}
				}
				else{
					countifok++;
					ResetIfcount();
					SetTimerFunc(TIME_100MS,IFCOUNT_KEY);
				}
			}
			else{
				if(countifc>=2||bIsLocal){
					if(  (bIsAscan || bIsPscan) && IsFreqOverFlow() ){//at the end, stop
						ReturntoMainMode();
					}
					else{
						if(bIsUp) FreqUp();
						else FreqDown();
						GotoSeekMode();
					}
				}
				else{
					countifc++;
					ResetIfcount();
					SetTimerFunc(TIME_100MS,IFCOUNT_KEY);
				}
			}
		break;
		
		case AS_TIMEOUT:
		case PS_TIMEOUT:
			if( IsFreqOverFlow())	ReturntoMainMode();
			else{
				FreqUp();
				GotoSeekMode();
			}
			//TimeMessage = 0;
		break;
		
		case  REDRAW_KEY:
			RedrawTuner();
		break;
		
		case CLEARSCREEN_KEY:
		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(unsigned char key,unsigned char *para)
{
	switch(key){
		case LOCAL_KEY:
		case PAUSE_KEY:
			bIsLocal = ~bIsLocal;
			Set_Local();
			DisplayTunerCurrentFreq();
			RXDebugStr("local key\n");
			RXDebugHex(bIsLocal);
		break;

		case ST_KEY:
			bIsStereo = ~bIsStereo;
			Set_Stereo();
			DisplayTunerCurrentFreq();
		break;

		case BAND_KEY:
		case MODE_KEY:
			TunerBand++;
			bPreset = 0;
			if(TunerBand > 4) TunerBand = 1;
			if(TunerBand == 4){
				bIsFm = 0;
			}
			else{
				bIsFm = 1;
			}
			//Pt2257_MuteOn();
			Set_Band();
			GotoFreq();
			DisplayTunerCurrentFreq();
			{	 unsigned int i;
				for(i=0;i<1000;i++);
			}
		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);
				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:
			//RecoverFreq();
			TunerInit();
			Set_Local();
			DisplayTunerCurrentFreq();	
		break;
		
		case RECOVER_KEY:
			RecoverFreq();
			break;
			
		case REDRAW_KEY:
			RedrawTuner();
			SetTimerFunc(TIME_1SEC,SAVE_CURRENT_FREQ_KEY);
		break;

#if 0		
		case SAVE_CURRENT_FREQ_KEY:
			if(bIsFm){
				if(CurrentFreq != FmFreq) SaveFreq();
				if(bIsStereo){
					if(IsStereo()){
					}
					else{
					}
				}
			}
			else{
				if(CurrentFreq != AmFreq) SaveFreq();
			}
			SetTimerFunc(TIME_1SEC,SAVE_CURRENT_FREQ_KEY);	
		break;
#endif
	}
	return 0;
}

//收音的主处理程序,当当前的状态是收音机时,所有的按键都交给它处理,包括定时消息.
unsigned char  TunerFunc(unsigned char key,unsigned char *para)
{
	unsigned char tempkey;
	tempkey = TranslateKey(key);
	switch(TunerMode){
		case TUNER_SEEK_MODE:
			TunerSeekFunc(tempkey,para);
		break;

		default :
			TunerMainFunc(tempkey,para);
		break;
	}
	return 0;
}

unsigned char TranslateKey(unsigned char key)
{
		switch(key){
			case LEFT_KEY:
				key = PS_KEY;
				break;
			case RIGHT_KEY:
				key = AS_KEY;
				break;
			case PAUSE_KEY:
				key = LOCAL_KEY;
				break;
			case STOP_KEY:
				key = ST_KEY;
				break;	
		}
	return key;
}


#endif

⌨️ 快捷键说明

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