C语言蜂鸣器问题
(2012-04-10 04:36:21)
标签:
蜂鸣器
c语言
杂谈
C语言蜂鸣器问题 本帖最后由 mgqw 于 2010-04-13 11:46 编辑
网上查了一些资料,给出了一个很好用的函数控制蜂鸣器,可就是没有说如何关闭蜂鸣器。
int speaker(unsigned int freq,unsigned int delay)
{ static int flag=0,bit;ipv6 socket编程自己连接可以,两台机子连显示拒绝连接
r /> 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);
}
#include
#include
main()
{
int i;
for(i = 0; i<1; i++)
{
speaker( 2000, 40 );
sleep(2);
}
speaker( 1000, 40 );
}
这个程序如果正常执行完成的话,没有一点问题。
可是如果在执行过程中按ctl+c中断程序的话,蜂鸣器就一直打开着,就一直在哪里叫(在哪里中断退出的就一直保持哪种声音),能把人烦死。
试着用了speaker( 0, 0 )还是有问题,一直发出 “哒哒哒哒哒哒”的声音
请问各位大侠如何将蜂鸣器缓存清零,置为初始化安静状态阿?
网上找了N久都找不到这方面的资料。 本帖最后由 samlumengjun 于 2010-04-13 11:57 编辑
这个要信号处理, 接收到SIGINT的时候做处理
比如,
void *on_terminate( void )
{
close_speaker();
}
main()
{
signal( SIGINT, terminate );
....
}我是用这个做比喻,不一定是收到SIGINT信号,有可能是程序异常退出的话,那蜂鸣器一直在叫,能把人恶心死,除非重启机器。
既然可以设置蜂鸣器,就应该有将蜂鸣器复位清零初始化的方法吧。{:3_190:}没猜错的话, outb(0xfc |
bit,0x61);
就是关闭用的。
你重新写个程序执行这个 本帖最后由 mgqw 于 2010-04-13 14:03 编辑
回复 4# smalloc
应该是你猜错了,我的电脑还是“哒哒哒哒哒哒”想个不停……void Stop( )
{
static int flag=0,bit;
if(flag==0)
{
flag=1;
iopl(3);
}
bit=inb(0x61);
outb(0xfc | bit,0x61);
} 查了下,outb(0xfc ,0x61);
最后2位控制让不让发声。1.临时解决方案http://www.lnroom.com,重启后失效
用ROOT执行命令
#rmmod pcspkr
2.永久生效,需要重启
用ROOT登录
echo "alias pcspkr off"
>> /etc/modprobe.conf查了下,outb(0xfc
,0x61);
最后2位控制让不让发声。
smalloc 发表于 2010-04-13 14:30
http://bbs2.chinaunix.net/images/common/back.gif
这个可以,试了一下“哒哒哒哒”声音终于没有了http://www.4r0y.com/!void Stop( )
{
static int flag=0;
if(flag==0)
{
flag=1;
iopl(3);
}
outb(0xfc ,0x61);
}
分享:
喜欢
0
赠金笔
加载中,请稍候......
评论加载中,请稍候...
发评论
登录名: 密码: 找回密码 注册记住登录状态
昵 称:
评论并转载此博文
发评论
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。