0

我在这里有点新。我正在尝试用 C 对微控制器进行编程,以使其通过外部扬声器产生哔哔声。我不能使用 C 的标准库,所以这意味着没有 beep() 并且我不想(或不能)使用 '\a' 因为我需要能够确定哔声的频率和持续时间。我也找不到任何关于 beep() 函数算法的算法或信息。谢谢你。

4

1 回答 1

3

有两种根本不同的方法可以做到这一点,这取决于(部分)您正在使用的微控制器上可用的硬件。

一些微控制器具有某种带有输出引脚的可编程时钟/振荡器,以允许连接外部世界。如果你有它,你可能想使用它。您基本上可以将其编程为您想要的频率,将其打开,当哔声持续时间结束时,您将其关闭。对于后者,您通常会编写第二个计时器以在持续时间结束时中断处理器,或者在某个设定的时间间隔(如 1 毫秒),因此您可以只计算毫秒,直到达到适当的持续时间。细节因特定微控制器上的硬件细节而异。

第二种选择是使用微处理器本身进行切换(又名“位敲击”)。您将一些输出线设置为高电平,然后等待您要生成的频率的半个周期,然后再次将其设置为低电平。同样,根据偏好,您可以使用某种时钟设置该时间段,该时钟将在正确的时间产生中断。如果您没有,您可以将处理器设置为自旋循环指定的周期数——但请注意,这会消耗大量额外电量,因此(例如)它会显着缩短电池寿命如果您正在对电池供电的设备进行编程。

另请注意,在这两种情况下,它们都会产生方波作为输出。如果您想要更接近(例如)正弦波的东西,则需要一些额外的电路来过滤输出。通过一些最小的滤波,您可以使用一些 PWM 来模拟更复杂的波形——但这比仅仅产生一个指定频率和持续时间的哔声要复杂得多。

于 2013-09-28T16:02:05.613 回答