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