新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 利用蜂鳴器和單片機演奏簡單的音樂電路設計

        利用蜂鳴器和單片機演奏簡單的音樂電路設計

        作者: 時間:2011-04-10 來源:網絡 收藏

        ET0=1; EA=1;

        TR0=0; TR1=1;

        while(point=point2)

        {

        sl=ts%10; /* 計算出音符 */

        sh=ts/100; /* 計算出是否升半 */

        sm=ts/10%10; /* 計算出高低音 */

        hz=ftab[stab[sl-1]+sh]; /* 查出對應音符的頻率 */

        if(sl!=0)

        {

        if (sm==1) hz>>=2; /* 若是低音 */

        if (sm==3) hz=2; /* 若是高音 */

        sc=(50000/hz)*10/plen; /* 計算脈沖個數 */

        sc=65536-sc; /* 計算計數器初值 */

        sc0=sc%256; /* 算出TL0 應裝初值 */

        sc1=sc/256; /* 算出TH0 應裝初值 */

        TH0=sc1; /* 裝入初值 */

        TL0=sc0+12; /* 加12 是對中斷延時的補償 */

        }

        slen=ltab[tl%10]; /* 算出是幾分音符 */

        xg=tl/10%10; /* 算出音符類型(0 普通1 連音2 頓音) */

        fd=tl/100;

        len=len0/slen; /* 算出連音音符的長度(多少個10ms)*/

        if (fd==1) len=len+len/2;

        if(xg!=1)

        if(xg==0) /* 算出普通音符的長度 */

        if (slen=4)

        len1=len-len4;

        else

        len1=len*yx;

        else

        len1=len/2; /* 算出頓音的長度 */

        else

        len1=len;

        if(sl==0) len1=0;

        len2=len-len1; /* 算出不發音的長度 */

        if (sl!=0)

        {

        TR0=1;

        for(i=len1;i>0;i--) /* 發規定長度的音 */

        {

        while(TF1==0);

        TH1=tc1; TL1=tc0;

        TF1=0;

        }

        }

        if(len2!=0)

        {

        TR0=0; speaker=1;

        for(i=len2;i>0;i--) /* 音符間的間隔 */

        {

        while(TF1==0);

        TH1=tc1; TL1=tc0;

        TF1=0;

        }

        }

        point+=2; /* 音符指針下移 */

        ts=sound[point]; tl=sound[point+1]; /* 讀出下一個音符和它時時值 */

        }

        }

        void yin() interrupt 1 /* 音符發生程序(中斷服務程序)*/

        {

        speaker=~speaker;

        TH0=sc1; TL0=sc0;

        }

        //==============================================

        main()

        {

        while(1)

        {

        play(sound,0,2,60,0,57);

        play(sound,0,1,60,0,57);

        play(sound,0,3,60,0,57);

        play(sound,0,2,40,0,57);

        play(sound,5,2,60,0,57);

        play(sound,0,2,80,0,57);

        }

        }

        塵埃粒子計數器相關文章:塵埃粒子計數器原理
        蜂鳴器相關文章:蜂鳴器原理

        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 华亭县| 海伦市| 长汀县| 文水县| 犍为县| 光泽县| 大冶市| 青浦区| 张北县| 定西市| 平南县| 东丰县| 蓝田县| 武汉市| 定兴县| 龙山县| 石景山区| 日照市| 和平县| 游戏| 衡水市| 崇义县| 湘乡市| 广东省| 花莲县| 柏乡县| 凤城市| 新安县| 遂溪县| 婺源县| 宾阳县| 洛阳市| 蚌埠市| 林口县| 芜湖市| 平罗县| 晴隆县| 黄梅县| 吉林省| 北海市| 海门市|