单片机音乐设计详解

声音是由振动产生的,不同的振动频率产生不同的音高。振动次数多,音则高,振动次数少,音则低。音乐中使用 Do(C)、Re(D)、Mi(E)、Fa(F)、So(G)、La(A)、Si(B) 音符来表示固定的音高,常把中央 C 上的 A 音定为标准音高,其频率为每秒振动 440 周。

如何利用单片机使蜂鸣器发出 A 这个音呢?

音乐的产生主要通过单片机的 I/O 口输出高低不同的脉冲信号来控制蜂鸣器,一高一低为一周期,A 音的振动周期为 1s/440 = 2272us ,高低电平时间各取一半为 1136us。用定时器计时这个半周期时间,当 I/O 输出高电平 1136us 后产生中断,再输出低电平 1136us,如此反复,就可产生 A 这个音。

音符对应频率周期表:

从表中可以发现,高中低音之间正好相差一个倍频,高音 = 2*中音,中音 = 2*低音。在音乐学中称它相差一个八度音,在一个八度音内,又包含 12 个半音,以 1 — i 八音区为例,12 个半音是: 1—#1、#1—2、2—#2、#2—3、3—#3、#3—4、4—#4,#4— 5、5 一#5、#5—6、6—#6、#6—7、7— i。#1 频率的计算方式 262 + (294 – 262)/2,其它半音频率的计算方式即如此。

当然,对于单片机来说,细分这么多音符要求

 

随便来一张音乐简谱,可以看到有超低音、低音、标音、高音、超高音几种音阶,所以把上图更新为简谱中的对应频率表

 

拍速 120 ,每分钟 120 拍,1 拍即 500ms,1/4 为 500ms, 1/8 为 250ms,1/16 为 125ms