[i=s] 本帖最后由 星河云海 于 2025-9-22 22:46 编辑 [/i]
按示例蜂鸣器播放音乐,然后修改音乐为《笑傲江湖》(旋律未写全),如简谱

int melody[] = {
NOTE_A4, NOTE_G4, NOTE_E4, NOTE_D4, NOTE_C4, 0,
NOTE_E4, NOTE_D4, NOTE_C4, NOTE_A3, NOTE_G3, 0,
NOTE_G3, NOTE_A3, NOTE_G3, NOTE_A3,
NOTE_C4, NOTE_D4, NOTE_E4, NOTE_G4,
NOTE_A4, NOTE_G4, NOTE_E4, NOTE_D4, NOTE_C4, NOTE_D4, 0,
NOTE_A4, NOTE_A4, NOTE_G4, NOTE_E4, NOTE_D4, NOTE_C4, 0,
NOTE_E4, NOTE_D4, NOTE_C4, NOTE_A3, NOTE_G3, 0,
NOTE_G3, NOTE_A3, NOTE_G3, NOTE_A3,
NOTE_C4, NOTE_D4, NOTE_E4, NOTE_G4,
NOTE_A4, NOTE_G4, NOTE_E4, NOTE_D4, NOTE_C4, 0,
NOTE_A4, NOTE_A4, NOTE_G4, NOTE_E4, NOTE_D4, NOTE_C4, 0,
NOTE_E4, NOTE_D4, NOTE_C4, NOTE_A3, NOTE_G3, 0,
NOTE_G3, NOTE_A3, NOTE_G3, NOTE_A3,
NOTE_C4, NOTE_D4, NOTE_E4, NOTE_G4,
NOTE_A4, NOTE_G4, NOTE_E4, NOTE_D4, NOTE_C4, 0};
int noteDurations[] = {
4, 16, 8, 8, 4, 4,
4, 16, 8, 8, 4, 4,
4, 16, 8, 8,
4, 16, 8, 8,
4, 16, 16,16, 8, 4, 4,
8, 16, 16, 8, 8, 4, 8,
4, 16, 8, 8, 4, 8,
4, 16, 8, 8,
4, 16, 8, 8,
4, 16, 8, 8, 4, 4,
8, 16, 16, 8, 8, 4, 4,
4, 16, 8, 8, 4, 8,
4, 16, 8, 8,
4, 16, 8, 8,
4, 16, 8, 8, 4,4};
只修改上面两个数组,其余代码不动,编译备用。由于对乐理不是很懂,带附点音符(如5.据说音调为5#)实现不太完美,本文只求发音近似。另有网友列出了音调对应频率,如音调对应频率
由于手头没有单个蜂鸣器,旧的stm8开发板倒是有蜂鸣器的模块可用,以下是电路图连接示意图:

数据线接debug串口,上传编译后的代码。完成后复位,蜂鸣器就奏乐了。
有个奇怪的现象,实验用的是台式机,数据线USB插的是前机箱口,有耳机插在前机箱口,当切断或拔掉上图——电路图中的蜂鸣器VDD线(3.3V),此时蜂鸣器不发音,但耳机却在播放该音乐(音量需调到最大),即使不拔VDD线(3.3V),耳机也能隐约听到音乐。再拔掉GND线或上图中绿线,耳机就不再播音乐了。也许耳机充当了蜂鸣器示例中蜂鸣器的作用或是可能耳机有线与数据线相连。