在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,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首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > TEA5767的簡(jiǎn)單收音機(jī)設(shè)計(jì)

            TEA5767的簡(jiǎn)單收音機(jī)設(shè)計(jì)

            作者: 時(shí)間:2016-11-21 來(lái)源:網(wǎng)絡(luò) 收藏
            TEA5767是飛利浦公司生產(chǎn)的一款收音機(jī)芯片,很多手機(jī),MP3、MP4里的收音機(jī)功能都是于他實(shí)現(xiàn)的。

              TEA5767HN 基本資料:
               高靈敏、低噪聲高頻放大器,
               收音頻率:87.6MHz~108MHz,(支持頻率范圍在76MHz~87.5MHz 之間的校園收音頻道),
               LC 調(diào)諧振蕩器使成本更低,RF AGC 電路
               內(nèi)置調(diào)頻中頻選擇 ,I2C 總線控制
               內(nèi)置FM 立體聲解調(diào)器 ,PLL 合成調(diào)諧解碼器
               兩個(gè)可編程端口 ,軟靜音,SNC(立體聲噪聲消除)
               自適應(yīng)立體聲解碼,自動(dòng)搜索功能
               等待模式,需要一個(gè)32.768KHz 晶體
               40 腳LQFP 封裝

            本文引用地址:http://www.biyoush.com/article/201611/319372.htm


            CPU:STC89C54RD+
            晶震:40M


            #include
            #include
            #include

            sbit SDA_5767=P1^0; //數(shù)據(jù)
            sbit SCL_5767=P1^1; // 時(shí)鐘
            sbit BUS_MODE=P1^2; // 總線選擇
            sbit BUS_ENABLE=P1^3; // 總線使能

            #define max_freq 108000 //108Mhz
            #define min_freq 87500 //87.5Mhz
            #define max_pll 0x339b //108MHz時(shí)的pll.
            #define min_pll 0x299d //87.5MHz時(shí)的pll.
            #define KEY P2 //P2口作為按鍵


            #define WADDR 0XC0 //寫(xiě)地址
            #define RADDR 0XC1 //讀地址

            unsigned char write_data[5]={0x2b,0x05,0x61,0x11,0x40}; //每次寫(xiě)入5字節(jié) 注釋如下(感覺(jué)有用的注下 詳細(xì)了解看手冊(cè))
            //write_data[0] 第二位為1為搜索模式 后6為表示收音機(jī)頻率的高6位
            //write_data[1] 表示收音機(jī)頻率的低8位
            //write_data[2] 最高位表示搜索模式是向上還是向下 后兩位表示搜索的靈敏度 第四位立體聲和單聲道選擇位后四為左右聲道設(shè)置
            //write_data[3] 第三位表示日本頻率和國(guó)際頻率選擇位 第四位 震蕩頻率選擇位(與第五字節(jié)最高位共同決定)第七為數(shù)字降噪功能選擇
            //write_data[4] 最高位決定內(nèi)部震蕩頻率
            unsigned char read_data[5]; //讀取5字節(jié) 讀以上各寄存器的狀態(tài) 主要是頻率讀取

            unsigned long frequencry=0; //32位讀取頻率數(shù)據(jù)
            unsigned int pll; //16位轉(zhuǎn)換數(shù)據(jù)


            void delay(void) //延時(shí)函數(shù)
            {
            _nop_();
            _nop_();
            _nop_();
            _nop_();
            _nop_();
            }

            void start_5767(void)//起始
            {
            BUS_ENABLE=1;
            SDA_5767=1;
            SCL_5767=1;
            delay();
            SDA_5767=0;
            delay();
            SCL_5767=0;
            }

            void stop_5767(void)//停止
            {
            SDA_5767=0;
            SCL_5767=1;
            delay();
            SDA_5767=1;
            delay();
            SCL_5767=0;
            BUS_ENABLE=0;
            }

            void Check_Ack(void) //檢查應(yīng)答信號(hào)
            {
            SDA_5767=1;
            SCL_5767=1;
            F0=0;
            delay();
            if(SDA_5767) //如果數(shù)據(jù)為高 置位非應(yīng)答標(biāo)志FO
            F0=1; //通用標(biāo)志位 PSW狀態(tài)寄存器
            SCL_5767=0; //準(zhǔn)備下一變化數(shù)據(jù)
            }

            void Ack(void) //發(fā)響應(yīng)信號(hào)
            {
            SDA_5767=0;
            delay();
            SCL_5767=1;
            delay();
            SCL_5767=0;
            }

            void no_Ack(void) //發(fā)非響應(yīng)信號(hào)
            {
            SDA_5767=1;
            SCL_5767=0;
            delay();
            SCL_5767=1; //迫使數(shù)據(jù)傳輸結(jié)束
            delay();
            }

            void send_byte(unsigned char temp) //發(fā)送一字節(jié)數(shù)據(jù)
            {
            unsigned char i=8;
            while(i--)
            {
            SDA_5767=(bit)(temp&0x80);
            SCL_5767=1;
            delay();
            SCL_5767=0;
            temp<<=1;
            }
            SCL_5767=0;
            delay();
            SDA_5767=1; //釋放SDA數(shù)據(jù)線
            }

            unsigned char read_byte(void) //讀一字節(jié)數(shù)據(jù)
            {
            unsigned char i=8;
            unsigned char temp;
            while(i--)
            {
            temp<<=1;
            if(SDA_5767)
            temp++;
            SCL_5767=1;
            delay();
            SCL_5767=0;
            }
            SCL_5767=0;
            delay();
            SDA_5767=1; //釋放SDA數(shù)據(jù)線
            return (temp);
            }

            void write_radio()
            {
            unsigned char i;
            start_5767();
            send_byte(WADDR);
            Check_Ack();
            if(F0)
            {
            no_Ack();
            return;
            }
            Ack();
            for(i=0;i<5;i++)
            {
            send_byte(write_data[i]);
            Check_Ack();
            if(F0)
            {
            no_Ack();
            return;
            }
            Ack();
            }
            stop_5767();
            }


            void read_radio()
            {
            unsigned char i;
            start_5767();
            send_byte(RADDR);
            Check_Ack();
            if(F0)
            {
            no_Ack();
            return;
            }
            Ack();
            for(i=0;i<5;i++)
            {
            read_data[i]=read_byte();
            Check_Ack();
            if(F0)
            {
            no_Ack();
            return;
            }
            Ack();
            }
            stop_5767();
            }

            unsigned int get_radio() //獲得頻率數(shù)據(jù)
            {
            unsigned char tmp_h,tmp_l;
            read_radio();
            tmp_h=read_data[0]&0x3f;
            tmp_l=read_data[1];
            return (tmp_h<<8|tmp_l);
            }

            void get_frequencry() //將數(shù)據(jù)轉(zhuǎn)換為標(biāo)準(zhǔn)頻率
            {
            unsigned char tmp_data;
            unsigned int pll_data;
            pll_data=get_radio();
            tmp_data=read_data[2]&0x10;
            if(tmp_data)
            frequencry= (pll_data*32768/4-225000)/1000; //(單位KHZ)
            else
            frequencry= (pll_data*32768/4+225000)/1000; // (單位KHZ)
            }

            void get_pll() //將頻率轉(zhuǎn)換數(shù)據(jù)
            {
            unsigned char tmp_data;
            unsigned int pll_data;
            unsigned long tmp_pll;
            pll_data=get_radio();
            tmp_data=read_data[2]&0x10;
            if(tmp_data)
            tmp_pll=(frequencry+255000)*4/32768;// (單位HZ)
            else
            tmp_pll=(frequencry-255000)*4/32768; //(單位HZ)
            pll=(unsigned int)(tmp_pll/1000); //(單位 KHZ)
            }

            void search(bit mode) //手動(dòng)搜臺(tái)
            {
            get_frequencry();
            if(mode)
            {
            frequencry+=100;
            if(frequencry>max_freq)
            frequencry=87500;
            }
            else
            {
            frequencry-=100;
            if(frequencry frequencry=108000;
            }
            get_pll();
            write_data[0]=(pll>>8)&0x3f;
            write_data[1]=pll&0xff;
            write_data[2]=0x61;
            write_data[3]=0x11;
            write_data[4]=0x40;
            write_radio();
            }

            void auto_search(bit mode) //自動(dòng)搜臺(tái)
            {
            get_frequencry();
            get_pll();
            if(mode)
            {
            write_data[2]=0xe1;
            if(pll>max_pll)
            pll=min_pll;
            }
            else
            {
            write_data[2]=0x61;
            if(pllpll=max_pll;
            }
            write_data[0]=(pll>>8)&0x3f+0x40; //自動(dòng)搜臺(tái)
            write_data[1]=pll&0xff;
            write_data[2]=0x61;
            write_data[3]=0x11;
            write_data[4]=0x40;
            write_radio();
            read_radio();
            while(!(read_data[0]&0x80)) //最高位為1 電臺(tái)就緒 否則一直讀
            {
            read_radio();
            }
            }

            void delay_xms(unsigned int count) //1MS延時(shí)函數(shù)
            {
            register unsigned char j;
            while (count --)
            {
            for (j=0;j<230;j++);
            }
            }


            unsigned char GetKey() //鍵盤(pán)處理函數(shù)
            {
            unsigned char m,n,e=0xff;

            KEY = 0x0f; //鍵盤(pán)口置00001111
            if (KEY != 0x0f) //查尋鍵盤(pán)口的值是否變化
            {
            delay_xms(20); //延時(shí)20毫秒
            if (KEY != 0x0f) //有鍵按下處理
            {
            m = KEY; //鍵值放入寄存器m
            }
            KEY = 0xf0; //將鍵盤(pán)口置為11110000
            n = KEY; //將第二次取得值放入寄存器n
            m |= n;
            switch(m)
            {
            case 0x7e: e = 0x00; break;
            case 0xbe: e = 0x01; break;
            case 0xde: e = 0x02; break;
            case 0xee: e = 0x03; break;
            case 0x7d: e = 0x04; break;
            case 0xbd: e = 0x05; break;
            case 0xdd: e = 0x06; break;
            case 0xed: e = 0x07; break;
            case 0x7b: e = 0x08; break;
            case 0xbb: e = 0x09; break;
            case 0xdb: e = 0x0a; break;
            case 0xeb: e = 0x0b; break;
            case 0x77: e = 0x0c; break;
            case 0xb7: e = 0x0d; break;
            case 0xd7: e = 0x0e; break;
            case 0xe7: e = 0x0f; break;
            default: break;
            }
            }

            KEY = 0x0f;
            while (KEY != 0x0f);

            return (e);
            }


            void main(void)
            {
            unsigned char i;
            TMOD = 0x11;
            TH0 = 0x5d;
            TL0 = 0x3d;
            TR0 = 0;
            TH1 = 0x5d;
            TL1 = 0x3d;
            TR1 = 0;
            PCON = 0x00;
            SCON = 0xD0;
            IP = 0x14;
            EX0 = 1;
            IT0 = 1;
            ET0 = 1;
            EX1 = 1;
            IT1 = 1;
            ES = 0;
            EA = 0;
            BUS_MODE=0;
            write_radio();//初始寫(xiě)入 90M
            frequencry = 90000;

            while(1)
            {
            i = GetKey();

            switch (i)
            {
            case 0x00:
            search(1);
            break;


            case 0x01:
            search(0);
            break;


            case 0x02:
            auto_search(1);
            break;

            case 0x03:
            auto_search(0);
            break;

            default: break;
            }
            }
            }




            關(guān)鍵詞: TEA5767收音機(jī)設(shè)

            評(píng)論


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

            關(guān)閉