PC主板蜂鸣器

 

windows.h 头文件里面有beep(1,2) 函数。参数1是频率,参数2是发声时间。利用这个函数可以实现蜂鸣器播音乐。

网上有些工具,可以将简谱转换为数组,搜索 “51单片机乐谱转换器”  “51单片机蜂鸣器音乐简谱转换工具-输入简谱就能自动生成音乐程序的工具Music Encode”,可以搜到

 

对应频率值如图:(标准C大调的do是440hz)

 

 

下面是vc下的测试代码,可以放《生日快乐》

 

#include <windows.h>
#include <stdio.h>


//#pragma comment(lib, "Winmm.lib")  

const int song[]={6,5,6,8,9,10,7,6,5,3,5,9,8};
const int song1[]={2,3,5,6,5,3,2,1} ;
const song2[]={10,9,8,5,9,3,5,9,5};
const int song3[]={8,9,10,12,13,10,9};
const int song4[]={9,8,9,10,12,10};

//标准音调频率
const unsigned int hzs[]={131,147,165,175,196,220,247,262,294,330,349,392,440,494,523,587,659,698,784,880,988,1047,1175,1319,1397,1568,1760,1976};
//频率控制数组
const char dots[]={8,28,10,12,12,13,28,28,12,28,10,28,8,12,12,12,10,28,28,8,28,5,5,5,5,5,5,8,'#'};

void delay(unsigned int u) //延时
{
    while(u--);
}

void play_hz(unsigned int u) 
{ 
    unsigned int i=u; 
    while(i--)
     {
    
     //delay(18432/u-24); 
    }
}

void play_sound(int i) 
{
    if(i<28)
        //play_hz(hzs[i-1]);
        // Beep(hzs[i-1],hzs[i-1]*(18432/hzs[i-1]-24));
        Beep(hzs[i-1],hzs[i-1]*2);
    else
        delay(500);
}

void playNation(void)//播放国歌,这个没有音长表,好难听
{
    while(1)
    {
        int i=0;
        while(dots[i]!='#')
        {
            play_sound(dots[i++]);
            delay(20000);
        }
    }
}


//生日歌
const unsigned FREQUENCY[]={392,392,440,392,523,494,

                                     392,392,440,392,587,523,

                                     392,392,784,659,523,494,440,

                                     698,698,659,523,587,523,
                                     
                                     392,392,440,392,523,494,

                                     392,392,440,392,587,523,

                                     392,392,784,659,523,494,440,

                                     698,698,659,523,587,523};

const unsigned DELAY[]={375,125,500,500,500,1000,

                               375,125,500,500,500,1000,

                               375,125,500,500,500,500,1000,

                               375,125,500,500,500,1000,
                               
                               375,125,500,500,500,1000,

                               375,125,500,500,500,1000,

                               375,125,500,500,500,500,1000,

                               375,125,500,500,500,1000};
//播放生日歌
void playHappybirth(void)
{
     int CIRCLE;
        for(CIRCLE=0;CIRCLE<50;CIRCLE++)
       {
              Beep(FREQUENCY[CIRCLE],DELAY[CIRCLE]);
       }
}


#define uchar unsigned char
#define uint unsigned int



uchar ttt[]={8,12,8,12,8,12,8,100};
uchar fff[]={69,61,53,45};

void playMideaSound(void)//播放美的声音
{
    //1000000/(4*(x+1)*2)
    int i;
    int fre,tm1,tm2;
    for(i=0;i<sizeof(fff);i++)
    {
        fre=(int)(125000/(fff[i]+1));
        tm1=(int)(ttt[i*2]*10);    //本来是一个正常音,一个拖音,电脑模拟不了拖音
        tm2=(int)(ttt[i*2+1]*10);
        Beep(fre,tm1+tm2);
        //Beep(fre,tm2);
        //Sleep(tm2);
    }
    //Beep
}

#include<iostream.h>
#include<windows.h>

//基础音符
enum fy{
       d1 = 262,
       d1_ = 277,
       d2 = 294,
       d2_ = 311,
       d3 = 330,
       d4 = 349,
       d5 = 392,
       d5_= 415,
       d6 = 440,
       d6_= 466,
       d7 = 494,
       z1 = 523,
       z1_ = 554,
       z2 = 578,
       z2_ = 622,
       z3 = 659,
       z4 = 698,
       z4_ = 740,
       z5 = 784,
       z5_ = 831,
       z6 = 880,
       z6_ = 932,
       z7 = 988,
       g1 = 1046,
       g1_ = 1109,
       g2 = 1175,
       g2_ = 1245,
       g3 = 1318,
       g4 = 1397,
       g4_ = 1480,
       g5 = 1568,
       g5_ = 1661,
       g6 = 1760,
       g6_ = 1865,
       g7 = 1976,
       yaya = 0
};
 
