⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 linux下用什么函数来控制蜂鸣器的发声.txt

📁 蜂鸣器音乐(小喇叭) Linux下实现的PC Speaker蜂鸣器播放音乐程序
💻 TXT
字号:
可以直接写端口,代码如下:   
    
  #include   <sys/io.h>   
  #include   <unistd.h>   
    
  void   play(unsigned   int*   freq,   unsigned   int*   delay);   
    
  main()   
  {   
          int   i;   
          unsigned   int   freq[]={   330   ,   392   ,   330   ,   294   ,   330   ,   392   ,   
                  330   ,   394   ,   330   ,   330   ,   392   ,   330   ,   
                  294   ,   262   ,   294   ,   330   ,   392   ,   294   ,   
                  262   ,   262   ,   220   ,   196   ,   196   ,   220   ,   
                  262   ,   294   ,   330   ,   262   ,   0   }   ;   
    
          unsigned   int   time[]={   50   ,   50   ,   50   ,   25   ,   25   ,   50   ,   
                  25   ,   25   ,   100,   50   ,   50   ,   25   ,   
                  25   ,   50   ,   50   ,   25   ,   25   ,   100,   
                  50   ,   25   ,   25   ,   50   ,   25   ,   25   ,   
                  50   ,   25   ,   25   ,   100   };   
    
          unsigned   int   freq2[]={   
                  196,262,262,262,330,294,262,294,330,294,262,   
                  330,394,440,440,394,330,330,262,294,262,294,   
                  330,294,262,230,230,196,262,440,394,330,330,   
                  262,294,262,294,440,394,330,330,394,440,523,   
                  394,330,330,262,294,262,294,330,294,262,230,   
                  230,196,262,440,394,330,330,262,294,262,294,   
                  440,394,330,330,394,440,523,394,330,330,262,   
                  294,262,294,330,294,262,230,230,196,262,0   
          };   
    
          unsigned   int   time2[]={   
                  25,38,12,25,25,38,12,25,12,12,56,25,25,50,25,   
                  38,12,12,12,38,12,25,12,12,38,12,25,25,100,25,   
                  38,12,12,12,38,12,25,25,38,12,25,25,100,25,38,   
                  12,12,12,38,12,25,12,12,38,12,25,25,100,25,38,   
                  12,12,12,38,12,25,25,38,12,25,25,100,25,38,12,   
                  12,12,38,12,25,12,12,38,12,25,25,100   
          };   
  unsigned   int   freq_alert[]={   
                  2000,   2400,   0   
          };   
          unsigned   int   time_alert[]={   
                  50,   60   
          };   
          for(i   =   0;   i   <   5;   i++)   
          {   
                  play(freq_alert,   time_alert);   
          }   
          play(freq2,   time2);   
  }   
    
  void   play(unsigned   int*   freq,   unsigned   int*   time)   
  {   
          int   i;   
          for(i=0;freq[i]!=0;i++)   
          {   
                  speaker(freq[i],   time[i]);   
          }   
  }   
    
  int   speaker(unsigned   int   freq,unsigned   int   delay)   
  {   static   int   flag=0,bit;   
          if(flag==0)   
          {   
                  flag=1;   
                  iopl(3);   
          }   
          outb(0xb6,0x43);   
          outb((freq   &   0xff),0x42);   
          outb((freq   >>   8),0x42);   
          bit=inb(0x61);   
          outb(3   |   bit,0x61);   
          usleep(10000*delay);   
          outb(0xfc   |   bit,0x61);   
  }   









//   通过PC喇叭发出声音   
  UINT   Sound(LPVOID   pParam)   
  {   
  int FreqTable[100];   
  int DelayTable[100];   
    
  for(int   i=0;i<10;i+=100)   
  {   
  FreqTable[i]=50*i+500;   
  DelayTable[i]=100;   
  }   
    
  int   *nFreqTableLength   =   (int   *)pParam;   
  int   Freq;   
  for(i=0;i<*nFreqTableLength;i++)   
  {   
  Freq=FreqTable[i];   
  if(Freq<37||Freq>32767)   
                {   
  _outp(0x61,_inp(0x61)&0xFC);//NoSound()   
  continue;   
  }   
  Freq=1193181/Freq;   
  _outp(0x61,_inp(0x61)|3);   
  _outp(0x43,0xB6);   
  _outp(0x42,Freq&0x00ff);   
  _outp(0x42,(Freq&0xff00)>>8);   
  Sleep(DelayTable[i]);   
  _outp(0x61,_inp(0x61)&0xFC);//NoSound()   
  }   
  _outp(0x61,_inp(0x61)&0xFC);//NoSound()   
  return   TRUE;   
  }   
    
  void   NoSound()   
  {   
  _outp(0x61,_inp(0x61)&0xFC);   
  }   






