用单片机播映音乐,或许演奏电子琴,实际上是依照特定的频率,输出一连串的方波。为了输出适宜的方波,首要应该知道音符与频率的联系。
1.音名
从常见的电子琴的键盘谈起。
在下表中,能够看到一列黑白相间的琴键(暗示)。首要分红低声、中音和高音三个区域,每个区域都有12个琴键。其间的白键,简谱音符标为1、2、3、4、5、6、7,我们一般都读成哆、来、咪、发、嗦、拉、西。
2.频率
留意看一下几个6(拉)的频率,它们是整数,简单看出规则――是成2倍的联系。其它的音符,也有相同的规则。这些频率,如220、440等,它们在琴键上的方位是国际一致的,无论是钢琴、手风琴,仍是电子琴,都是相同的。
包含黑键和白键在内的悉数音符的频率数值,是成“等比数列”的联系,它们之间有个公比,能够依照“2倍”的规则推算出来。
已知最低声的6(拉)的频率是220,设公比为q,那么:7的频率便是220*q*q 。
乘了两个q,是因为6、7之间隔了个黑键。以此类推,两个6之间,共有12个琴键,所以:
低声区的6(拉)的频率便是:220*q*q*q*q*q*q*q*q*q*q*q*q = 440。
立刻就能够看出,12个q相乘,等于: 440 / 220 = 2。
那么就能够求出公比:q = 2的12次方根 = 1.059463094。
用这个公比,和已知的220进行核算,能够得出悉数琴键所对应的频率,如下表中所示。
3.守时初值
频率的倒数是周期,用单片机输出方波,应该在半个周期的时间,将输出取反。
设单片机的晶振为12MHz,那么守时器将在1us进行一次加一,加到65536就会呈现中止。据此,就可核算出守时器守时半个周期所需的初值,如下表中所示。
图表链接:http://hi.baidu.com/%D7%F6%B6%F8%C2%DB%B5%C0/album/item/bfbfc7a93f49fd8eca130cd3.html
4.腔调数据表
单片机宣布不同频率的方波,人听起来,便是不同的腔调。
上表中的频率数值,有些过多,去掉不常用的黑键频率,仅仅把白键对应的数据存放在单片机中,即可满意绝大部分的使用需求。
界说腔调数据表的程序如下:
DW 63625, 63833, 64019, 64104, 64260, 64400, 64524 ;低声区:1 2 3 4 5 6 7
DW 64580, 64685, 64778, 64820, 64898, 64968, 65030 ;中音区:1 2 3 4 5 6 7
DW 65058, 65110, 65157, 65178, 65217, 65252, 65283 ;高音区:1 2 3 4 5 6 7
DW 65297 ;超高音:1
把这个数据表,放在程序中,需求播音的时分,就从表中取出一个数据送到守时器,当守时器溢出中止的时分,再对输出引脚取反,那么,在扬声器中,即可听到上表中频率的声响。