我在这里有点新意。我正在尝试用C编程一个微控制器,使其通过外部扬声器发出哔声。我不能使用C的标准库,这意味着没有beep(),我不想(或不能)使用'\ a',因为我需要能够确定蜂鸣声的频率和持续时间。我也找不到任何关于beep()函数算法的算法或信息。谢谢。
答案 0 :(得分:3)
有两种根本不同的方法,取决于(部分)您正在使用的微控制器上可用的硬件。
某些微控制器具有某种可编程时钟/振荡器,其输出引脚允许连接外部世界。如果你有,你可能想要使用它。你基本上可以根据你想要的频率对它进行编程,打开它,当哔声持续时间结束时你会把它关掉。对于后者,您通常会编程第二个计时器以在持续时间结束时中断处理器,或者以某个设置间隔(例如1毫秒)中断处理器,因此您可以计算毫秒直到达到适当的持续时间。详细信息因特定微控制器的硬件细节而异。
第二种选择是用微处理器本身进行切换(又名“bit banging”)。将某些输出线设置为高电平,然后等待要生成的频率的半个周期,然后再将其设置为低电平。同样,您可以优先使用某种时钟设置该时间段,该时钟将在正确的时间生成中断。如果你没有,你可以在一个旋转循环中设置处理器一段指定的周期 - 但要注意这会使用相当多的额外功率,所以(例如一个例子) )如果您正在为电池供电的设备进行编程,它可以显着缩短电池寿命。
另请注意,在这两种情况下,这些都会产生方波作为输出。如果你想要更接近(例如)正弦波的东西,你需要一些额外的电路来过滤输出。通过一些最小的滤波,您可以使用某些PWM模拟更复杂的波形 - 但这可能比仅生成指定频率和持续时间的蜂鸣声要复杂得多。