/*!--   
  蜂鸣器音乐(小喇叭)   
  作者:浪子   
  版权所有:EOB论坛   http://www.eob.cn/bbs   
  2005-5-28   
  --*/   
    
    
  #define   STEP   1000   
    
  int   freq[]={0,988,1046,1046,1046,1046,1046,880,784,698,698,523,523,784,784,784,784,784,   
  698,659,0,523,523,587,587,659,0,988,1046,1046,1046,1046,1046,784,880,784,698,   
  698,523,523,784,784,784,784,784,698,659,0,523,587,587,659,0,784,   
  880,880,784,698,784,1046,1046,1046,784,784,   
  880,784,698,698,784,659,784,784,   
  880,880,988,988,988,988,1046,1046,1046,659,   
  698,659,523,587,523,   
  0,988,1046,1046,1046,1046,1046,880,784,698,698,523,523,784,784,784,784,784,   
  698,659,0,523,523,587,587,659,0,988,1046,1046,1046,1046,1046,784,880,784,698,   
  698,523,523,784,784,784,784,784,698,659,0,523,587,587,659,0,784,   
  880,880,784,698,784,1046,1046,1046,784,784,   
  880,784,698,698,784,659,784,784,   
  880,880,988,988,988,988,1046,1046,1046,659,   
  698,659,523,587,523,   
  698,698,698,784,698,784,784,0,784,784,880,   
  1046,1046,1046,1046,784,698,   
  698,698,698,698,784,698,784,784,0,784,784,880,   
  1046,1046,1046,784,698,698,   
  880,880,988,988,988,988,1046,1046,1046,659,   
  698,659,523,587,523,523,   
  880,880,988,988,988,988,1046,1046,1046,659,   
  698,659,523,587,523   
  ,-1};   
  float   length[]={0.75,0.25,0.5,0.25,0.25,0.25,0.75,0.5,0.25,0.25,0.25,0.5,0.25,0.5,0.25,0.25,0.25,0.75,   
  0.5,0.5,0.25,0.25,0.25,0.25,0.05,3.0,0.75,0.25,0.5,0.25,0.25,0.25,0.5,0.25,0.5,0.25,0.25,   
  0.25,0.5,0.25,0.5,0.25,0.25,0.25,0.75,0.5,0.5,0.25,0.25,0.5,0.05,3.0,0.75,0.25,   
  0.5,0.5,0.5,0.5,0.5,0.25,0.25,0.5,0.25,0.25,   
  0.5,0.25,0.25,0.25,0.75,1.75,0.25,   
  0.5,0.5,0.5,0.25,0.25,0.25,0.5,0.25,0.75,0.25,   
  0.5,0.5,0.25,0.75,2.0,   
  0.75,0.25,0.5,0.25,0.25,0.25,0.75,0.5,0.25,0.25,0.25,0.5,0.25,0.5,0.25,0.25,0.25,0.75,   
  0.5,0.5,0.25,0.25,0.25,0.25,0.05,3.0,0.75,0.25,0.5,0.25,0.25,0.25,0.5,0.25,0.5,0.25,0.25,   
  0.25,0.5,0.25,0.5,0.25,0.25,0.25,0.75,0.5,0.5,0.25,0.25,0.5,0.05,3.0,0.75,0.25,   
  0.5,0.5,0.5,0.5,0.5,0.25,0.25,0.5,0.25,0.25,   
  0.5,0.25,0.25,0.25,0.75,1.75,0.25,   
  0.5,0.5,0.5,0.25,0.25,0.25,0.5,0.25,0.75,0.25,   
  0.5,0.5,0.25,0.75,2.0,   
  0.5,0.5,0.25,0.5,0.25,0.25,0.25,0.25,0.25,   
  0.5,0.25,0.25,0.5,0.5,2.0,   
  0.5,0.25,0.25,0.25,0.5,0.25,0.5,0.5,0.25,0.25,0.25,0.25,   
  0.75,0.25,0.5,0.5,1.75,0.25,   
  0.5,0.5,0.5,0.25,0.25,0.25,0.5,0.25,0.75,0.25,   
  0.5,0.5,0.25,0.75,1.75,0.25,   
  0.5,0.5,0.5,0.25,0.25,0.25,0.5,0.25,0.75,0.25,   
                  0.5,0.5,0.25,0.75,2.0   
  ,-1};   
    
  int   main()   
  {   
  int   i   =   0;   
  for(;freq[i]!=-1&&length[i]!=-1;i++)   
  {   
  if   (freq[i]==0)   
  _sleep(STEP*length[i]);   
  else   
  _beep((unsigned   int)freq[i],(unsigned   int)(STEP*length[i]));   
  }   
  return   0;   
  }   
  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -