用c语言把蜂鸣器封装成函数,C语言蜂鸣器问题

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);

}

分享:

a4c26d1e5885305701be709a3d33442f.png喜欢

0

a4c26d1e5885305701be709a3d33442f.png赠金笔

加载中,请稍候......

评论加载中,请稍候...

发评论

登录名: 密码: 找回密码 注册记住登录状态

昵   称:

评论并转载此博文

a4c26d1e5885305701be709a3d33442f.png

发评论

以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值