新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 收音機模塊TEA5767的C51控制程序

        收音機模塊TEA5767的C51控制程序

        作者: 時間:2010-09-11 來源:網絡 收藏

          采用I2C或者三線接口,我是用的I2C,單片機用STC89C52,帶1K EEPROM,可以掉電存臺,1602LCD顯示.

        本文引用地址:http://www.104case.com/article/151570.htm

          讀寫數據都是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}; //要寫入的數據

          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;i5;i++)

          {

          iic_write8bit(radio_write_data[i]);

          iic_ack();

          }

          }

          iic_stop();

          }

          //讀TEA5767狀態,并轉換成頻率

          void radio_read(void)

          {

          unsigned char i;

          unsigned char temp_l,temp_h;

          pll=0;

          iic_start();

          iic_write8bit(0xc1); //TEA5767讀地址

          if(!iic_testack())

          {

          for(i=0;i5;i++)

          {

          radio_read_data[i]=iic_read8bit();

          iic_ack();

          }

          }

          iic_stop();

          temp_l=radio_read_data[1];

          temp_h=radio_read_data[0];

          temp_h=0x3f;

          pll=temp_h*256+temp_l;

          get_frequency();

          }

          //由頻率計算PLL

          void get_pll(void)

          {

          unsigned char hlsi;

          unsigned int twpll=0;

          hlsi=radio_write_data[2]0x10;

          if (hlsi)

          pll=(unsigned int)((float)((frequency+225)*4)/(float)32.768); //頻率單位:k

          else

          pll=(unsigned int)((float)((frequency-225)*4)/(float)32.768); //頻率單位:k

          }

          //由PLL計算頻率

          void get_frequency(void)

          {

          unsigned char hlsi;

          unsigned int npll=0;

          npll=pll;

          hlsi=radio_write_data[2]0x10;

          if (hlsi)

          frequency=(unsigned long)((float)(npll)*(float)8.192-225); //頻率單位:KHz

          else

          frequency=(unsigned long)((float)(npll)*(float)8.192+225); //頻率單位:KHz

          }


        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 凤阳县| 临海市| 栾川县| 永昌县| 双柏县| 建昌县| 仪陇县| 万年县| 阜南县| 郧西县| 岳普湖县| 信阳市| 万源市| 明星| 黔西| 临西县| 古交市| 东乌珠穆沁旗| 盘山县| 松江区| 磐石市| 搜索| 三穗县| 桑日县| 黄石市| 阳原县| 垣曲县| 大足县| 瑞安市| 温州市| 尉犁县| 淅川县| 巨鹿县| 从江县| 嘉善县| 瑞昌市| 双流县| 合作市| 黔南| 阿图什市| 根河市|