在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,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) > 設計應用 > 用M16單片機I/O口生成模擬音樂

            用M16單片機I/O口生成模擬音樂

            作者: 時間:2011-09-20 來源:網(wǎng)絡 收藏

            * 用I/O口生成 *
            * 功 能:用I/O口生成 *
            * 時鐘頻率:內(nèi)部1M *
            * 設 計:tonghe *
            * 修改日期:2007年04月13日 *
            * 編譯環(huán)境:ICC-AVR6.31 *
            * 實驗環(huán)境:本站M16學習板 *
            * 發(fā) 聲:無源蜂鳴器 *
            * 結(jié) 果:試驗通過 *
            * 要 求:插上JP1、JP2、LED_EN短路塊 *
            *****************************************/
            #include iom16v.h>
            #include macros.h>
            #define uchar unsigned char
            #define uint unsigned int
            /****************************************
            * 定義音樂數(shù)據(jù)二維數(shù)組{x,y} *
            * x:對應音符音階(頻率),0表示休止符 *
            * y:對應音符節(jié)拍,0表示音樂結(jié)束 *
            * 此數(shù)據(jù)取自《ICC AVR應用實例》 *
            ****************************************/
            //以下音樂數(shù)據(jù)為《卡秋莎》,位于程序區(qū)
            flash uint music_data[][2]=
            {
            {440,600},{494,200},{523,600},{443,200},{523,400},{494,200},
            {440,200},{494,400},{330,400},{494,600},{523,200},{578,600},
            {494,200},{578,400},{523,200},{494,200},{440,800},{659,400},
            {880,400},{784,400},{880,200},{784,200},{698,400},{659,200},
            {578,200},{659,400},{440,400},{ 0,200},{698,400},{578,200},
            {659,600},{523,200},{494,200},{330,200},{523,200},{494,200},
            {440,800},{659,400},{880,400},{784,400},{880,200},{784,200},
            {698,400},{659,200},{578,200},{659,400},{440,400},{ 0,200},
            {698,400},{578,200},{659,600},{523,200},{494,200},{330,200},
            {523,200},{494,200},{440,800},{ 0, 0}
            };

            #pragma data:data //設置回到數(shù)據(jù)存儲器區(qū)
            /************************************
            * 延時函數(shù):1M時鐘時為MS *
            ************************************/
            void delay_ms(uint i)
            {
            uchar a;
            for(;i;i--)
            {
            for (a = 220; a; a--)
            {
            ;
            }
            }
            }
            /************************************
            * 端口初始化函數(shù) *
            ************************************/
            void port_init(void)
            {
            DDRD=0xff; //D口配置為輸出,驅(qū)動蜂鳴器
            DDRB=0xff; //B口配置為輸出,驅(qū)動LED
            PORTB=0xff; //LED初值為滅
            }
            /***********************************
            * 音樂產(chǎn)生函數(shù) *
            * 功能:輸出頻率為x的方波,延時y MS*
            * 范圍:x:100-20000Hz,0:不發(fā)聲 *
            * y:0-65536 MS *
            ***********************************/
            void sound(uchar i)
            {
            uint x;
            x=music_data[i][0]; //取音樂的頻率數(shù)據(jù)
            if(x!=0)
            {
            x=500000/x; //1M時鐘數(shù)據(jù)計算
            OCR1A=x; //比較值賦值
            TCCR1A = 0x40; //允許比較反轉(zhuǎn)輸出
            }
            else
            {
            TCCR1A = 0x00; //頻率為0,休止符,不發(fā)聲
            }
            }
            /*******************************
            * 主函數(shù) *
            *******************************/
            void main(void)
            {
            uchar i=0;
            port_init(); //端口初始化
            TCCR1A = 0x40; //將T/C1配置為比較匹配,OC1A取反
            TCCR1B = 0x09;
            while(1)
            {
            while(music_data[i][1]!=0) //等待最后一個音符到來
            {
            sound(i); //輸出音符
            delay_ms(music_data[i][1]);//節(jié)拍延時
            TCCR1A = 0x00; //奏完一個音符停止
            PORTB^=15; //音符節(jié)拍由LD5閃亮顯示
            PORTD|=15;
            i++; //準備一下個音符
            }
            delay_ms(1000);
            i=0; //一遍結(jié)束,停1秒,從頭開始
            }
            }



            評論


            技術專區(qū)

            關閉