<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > AT89S52+12MHZ+TEA5767的數(shù)碼管顯示調(diào)頻收音機

          AT89S52+12MHZ+TEA5767的數(shù)碼管顯示調(diào)頻收音機

          作者: 時間:2016-11-30 來源:網(wǎng)絡 收藏

          /*************************************************************************************************************/
          //由頻率計算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)//讀TEA5767狀態(tài),并轉(zhuǎn)換成頻率
          {
          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 = (unsignedlong)((float)(npll) * (float)8.192 + 225); //頻率單位:KHz
          }
          /**************************************************************************************************************/
          //讀TEA5767狀態(tài),并轉(zhuǎn)換成頻率
          void radio_read(void)//讀收音機芯片數(shù)據(jù)
          {
          unsigned char i;
          unsigned char temp_l,temp_h;
          PLL = 0;
          iic_stop(); //結束總線傳輸
          iic_start(); //啟動總線傳輸
          iic_write8bit(0xc1); //TEA5767寫地址
          if(!iic_testack())
          {
          for(i = 0;i < 5;i++)
          {
          radio_read_data = iic_rdbyt();//從總線上讀取一個字節(jié)的數(shù)據(jù)
          iic_ack(); //發(fā)送應答位
          }
          }
          iic_stop(); //結束總線傳輸
          //RF = radio_read_data[0] & 0x80;
          IF = radio_read_data[2] & 0x7f; //去掉最高位就是IF值
          ADC = radio_read_data[3]; //去掉最高位就是IF值
          ADC >>= 4;
          //STEREO = radio_read_data[2] & 0x80; //最高位就是STEREO值
          temp_l = radio_read_data[1];
          temp_h = radio_read_data[0];
          temp_h &= 0x3f;
          PLL = temp_h * 256 + temp_l;
          get_frequency(); //讀TEA5767狀態(tài),并轉(zhuǎn)換成頻率
          }
          /**************************************************************************************************************/
          #define max_freq 108000
          #define min_freq 87500
          //自動搜臺,mode=1,頻率增加搜臺; mode=0:頻率減小搜臺
          void auto_search(uchar dec)
          {
          int k = 0;
          //unsigned char aa[6] = {0};
          radio_write();//寫收音機芯片數(shù)據(jù)
          if(dec)//自動搜臺,mode=1,頻率增加搜臺
          {
          while(frequency < max_freq)//如果當前頻率小于最大頻率上限值
          {
          get_pll();//由頻率計算PLL
          radio_write_data[0] = PLL / 256;
          radio_write_data[1] = PLL % 256;
          radio_write_data[2] = 0xA0; //增加頻率搜索,低:ADC輸出大小為5,高充電電流
          radio_write_data[3] = 0x11; //fxtal=32.768KHz,軟件靜音開
          radio_write_data[4] = 0x80; //6.5MHz的鎖相環(huán)參考頻率開,去加重時間常數(shù)為50us。
          radio_write_data[0] |= 0x40; //0100 0000 = SM / SM=1 則處于搜索模式
          radio_write(); //寫入TEA5767
          desplay(frequency / 100); //調(diào)用顯示
          radio_read(); //讀收音機芯片數(shù)據(jù)
          //if((radio_read_data[0] & 0x80))//如果有一個頻道被搜到或者一個制式已經(jīng)符合
          if((IF < 0x3e) && (IF > 0x31) && (ADC > 4))//&&(STEREO)&&(RF))//如搜到電臺
          {
          frequency += 100;
          return;
          }
          }
          frequency = min_freq;//將最小頻率下限值賦給當前頻率
          }
          else//自動搜臺, mode=0:頻率減小搜臺
          {
          while(frequency > min_freq)//如果當前頻率大于最小頻率下限值
          {
          get_pll();//由頻率計算PLL
          radio_write_data[0] = PLL / 256;
          radio_write_data[1] = PLL % 256;
          radio_write_data[2] = 0x20; //減小頻率搜索,低:ADC輸出大小為5,高充電電流
          radio_write_data[3] = 0x11; //fxtal=32.768KHz,軟件靜音開
          radio_write_data[4] = 0x80; //6.5MHz的鎖相環(huán)參考頻率開,去加重時間常數(shù)為50us。
          radio_write_data[0] |= 0x40; //0100 0000 = SM / SM=1 則處于搜索模式
          radio_write(); //寫入TEA5767
          desplay(frequency / 100); //調(diào)用顯示
          radio_read();//讀收音機芯片數(shù)據(jù)
          //if((radio_read_data[0] & 0x80))//如果有一個頻道被搜到或者一個制式已經(jīng)符合
          if((IF < 0x3e) && (IF > 0x31) && (ADC > 4))//&&(STEREO)&&(RF))//如搜到電臺
          {
          frequency -= 100;
          return;
          }
          }
          frequency = max_freq;//將最大頻率上限值賦給當前頻率
          }
          }
          /**************************************************************************************************************/
          void main()
          {
          /**************************************************************************************************************
          //觀察變量用
          unsigned char B,D;
          frequency = 104900;
          PLL = (unsigned int)((float)((frequency + 225)) / (float)8.192);
          B = PLL/256;
          D = PLL % 256;
          delay();
          /**************************************************************************************************************/
          delays(1000); //延時消抖
          search(); //寫入初始化電臺頻率
          //radio_read();
          while(1)
          {
          if(!KEY1) //手動設置頻率, + 0.1MHz;
          {
          delays(250); //延時消抖
          frequency += 100;
          if(frequency > 108500) //頻率如果大于108.5MHz
          frequency = 87500; //頻率設定為87.5MHz
          search(); //將顯示的頻率算好后寫到TEA5767芯片里面
          desplay(frequency / 100); //調(diào)用顯示
          }
          /**************************************************************************************************************/
          if(!KEY2) //手動設置頻率,-0.1MHz;
          {
          delays(20); //延時消抖
          frequency -=100;
          if(frequency < 87500) //頻率如果小于87.5MHz
          frequency = 108500; //頻率設定為108.5MHz
          search(); //將顯示的頻率算好后寫到TEA5767芯片里面
          desplay(frequency / 100); //調(diào)用顯示
          }
          /**************************************************************************************************************/
          if(!KEY3) //加頻率
          {
          delays(250); //延時消抖
          if(!KEY3)
          {
          auto_search(1);//自動搜臺,mode=1,頻率增加搜臺
          }
          while(!KEY3) desplay(frequency / 100);//調(diào)用顯示
          }
          /**************************************************************************************************************/
          if(!KEY4) //減頻率
          {
          delays(20); //延時消抖
          if(!KEY4)
          {
          auto_search(0);//自動搜臺mode=0:頻率減小搜臺
          }
          while(!KEY4) desplay(frequency / 100);//調(diào)用顯示
          }
          desplay(frequency / 100); //調(diào)用顯示
          }
          }
          /**************************************************************************************************************/

          上一頁 1 2 3 下一頁

          評論


          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();