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

📄 tuner.lst

📁 一个带收音的功放程序, VFD显示驱动用一个非常实用的方法, 稍加修改即可换成不同的VFD, 功放芯片用M61538
💻 LST
📖 第 1 页 / 共 5 页
字号:
 489   1              
 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();
 510   1              RadioFreq(Current_Freq);
 511   1              RadioOpen();    
 512   1              TO_MAIN_DISPLAY = 0;
 513   1              Channel_Display = 100;//这个值用来显示台号后再显示频率的时间差
 514   1      }
 515          
 516          
 517          //执行上一曲频率
 518          void Proc_Tuner_PREV_KEY(void)
 519          {
 520   1      
 521   1              Manual_Scan_Enable = Manual_Scan_End;
 522   1              Auto_Scan_Enable = Auto_Scan_Stop;
 523   1      
 524   1              if(FM_AM_Select == FM_MODE)
 525   1              {
 526   2                      if(Scan_Channel == 0)
 527   2                              Scan_Channel = FM_MAX_Channel - 1;
 528   2                      else
 529   2                              Scan_Channel--;
 530   2              }
 531   1              else
 532   1              {
 533   2                      
 534   2                      if(Scan_Channel == 0)
 535   2                              Scan_Channel = AM_MAX_Channel - 1;
 536   2                      else
 537   2                              Scan_Channel--;
 538   2              }
 539   1              
 540   1              if(FM_AM_Select == FM_MODE)
 541   1              {
 542   2                      DeltFMFreq = I2C_GetByte(A24C02, (FM_Start + (Scan_Channel * 2) + 1));
 543   2                      DeltFMFreq <<= 8;
 544   2                      DeltFMFreq +=  I2C_GetByte(A24C02, (FM_Start + (Scan_Channel * 2)) );
 545   2                      if(DeltFMFreq > FMFREQMAX)
 546   2                              DeltFMFreq = 0;
 547   2                      Current_Freq = FMFREQMIN+ DeltFMFreq;
 548   2              }
 549   1              else
 550   1              {
C51 COMPILER V7.20   TUNER                                                                 07/16/2005 13:42:41 PAGE 10  

 551   2                      DeltAMFreq = I2C_GetByte(A24C02, (AM_Start + Scan_Channel));
 552   2                      if(DeltAMFreq > AMFREQMAX)
 553   2                              DeltAMFreq = 0;
 554   2                      Current_Freq = AMFREQMIN+ DeltAMFreq;
 555   2              }
 556   1              RadioMute();
 557   1              RadioFreq(Current_Freq);
 558   1              RadioOpen();    
 559   1              TO_MAIN_DISPLAY = 0;
 560   1              Channel_Display = 100;
 561   1      }
 562          
 563          //整机上电初始化Tuner, 进入FM模式, 
 564          void    Tuner_Open(void)
 565          {               
 566   1              Scan_Channel = 0;
 567   1              DeltFMFreq = I2C_GetByte(A24C02, (FM_Start + 0));
 568   1              DeltFMFreq += (WORD)( I2C_GetByte(A24C02, (FM_Start +  1)) << 8);
 569   1              if(DeltFMFreq > FMFREQMAX)
 570   1                      DeltFMFreq = 0; 
 571   1              Current_Freq = FMFREQMIN+ DeltFMFreq;
 572   1              RadioMute();
 573   1              RadioFreq(Current_Freq);
 574   1              RadioOpen();
 575   1      }
 576          
 577          
 578          //从其他通道输入模式转换到tuner输入模式
 579          void    Change_Tuner_Mode(void)
 580          {               
 581   1              if(FM_AM_Select == FM_MODE)//如果在FM MODE
 582   1              {                               
 583   2                      Current_Freq = FMFREQMIN+ DeltFMFreq;//设置FM的工作频率         
 584   2              }
 585   1              else
 586   1              {               
 587   2                      Current_Freq = AMFREQMIN+ DeltAMFreq;//设置AM的工作频率 
 588   2              }       
 589   1              RadioMute();              //中频静音
 590   1              RadioFreq(Current_Freq);  //设置当前频率
 591   1              RadioOpen();              //打开收音    
 592   1      }
 593          
 594          //tuner单步调整
 595          void    Tuner_Step(BYTE Direct)
 596          {               
 597   1              if(Direct == 0)
 598   1                      RadioDown();//频率减一步
 599   1          else
 600   1                      RadioUp(); //频率加一步
 601   1              RadioMute();  //中频静音
 602   1              RadioFreq(Current_Freq);//设置当前频率
 603   1              RadioOpen();    
 604   1      }
 605          
 606          //执行到快进到下一个可以锁定的频率
 607          void    Proc_Tuner_FF_KEY(void)
 608          {
 609   1               Auto_Scan_Enable   = 0; //自动扫描禁止
 610   1               Manual_Scan_Enable = 1; //手动扫描打开,并设置向后(频率加)方向  
 611   1      }
 612          
C51 COMPILER V7.20   TUNER                                                                 07/16/2005 13:42:41 PAGE 11  

 613          //执行快退到上一个可以锁定的频率
 614          void    Proc_Tuner_FB_KEY(void)
 615          {
 616   1               Auto_Scan_Enable   = 0; //自动扫描禁止
 617   1               Manual_Scan_Enable = -1;//手动扫描打开,并设置向前(频率减)方向          
 618   1      }
 619          
 620          
 621          //执行自动扫描台的频率
 622          void    Proc_Tuner_AUTOSCAN_KEY(void)
 623          {
 624   1               Auto_Scan_Enable   = 1;//执行自动扫描功能
 625   1               Manual_Scan_Enable = 0;//手动扫描禁止
 626   1               Auto_Scan_Start = 0;   //将第一次扫描标志置位
 627   1      }
 628          
 629          // FM/AM之间的切换
 630          void    Proc_FMAM_Change(void)
 631          {       
 632   1              Scan_Channel = 0;
 633   1              if(FM_AM_Select == FM_MODE)
 634   1              {               
 635   2                      Current_Freq = AMFREQMIN+ DeltAMFreq;
 636   2                      FM_AM_Select = AM_MODE;
 637   2              }
 638   1              else
 639   1              {               
 640   2                      Current_Freq = FMFREQMIN+ DeltFMFreq;
 641   2                      FM_AM_Select = FM_MODE;
 642   2              }
 643   1              //假如切换前另外一个模式正在自动/手动扫描,可以停止
 644   1              Auto_Scan_Enable   = 0;
 645   1              Manual_Scan_Enable = 0;
 646   1              Auto_Scan_Start = 0;
 647   1              
 648   1              RadioMute();
 649   1              RadioFreq(Current_Freq);
 650   1              RadioOpen();    
 651   1      }
 652          
 653          //从静音状态恢复到收音状态时, FM/AM的显示要加上部分特殊ICON
 654          void    Tuner_MuteOFF_Display(void)
 655          {       
 656   1              if(FM_AM_Select == FM_MODE)
 657   1              {               
 658   2                      VFD_ICON_Display(ICON_FM | ICON_MHZ);
 659   2              }
 660   1              else
 661   1              {               
 662   2                      VFD_ICON_Display(ICON_AM | ICON_KHZ);
 663   2              }
 664   1              
 665   1      }
 666          //执行TUNER存储
 667          void Proc_Digital_Key(void)
 668          {
 669   1      
 670   1              //如果前面已经按下了MEMORY_KEY,
 671   1              if((Memory_Start == 1) && (NumberKey_Dealed == 0))
 672   1              {
 673   2                      if(Current_Key < KEY_5PLUS) //如果按下的按键是KEY_0, KEY_1,KEY_2,KEY_3,KEY_4
 674   2                      {
C51 COMPILER V7.20   TUNER                                                                 07/16/2005 13:42:41 PAGE 12  

 675   3                              Digital_Number += Current_Key;//记忆数字键      
 676   3                              NumberKey_Dealed = 1;
 677   3                      }               
 678   2                      else if(Current_Key == KEY_5PLUS) //如果按下的按键是KEY_5PLUS
 679   2                              Digital_Number += 5;
 680   2                      
 681   2                      //判断输入的数字是否大于台号的最大值
 682   2                      if( ((Digital_Number > FM_MAX_Channel) && (FM_AM_Select == FM_MODE))
 683   2                               || ((Digital_Number > AM_MAX_Channel) && (FM_AM_Select == AM_MODE))
 684   2                               || (Digital_Number == 0) )//如果数字台号为零,也为非法值
 685   2                      {
 686   3      
 687   3                              Digital_Number = 0;  //如果大于, 返回
 688   3                              Memory_Start = 0;
 689   3                              TO_MAIN_DISPLAY = 50;
 690   3                              return;
 691   3                      }                                       
 692   2                      TO_MAIN_DISPLAY = 400;
 693   2                      
 694   2              }
 695   1      }
 696          
 697          /*=====================  MEMORY_KEY的功能 ===============*/
 698          void    Proc_MEMORY_Key(void)
 699          {
 700   1      
 701   1               if(Memory_Start == 0)
 702   1               {
 703   2                       String_Display[0] = 'M';
 704   2                       String_Display[1] = 'E';
 705   2                       String_Display[2] = 'M';
 706   2                       String_Display[3] = '0';
 707   2                       String_Display[4] = '0';
 708   2                       VFD_Display(String_Display, 5, 0, 0);  
 709   2                       if(FM_AM_Select == FM_MODE)
 710   2                       {              
 711   3                               VFD_ICON_Display(ICON_FM);
 712   3                       }
 713   2                       else
 714   2                       {              
 715   3                               VFD_ICON_Display(ICON_AM);
 716   3                       }                               
 717   2                       Memory_Start = 1; //存贮标志
 718   2                       NumberKey_Dealed = 0;
 719   2                       TO_MAIN_DISPLAY = 400;
 720   2                       Digital_Number = 0;
 721   2              }
 722   1              else
 723   1              {
 724   2                      if(Digital_Number > 0)
 725   2                      {
 726   3                              if(FM_AM_Select == FM_MODE)
 727   3                              {                                                       
 728   4                                      I2C_PutByte(A24C02, (Digital_Number-1)* 2 + FM_Start, DeltFMFreq & 0xFF );
 729   4                                      DelayX1ms(2);                                   
 730   4                                      I2C_PutByte(A24C02, (Digital_Number-1)* 2 + FM_Start + 1, (BYTE) ((DeltFMFreq & 0xFF00) >> 8)  );
 731   4                              }
 732   3                              else
 733   3                              {
 734   4                                      I2C_PutByte(A24C02, (AM_Start + Digital_Number - 1), (BYTE)(DeltAMFreq & 0xFF) );       
 735   4                              }
 736   3                      }
C51 COMPILER V7.20   TUNER                                                                 07/16/2005 13:42:41 PAGE 13  

 737   2                      Memory_Start = 0;               

⌨️ 快捷键说明

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