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

📄 tv2.lst

📁 51单片机+FI1256高频头=电视接收机源代码
💻 LST
📖 第 1 页 / 共 2 页
字号:
 217   2               P25=1;
 218   2               P26=1; 
 219   2               P27=1;
 220   2      
 221   2               /*if (p!=0)
 222   2               {  P0=dis_code[pbai];                   //频道
 223   2              P2=0xfe;
 224   2              delay_ms(5);
 225   2      
 226   2                  P0=dis_code[pshi];
 227   2              P2=0xfd;
 228   2              delay_ms(5);
 229   2      
 230   2                  P0=dis_code[pge];
 231   2              P2=0xfb;
 232   2              delay_ms(5);
 233   2      
 234   2                  P0=0x8c;
 235   2              P2=0xf7;
 236   2              delay_ms(5);
 237   2               }       
 238   2               P2=0xff; */
 239   2           }
 240   1      }
C51 COMPILER V8.05a   TV2                                                                  09/03/2008 15:10:22 PAGE 5   

 241          
 242          void write_byte_fi1256()
 243          // fi1256写操作
 244          {       I2C_Start();//I2C总线开始
 245   1           
 246   1          data_out(ADD);
 247   1          data_out(DB1);
 248   1          data_out(DB2);
 249   1          data_out(0x8E);
 250   1          
 251   1              NDB=(DB1*256+DB2)/16;
 252   1          NDB=NDB-38;
 253   1          
 254   1          if(NDB>0 && NDB<160) PB=0XA0;       //频段计算      VHF-L
 255   1          if(NDB>168 && NDB<466) PB=0X90;     //                      VHF-H
 256   1          if(NDB>470 && NDB<863) PB=0X30; //                  UHF
 257   1          
 258   1          data_out(PB);  //频段控制
 259   1          I2C_Stop(); //I2C总线停止
 260   1              delay_ms(100);          // 写入周期
 261   1          display();
 262   1      }
 263          
 264          
 265          
 266          
 267          
 268          void search()   //      搜台、存台子程序
 269          {   DB1=FHIGH; 
 270   1          DB2=FLOW; 
 271   1              address=0;      
 272   1              fill_byte(0xff);
 273   1       while(1)
 274   1          {
 275   2              K1=1;
 276   2              K2=1;
 277   2                      K3=1;
 278   2                      K4=1;
 279   2              if(K1==0) 
 280   2                  {
 281   3                  DB2+=2; 
 282   3                  if(DB2>255) 
 283   3                              {DB2=0;DB1++;}
 284   3                  }            //不延时,长按可连续调台
 285   2                      
 286   2              if(K2==0) 
 287   2                  {
 288   3                  DB2-=2;
 289   3                  if(DB2==0) {DB2=255;DB1--;}
 290   3                  }
 291   2                      if(DB1==0x38)
 292   2                          {DB1=FHIGH; DB2=FLOW;}
 293   2              if((DB1==FHIGH)&&(DB2<FLOW))
 294   2                  {DB1=0x37;  DB2=0xff;}         
 295   2              if (K3==0)
 296   2                       {write_byte_eeprom(address,DB1);
 297   3                          address++;
 298   3                        write_byte_eeprom(address,DB2);
 299   3                              address++;
 300   3                            delay_ms(1000);   //存台  确保按一次键,只写一次
 301   3                       }                                                       
 302   2                  write_byte_fi1256();
C51 COMPILER V8.05a   TV2                                                                  09/03/2008 15:10:22 PAGE 6   

 303   2                  if (address==(MAX_ADDR-1))
 304   2                         address=0;
 305   2                  if (K4==0)
 306   2                      { delay_ms(500);        
 307   3                           write_byte_eeprom(MAX_ADDR,address);  //将频道数存入最大地址处 
 308   3                       mode=2;
 309   3                                       break;   
 310   3                      }        //存台结束
 311   2          }
 312   1      }
 313          
 314          void watch_tv()   //看节目子程序
 315          { unsigned char chmax;
 316   1        unsigned int t;
 317   1          address=0;
 318   1              DB1=0;
 319   1              DB2=0;    
 320   1              chmax=read_eeprom(MAX_ADDR);
 321   1              if (chmax==0)
 322   1                   {t=100;
 323   2                            while(t!=0)
 324   2                       {
 325   3                           P0=0xc0;
 326   3                       P24=0;
 327   3                       delay_ms(5);
 328   3                                       P24=1;                   
 329   3                               
 330   3                               P0=0xc6;                
 331   3                               P25=0;
 332   3                               delay_ms(5);
 333   3                                       P25=1;
 334   3        
 335   3                               P0=0x89;          
 336   3                                       P26=0;
 337   3                                       delay_ms(5);
 338   3                                       P26=1;
 339   3                                       t--;
 340   3                                }
 341   2                              mode=1; 
 342   2                       }  
 343   1         if (mode==2)
 344   1               {   DB1=read_eeprom(address);
 345   2                   address++;
 346   2                       delay_ms(500);
 347   2                       DB2=read_eeprom(address);
 348   2                       address++;
 349   2                       delay_ms(500);
 350   2                       write_byte_fi1256();   
 351   2                while(1)
 352   2                   {
 353   3                   if (K1==0)
 354   3                       { DB1=read_eeprom(address);
 355   4                         address++;
 356   4                             delay_ms(500);
 357   4                             DB2=read_eeprom(address);
 358   4                             address++;
 359   4                             delay_ms(500);
 360   4                             write_byte_fi1256();                        
 361   4                             if (address==chmax)
 362   4                                     address=0;
 363   4                        }
 364   3                   if (K2==0)
C51 COMPILER V8.05a   TV2                                                                  09/03/2008 15:10:22 PAGE 7   

 365   3                       { if (address<=2)
 366   4                                   address=chmax+2;
 367   4                              address-=4;                //退回到最后一个频道
 368   4                          DB1=read_eeprom(address);
 369   4                              address++;
 370   4                              delay_ms(500);
 371   4                              DB2=read_eeprom(address);
 372   4                              address++;
 373   4                              delay_ms(500);
 374   4                              write_byte_fi1256();
 375   4                       
 376   4                            }
 377   3                   if (K3==0)
 378   3                          {delay_ms(500);
 379   4                             mode=1;
 380   4                             break;   
 381   4                           }
 382   3                       }
 383   2               }
 384   1       }      
 385          
 386          
 387          /***********************************主程序*********************************/
 388          void main()
 389          {       //start-ADD(C2,PIN15悬空)-ACK-DB1(频率1)-ACK-DB2(频率2)-ACK-CB(控制)-ACK-PB(波段)-ACK-STOP
 390   1          ADD=0XC2; //地址
 391   1          DB1=FHIGH; //分频1,可变     
 392   1          DB2=FLOW; //分频2,可变      f_picture=f_osc-f_pif=f_osc-38    MHz 
 393   1                                      //f_osc=(DB1*256+DB2)/16
 394   1              address=0;     //24c02 存台地址
 395   1              mode=0;
 396   1              //fill_byte(0xff);              // 24c02 全部填充0xff
 397   1           while(1)
 398   1          {
 399   2              K1=1;
 400   2              K2=1;
 401   2                      K3=1;
 402   2                      K4=1;
 403   2              if(K3==0)
 404   2                         mode=1;   
 405   2                      if(K4==0)
 406   2                         mode=2;
 407   2                  if(mode==1)   
 408   2                         {delay_ms(1000);
 409   3                          search();
 410   3                              }
 411   2                      if(mode==2)     
 412   2                              {delay_ms(1000);
 413   3                          watch_tv();
 414   3                          }               
 415   2              }
 416   1              
 417   1              
 418   1      }
 419          
 420          
 421          
 422          
 423          
 424          
 425          

C51 COMPILER V8.05a   TV2                                                                  09/03/2008 15:10:22 PAGE 8   


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1399    ----
   CONSTANT SIZE    =     11    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     14      17
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       1
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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