在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

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

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

            作者: 時間:2016-11-30 來源:網絡 收藏

            /*************************************************************************************************************/
            //由頻率計算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),并轉換成頻率
            {
            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),并轉換成頻率
            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),并轉換成頻率
            }
            /**************************************************************************************************************/
            #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); //調用顯示
            radio_read(); //讀收音機芯片數(shù)據(jù)
            //if((radio_read_data[0] & 0x80))//如果有一個頻道被搜到或者一個制式已經符合
            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); //調用顯示
            radio_read();//讀收音機芯片數(shù)據(jù)
            //if((radio_read_data[0] & 0x80))//如果有一個頻道被搜到或者一個制式已經符合
            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); //調用顯示
            }
            /**************************************************************************************************************/
            if(!KEY2) //手動設置頻率,-0.1MHz;
            {
            delays(20); //延時消抖
            frequency -=100;
            if(frequency < 87500) //頻率如果小于87.5MHz
            frequency = 108500; //頻率設定為108.5MHz
            search(); //將顯示的頻率算好后寫到TEA5767芯片里面
            desplay(frequency / 100); //調用顯示
            }
            /**************************************************************************************************************/
            if(!KEY3) //加頻率
            {
            delays(250); //延時消抖
            if(!KEY3)
            {
            auto_search(1);//自動搜臺,mode=1,頻率增加搜臺
            }
            while(!KEY3) desplay(frequency / 100);//調用顯示
            }
            /**************************************************************************************************************/
            if(!KEY4) //減頻率
            {
            delays(20); //延時消抖
            if(!KEY4)
            {
            auto_search(0);//自動搜臺mode=0:頻率減小搜臺
            }
            while(!KEY4) desplay(frequency / 100);//調用顯示
            }
            desplay(frequency / 100); //調用顯示
            }
            }
            /**************************************************************************************************************/

            上一頁 1 2 3 下一頁

            評論


            技術專區(qū)

            關閉