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

📄 tea5757.lst

📁 本程序演示 :以非利普TEA5767 为核心的
💻 LST
📖 第 1 页 / 共 3 页
字号:
               return (unsigned char)(i2c_read((unsigned int)I2C_FM, (unsigned char)fm_slaveaddr, (char)I2C_SUBADDR_NOUS
             -E, ptr, (unsigned char)5));
              }
              
              unsigned char fm_wr_rtn(unsigned char *ptr)
              {
               return (unsigned char)(i2c_write((unsigned int)I2C_FM, (unsigned char)fm_slaveaddr, (char)I2C_SUBADDR_NOU
             -SE, ptr, (unsigned char)5));
              }
              
              void fmw_pll_rtn(unsigned char hilo, unsigned int fm_freq)
              {
               unsigned char temp;
               unsigned short fm_pll_val = 0;
               
               if(hilo) fm_pll_val = (unsigned short)((4000*(fm_freq+225))/32768); // calc PLL decoder
               else  fm_pll_val = (unsigned short)((4000*(fm_freq-225))/32768);
               
               temp = (unsigned char)((fm_pll_val >> 8) & 0x3f);
               fm_wr_byte[0] &= 0xc0;
               fm_wr_byte[0] |= temp;
               
               temp = (unsigned char)fm_pll_val;
               fm_wr_byte[1] = temp;
               
               fmw_hilo_side_rtn(hilo);
              }
              
              unsigned char fm_hilo_optimal(unsigned int fm_freq)
              {
C51 COMPILER V7.50   TEA5757                                                               05/12/2009 22:59:41 PAGE 10  

               unsigned char status;
               unsigned char temp;
               unsigned char levelhigh, levellow;
               
               fmw_pll_rtn(hi_side, fm_freq+450); // Set PLL value High
               status = fm_wr_rtn(fm_wr_byte);  // Send Command
              
              
                      delay720(20000);  
                   
               status = fm_rd_rtn(fm_rd_byte);  // Read status
               
               levelhigh = fmr_level_adc_rtn(); // Get ADC value
                
               fmw_pll_rtn(hi_side, fm_freq-450); // Set PLL value Low
               status = fm_wr_rtn(fm_wr_byte);
               
               delay720(20000);  
              
                   
               status = fm_rd_rtn(fm_rd_byte);
               
               levellow = fmr_level_adc_rtn();
                
               if(levelhigh < levellow) temp = hi_side;
               else temp = lo_side;
               
               return temp;
              }
              
              void fm_init(void)
              {
               unsigned char i;
              #if 0 /* lhm */
               i2c_wr
               i2c_clk_hi
               i2c_data_hi
              #endif /* lhm */ 
              // fm_pwr_on // 20050111
               
               delay720(100);   
               
               fm_khz = 89100; //107700;
               
               
               fmw_all_mute_rtn(on);     // MUTE OFF
               fmw_search_mode_rtn(off);    // OFF SearchMode
               fmw_search_dir_rtn(up);     // Search direction is up
               fmw_search_level_rtn(mid_level);  // search ADC level is middle
              // fmw_search_level_rtn(lo_level);  // search ADC level is middle
               fmw_stereo_rtn(on);      // Steleo ON
               fmw_mute_left_rtn(off);     // Left force mono off
               fmw_mute_right_rtn(off);    // Right force mono 0ff
               fmw_stand_by_rtn(on);     // Stanby off
              // fmw_band_sel_rtn(japan);    // Japan FM zone
               fmw_band_sel_rtn(us_eu);    // Japan FM zone
               fmw_xtal_sel_rtn(xtal_32768);   // set the x-tal to 32.768 KHz
               fmw_soft_mute_rtn(on);
               fmw_hcc_rtn(on);      // HCC ON
               fmw_snc_rtn(on);      // SNC ON
               fmw_search_indi_rtn(on);    // Pin 14 is output for the ready flag
               fmw_pll_ref_rtn(ref_65_dis);   // 6.5Mhz ref. not enable
C51 COMPILER V7.50   TEA5757                                                               05/12/2009 22:59:41 PAGE 11  

               fmw_deemph_rtn(deemph50);    // deemphasis is 50us
               
               i = fm_hilo_optimal(fm_khz);   // HILO algorithm -> find optimize PLL
               fmw_pll_rtn(i, fm_khz);
               fmw_all_mute_rtn(off); 
               i = fm_wr_rtn(fm_wr_byte);
              }
              /*---------------------------------------- Change Hz and Auto Scan ---------------------------------------
             -- */
              void fm_manual_scan(unsigned char dir)
              { 
               unsigned char status;
               
               
               if(dir)
               {
                if(fm_khz >= 108000) fm_khz = 87500;
                else     fm_khz += scan_step;
               }
               else
               { 
                if(fm_khz <= 87500) fm_khz = 108000;
                else    fm_khz -= scan_step;
               }
                      
               status = fm_hilo_optimal(fm_khz);
                     
               fmw_pll_rtn(status, fm_khz);
                
               //fmw_all_mute_rtn(off); // TEST
              
               status = fm_wr_rtn(fm_wr_byte);
              
               //LCD_DisplayChannelForFM(fm_khz);
               
              }
              
              unsigned char fm_auto_scan(unsigned char dir)
              {
               unsigned char status, curlev, curifc;
               
               if(dir)
               {
                if(fm_khz >= 108000) fm_khz = 87500;
                else     fm_khz += scan_step;
               }
               else
               { 
                if(fm_khz <= 87500) fm_khz = 108000;
                else    fm_khz -= scan_step;
               }
               
               //fmw_all_mute_rtn(on); // TEST
               status = fm_wr_rtn(fm_wr_byte); // Edit By Jim
               status = fm_hilo_optimal(fm_khz);
               fmw_pll_rtn(status, fm_khz);
               status = fm_wr_rtn(fm_wr_byte);
                      
              // delay720(20000);
               delay720(30000);
              
                   
C51 COMPILER V7.50   TEA5757                                                               05/12/2009 22:59:41 PAGE 12  

               status = fm_rd_rtn(fm_rd_byte);
               curlev = fmr_level_adc_rtn();
               curifc = fmr_if_count_rtn();
              
              // LCD_DisplayChannelForFM(fm_khz);
               
              /*
               if(fm_khz == 88000)
                fm_khz = 88000;
               else if(fm_khz == 89100)
                fm_khz = 89100;
               else if(fm_khz == 89700)
                fm_khz = 89700;
               else if(fm_khz == 91900)
                fm_khz = 91900;
               else if(fm_khz == 93100)
                fm_khz = 93100;
               else if(fm_khz == 93900)
                fm_khz = 93900;
               else if(fm_khz == 95100)
                fm_khz = 95100;
               else if(fm_khz == 95700)
                fm_khz = 95700;
               else if(fm_khz == 95900)
                fm_khz = 95900;
               else if(fm_khz == 97300)
                fm_khz = 97300;
               else if(fm_khz == 98100)
                fm_khz = 98100;
               else if(fm_khz == 99100)
                fm_khz = 99100;
               else if(fm_khz == 99600)
                fm_khz = 99600;
               else if(fm_khz == 100000)
                fm_khz = 100000;
               else if(fm_khz == 101100)
                fm_khz = 101100;
               else if(fm_khz == 101900)
                fm_khz = 101900;
               else if(fm_khz == 102700)
                fm_khz = 102700;
               else if(fm_khz == 103500)
                fm_khz = 103500;
               else if(fm_khz == 105300)
                fm_khz = 105300;
               else if(fm_khz == 106100)
                fm_khz = 106100;
               else if(fm_khz == 106900)
                fm_khz = 106900;
               else if(fm_khz == 107700)
                fm_khz = 107700;
              */ 
              // if((curlev > 3) && (0x30 < curifc) && (curifc < 0x3c)  ) return 1; // scan_level
               if((curlev > 3) && (0x30 < curifc) && (curifc < 0x3c)  ) return 1; // scan_level
               else
                return 0;
              }
              
              unsigned int fm_auto_scan_detect(unsigned char dir)
              {
               unsigned char status, i;
               unsigned char index = 1; // Edit By Jim
C51 COMPILER V7.50   TEA5757                                                               05/12/2009 22:59:41 PAGE 13  

               
               unsigned int dumy_fm_khz = fm_khz;
               
               
               for(i=0;i<10;i++)
               {
                if(fm_auto_scan(dir)) index++;
                else break;
               }
                
               if(index%2)
               {
                if(dir) fm_khz = dumy_fm_khz + (unsigned int)((index/2)*100);
                else    fm_khz = dumy_fm_khz - (unsigned int)((index/2)*100);
               }
               else
               {
                if(dir) fm_khz = dumy_fm_khz + (unsigned int)(((index/2)-1)*100);
                else    fm_khz = dumy_fm_khz - (unsigned int)((index/2)*100);
               }
               
               status = fm_hilo_optimal(fm_khz);
               fmw_pll_rtn(status, fm_khz);
               //fmw_all_mute_rtn(off);  TEST
               
               status = fm_wr_rtn(fm_wr_byte);
                       
              // LCD_ClearOneLine(2);
              // lcd_var(0, 2, fm_khz);
              // LCD_DisplayChannelForFM(fm_khz);
               return fm_khz;
              }
              #endif
              #endif


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   ----    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =     45    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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