下面的代码是如何使PC发出蜂鸣声的?
下面的代码是如何使PC发出蜂鸣声的?,c,windows,beep,C,Windows,Beep,In_8/Out_8向指定端口读取/写入8位数据(实现细节省略) 它是如何使PC发出嘟嘟声的 更新 为什么这里使用&0xF?是不是应该是0xFF?电脑有一个8255定时器芯片,它由端口0x61、0x43和0x42控制 当端口0x61位0设置为1时,这意味着“打开连接到扬声器的计时器”。 当端口0x61第1位设置为1时,这意味着“打开扬声器” 这是在代码的第一段中完成的 第二部分将“魔术值”0xB6放在端口0x43上,这意味着到达端口0x42的以下两个字节将被解释为计时器频率的除数。然后,该除法产
In_8
/Out_8
向指定端口读取/写入8位数据(实现细节省略)
它是如何使PC发出嘟嘟声的
更新
为什么这里使用
&0xF
?是不是应该是0xFF
?电脑有一个8255定时器芯片,它由端口0x61、0x43和0x42控制
当端口0x61位0设置为1时,这意味着“打开连接到扬声器的计时器”。
当端口0x61第1位设置为1时,这意味着“打开扬声器”
这是在代码的第一段中完成的
第二部分将“魔术值”0xB6放在端口0x43上,这意味着到达端口0x42的以下两个字节将被解释为计时器频率的除数。然后,该除法产生的频率(1193180/除数)将发送给扬声器
电脑有一个8255定时器芯片,由端口0x61、0x43和0x42控制 当端口0x61位0设置为1时,这意味着“打开连接到扬声器的计时器”。 当端口0x61第1位设置为1时,这意味着“打开扬声器” 这是在代码的第一段中完成的 第二部分将“魔术值”0xB6放在端口0x43上,这意味着到达端口0x42的以下两个字节将被解释为计时器频率的除数。然后,该除法产生的频率(1193180/除数)将发送给扬声器
您可以在此处阅读有关8254 PIC和Windows中的蜂鸣功能的信息。您可以在此处阅读有关8254 PIC和Windows中的蜂鸣功能的信息。
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);
}