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

📄 tuner.lst

📁 用TEA7567做的调频收音机,本人经测试通过的
💻 LST
📖 第 1 页 / 共 2 页
字号:
 232             // calculate searched station frequency from dataword bits 
 233              if(FlagHighInjection)
 234               tdwtestVCO =(unsigned long)((float)twPLL*(float)REFERENCE_FREQ*(float)0.25-225);
 235              else
 236               tdwtestVCO =(unsigned long)((float)twPLL*(float)REFERENCE_FREQ*(float)0.25+225);
 237                         
 238          } 
 239          ///****************test
 240          */
 241          
C51 COMPILER V7.06   TUNER                                                                 03/16/2009 19:12:51 PAGE 5   

 242          void Tuner_Preset (BIT Mute, BIT SetMono,BIT Pin15,unsigned long VCO)    
 243          {/*
 244   1        //***********test
 245   1        unsigned char bLevel;
 246   1              unsigned char bIFCounter;
 247   1              unsigned char brf;
 248   1              unsigned char bstero;
 249   1              //************test
 250   1      */      
 251   1        FlagSearch = False;               // Set global parameters
 252   1        FlagMono = SetMono;
 253   1        FlagSWPORT2 = Pin15;
 254   1        gdwPresetVCO = VCO; 
 255   1        FlagMute=Mute;                   //0301 mao 
 256   1       // RF_Have=1;
 257   1           
 258   1        AssembleData();
 259   1        Tuner_I2cSendData();
 260   1      //  Delay10us(25000);                 //200ms
 261   1        Delay_ms(100);
 262   1       /* 
 263   1        //**********test*********
 264   1        Delay_ms(100);
 265   1        Tuner_I2cReadData(); 
 266   1        brf=((ReadDataWord[0]>> 7) & 0x01);            //RF位
 267   1        bstero=((ReadDataWord[2]>>7) & 0x01);          //立体声标志
 268   1        bIFCounter = ReadDataWord[2] & 0x7F;           //中频计数
 269   1        bLevel = (ReadDataWord[3] & 0xF0) >> 4;              //ADC电平  
 270   1        DisAssembleFrequencyWord();  
 271   1        */                   
 272   1      } 
 273          
 274          //自动向上收下一台      收到台为返回1  收到头返回0  
 275          bit Autosearch_Up()
 276          {
 277   1              unsigned char bLevel;
 278   1              unsigned char bIFCounter;
 279   1              unsigned char brf;
 280   1              unsigned char bstero;
 281   1              unsigned char bandlimint;
 282   1          while(Flash_Times>0)
 283   1                      {WatchDog;}
 284   1                do  
 285   1                 {
 286   2                      if(gdwPresetVCO<HighestFM)
 287   2                       { 
 288   3                       WatchDog;
 289   3                       gdwPresetVCO+=100;              
 290   3                       bandlimint=0;                    //频率边界标志 向上频率大与108 为1 
 291   3                       AssembleFrequencyWord();
 292   3                       Frequency_Change(gdwPresetVCO);
 293   3                       WatchDog;
 294   3                       WriteDataWord[0]= ((WriteDataWord[0]|0x80)&0xBF);    //打开静音/定点模式       
 295   3                       Tuner_I2cSendData();
 296   3                       if(SearchDelayMs(1000))
 297   3                       {
 298   4                              while((Up_Key!=1)||(Down_Key!=1))//如果还有按下时,表示有人为的停下要求了
 299   4                              {
 300   5                                      WatchDog;                                                               
 301   5                              }
 302   4                              break;
 303   4                       }
C51 COMPILER V7.06   TUNER                                                                 03/16/2009 19:12:51 PAGE 6   

 304   3                       WatchDog;
 305   3                       Tuner_I2cReadData();
 306   3                       brf=((ReadDataWord[0]>> 7) & 0x01);            //RF位
 307   3                       bstero=((ReadDataWord[2]>>7) & 0x01);          //立体声标志
 308   3                       bIFCounter = ReadDataWord[2] & 0x7F;           //中频计数
 309   3                       bLevel = (ReadDataWord[3] & 0xF0) >> 4;               //ADC电平
 310   3                       }
 311   2                       else
 312   2                       {
 313   3                        bandlimint=1;
 314   3                        break;
 315   3                       }
 316   2              }
 317   1               while(!((brf==1)&&(bLevel>=8)&&(bIFCounter>=0x32)&&(bIFCounter<=0x3E)));               //收台判断条件
 318   1              if (bandlimint==1)
 319   1                      {
 320   2                        Auto_Search_Flag=1;//使能闪烁功能
 321   2                        Flash_Times=4;//闪烁次数
 322   2                return 0;                                            //收到频率顶端,返回0
 323   2                      }
 324   1              else
 325   1                      {
 326   2                        WriteDataWord[0]=WriteDataWord[0]&0x3F;      //关闭静音                                
 327   2                        Tuner_I2cSendData();  //写收到的台输出
 328   2                        Auto_Search_Flag=1;
 329   2                        Flash_Times=4;
 330   2                        Flag_500ms=0;
 331   2                return 1;
 332   2                      }
 333   1      }
 334          
 335          
 336          //自动向下收下一台      收到台为返回1  收到头返回0  
 337          bit Autosearch_Down()
 338          {
 339   1              unsigned char bLevel;
 340   1              unsigned char bIFCounter;
 341   1              unsigned char brf;
 342   1              unsigned char bstero;
 343   1              unsigned char bandlimint;
 344   1              while(Flash_Times>0)
 345   1                      {WatchDog;}
 346   1                do  
 347   1                 {
 348   2                      if(gdwPresetVCO>LowestFM)
 349   2                       {
 350   3                       WatchDog;
 351   3                       gdwPresetVCO-=100;         
 352   3                       bandlimint=0;                    //频率边界标志 向下频率小与875为1  
 353   3                       AssembleFrequencyWord();
 354   3                       Frequency_Change(gdwPresetVCO);
 355   3                       WatchDog;
 356   3                       WriteDataWord[0 ]= ((WriteDataWord[0]|0x80)&0xBF);    //打开静音/定点模式      
 357   3                       Tuner_I2cSendData();
 358   3                       if(SearchDelayMs(1000))
 359   3                       {      
 360   4                              while((Up_Key!=1)||(Down_Key!=1))//如果还有按下时,表示有人为的停下要求了
 361   4                              {
 362   5                                      WatchDog;                                                               
 363   5                              }
 364   4                              break;
 365   4                       }
C51 COMPILER V7.06   TUNER                                                                 03/16/2009 19:12:51 PAGE 7   

 366   3                       WatchDog;
 367   3                       Tuner_I2cReadData();
 368   3                       brf=((ReadDataWord[0]>> 7) & 0x01);            //RF位
 369   3                       bstero=((ReadDataWord[2]>>7) & 0x01);          //立体声标志
 370   3                       bIFCounter = ReadDataWord[2] & 0x7F;           //中频计数
 371   3                       bLevel = (ReadDataWord[3] & 0xF0) >> 4;               //ADC电平
 372   3                       
 373   3                       }
 374   2                       else
 375   2                       {
 376   3                        bandlimint=1;
 377   3                        break;
 378   3                       }
 379   2              }
 380   1               while(!((brf==1)&&(bLevel>=8)&&(bIFCounter>=0x34)&&(bIFCounter<=0x3E)));
 381   1              if (bandlimint==1)
 382   1                       {
 383   2                        Auto_Search_Flag=1;//使能闪烁功能
 384   2                        Flash_Times=4;//闪烁次数
 385   2                return 0;                                                 //收到频率顶端,返回0
 386   2                        }
 387   1              else
 388   1                        {
 389   2                        WriteDataWord[0]=WriteDataWord[0]&0x3F;      //关闭静音
 390   2                        Tuner_I2cSendData();
 391   2                        Auto_Search_Flag=1;//使能闪烁功能
 392   2                        Flash_Times=4;//闪烁次数
 393   2                        Flag_500ms=0;
 394   2                return 1;
 395   2                        }
 396   1      }
 397          
 398          
 399          void Tuner_Init(void)
 400          {
 401   1        BYTE i;
 402   1        for(i=0;i<5;i++)                                                      //Clear 5767 data buffer =0
 403   1        {
 404   2         ReadDataWord[i] = False;
 405   2         WriteDataWord[i] =False;
 406   2        }
 407   1       
 408   1        WriteDataWord[0] = 0x2a|0x80;                 //init FM89.8MHz ok.            //init FM89.8MHz ok.
 409   1      
 410   1        WriteDataWord[1] = 0x0b6;
 411   1        WriteDataWord[2] = 0x41;      //ADC输出为7,高充电流为0;               
 412   1        WriteDataWord[3] = 0x13;      //soft Mute关,立体声去噪打开
 413   1        WriteDataWord[4] = 0x00;//50us去加重电路
 414   1        Tuner_I2cSendData();
 415   1        Delay10us(100); 
 416   1       
 417   1      //  WriteDataWord[0] = 0x2a;                    // init FM89.8MHz ok.
 418   1      //  WriteDataWord[1] = 0x0b6;
 419   1      //  WriteDataWord[2] = 0x41;                 //p1 high          
 420   1      //  WriteDataWord[3] = 0x11;                    
 421   1      //  WriteDataWord[4] = 0x40;
 422   1      ///  Tuner_I2cSendData();
 423   1      
 424   1      //  Tuner_Preset( False, True,High,89800 )  ;
 425   1       // gdwPresetVCO=89800;
 426   1      //  Frequency_Change(gdwPresetVCO);
 427   1        
C51 COMPILER V7.06   TUNER                                                                 03/16/2009 19:12:51 PAGE 8   

 428   1      
 429   1      }
 430          /*
 431          void Check_Ch(void)
 432          {
 433                  
 434                  if(Check_ADC_Count>50)//计时大于3秒了
 435                  {
 436                          Check_ADC_Count=0;//清强度检测计时器
 437                          Tuner_I2cReadData();
 438                          ADC_Val=(ReadDataWord[3] & 0xF0) >> 4;         //ADC电平
 439                      if(ADC_Val<District)//检测不到台的下限值
 440                          {
 441                                  WriteDataWord[0]= ((WriteDataWord[0]|0x80)&0xBF);    //打开静音/定点模式
 442                                  Tuner_I2cSendData();
 443                  
 444                          }//Tuner_Preset (True, True,False,gdwPresetVCO);//静音
 445                      else
 446                          {
 447                                  WriteDataWord[0]= (WriteDataWord[0]&0x3F);    //打开静音/定点模式
 448                                  Tuner_I2cSendData();
 449                          }//Tuner_Preset (False, True,Low,gdwPresetVCO);//不静音
 450          
 451                  }
 452          }
 453          */


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1062    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      3      18
   IDATA SIZE       =     10    ----
   BIT SIZE         =     12       4
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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