用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);
}
分享:
喜歡
0
贈金筆
加載中,請稍候......
評論加載中,請稍候...
發評論
登錄名: 密碼: 找回密碼 注冊記住登錄狀態
昵???稱:
評論并轉載此博文
發評論
以上網友發言只代表其個人觀點,不代表新浪網的觀點或立場。
總結
以上是生活随笔為你收集整理的用c语言把蜂鸣器封装成函数,C语言蜂鸣器问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 后端技术:命名不规范,lombok泪两行
- 下一篇: designer一直未响应 qt_未雨绸