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

3.22 按鍵發(fā)音

本例運(yùn)行時(shí),按下不同按鍵會(huì)聽(tīng)到不同頻率的聲音。

本例電路如圖3-19所示。

圖3-19 按鍵發(fā)音電路

程序設(shè)計(jì)調(diào)試與實(shí)訓(xùn):

本例要點(diǎn)在于Play函數(shù)的編寫(xiě),在按下不同按鍵時(shí),傳給所調(diào)用的函數(shù)Play的參數(shù)值不同,從而使Play函數(shù)內(nèi)部BEEP = ~BEEP后DelayMS(t)的延時(shí)不同,因而產(chǎn)生的頻率也就不同。

讀者可在案例中放置7 個(gè)按鍵,使按鍵按下時(shí)可分別輸出DO、RE、ME、FA、SO、LA、XI的聲音。

源程序代碼:

        //-----------------------------------------------------------------
        //  名稱(chēng): 按鍵發(fā)音
        //-----------------------------------------------------------------
        //  說(shuō)明: 本例運(yùn)行時(shí),按下不同的按鍵會(huì)使SOUNDER發(fā)出不同頻率的聲音。
        //       本例使用延時(shí)子程序?qū)崿F(xiàn)不同頻率的聲音輸出,后續(xù)類(lèi)似案例使用
        //       的是定時(shí)器技術(shù)。
        //-----------------------------------------------------------------
        #include <reg51.h>
        #define uchar unsigned char
        #define uint  unsigned int
        sbit  BEEP= P3^7;
        sbit  K1  = P1^4;
        sbit  K2  = P1^5;
        sbit  K3  = P1^6;
        sbit  K4  = P1^7;
        //-----------------------------------------------------------------
        // 延時(shí)
        //-----------------------------------------------------------------
        void DelayMS(uint x)
        {
            uchar t;
            while(x--) for(t = 0; t < 120; t++);
        }
        //-----------------------------------------------------------------
        // 按周期t發(fā)音
        //-----------------------------------------------------------------
        void Play(uchar t)
        {
            uchar i;
            for(i = 0; i < 100; i++)
            {
              BEEP = ~BEEP; DelayMS(t);
            }
            BEEP = 0;
        }
        //-----------------------------------------------------------------
        // 主程序
        //-----------------------------------------------------------------
        void main()
        {
          P1 = 0xff;
          while(1)
          {
            if (K1 == 0) Play(1);
            if (K2 == 0) Play(2);
            if (K3 == 0) Play(3);
            if (K4 == 0) Play(4);
          }
        }
主站蜘蛛池模板: 巩留县| 开江县| 图们市| 兴宁市| 锦屏县| 昌图县| 黄冈市| 文山县| 新闻| 响水县| 栾川县| 剑河县| 咸阳市| 刚察县| 曲水县| 尚义县| 临江市| 灵台县| 吴旗县| 嵩明县| 灵台县| 洪湖市| 阿拉善盟| 富裕县| 鸡泽县| 合山市| 厦门市| 苗栗县| 桂平市| 鄂伦春自治旗| 金山区| 徐汇区| 绿春县| 阳高县| 海口市| 大丰市| 潮州市| 剑阁县| 包头市| 灵山县| 蓬溪县|