第三章因为本人正在使用那个触摸校正的算法发论文,为了不要引起不必要的麻烦暂时搁浅到后面了。
现在首先给大家把第四章整理出来了,希望大家喜欢!!
此方法(例程4.4的加强版pwm唱歌)为笔者原创,转载请注明出处!
看帖回帖是美德!谢谢!
例程 4.4 加强版PWM 唱歌
在我们写出了以上使用ARM9 实现蜂鸣器唱歌的程序之后,大家已经听到了一首动
听了歌曲了,是不是很有成就感呢?但是大家是否完全搞明白了这首歌的来龙去脉了
呢?还有些朋友(例如拍拖中的朋友或者过生日的朋友)可能会有比较多的想法,例如
我们可不可以使用ARM9 的蜂鸣器在恰当的时机唱出自己喜欢的任意的歌曲呢?下面
的实验就来帮大家解决这个问题。
(注意:此例程为笔者原创,转载请注明出处。)
一、 实验目的
1、频率分析:分析低、中、高音的do、re、mi、fa、sol、la、si 对应的声音的频率
2、编写自己的程序,使我们可以对照着乐谱(例如下面的《老鼠爱大米》那一个
乐谱),在数组中直接写入对应的低音、中音、高音的do、re、mi、fa、sol、la、si 以及
该音节的节拍数即可实现蜂鸣器将那一首歌唱出来。方便以后自己朝开发板里面写入任
意歌曲。
注意:此处我们的数组采用以下助记规则:
(1)对低音的do、re、mi、fa、sol、la、si,分别写入01、02、03、04、05、06、07
对中音的do、re、mi、fa、sol、la、si,分别写入11、12、13、14、15、16、17
对高音的do、re、mi、fa、sol、la、si,分别写入21、22、23、24、25、26、27
(2)对应的节拍数,1/4 拍写1,2/4 拍写2,3/4 拍写3,依次类推。
欢迎大家提出更好的助记规格。
二、 我们所需要做的工作摘要:
1、编写程序段,使用串口工具,将使用例程4.3 的方法实现蜂鸣器唱歌的时候对应的
频率打印出来。
笔者在这里分析这些数据并为大家总结这些数据间的关系如下:
SONG[]中的数值:
低音:0x60,0x55,0x4c,0x48,0x40,0x39,0x33,
中音:0x30,0x2b,0x26,0x24,0x20,0x1c,0x19,
高音:0x18,0x15,0x13,0x12,0x10,0x0e,0x0d,
对应蜂鸣器的频率(Hz):
低音:260,294,328,347,390,438,490,
中音:520,581,657,694,781,892,1000,
高音:1041,1190,1315,1388,1562,1785,1923,
2、对照例程 4.3 中的《祝你平安》的乐谱将数据写入数组如下:
unsigned char SONG[] ={ //祝你平安,2 表示2/4 拍
13,2, 15,2, 15,2, 13,1, 15,1, 15,8,
13,2, 11,2, 11,2, 6,1, 11,1, 11,8,
........ |