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

📄 tuner.lst

📁 一个LCD TV的源程序, 用的是realtek的IC
💻 LST
📖 第 1 页 / 共 2 页
字号:
 213            Name    : Set_Channel
 214            Purpose :
 215            Passed  :
 216            Returns :
 217            Notes   :
 218            ------------------------------------------------------------------- */
 219          void Set_Channel(unsigned char Channel_Number)
 220          {
 221   1        unsigned char BandSwitch;
 222   1        unsigned int Devider;
 223   1      
 224   1      //  Puts_UART("Channel Number = ");HexTobyStr(Channel_Number);Puts_UART(byStr);Puts_UART("\r\n");
 225   1        switch(TV_Mode)
 226   1        {
 227   2          case(TV_AIR):
 228   2            Devider = NTSC_M_AIRTV[Channel_Number];
 229   2            //Puts_UART("TV AIR!\r\n");
 230   2          break;
 231   2          case(CATV_STD):
 232   2            Devider = NTSC_M_CATV[Channel_Number];
 233   2            //Puts_UART("CATV!\r\n");
 234   2          break;
 235   2          default:
 236   2          break;
 237   2        }
 238   1      
 239   1        if(Devider < PHILIPS_DIV_ML)
 240   1          BandSwitch = PHILIPS_LOW_BAND;
 241   1        else if(Devider < PHILIPS_DIV_HM)
C51 COMPILER V7.07   TUNER                                                                 09/26/2006 08:56:42 PAGE 5   

 242   1               BandSwitch = PHILIPS_MID_BAND;
 243   1             else
 244   1               BandSwitch = PHILIPS_HIGH_BAND;
 245   1      
 246   1      TunerError:
 247   1        Tuner_Start();
 248   1        if(Tuner_Data_In(PHILIPS_TUNER))
 249   1          goto TunerError;
 250   1        if(Tuner_Data_In(Devider/256))
 251   1          goto TunerError;
 252   1        if(Tuner_Data_In(Devider%256))
 253   1          goto TunerError;
 254   1        if(Tuner_Data_In(PHILIPS_CONTROL))
 255   1          goto TunerError;
 256   1        if(Tuner_Data_In(BandSwitch))
 257   1          goto TunerError;
 258   1      #if (TUNER == 1)
 259   1        if(Tuner_Data_In(0x00))            // 0x80 taylor 2006/02/06
 260   1          goto TunerError;
 261   1      #endif
 262   1        Tuner_Stop();
 263   1        //Puts_UART("set channel ok!\r\n");
 264   1      
 265   1      }
 266          
 267          /* -------------------------------------------------------------------
 268            Name    : Auto_Scan
 269            Purpose : scan the channel if exist
 270            Passed  :
 271            Returns :
 272            Notes   :
 273            ------------------------------------------------------------------- */
 274          
 275          void Auto_Scan(void)
 276          {
 277   1        unsigned char i, ch, lock, locktime, pre_channel;
 278   1        unsigned char min_channel, max_channel;
 279   1      
 280   1        pre_channel = Channel;
 281   1      
 282   1        if(TV_Mode == TV_AIR)
 283   1        {
 284   2          min_channel = CHANNEL_AIR_MIN;
 285   2          max_channel = CHANNEL_AIR_MAX;   // 69
 286   2        }
 287   1        else
 288   1        {
 289   2          min_channel = CHANNEL_MIN;
 290   2          max_channel = CHANNEL_MAX;       // 125
 291   2        }
 292   1      
 293   1        for(i = min_channel; i < max_channel; i++)
 294   1        {
 295   2          Set_Channel(i);
 296   2          ch = I2CReadByte(EEPROM_MCU | (((ChannelTable_EEPROM_Address() + i/8)/256)*2), (ChannelTable_EEPROM_Ad
             -dress() + i/8));      // 0x100;0x120
 297   2          lock = locktime = 0;
 298   2          do
 299   2          {
 300   3            DelayX10ms(5);
 301   3            if((I2CReadByte(SAA7114_ADDR, 0x1F) & 0x01) == 0x01)
 302   3              lock++;
C51 COMPILER V7.07   TUNER                                                                 09/26/2006 08:56:42 PAGE 6   

 303   3            locktime++;
 304   3          }while((lock < 2) && (locktime < 5));
 305   2      
 306   2          if(lock < 2)
 307   2            ch = Set_Bit(ch, i % 8, 0);   // store this channel no exist
 308   2          else
 309   2            ch = Set_Bit(ch, i % 8, 1);   // store this channel exist
 310   2      #if EEPROM
                  I2CWriteByte(EEPROM_MCU | (((ChannelTable_EEPROM_Address() + i/8)/256)*2), ChannelTable_EEPROM_Address
             -() + i/8, ch);
                  //Puts_UART("Write to EEPROM_MCU");HexTobyStr(EEPROM_MCU);Puts_UART(byStr);Puts_UART("\r\n");
                  //Puts_UART("Write to EEPROM ChannelTable_EEPROM_Address");HexTobyStr((ChannelTable_EEPROM_Address()/2
             -56)*2);Puts_UART(byStr);Puts_UART("\r\n");
                  //Puts_UART("Write to EEPROM device addr ");HexTobyStr(EEPROM_MCU | (((ChannelTable_EEPROM_Address()+i
             -/8)/256)*2));Puts_UART(byStr);Puts_UART("\r\n");
                  //Puts_UART("Write to EEPROM address");HexTobyStr(ChannelTable_EEPROM_Address()+i/8);Puts_UART(byStr);
             -Puts_UART("\r\n");
                  //Puts_UART("Write to EEPROM value");HexTobyStr(ch);Puts_UART(byStr);Puts_UART("\r\n");
              #endif
 318   2        }
 319   1      
 320   1        for(i = min_channel; i < max_channel; i++)
 321   1        {
 322   2          ch = I2CReadByte(EEPROM_MCU | (((ChannelTable_EEPROM_Address() + i/8)/256)*2), ChannelTable_EEPROM_Add
             -ress() + ((pre_channel + i)%max_channel)/8);
 323   2          if(Get_Bit(ch, i % 8))
 324   2            break;
 325   2        }
 326   1        Channel = (pre_channel + i) % max_channel;
 327   1      #if EEPROM
                I2CWriteByte(EEPROM_MCU | (((Channel_EEPROM_Address()/256)*2)), Channel_EEPROM_Address(), Channel);
              #endif
 330   1        Set_Channel(Channel);
 331   1      }
 332          
 333          /* -------------------------------------------------------------------
 334            Name    : Channel_EEPROM_Address
 335            Purpose : define the address in EEPROM
 336            Passed  :
 337            Returns :
 338            Notes   :
 339            ------------------------------------------------------------------- */
 340          unsigned int Channel_EEPROM_Address(void)
 341          {
 342   1        //Puts_UART("EE_CHANNEL_AIR+TV_Mode= ");HexTobyStr(EE_CHANNEL_AIR+TV_Mode);Puts_UART(byStr);Puts_UART("\
             -r\n");
 343   1        return EE_CHANNEL_AIR + TV_Mode;    //EE_CHANNEL_AIR = 0x82; TV_Mode = 0x00(AIR)/0x01(CATV)
 344   1      
 345   1      }
 346          
 347          /* -------------------------------------------------------------------
 348            Name    : ChannelTable_EEPROM_Address
 349            Purpose :
 350            Passed  :
 351            Returns :
 352            Notes   :
 353            ------------------------------------------------------------------- */
 354          unsigned int ChannelTable_EEPROM_Address(void)
 355          {
 356   1      
 357   1        return EE_TV_AIR_CHANNEL_TABLE + TV_Mode * 0x20;   // EE_TV_AIR_CHANNEL_TABLE = 0x100
 358   1      
C51 COMPILER V7.07   TUNER                                                                 09/26/2006 08:56:42 PAGE 7   

 359   1      }
 360          
 361          /* -------------------------------------------------------------------
 362            Name    : ChannelLockTable_EEPROM_Address
 363            Purpose :
 364            Passed  :
 365            Returns :
 366            Notes   :
 367            ------------------------------------------------------------------- */
 368          /*
 369          unsigned int ChannelLockTable_EEPROM_Address(void)
 370          {
 371          
 372            return EE_AIR_CHANNEL_LOCK_TABLE+TV_Mode*0x20;
 373          
 374          }
 375          */
 376          /* -------------------------------------------------------------------
 377            Name    : Get_Bit
 378            Purpose :
 379            Passed  :
 380            Returns :
 381            Notes   :
 382            ------------------------------------------------------------------- */
 383          bit Get_Bit(unsigned char bytedata, unsigned char bit_pos)
 384          {
 385   1      
 386   1        return ((bytedata & BIT_OPOR[bit_pos]) != 0);
 387   1      
 388   1      }
 389          
 390          
 391          /* -------------------------------------------------------------------
 392            Name    : Set_Bit
 393            Purpose :
 394            Passed  :
 395            Returns :
 396            Notes   :
 397            ------------------------------------------------------------------- */
 398          unsigned char Set_Bit(unsigned char bytedata, unsigned char bit_pos, bit set)
 399          {
 400   1      
 401   1        unsigned char retdata;
 402   1      
 403   1        retdata = bytedata & BIT_OPAND[bit_pos];
 404   1        if(set)
 405   1          retdata = retdata | BIT_OPOR[bit_pos];
 406   1      
 407   1        return retdata;
 408   1      
 409   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    576    ----
   CONSTANT SIZE    =   1026    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----       7
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       2
END OF MODULE INFORMATION.

C51 COMPILER V7.07   TUNER                                                                 09/26/2006 08:56:42 PAGE 8   


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

⌨️ 快捷键说明

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