struct yf
{
       enum fy s;    //音调
       int t;        //音长
};

const struct yf a[1000]={{z3,125},{z3,50},{z4,100},{z3,50},{z2,50}, //5
       {z2,125},{z2,50},{z5,100},{z2,50},{z1,50}, //10
       {z1,125},{z1,50},{z6,100},{z5,100},    //14
       {z3,125},{z4,25},{z3,25},{z2,100},{z2,100}, //19
       {z3,125},{z3,50},{z4,100},{z5,50},{z3,50}, //24
       {z5,125},{z5,50},{g2,100},{z7,50},{g1,50}, //29
       {g1,200},{g1,50},{z7,50},{z6,50},{z7,50}, //34
       {g1,125},{z7,50},{g1,200},      //37
       {g1,50},{z7,50},{g1,50},{z7,50},{g1,100},{z3,50},{z5,50}, //44
       {z5,250},{z6,50},{z7,50},      //47
       {g1,50},{z7,50},{g1,50},{z7,50},{g1,100},{g2,100},{g3,100}, //54
       {g3,300},{z6,50},{z7,50},   //57
       {g1,50},{z7,50},{g1,50},{z7,50},{g1,100},{g3,100}, //63
       {z7,50},{z6,50},{z7,50},{z6,50},{z7,50},{z5,50},{z5,50},{g1,50}, //71
       {g1,200},{g3,75},{g4,25},{g4,50},{g3,50}, //76
       {g2,200},{yaya,50},{z5,50},{g1,50},{g2,50}, //81
       {g3,50},{g1,50},{g1,50},{z5,50},{z5,100},{z5,50},{g3,50}, //88
       {g2,50},{g3,50},{g2,50},{g1,50},{z5,50},{z5,50},{z6,50},{z7,50}, //96
       {g1,50},{z6,50},{z6,50},{z3,50},{z3,100},{yaya,50},{z7,50}, //103
       {g1,50},{z7,50},{g1,50},{g2,50},{z6,50},{z5,50},{z5,100}, //110
       {z6,100},{z5,50},{z6,50},{z7,100},{g3,50},{g4,50}, //116
       {g3,50},{g4,50},{g3,50},{g2,50},{g2,50},{g1,100},{z5,50}, //123
       {z5,50},{z4,50},{z4,50},{g1,50},{g1,50},{g3,50},{g3,50},{g1,50}, //131
       {g2,200},{yaya,50},{z5,50},{g1,50},{g2,50}, //136
       {g3,50},{g1,50},{g1,50},{z5,50},{z5,100},{z5,50},{g3,50}, //143
       {g2,50},{g3,50},{g2,50},{g1,50},{z5,50},{z5,50},{z6,50},{z7,50}, //151
       {g1,50},{z6,50},{z6,50},{z3,50},{z3,100},{z3,50},{z7,50}, //158
       {g1,50},{z7,50},{g1,50},{g2,50},{z6,50},{z5,50},{z5,100}, //165
       {z6,50},{z7,50},{g1,50},{g2,100},{g3,50},{g4,50}, //171
       {g3,50},{g4,50},{g2,50},{g1,50},{g2,50},{g1,50},{g1,100}, //178
       {g2,50},{g1,50},{g2,50},{z6,50},{g1,100},{g2,50},{g1,50}, //185
       {g1,400},   //186
       {g2,50},{g1,50},{g2,50},{z6,50},{z7,100},{z7,50},{g1,50}, //193
       {g1,400},   //194
       };
 
int playXiaoJiuWo(void)//播放小酒窝
{
       int n = 0;
       
       struct yf *atop;
       atop = (struct yf *)a;
       n = 194;
 
       while(n--)
       {
              Beep(atop->s,atop->t*5);
              atop++;
       }
       return 0;
}


int main()
{
    printf("%d",sizeof(ttt));
    #if 0
    playMideaSound();
    #endif

    #if 0
    playXiaoJiuWo();
    #endif

    #if 0
    playNation();
    #endif

    #if 0
    playHappybirth();
    #endif


       return 0;

}

 

posted on 2015-11-27 08:29  鲜于超  阅读(1237)  评论(0编辑  收藏  举报

导航