📄 linux下用什么函数来控制蜂鸣器的发声.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 + -