📄 tea5767.h
字号:
for(t=0;t<78;t++)Write_data(0x84);//显示进度调
Write_data(0xFC);
}
//自动搜索,并保存
void get_ch(void)
{
uchar ts;
if(senddata[3]&0x20)set_freq=LowestFM_JA;//设置到日本频段的最低端
else set_freq=LowestFM_US;//设置到美国频段的最低端
change_frequency(); //更新信息
//printf("set_freq:%d",set_freq/10);
Ch_Num=0;//搜索到的频道清空
while(1)//一旦执行,不可中断
{
ts=search_station(1);
if(ts==2) //搜索到一个电台
{
Ch_Value[Ch_Num]=set_freq;//保存电台
if(Ch_Num<30)Ch_Num++;//频道上升
sCh_Cho=Ch_Num;
}
else if(ts==1)//搜索结束
{
Ch_Cho=0;
Ch_Num--;//最后一次并没有加进去
set_frequency(Ch_Value[Ch_Cho]);//保存电台
sCh_Cho=Ch_Cho;//把eeprom 的值赋值给sram
sCh_Num=Ch_Num;
return;//搜索结束
}
Radio_msg();//显示信息
}
}
//收音机模式
//所有收音功能
void Radio_Play(void)
{
uchar t=0;
Radio_GUI();//显示gui
RPlaying=1;//播放模式
Audio_Ch=3;//选择收音机音频通道
init_cd3315(Audio_Ch);
Radio_msg();//初始化基本信息
while(1)
{
if(READY)//有按键按下
{
keyval=key_process();
switch(keyval)
{
case NEXT: // 向上搜台/自动搜台
{
if(times>3)
{
search_station(0);//长按,自动向上搜台
for(t=0;t<30;t++)//if 匹配CH内容
if((set_freq/100)==(Ch_Value[t]/100))//匹配100khz
{
sCh_Cho=t;
break;
}
READY=0;
}
else frequency_UP_DOWN(0); //频率减少
break;
}
case PREV:// 向下搜台/自动搜台
{
if(times>3)
{
search_station(1);//长按,自动向下搜台
for(t=0;t<30;t++)//if 匹配CH内容
if((set_freq/100)==(Ch_Value[t]/100))//匹配100khz
{
sCh_Cho=t;
break;
}
READY=0;
}
else frequency_UP_DOWN(1);//频率增加
break;
}
case QUIT: //退出
{
Ch_Cho=sCh_Cho;//保存上次退出时的频道
MUTE=0; //静音消除
RPlaying=0; //清除播放标志
return; //退出
}
case 48: //下一个频道 CH调节
{
if(times>3)//持续按下,并全自动搜台
{
JPUS=senddata[3]=JPS;
Ch_Num=0; //清空总数
Ch_Cho=0; //清空选择
Ch_Value[0]=76000;//设置到第一个频道
get_ch();
READY=0;
set_freq=Ch_Value[0];
set_frequency(set_freq);//播放ch0
break;
}
if(sCh_Cho)sCh_Cho--;
else sCh_Cho=sCh_Num;
set_freq=Ch_Value[sCh_Cho];//修改当前频率
set_frequency(Ch_Value[sCh_Cho]);//设置到下一个频道
break;
}
case 168: //上一个频道 CH调节
{
if(times>3)//持续按下/换频道,并全自动搜台
{
JPUS=senddata[3]=USA;
Ch_Num=0; //清空总数
Ch_Cho=0; //清空选择
Ch_Value[0]=85000;//设置到第一个频道
get_ch();
READY=0;
set_freq=Ch_Value[0];
set_frequency(set_freq);//播放ch0
break;
}
if(sCh_Cho<Ch_Num)sCh_Cho++;
else sCh_Cho=0;
set_freq=Ch_Value[sCh_Cho];//修改当前频率
set_frequency(Ch_Value[sCh_Cho]);//设置到上一个频道
break;
}
case 106://调节截至adc
{
Adc_Level++;
if(Adc_Level==4)Adc_Level=0;//调节门限值
break;
}
case 242://调节截至adc
{
STEREO=!STEREO;
set5767();//修改设置
break;
}
case 248://静音选择
{
MUTE=!MUTE;
init_cd3315(Audio_Ch);//音乐改变之后的设置生效
break;
}
}
READY=0;//清除按键标志
Radio_msg();//显示改变后的设置
}
keyval=0;
}
}
//手动设置频率
void set_frequency(unsigned long frequency) //设定频率KHz
{
unsigned int PLL;
unsigned char falg;
if(senddata[2]&0x10)//根据充电电流HLSI计算
PLL=(unsigned int)((float)((frequency+225)*4)/(float)32.768);
else
PLL=(unsigned int)((float)((frequency-225)*4)/(float)32.768);
senddata[0]=PLL/256;
senddata[1]=PLL%256;
senddata[0]&=0x3F;
falg=set5767();
delay_ms(30);//等待设置生效
change_frequency();//更新数据
}
//从当前频率向上或者向下搜台
uchar search_station(unsigned char UP_DOWN) //自动搜台程序
{
bit mark=0; //标志位
uchar tempadc=0; //暂存adc值
uchar times=0; //偏移限制
ulong best_freq=0; //保存最好的频率
read5767(); //先读状态
if(UP_DOWN)set_freq+=200; //预偏移
else set_freq-=200;
while(1)
{
if(READY&&key_process()==QUIT)return;//中断搜索
if(UP_DOWN)set_freq+=50;
else set_freq-=50;
if(senddata[3]&0x20) //日本频带
{
if(set_freq<LowestFM_JA) //到达最低频率
{
set_freq=HighestFM_JA;
return 0;//到达了最高频率
}
else if(set_freq>HighestFM_JA) //到达最高频率
{
set_freq=LowestFM_JA;
return 1;//到达了最低频率
}
}
else //美国频带
{
if(set_freq<LowestFM_US) //到达最低频率
{
set_freq=HighestFM_US;
return 0;
}
else if(set_freq>HighestFM_US)//到达最高频率
{
set_freq=LowestFM_US;
return 1;
}
}
set_frequency(set_freq);
Radio_msg(); //显示电台信息
if(SIGNAL_ADC>=(Adc_Level+10)&&SIGNAL_ADC>=tempadc)//得到强信号
{
tempadc=SIGNAL_ADC;//记录最大值
best_freq=set_freq;//记录此次最好的频率
mark=1;
}
if(mark)times++; //统计次数增加
if(times>4&&SIGNAL_ADC<=(Adc_Level+10))//有记录了,并且信号下降
{
set_frequency(best_freq);
set_freq=best_freq;
return 2;//搜索到一个台
}
}
}
// 手动找台 ,mode=1,+0.1MHz;mode=0:-0.1MHz
void frequency_UP_DOWN(unsigned char mode)// // 步进 0.1MHz
{
set_freq=set_freq; //在手东条件下调节
if(mode)set_freq+=100; //向上0.1MHz
else set_freq-=100; //向下0.1MHz
if(senddata[3]&0x20) //日本频带
{
if(set_freq<LowestFM_JA) //到达最低频率
set_freq=HighestFM_JA;
else if(set_freq>HighestFM_JA) //到达最高频率
set_freq=LowestFM_JA;
}
else //美国频带
{
if(set_freq<LowestFM_US) //到达最低频率
set_freq=HighestFM_US;
else if(set_freq>HighestFM_US) //到达最高频率
set_freq=LowestFM_US;
}
set_frequency(set_freq);
read5767(); //更新
}
//收音机初始化
void radio_init(void)
{
DDRC&=0Xfc;
PORTC|=0X03;//内部上拉
TEA5767_INTI();
read5767();
if(Ch_Value[sCh_Cho]>=76000&&Ch_Value[sCh_Cho]<10800)set_frequency(Ch_Value[sCh_Cho]);//初始化
else
{
set_freq=Ch_Value[sCh_Cho];
set_frequency(set_freq);//初始化到退出时的频率
}
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -