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

📄 tea5767.h

📁 用Mega32+VS1003做的MP3(FAT32文件系统浏览)——源代码
💻 H
📖 第 1 页 / 共 2 页
字号:
    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 + -