以下代码如何使 PC 发出哔哔声?
Posted
技术标签:
【中文标题】以下代码如何使 PC 发出哔哔声?【英文标题】:How does the following code make PC beeps? 【发布时间】:2011-05-13 05:43:07 【问题描述】:void Sound(int f)
USHORT B=1193180/f;
UCHAR temp = In_8(0x61);
temp = temp | 3;
Out_8(0x61,temp);
Out_8(0x43,0xB6);
Out_8(0x42,B&0xF);
Out_8(0x42,(B>>8)&0xF);
In_8
/Out_8
向/从指定端口读取/写入 8 位(省略实现细节)。
它是如何让 PC 发出哔哔声的?
更新
这里为什么使用&0xF
?不应该是0xFF
吗?
【问题讨论】:
您可以在此处blogs.msdn.com/b/larryosterman/archive/2010/01/04/…阅读有关 8254 PIC 和 Windows 中的 Beep 功能。 【参考方案1】:PC 有一个 8255 定时器芯片,使用端口 0x61、0x43 和 0x42 控制。
当端口 0x61 的第 0 位设置为 1 时,这意味着“打开连接到扬声器的定时器”。 当端口 0x61 的第 1 位设置为 1 时,表示“打开扬声器”。
这是在代码的第一段中完成的。
第二部分将“魔术值”0xB6放在端口0x43上,这意味着接下来到达端口0x42的两个字节将被解释为定时器频率的除数。然后将除法的结果频率(1193180 / 除数)发送到扬声器。
http://gd.tuwien.ac.at/languages/c/programming-bbrown/advcw3.htm#sound
【讨论】:
以上是关于以下代码如何使 PC 发出哔哔声?的主要内容,如果未能解决你的问题,请参考以下文章