📄 7540 demo code.c
字号:
void Key_Mono() //Register 25, FM 才有 只需变更寄存器25 d2位值
{
if(band_am) return;
mono_mode = ~mono_mode;
flag_mono = 1;
channel = 0;
if(mono_mode) //立体音 ee
{
I2CWriteByte(ST7540_address, 25, RadioBuffer[25]); //stereo
}
else
{
I2CWriteByte(ST7540_address, 25, RadioBuffer[25] & (~0x04)); //mono
}
Refresh_Radio( );
}
void Key_Local() //Register 7, AM Control 先刷寄存器7,如衰减不够再调整寄存器18或不管寄存器7,直接衰减寄存器18值
{
if(band_am) return;
flag_local = ~flag_local;
channel = 0;
if(flag_local) //0x00, Disable local mode
{
I2CWriteByte(ST7540_address, 7, RadioBuffer[7]&0x7f);
}
else
{
I2CWriteByte(ST7540_address, 7, RadioBuffer[7] | 0x80);
}
Refresh_Radio( );
}
void Key_Tuninc(void)
{
if(band_fm)
{
if(fm_freq < fm_max_freq)
fm_freq += fm_step;
else
fm_freq = fm_min_freq;
}
else
{
if(am_freq < am_max_freq)
am_freq += am_step;
else
am_freq = am_min_freq;
}
if(dis_station)
{
dis_station = 0;
// station = 0;
}
Refresh_Radio( );
}
void Key_Tundec(void)
{
if(band_fm)
{
if(fm_freq > fm_min_freq)
fm_freq -= fm_step;
else
fm_freq = fm_max_freq;
}
else
{
if(am_freq > am_min_freq)
am_freq -= am_step;
else
am_freq = am_max_freq;
}
if(dis_station)
{
dis_station = 0;
// station = 0;
}
Refresh_Radio( );
}
//在FM 模式下,改变PLL 参数后,通常等待时间为3ms,
//在AM 模式下,改变PLL 参数后,通常等待时间为16ms,
void Polling_Scan(void) //搜到一个电台
{
int i, j;
switch(scan_op)
{
case SCAN_1: //mute
m_time = 0;
Polling_Mute( );
Refresh_7313( );
Mute_7313(1);
scan_tm = 1;
scan_op = SCAN_2;
break;
case SCAN_2:
if(flag_dir)
{
if((band_fm)&&(!(fm_freq%10)))
Key_Tuninc( );
Key_Tuninc( );
}
else
{
if((band_fm)&&(!(fm_freq%10)))
Key_Tundec( );
Key_Tundec( );
}
if(band_fm)
{
scan_tm = 1;
if(!flag_dir && (fm_freq == fm_min_freq))
scan_op = SCAN_8;
else if(flag_dir && (fm_freq == fm_max_freq))
scan_op = SCAN_8;
else
scan_op = SCAN_3;
}
else
{
scan_tm = 3;
if(!flag_dir && (am_freq == am_min_freq))
scan_op = SCAN_8;
else if(flag_dir && (am_freq == am_max_freq))
scan_op = SCAN_8;
else
scan_op = SCAN_3;
}
break;
case SCAN_3:
if(band_fm)
scan_tm = 1;//5;
else
scan_tm = 3;
scan_op = SCAN_4;
radio_counter = 0;
break;
case SCAN_4:
j = 0;
for(i=0; i<1000; i++)
{
if(tuner_stop)
j++;
}
if(j > 950) //收到台
radio_counter ++;
scan_op = SCAN_5;
break;
case SCAN_5:
j = 0;
for(i=0; i<1000; i++)
{
if(tuner_stop)
j++;
}
if(j > 950) //收到台
radio_counter ++;
scan_op = SCAN_6;
break;
case SCAN_6:
j = 0;
for(i=0; i<1000; i++)
{
if(tuner_stop)
j++;
}
if(j > 950) //收到台
radio_counter ++;
if(radio_counter<2)
{
scan_op = SCAN_2;
break;
}
scan_op = SCAN_7;
break;
case SCAN_7:
j = 0;
for(i=0; i<1000; i++)
{
if(tuner_stop)
j++;
}
if(j > 950) //收到台
radio_counter ++;
if(radio_counter<3)
{
scan_op = SCAN_2;
break;
}
scan_op = SCAN_8;
scan_tm = 1;//255;
break;
case SCAN_8:
play_mo = NORMAL;
Mute_7313(0);
scan_op = 0;
break;
default:
break;
}
}
void Polling_AMS(void) //搜索所有一个电台
{
int i, j;
switch(scan_op)
{
case AMS_1:
m_time = 0;
Polling_Mute( );
Refresh_7313( );
Mute_7313(1);
if(band_fm)
{
fm_freq = fm_min_freq;
band = 0;
}
else
{
am_freq = am_min_freq;
band = 3;
}
station = 1;
dis_station = 0;
scan_tm = 1;
scan_op = AMS_2;
break;
case AMS_2:
if((band_fm && (fm_freq == fm_max_freq)) || (band_am && (am_freq == am_max_freq)))
{
station = 1;
if(band_fm)
band = 0;
if(band_am)
band = 3;
scan_op = AMS_8;
break;
}
if((band_fm)&&(!(fm_freq%10)))
Key_Tuninc( );
Key_Tuninc( );
if(band_fm)
scan_tm = 1;//5;
else
scan_tm = 3;
scan_op = AMS_3;
break;
case AMS_3:
if(band_fm)
scan_tm = 1;//5;
else
scan_tm = 3;
scan_op = AMS_4;
radio_counter = 0;
radio_oldcounter = 4;
break;
case AMS_4:
j = 0;
for(i=0; i<1000; i++)
{
if(tuner_stop)
j++;
}
if(j > 950) //收到台
radio_counter ++;
scan_op = AMS_5;
break;
case AMS_5:
j = 0;
for(i=0; i<1000; i++)
{
if(tuner_stop)
j++;
}
if(j > 950) //收到台
radio_counter ++;
scan_op = AMS_6;
break;
case AMS_6:
j = 0;
for(i=0; i<1000; i++)
{
if(tuner_stop)
j++;
}
if(j > 950) //收到台
radio_counter ++;
if(radio_counter<2)
{
scan_op = AMS_2;
scan_tm = 1;
radio_oldcounter = 4;
break;
}
scan_op = AMS_7;
break;
case AMS_7:
j = 0;
for(i=0; i<1000; i++)
{
if(tuner_stop)
j++;
}
if(j > 950) //收到台
radio_counter ++;
if(radio_counter<4)
{
scan_op = AMS_2;
scan_tm = 1;
radio_oldcounter = 4;
break;
}
if(radio_counter>radio_oldcounter)
station--;
radio_oldcounter = radio_counter;
if(band_fm && (fm_freq == fm_max_freq))
{
scan_op = AMS_2;
break;
}
Save_Station(station);
station ++;
if(station == 7)
{
station = 1;
band ++;
if((band == 3)||(band == 5))
{
band --;
scan_op = AMS_8;
break;
}
}
scan_tm = 1;
scan_op = AMS_2;
break;
case AMS_8:
if(band_fm)
band = 0;
else
band = 3;
Call_Station(1);
play_mo = NORMAL;
Mute_7313(0);
scan_op = 0;
break;
default:
break;
}
}
void Polling_APS(void) //polling every 100ms , 循环收听电台,每5S换一电台
{
switch(scan_op)
{
case APS_1:
if(band_fm)
band = 0;
if(band_am)
band = 3;
Call_Station(1);
scan_tm = 100; //5 second
scan_op = APS_2;
break;
case APS_2:
scan_tm = 1;
station ++;
if(station == 7)
{
station = 1;
band ++;
if((band == 3) || (band == 5))
{
if(band == 3)
band = 0;
else
band = 3;
play_mo = NORMAL;
scan_op = NORMAL;
Call_Station(1);
break;
}
}
Mute_7313(1);
scan_op = APS_3;
break;
case APS_3:
Call_Station(station);
scan_tm = 100;
scan_op = APS_2;
break;
default:
break;
}
}
void Polling_Tuner(void)
{
if(source !=RADIO) return;
if(scan_tm) return;
switch(play_mo)
{
case AUTOSCAN:
Polling_Scan( );
break;
case AUTOMEM:
Polling_AMS( );
break;
case AUTOPLAY:
Polling_APS( );
break;
default://NORMAL
break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -