DIY编程器网

标题: 收音机模块TEA5767的C51控制程序 [打印本页]

作者: liyf    时间: 2012-1-16 17:20
标题: 收音机模块TEA5767的C51控制程序

                    ???? TEA5767采用I2C或者三线接口控制,我是用的I2C,单片机用STC89C52,带1K EEPROM,可以掉电存台,1602LCD显示.
  teA5767读写数据都是5个字节,其中PLL参数14位,具体数据格式请看datasheet.以下程序中的函数可以直接在主程序中调用.
  #include "iic.c"
  #define max_freq 108000
  #define min_freq 87500
  unsigned char radio_write_data[5]={0x29,0xc2,0x20,0x11,0x00}; //要写入TEA5767的数据
  unsigned char radio_read_data[5]; //TEA5767读出的状态
  unsigned int default_pll=0x29c2;//0x29f9; //默认存台的pll,87.8MHz
  //unsigned int max_pll=0x339b; //108MHz时的pll,
  //unsigned int min_pll=9000; //70MHz时的pll
  void radio_write(void)
  {
  unsigned char i;
  iic_STart();
  iic_write8bit(0xc0); //TEA5767写地址
  if(!iic_testack())
  {
  for(i=0;imax_freq)
  frequency=min_freq;
  }
  else
  {
  frequency-=100;
  if(frequency
  frequency=max_freq;
  }
  get_pll();
  radio_write_data[0]=pll/256;
  radio_write_data[1]=pll%256;
  radio_write_data[2]=0x20;
  radio_write_data[3]=0x11;
  radio_write_data[4]=0x00;
  radio_write();
  }
  //自动搜台,mode=1,频率增加搜台; mode=0:频率减小搜台,不过这个好像不能循环搜台
  void auto_search(bit mode)
  {
  radio_read();
  get_pll();
  if(mode)
  radio_write_data[2]=0xa0;
  else
  radio_write_data[2]=0x20;
  radio_write_data[0]=pll/256+0x40;
  radio_write_data[1]=pll%256;
  radio_write_data[3]=0x11;
  radio_write_data[4]=0x00;
  radio_write();
  radio_read();
  while(!(radio_read_data[0]&0x80)) //搜台成功标志
  {
  radio_read();
  disp_freq(9,1);
  }
  }
            




欢迎光临 DIY编程器网 (http://diybcq.com/) Powered by Discuz! X3.2