官术网_书友最值得收藏!

項目1 認識單片機及其開發環境

1.1 項目提出

1.任務

利用單片機系統播放一段音樂。

2.要求

(1)按照所給電路圖連接單片機系統。

(2)將所給單片機程序調試、編譯下載至單片機中,運行單片機系統。

3.播放音樂的單片機電路圖

用單片機I/O口P1.7擴展蜂鳴器演奏一首曲子。

4.音樂程序

    /* ***********************************
    這是一首 2002年第一場雪的曲子
    * ***********************************/
    #include<reg51.h>       /*8051單片機資源說明*/
    sbit SPK=P1^7;                 //音樂輸出口
    void Delayms(unsigned char ms);     //節拍延時
    unsigned int data j;
    unsigned char code song[636]={      //歌曲數組,格式為:頻率常數,節拍常數
    0xFF,0xFF,4,0xFD,0x08,2,
    0xFD,0x08,2,0xFD,0x08,2,
    0xFD,0x08,2,0xFD,0x08,2,
    0xFD,0x08,2,0xFD,0x5B,4,
    0xFD,0x08,2,0xFC,0xAB,2,
    0xFC,0x0B,2,0xFC,0x0B,2,
    0xFF,0xFF,2,0xFC,0x0B,2,
    0xFC,0xAB,2,0xFC,0xAB,2,
    0xFC,0xAB,2,0xFC,0xAB,2,
    0xFC,0xAB,4,0xFC,0xAB,2,
    0xFC,0xAB,2,
    0xFB,0x8F,2,0xFC,0x0B,2,
    0xFC,0x0B,4,0xFF,0xFF,8,
    0xFF,0xFF,2,0xFD,0x08,2,
    0xFD,0x08,2,0xFD,0x08,2,
    0xFD,0x08,4,0xFD,0x08,2,
    0xFD,0x08,2,
    0xFD,0x5B,4,0xFD,0x08,2,
    0xFC,0xAB,4,0xFD,0x08,6,
    0xFF,0xFF,2,0xFB,0x8F,2,
    0xFB,0x8F,2,0xFB,0x8F,2,
    0xFB,0x8F,2,0xFB,0x8F,2,
    0xFB,0x03,2,0xFA,0x14,2,
    0xFC,0xAB,4,0xFC,0xAB,2,
    0xFC,0xAB,2,0xFC,0xAB,2,
    0xFC,0x0B,2,0xFC,0x0B,4,
    0xFF,0xFF,4,0xFD,0x08,2,
    0xFD,0x08,2,0xFD,0x08,2,
    0xFD,0x08,2,0xFD,0x08,2,
    0xFD,0x08,2,
    0xFD,0x5B,4,0xFD,0x08,2,
    0xFC,0xAB,4,0xFD,0x08,6,
    0xFF,0xFF,2,0xFB,0x8F,2,
    0xFB,0x8F,2,0xFB,0x8F,2,
    0xFB,0x8F,2,0xFB,0x8F,2,
    0xFB,0x03,2,0xFA,0x14,2,
    0xFC,0xAB,4,0xFC,0xAB,2,
    0xFC,0xAB,2,0xFC,0xAB,2,
    0xFC,0x0B,2,0xFC,0x0B,4,
    0xFF,0xFF,4,0xFD,0x08,2,
    0xFD,0x08,2,0xFD,0x08,2,
    0xFD,0x08,2,0xFD,0x08,2,
    0xFD,0x08,2,
    0xFD,0x5B,4,0xFD,0x08,2,
    0xFD,0x5B,2,0xFC,0xAB,2,
    0xFC,0x0B,2,0xFC,0x0B,4,
    0xFF,0xFF,2,0xFB,0x8F,2,
    0xFB,0x8F,2,0xFB,0x03,2,
    0xFB,0x8F,4,0xFB,0x8F,2,
    0xFB,0x03,2,
    0xFC,0x0B,4,0xFB,0x8F,2,
    0xFC,0x0B,2,0xFB,0x03,2,
    0xFA,0x14,2,0xFA,0x14,4,
    0xFF,0xFF,2,0xFD,0x08,2,
    0xFD,0x08,2,0xFD,0x08,2,
    0xFD,0x08,2,0xFD,0x08,2,
    0xFD,0x08,2,0xFD,0x08,2,
    0xFD,0x5B,4,0xFD,0x08,2,
    0xFD,0x5B,2,0xFC,0xAB,2,
    0xFC,0x0B,2,0xFC,0x0B,4,
    0xFF,0xFF,2,0xFB,0x8F,2,
    0xFB,0x8F,2,0xFB,0x8F,2,
    0xFB,0x8F,2,0xFB,0x8F,2,
    0xFB,0x03,2,0xFA,0x14,2,
    0xfc,0xab,4,0xfc,0xab,2,
    0xfc,0xab,2,0xfb,0x8f,2,
    0xfc,0x0b,2,0xFC,0x0B,4,
    0xFF,0xFF,2,0xFD,0x08,2,
    0xFD,0x08,2,0xFD,0x08,2,
    0xFD,0x08,2,0xFD,0x08,4,
    0xFD,0x08,2,
    0xfD,0x5b,4,0xfD,0x08,2,
    0xfc,0xab,4,0xfc,0x0b,6,
    0xFF,0xFF,2,0xFB,0x8F,2,
    0xFB,0x8F,2,0xFB,0x03,2,
    0xFB,0x8F,2,0xFB,0x8F,2,
    0xFB,0x8F,2,0xFB,0x03,2,
    0xFC,0x0B,4,0xFB,0x8F,2,
    0xFC,0x0B,2,0xFB,0x03,2,
    0xFA,0x14,2,0xFA,0x14,4,
    0xFF,0xFF,2,0xFB,0x8F,2,
    0xFB,0x8F,2,0xFB,0x8F,2,
    0xFB,0x8F,2,0xFB,0x8F,2,
    0xFB,0x03,2,0xFA,0x14,2,
    0xFB,0x03,2,0xFB,0x03,2,
    0xFB,0x03,2,0xFA,0x14,2,
    0xFA,0x14,1,0xF9,0x5B,1,
    0xF8,0x2A,2,0xF8,0x2A,4,
    0xFF,0xFF,2,0xFB,0x8F,2,
    0xFB,0x8F,2,0xFB,0x8F,2,
    0xFB,0x8F,2,0xFB,0x8F,2,
    0xFB,0x03,2,0xFA,0x14,2,
    0xFB,0x8F,2,0xFC,0x08,2,
    0xFC,0x08,2,0xFC,0x08,10,
    0xFF,0xFF,2,0xFB,0x8F,2,
    0xFB,0x8F,2,0xFB,0x8F,2,
    0xFB,0x8F,2,0xFB,0x8F,2,
    0xFB,0x03,2,0xFA,0x14,2,
    0xFB,0x03,2,0xFB,0x03,2,
    0xFB,0x03,2,0xFA,0x14,2,
    0xFA,0x14,1,0xF9,0x5B,1,
    0xF8,0x2A,2,0xF8,0x2A,4,
    0xFF,0xFF,2,0xFB,0x8F,2,
    0xFB,0x8F,2,0xFB,0x8F,2,
    0xFB,0x8F,2,0xFB,0x8F,2,
    0xFB,0x03,2,0xFA,0x14,2,
    0xFC,0xAB,2,0xFD,0x08,2,
    0xFD,0x08,2,0xFD,0x08,2,
    0xFF,0xFF,4,0xFF,0xFF,4};
    void main()
    { TMOD=0x01;
      IE=0x82;
      while(1)
      { j=0;
        while (j<636)
        { TR0=1;
          if ((song[j]==0xff)&&(song[j+1]==0xff))
          TR0=0;             //休止符用0xff,0xff表示出現休止符時CT0禁止,不發聲
          Delayms(song[j+2]);   //每一音符唱多長
            j=j+3;
          }
          }
    }
    /* 音調程序*/
    void timer0()interrupt 1 using 1  //每一音符唱多高
    {   TH0=song[j];
            TL0=song[j+1];
          SPK = !SPK;
    }
    /* 節拍程序*/
    void Delayms(unsigned char ms) //基本延時子程序(1/16拍的時間)
    { unsigned int i;
      while(ms--)
          {for(i=0;i<10300;i++);  //節拍快慢控制
          }
      TR0=0;
    }
主站蜘蛛池模板: 新丰县| 阜城县| 鹿泉市| 青田县| 明水县| 萍乡市| 建昌县| 时尚| 华池县| 蓬溪县| 兴化市| 天门市| 上林县| 大港区| 临江市| 濮阳市| 丹寨县| 西贡区| 龙井市| 道孚县| 高雄县| 栾城县| 宾阳县| 灵武市| 大冶市| 射洪县| 吴旗县| 晋州市| 八宿县| 武胜县| 阿荣旗| 三穗县| 麻江县| 民权县| 武功县| 都江堰市| 柳河县| 开封市| 靖州| 台安县| 芷江|