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

📄 tv2.lst

📁 51单片机+FI1256高频头=电视接收机源代码
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.05a   TV2                                                                  09/03/2008 15:10:22 PAGE 1   


C51 COMPILER V8.05a, COMPILATION OF MODULE TV2
OBJECT MODULE PLACED IN tv2.OBJ
COMPILER INVOKED BY: D:\Program Files\Keil\C51\BIN\C51.EXE tv2.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /********************************************************************************************
   2           ME300B实验之--控制fi1256搜台并存台
   3           作者:fbicia649
   4           email:iam.shuang@yahoo.com.cn
   5           
   6           更换晶振请注意时序问题
   7           请详细阅读fi1256和24c02的产品手册
   8          
   9           精勤求学,敦笃励志,果毅力行,忠恕任事。
  10          *********************************************************************************************/
  11          #include<reg52.h>
  12          #include<stdio.h>
  13          #include<intrins.h>
  14          #define OP_READ 0xa1            // 器件地址以及读取操作
  15          #define OP_WRITE 0xa0           // 器件地址以及写入操作
  16          #define MAX_ADDR 0x7f           // AT24C02最大地址
  17          #define FHIGH 0x05
  18          #define FLOW 0x7c
  19          //晶振 12MHz
  20          //K1键:+          K2键:-     K3键:存储     K4键:选台、跳出
  21            
  22          
  23          
  24          sbit K1=P1^0;
  25          sbit K2=P1^1;
  26          sbit K3=P1^2;
  27          sbit K4=P1^3;
  28          sbit SDA= P2^1;
  29          sbit SCL= P2^0;
  30          sbit P24=P2^4;
  31          sbit P25=P2^5;
  32          sbit P26=P2^6;
  33          sbit P27=P2^7;
  34          
  35          unsigned int ADD,DB1,DB2,PB,NDB,address,mode;
  36          unsigned char code dis_code[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};       // 0, 1, 2, 3// 
             -4, 5, 6, 7, 8, 9, off 
  37              
  38          void I2C_Start()
  39              {
  40   1              /*启动I2C总线的函数,当SCL为高电平时使SDA产生一个负跳变*/
  41   1          SDA = 1;
  42   1              SCL = 1;
  43   1              _nop_();
  44   1              _nop_();
  45   1              _nop_();
  46   1              _nop_();
  47   1              SDA = 0;
  48   1              _nop_();
  49   1              _nop_();
  50   1              _nop_();
  51   1              _nop_();
  52   1              SCL = 0;
  53   1          }
  54              void I2C_Stop()
C51 COMPILER V8.05a   TV2                                                                  09/03/2008 15:10:22 PAGE 2   

  55              {
  56   1              /*终止I2C总线,当SCL为高电平时使SDA产生一个正跳变*/
  57   1              SDA=0;
  58   1              SCL=1;
  59   1              _nop_();
  60   1                      _nop_();
  61   1                      _nop_();
  62   1                      _nop_();
  63   1              SDA=1;
  64   1              _nop_();
  65   1                      _nop_();
  66   1                      _nop_();
  67   1                      _nop_();
  68   1              SCL=0;
  69   1              
  70   1          }
  71          
  72          void delay_ms(int number)          //延时函数
  73          {                                   //晶振  12Mhz
  74   1          unsigned char i; 
  75   1          unsigned int j;
  76   1          for (j=0;j<number;j++)
  77   1          {
  78   2                  for (i=0;i<124;i++);   //12Mhz   (1ms)     
  79   2          }
  80   1      }
  81          
  82          unsigned char data_in()
  83          // 从slave读数据到MCU
  84          {
  85   1              unsigned char i,read_data;
  86   1              for(i = 0; i < 8; i++)
  87   1              {
  88   2                      SCL = 1;
  89   2                      _nop_();
  90   2                      _nop_();
  91   2                      read_data <<= 1;
  92   2                      read_data |= (unsigned char)SDA;
  93   2                      SCL = 0;
  94   2                      _nop_();
  95   2                      _nop_();
  96   2              }
  97   1              return(read_data);
  98   1      }
  99          bit data_out(unsigned char write_data)
 100          // 从MCU写数据到slave
 101          {
 102   1              unsigned char i;
 103   1              bit ack;
 104   1              for(i = 0; i < 8; i++)          // 循环移入8个位
 105   1              {
 106   2                      SDA = (bit)(write_data & 0x80);
 107   2                      _nop_();
 108   2                      _nop_();
 109   2                      _nop_();
 110   2                      _nop_();
 111   2                      SCL = 1;
 112   2                      _nop_();
 113   2                      _nop_();
 114   2                      _nop_();
 115   2                      _nop_();
 116   2                      SCL = 0;
C51 COMPILER V8.05a   TV2                                                                  09/03/2008 15:10:22 PAGE 3   

 117   2                      write_data <<= 1;
 118   2              }
 119   1              SDA = 1;                        // 读取应答
 120   1              _nop_();
 121   1              _nop_();
 122   1              _nop_();
 123   1              _nop_();
 124   1              SCL = 1;
 125   1              _nop_();
 126   1              _nop_();
 127   1              _nop_();
 128   1              _nop_();
 129   1              ack = SDA;
 130   1              SCL = 0;
 131   1              return ack;                     // 返回应答位
 132   1      }
 133          
 134          void write_byte_eeprom(unsigned char addr, unsigned char write_data)
 135          // 在eeprom指定地址addr处写入数据write_data
 136          {
 137   1              I2C_Start();
 138   1              data_out(OP_WRITE);
 139   1              data_out(addr);
 140   1              data_out(write_data);
 141   1              I2C_Stop();
 142   1              delay_ms(3);            // 写入周期延时
 143   1      }
 144          
 145          void fill_byte(unsigned char fill_data)
 146          // 填充数据fill_data到EEPROM内
 147          {
 148   1              unsigned char i;
 149   1              for(i = 0; i < MAX_ADDR; i++)
 150   1              {
 151   2                      write_byte_eeprom(i, fill_data);
 152   2              }
 153   1      
 154   1      }
 155          
 156          unsigned char read_current()
 157          // 在当前地址读取
 158          {
 159   1              unsigned char read_data;
 160   1              I2C_Start();
 161   1              data_out(OP_READ);
 162   1              read_data = data_in();
 163   1              I2C_Stop();
 164   1              return read_data;
 165   1      }
 166          
 167          unsigned char read_eeprom(unsigned char eeprom_addr)
 168          // 在指定地址读取
 169          {
 170   1              I2C_Start();
 171   1              data_out(OP_WRITE);
 172   1              data_out(eeprom_addr);
 173   1              return(read_current());
 174   1      }
 175          
 176          void display()     //数码管显示频率      和频道
 177          {int ge,shi,bai,x1,p,pbai,pshi,pge;
 178   1       unsigned long freq;
C51 COMPILER V8.05a   TV2                                                                  09/03/2008 15:10:22 PAGE 4   

 179   1       freq=(DB1*256+DB2)/16-38;
 180   1       bai=freq/100;
 181   1       shi=(freq-bai*100)/10;
 182   1       ge=freq-bai*100-shi*10;
 183   1       x1=DB2*10/16-DB2/16*10;  //小数位,不可将freq*10,否则溢出.x1只取决于DB2/16
 184   1       p=address/2;
 185   1       pbai=p/100;
 186   1       pshi=(p-pbai*100)/10;
 187   1       pge=p-pbai*100-pshi*10;
 188   1      
 189   1       while((K1==1)&&(K2==1)&&(K3==1)&&(K4==1))
 190   1          {/*P24=1;
 191   2               P25=1;
 192   2               P26=1; 
 193   2               P27=1;*/       
 194   2               if (bai!=0)
 195   2                 {P0=dis_code[bai];             //频率
 196   3              P24=0;
 197   3              delay_ms(5);
 198   3                      P24=1;                    
 199   3                      }
 200   2           P0=dis_code[shi];           
 201   2           P25=0;
 202   2           delay_ms(5);
 203   2               P25=1;
 204   2        
 205   2           P0=(dis_code[ge]&0x7f);       //增加小数点
 206   2               P26=0;
 207   2           delay_ms(5);
 208   2               P26=1;
 209   2      
 210   2               P0=dis_code[x1];
 211   2               P27=0;
 212   2           delay_ms(5);
 213   2               P27=1;
 214   2      
 215   2               P0=0xff;
 216   2               P24=1;

⌨️ 快捷键说明

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