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

📄 tuner.lst

📁 一个带收音的功放程序, VFD显示驱动用一个非常实用的方法, 稍加修改即可换成不同的VFD, 功放芯片用M61538
💻 LST
📖 第 1 页 / 共 3 页
字号:
 251   3                              //FM,中频频率为10.7MHz在32ms内的计数值应为0x53980
 252   3                              if((uiIFCount>=(FMIFS-FMDELTA))&&(uiIFCount<=(FMIFS+FMDELTA)))
 253   3                              {
 254   4                                      return TRUE;
 255   4                              }
 256   3                              
 257   3                      }
 258   2                      else
 259   2                      {
 260   3                              //AM,中频是450KHZ,在32MS内的计数为0x3840
 261   3                              if((uiIFCount>=(AMIFS-AMDELTA))&&(uiIFCount<=(AMIFS+AMDELTA)))
 262   3                              {
 263   4                                      return TRUE;
 264   4                              }
 265   3                      }
 266   2                      return FALSE;
 267   2              }
 268   1              
 269   1      }
 270          
 271          /********************************************
 272           * 频率加1,如果超过范围,则自动从最小开始      *
 273           * 返回当前频率值                                       *
 274           ********************************************/
 275          void RadioUp(void)
 276          {
 277   1              //WORD idata uiFreqTemp;
 278   1              
 279   1          //当前频率加1个步长
 280   1              if(FM_AM_Select == FM_MODE )
 281   1              {
 282   2                      //加50KHz
 283   2                      if(DeltFMFreq >= (FMFREQMAX - FMFREQSTEP))
 284   2                      {
 285   3                              DeltFMFreq = 0;
 286   3                              if(Auto_Scan_Enable == 1)
 287   3                                      Auto_Is_Reach = 1;                              
 288   3                      }
 289   2                      else
 290   2                              DeltFMFreq += FMFREQSTEP;  //
 291   2                      Current_Freq=(WORD)DeltFMFreq+(WORD)FMFREQMIN;
 292   2              }
 293   1              else
 294   1              {               
 295   2                      if(DeltAMFreq >= (AMFREQMAX-AMFREQSTEP))
 296   2                      {
 297   3                              DeltAMFreq = 0;
 298   3                              if(Auto_Scan_Enable == 1)
 299   3                                      Auto_Is_Reach = 1;
 300   3                      }
 301   2                      else
 302   2                              DeltAMFreq += AMFREQSTEP;
 303   2                      Current_Freq=(WORD)DeltAMFreq+AMFREQMIN;
C51 COMPILER V7.20   TUNER                                                                 06/30/2005 14:02:57 PAGE 6   

 304   2              }
 305   1              //RadioFreq(Current_Freq);
 306   1              //return Current_Freq;
 307   1      }
 308          
 309          /********************************************
 310           * 频率减1,如果超过范围,则自动从最大开始      *
 311           * 返回当前频率                                         *
 312           ********************************************/
 313          void RadioDown(void)
 314          {
 315   1              //WORD uiFreq;  
 316   1          //当前频率减1个步长
 317   1              if(FM_AM_Select == FM_MODE)
 318   1              {               
 319   2                      if(DeltFMFreq < FMFREQSTEP) //如果当前的偏差小于步长, 那么设置最大值
 320   2                              DeltFMFreq = FMFREQMAX;
 321   2                      else
 322   2                              DeltFMFreq -= FMFREQSTEP;
 323   2                      Current_Freq=FMFREQMIN+DeltFMFreq;
 324   2              }
 325   1              else
 326   1              {               
 327   2                      if(DeltAMFreq < AMFREQSTEP)
 328   2                              DeltAMFreq = AMFREQMAX;
 329   2                      else
 330   2                              DeltAMFreq -= AMFREQSTEP;
 331   2                      Current_Freq=AMFREQMIN+(WORD)DeltAMFreq;
 332   2              }
 333   1              
 334   1      }
 335          /*****************************************************************
 336           * TUNER 处理函数 *
 337           包括全自动扫描, 手动向下扫描, 手动向上扫描, 记忆存储
 338           数字键的处理,                                                  
 339          ****************************************************************/
 340          void    Tuner_Proc(void)
 341          {
 342   1              BYTE Lock_Flag;
 343   1              BYTE TEMP1;     
 344   1              BYTE TEMP2;
 345   1              if(Auto_Scan_Enable == Auto_Scan_Go)
 346   1              {
 347   2                      //刚开始第一次自动扫描扫描
 348   2                      if(Auto_Scan_Start == 0)
 349   2                      {
 350   3                              if(FM_AM_Select == FM_MODE)
 351   3                                      Current_Freq = FMFREQMIN;  //在FM模式,置FM的频率为最小值
 352   3                              else
 353   3                                      Current_Freq = AMFREQMIN; //AM模式的频率最小值
 354   3                              
 355   3                              DeltFMFreq = 0; //FM的增量为0
 356   3                              DeltAMFreq = 0; //AM的增量为0                   
 357   3                              RadioMute();    //RADIO静音
 358   3                              RadioFreq(Current_Freq); //送当前频率到TUNER PLL
 359   3                              Auto_Scan_Start = 1;     //自动扫描起始标志位置位
 360   3                              Scan_Channel = 0;
 361   3                              Wait_Lock_40ms = Wait_Timer_Start;      //
 362   3                      }
 363   2                      else
 364   2                      {
 365   3                              Lock_Flag = RadioLock(); //看是否到达中频锁定时间
C51 COMPILER V7.20   TUNER                                                                 06/30/2005 14:02:57 PAGE 7   

 366   3                              if( Lock_Flag != Timer_Not_Reach)
 367   3                              {
 368   4                                      if(Lock_Flag == TRUE)
 369   4                                      {
 370   5                                              //如果有台锁定,那么保存台值,继续下一个扫描
 371   5                                              //Scan_Channel,扫描的台的频率                                   
 372   5                                              if(FM_AM_Select == FM_MODE)
 373   5                                              {
 374   6                                                      TEMP1 = FM_Start + (Scan_Channel * 2);
 375   6                                                      I2C_PutByte(A24C02, TEMP1, DeltFMFreq & 0xFF );
 376   6                                                      DelayX1ms(2);
 377   6                                                      TEMP2 = (DeltFMFreq & 0xFF00) >> 8;
 378   6                                                      I2C_PutByte(A24C02, TEMP1 + 1, TEMP2);
 379   6                                              }
 380   5                                              else
 381   5                                              {
 382   6                                                      I2C_PutByte(A24C02, (AM_Start + Scan_Channel - 1), (BYTE)(DeltAMFreq & 0xFF) );                                 
 383   6                                              }
 384   5                                              Scan_Channel++;
 385   5                                      }
 386   4      
 387   4                                      //如果还没有到频率的最大值和存储的台没有超过30,那么继续扫描
 388   4                                      if((Auto_Is_Reach == 0)&& (Scan_Channel < 30))
 389   4                                      {
 390   5                                              RadioMute();   //中频静音
 391   5                                              RadioUp();     //频率加加
 392   5                                              RadioFreq(Current_Freq); //设置改变后的频率
 393   5                                              Wait_Lock_40ms = Wait_Timer_Start;
 394   5                                      }
 395   4                                      else
 396   4                                      {
 397   5                                              //假如已经搜索到最大频率或者存储的台超过30
 398   5                                              if(FM_AM_Select == FM_MODE)
 399   5                                              {
 400   6                                                      //从24C02中取出第一个存储的频率
 401   6                                                      DeltFMFreq = I2C_GetByte(A24C02, (FM_Start + 0));
 402   6                                                      DeltFMFreq = (I2C_GetByte(A24C02, (FM_Start + 1))) << 8 + DeltFMFreq;
 403   6                                                      //如果取到的频率大于最大值,那么设置最小值频率为当前频率
 404   6                                                      if(DeltFMFreq > FMFREQMAX)
 405   6                                                              DeltFMFreq = 0;
 406   6                                                      Current_Freq = FMFREQMIN+ DeltFMFreq;                                           
 407   6                                              }
 408   5                                              else
 409   5                                              {                                               
 410   6                                                      DeltAMFreq = I2C_GetByte(A24C02, (AM_Start + 0));                                               
 411   6                                                      if(DeltAMFreq > AMFREQMAX)
 412   6                                                              DeltAMFreq = 0;
 413   6                                                      Current_Freq = AMFREQMIN+ DeltAMFreq;
 414   6                                                      
 415   6                                              }
 416   5                                              RadioMute(); //radio静音
 417   5                                              RadioFreq(Current_Freq); //设置当前频率
 418   5                                              RadioOpen(); //Raido 打开
 419   5                                              Auto_Scan_Enable = Auto_Scan_Stop;                              
 420   5                                              Auto_Is_Reach = 0;
 421   5                                              Wait_Lock_40ms = Wait_Timer_End;
 422   5                                              Scan_Channel = 0;
 423   5                                              Channel_Display = 100;
 424   5                                              Auto_Scan_Start = 0;
 425   5                                      }
 426   4                              }
 427   3                      }
C51 COMPILER V7.20   TUNER                                                                 06/30/2005 14:02:57 PAGE 8   

 428   2              }
 429   1      
 430   1              else if(Manual_Scan_Enable != Manual_Scan_End)
 431   1              {
 432   2                      
 433   2                      if(Manual_Scan_Flag == 0)
 434   2                      {
 435   3                              RadioMute();    
 436   3                              if(Manual_Scan_Enable == Manual_Scan_FF)//前向扫描
 437   3                                      RadioUp();
 438   3                              else if(Manual_Scan_Enable == Manual_Scan_FB)//后向扫描
 439   3                                      RadioDown();
 440   3                              RadioFreq(Current_Freq); //设置当前频率
 441   3                              Frequency_Display();     //显示当前频率
 442   3                              Wait_Lock_40ms = Wait_Timer_Start;
 443   3                              Manual_Scan_Flag = 1;
 444   3                      }
 445   2                      else 
 446   2                      {
 447   3                              Lock_Flag = RadioLock(); //看是否到达中频锁定时间
 448   3                              if( Lock_Flag != Timer_Not_Reach)
 449   3                              {
 450   4                                      if(Lock_Flag == TRUE)
 451   4                                      {
 452   5                                              RadioOpen();
 453   5                                              Manual_Scan_Enable = Manual_Scan_End;
 454   5                                      }                               
 455   4                                      Manual_Scan_Flag = 0;
 456   4                                              
 457   4                              }
 458   3                      }
 459   2                      
 460   2                      
 461   2                      
 462   2              }
 463   1      }
 464          //执行下一曲按键
 465          void Proc_Tuner_NEXT_KEY(void)
 466          {       
 467   1              BYTE TEMP1;
 468   1              BYTE TEMP2;
 469   1              
 470   1              Manual_Scan_Enable = Manual_Scan_End;
 471   1              Auto_Scan_Enable = Auto_Scan_Stop;
 472   1      
 473   1              //如果在FM 模式
 474   1              if(FM_AM_Select == FM_MODE)
 475   1              {
 476   2                      //当前频道加加
 477   2                      if(Scan_Channel == FM_MAX_Channel - 1)
 478   2                              Scan_Channel = 0;
 479   2                      else
 480   2                              Scan_Channel++;
 481   2              }
 482   1              else
 483   1              {
 484   2                      if(Scan_Channel == AM_MAX_Channel - 1)
 485   2                              Scan_Channel = 0;
 486   2                      else
 487   2                              Scan_Channel++; 
 488   2              }
 489   1              
C51 COMPILER V7.20   TUNER                                                                 06/30/2005 14:02:57 PAGE 9   

 490   1              if(FM_AM_Select == FM_MODE)
 491   1              {
 492   2                      //取出台的对应频率
 493   2                      TEMP1 = FM_Start + (Scan_Channel * 2);
 494   2                      DeltFMFreq = I2C_GetByte(A24C02, TEMP1);
 495   2                      TEMP2 = I2C_GetByte(A24C02, TEMP1+1);           
 496   2                      DeltFMFreq +=  (TEMP2 << 8);
 497   2                      if(DeltFMFreq > FMFREQMAX)
 498   2                              DeltFMFreq = 0;
 499   2                      Current_Freq = FMFREQMIN+ DeltFMFreq;
 500   2              }
 501   1              else
 502   1              {
 503   2                      DeltAMFreq = I2C_GetByte(A24C02, (AM_Start + Scan_Channel));
 504   2                      if(DeltAMFreq > AMFREQMAX)
 505   2                              DeltAMFreq = 0;
 506   2                      Current_Freq = AMFREQMIN+ DeltAMFreq;
 507   2              }
 508   1              //设置当前频率
 509   1              RadioMute();

⌨️ 快捷键说明

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