以下代码如何让PC发出哔哔声?

时间:2011-05-13 05:43:07

标签: c windows beep

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

1 个答案:

答案 0 :(得分:5)

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