无论是蜂鸣器还是LED数码管显示,其实这二者对代码编写来说没有太大区别,都是GPIO的一个典型应用。红牛开发板有一个蜂鸣器,而EM-STM3210E有一个四位LED数码管,代码都相对简单,不值的为二者单独写一篇博文,所以二者合一以一篇文章来说明,不过两个示例代码是独立的。
先说一下蜂鸣器,查原理图,发现控制该蜂鸣器的管脚是PB2,此外值得一提的是和BOOT1插针的1、2脚共用,所以如果你把跳线连接1、2,上电后,蜂鸣器会响。相关代码如下:
public class Buzzer
{
enum GPIO_NAMES {…}
OutputPort BuzzerPort;
public Buzzer()
{
BuzzerPort = new OutputPort((Cpu.Pin)GPIO_NAMES.PB2, false);
}
public void Beep()
{
Beep(500);
}
public void Beep(int millisecond)
{
BuzzerPort.Write(true);
Thread.Sleep(millisecond);
BuzzerPort.Write(false);
Thread.Sleep(millisecond);
}
//仅仅是模拟,效果较差,估计封装为C++代码,效果会更好些,此外是不是这样实现,存疑
public void Sound(int hz, int millisecond)
{
int t = 1000 / hz;
for (int i = 0; i < millisecond / t; i++)
{
BuzzerPort.Write(true);
Thread.Sleep(t / 2);
BuzzerPort.Write(false);
Thread.Sleep(t / 2);
}
}
}