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

          新聞中心

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

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

          作者: 時(shí)間:2016-11-30 來源:網(wǎng)絡(luò) 收藏
          /**************************************************************************************************************
          AT89S52+12MHZ+TEA5767的數(shù)碼管顯示調(diào)頻收音機(jī)
          本程序使用數(shù)碼管顯示頻率晶振是用12M 已通過測(cè)試,收音機(jī)的頻率調(diào)節(jié)是用計(jì)算的方法 將顯示的頻率算好后寫到TEA5767
          芯片里面實(shí)現(xiàn)調(diào)節(jié)的 兩個(gè)按鍵實(shí)現(xiàn)自加或自減頻率 加了連續(xù)加減功能!
          使用的是在淘寶上買的4.5元/片的簡(jiǎn)化版的TEA5767模塊.
          2012-05-08
          /**************************************************************************************************************/
          #include < reg51.h >
          #define uchar unsigned char
          #define uint unsigned int
          /**************************************************************************************************************/
          sbit SDA = P3^0; //接在TEA5767的數(shù)據(jù)端口
          sbit SCL = P3^1; //接在TEA5767的時(shí)鐘端口
          sbit KEY1 = P3^4; //頻率增加按鍵端口
          sbit KEY2 = P3^5; //頻率減小按鍵端口
          sbit KEY3 = P3^6; //頻率增加按鍵端口
          sbit KEY4 = P3^7; //頻率減小按鍵端口
          #define duan P0 //頻率顯示的數(shù)碼管段選P0端口
          //#define gy //使用共陰極時(shí)屏蔽這行
          sbit dula=P2^6;
          sbit wela=P2^7;
          uchar IF,ADC,CH;
          //bit RF,STEREO;
          #ifdef gy
          unsigned char code dispbit[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//顯示位碼
          unsigned char code dispcode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};//數(shù)碼管顯示編碼
          #else
          /**************************************************************************************************************/
          unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00}; //數(shù)碼管顯示編碼
          unsigned char code dispbit[]={0x7e,0x7d,0x7b,0x77,0x6f,0x5f};/*定義點(diǎn)亮的數(shù)碼管與數(shù)組的關(guān)系*/
          #endif
          /**************************************************************************************************************
          unsigned char radio_write_data[5] = {0x2c,0xe1,0x70,0x16,0x80}; //頻率為93.9MHz 廣東音樂電臺(tái)
          unsigned char radio_write_data[5] = {0x30,0x5c,0x70,0x16,0x80}; //頻率為101.2MHz 廣東電臺(tái)音樂之聲
          unsigned char radio_write_data[5] = {0x31,0x38,0x70,0x16,0x80}; //頻率為103.0MHz 廣東珠江經(jīng)濟(jì)電臺(tái)
          unsigned char radio_write_data[5] = {0x31,0xd7,0x70,0x16,0x80}; //頻率為104.3MHz 寶安廣播電臺(tái)
          unsigned char radio_write_data[5] = {0x32,0x20,0x70,0x16,0x80}; //頻率為104.9MHz 中央人民廣播電臺(tái)華夏之聲
          unsigned char radio_write_data[5] = {0x33,0x2d,0x70,0x16,0x80}; //頻率為107.1MHz 中國國際廣播電臺(tái)環(huán)球資訊
          /**************************************************************************************************************/
          unsigned char radio_read_data[5];
          unsigned char radio_write_data[5];
          unsignedlongfrequency = 104900; //開機(jī)初始化的電臺(tái)頻率為104.9MHz中央民廣播電臺(tái)華夏之聲
          unsigned int PLL; //計(jì)算頻率合成時(shí)用的變量
          /**************************************************************************************************************/
          void Delayus(unsigned char x)
          {
          for(;x > 0;x--);
          }
          /**************************************************************************************************************/
          void iic_start() //啟動(dòng)總線傳輸
          {
          SDA = 1;
          Delayus(4);
          SCL = 1;
          Delayus(4);
          SDA = 0;
          Delayus(4);
          SCL = 0;
          Delayus(4);
          }
          /**************************************************************************************************************/
          void iic_stop() //結(jié)束總線傳輸
          {
          SCL = 0;
          Delayus(4);
          SDA = 0;
          Delayus(4);
          SCL = 1;
          Delayus(4);
          SDA = 1;
          Delayus(4);
          }
          /**************************************************************************************************************/
          void iic_ack() //發(fā)送應(yīng)答位
          {
          SDA = 0;
          Delayus(4);
          SCL = 1;
          Delayus(4);
          SCL = 0;
          Delayus(4);
          SDA = 1;
          Delayus(4);
          }
          /**************************************************************************************************************/
          bit iic_testack()
          {
          bit ErrorBit;
          SDA = 1;
          Delayus(4);
          SCL = 1;
          Delayus(4);
          ErrorBit = SDA;
          Delayus(4);
          SCL = 0;
          return ErrorBit;
          }
          /**************************************************************************************************************/
          void iic_write8bit(unsigned char input) //寫一個(gè)字節(jié)的數(shù)據(jù)到總線上
          {
          unsigned char temp;
          for(temp = 8;temp > 0;temp--)
          {
          SDA = (bit)(input & 0x80);
          Delayus(4);
          SCL = 1;
          Delayus(4);
          SCL = 0;
          Delayus(4);
          input = input << 1;
          }
          }
          /**************************************************************************************************************/
          uchar iic_rdbyt() //從總線上讀取一個(gè)字節(jié)的數(shù)據(jù)
          {
          uchar a = 0,i = 0;
          for(i = 0;i < 8;i++)
          {
          SDA = 1;
          SCL = 1;
          if(SDA == 1)
          {
          a = (a << 1) + 1;
          SCL = 0;
          }
          else if(SDA == 0)
          {
          a = a << 1;
          SCL = 0;
          }
          }
          return(a);
          }
          /**************************************************************************************************************/
          void delays (unsigned char b) //按鍵消抖用的延時(shí)程序
          {
          unsigned char i;
          for(b;b > 0;b--)
          for(i = 0;i < 250;i++);
          }
          /**************************************************************************************************************/
          void radio_write(void) //寫入TEA5767
          {
          unsigned char i;
          iic_start(); //啟動(dòng)總線傳輸
          iic_write8bit(0xc0); //TEA5767寫地址
          if(!iic_testack())
          {
          for(i = 0;i < 5;i++)
          {
          iic_write8bit(radio_write_data); //寫一個(gè)字節(jié)的數(shù)據(jù)到總線上
          iic_ack(); //發(fā)送應(yīng)答位
          }
          }
          iic_stop(); //結(jié)束總線傳輸
          }
          /**************************************************************************************************************/
          //將顯示的頻率算好后寫到TEA5767芯片里面實(shí)現(xiàn)調(diào)節(jié),不用考慮TEA5767用于搜臺(tái)的相關(guān)位:SM,SUD
          //寫模式
          //數(shù)據(jù)字節(jié)1 數(shù)據(jù)字節(jié)2 數(shù)據(jù)字節(jié)3 數(shù)據(jù)字節(jié)4 數(shù)據(jù)字節(jié)5
          void search()
          {
          PLL = (unsigned int)((float)((frequency + 225)) / (float)8.192); //計(jì)算合成頻率數(shù)據(jù) 頻率單位:k
          /**************************************************************************************************************/
          //數(shù)據(jù)字節(jié)1的格式 radio_write_data[0]
          //位7(高位) 位6 位5 位4 位3 位2 位1 位0(低位)
          // MUTE SM PLL13 PLL12 PLL11 PLL10 PLL9 PLL8
          //7 MUTE 如果MUTE=1 則左右聲道被靜音;MUTE=0 左右聲道正常工作。
          //6 SM 如果SM=1 則處于搜索模式 SM=0 不處于搜索模式。
          //5到0 PLL[13:8] 設(shè)定用于搜索和預(yù)設(shè)的可編程頻率合成器。
          radio_write_data[0] = PLL / 256; //將算好的頻率高位數(shù)據(jù)存入將要TEA5767的數(shù)組里
          /**************************************************************************************************************/
          //數(shù)據(jù)字節(jié)2的格式 radio_write_data[1]
          //位7(高位) 位6 位5 位4 位3 位2 位1 位0(低位)
          // PLL7 PLL6 PLL5 PLL4 PLL3 PLL2 PLL1 PLL0
          //PLL[7:0] 設(shè)定用于搜索和預(yù)設(shè)的可編程頻率合成器。
          radio_write_data[1] = PLL % 256; //將算好的頻率低位數(shù)據(jù)存入將要TEA5767的數(shù)組里

          上一頁 1 2 3 下一頁

          評(píng)論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁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); })();