单片机演奏简单的音乐(共19页).doc





《单片机演奏简单的音乐(共19页).doc》由会员分享,可在线阅读,更多相关《单片机演奏简单的音乐(共19页).doc(19页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上为了让单片机演奏音乐,看了不少的资料,现在整理了相关的资料,让你一次看懂音调、节拍的确定方法,看懂简谱,懂得编写用来演奏音乐的程序。单片机不能像其他的专业的乐器一样能奏出多种音色的声音,即不包含相应幅度的谐波频率。单片机演奏的音乐基本都是点单音频率。因此单片机演奏音乐比较简单,只需弄清楚“音调”和“节拍”两个概念即可。音调表示一个音符唱的多高的频率。节拍表示一个音符唱多长的时间。那么音调、节拍该怎样确定呢? 首先来看音调的确定:不同音高的乐音是用C、D、E、F、G、A、B来表示,这7个字母就是音乐的音名,它们一般依次唱成DO、RE、MI、FA、SO、LA、SI,即唱成
2、简谱的1、2、3、4、5、6、7,相当于汉字“多来米发梭拉西”的读音,这是唱曲时乐音的发音,所以叫“音调”,即Tone。在音乐中常把五线谱中央C 上方的A 音定为标准音高,其频率f=440Hz。当两个声音信号的频率相差一倍时,也即f2=2*f1时,则称f2比f1 高一个倍频程, 例如高音DO的频率(1046Hz)刚好是中音DO的频率(523Hz)的一倍,中音DO的频率(523Hz)刚好是低音DO频率(266 Hz)的一倍;同样的,高音RE的频率(1175Hz)刚好是中音RE的频率(587Hz)的一倍,中音RE的频率(587Hz)刚好是低音RE频率(294 Hz)的一倍。在音乐学中称它相差一个八
3、度音。在一个八度音内,有12个半音。以1i 八音区为例, 12 个半音是:11、12、22、23、34、44,45、5 一5、56、66、67、7i。那些在它们的左上角加上号或者b号的叫变化音。叫升记号,表示把音在原来的基础上升高半音,b叫降记音,表示在原来的基础上降低半音。这12 个音阶的分度基本上是以对数关系来划分的。如果我们只要知道了这十二个音符的音高,也就是其基本音调的频率,我们就可根据倍频程的关系得到其他音符基本音调的频率。基本频率看下表:低音频率中音频率高音频率Do262Do523Do1046Do277Do554Do1109Re294Re587Re1175Re311Re622Re1
4、245Mi330Mi659Mi1318Fa349Fa698Fa1397Fa370Fa740Fa1480So392So784So1568So415So831So1661La440La880La1760La464La932La1865Si494Si988Si1976知道了一个音符的频率后,采用的方法就是通过一个延时程序,延时对应频率周期的二分之一周期(即t=1/2T)后,将单片机上连接蜂鸣器的I/O口来回取反,或者说来回清零,置位,从而让蜂鸣器发出声音,为了让单片机发出不同频率的声音,我们只需将不同的延时时间值t赋给延时程序即可实现。一般说来,常采用的方法就是通过单片机的定时器定时中断,将单片机上
5、对应蜂鸣器的I/O口来回取反,或者说来回清零,置位,从而让蜂鸣器发出声音,为了让单片机发出不同频率的声音,我们只需将定时器予置不同的定时值就可实现。那么怎样确定一个频率所对应的定时器的定时值呢?以标准音高A为例:A的频率f = 440 Hz,其对应的周期为:T = 1/ f = 1/440 =2272s由上图可知,单片机上对应蜂鸣器的I/O口来回取反的时间应为:t = T/2 = 2272/2 = 1136s这个时间t也就是单片机上定时器应有的中断触发时间。一般情况下,单片机奏乐时,其定时器为工作方式1,它以振荡器的十二分频信号为计数脉冲。设振荡器频率为f0,则定时器的予置初值由下式来确定:t
6、 = 12 *(TALL THL)/ f0式中TALL = 216 = 65536,THL为定时器待确定的计数初值。因此定时器的高低计数器的初值为:TH = THL / 256 = ( TALL t* f0/12) / 256TL = THL % 256 = ( TALL t* f0/12) %256将t=1136s代入上面两式(注意:计算时应将时间和频率的单位换算一致),即可求出标准音高A在单片机晶振频率f0=12Mhz,定时器在工作方式1下的定时器高低计数器的予置初值为 :TH 440Hz = (65536 1136 * 12/12) /256 = FBHTL 440Hz = (65536
7、 1136 * 12/12)%256 = 90H根据上面的求解方法,我们就可求出其他音调相应的计数器的予置初值。如下表:(12MHz的单片机晶振)音调对应的计数器预置值:低音频率TH TL中音频率TH TL高音频率TH TL1262F88B1523FC4311046FB211277F8F21554FC7811109FE3C2294F95B2587FCAB21175FE552311F9B72622FCDB21245FE6D3330FA143659FD0831318FE844349FA664698FD3341397FE994370FAB94740FD5B41480FEAD5392FB035784F
8、D8151568FEC05415FB4A5831FDA551661FE026440FB8F6880FDC761760FEE36464FBCF6932FDE761865FEF37494FC0B7988FE0571976FF02知道了音调的确定方法,那就再来看看节拍的确定吧:若要构成音乐,光有音调是不够的,还需要节拍,让音乐具有旋律(固定的律动),而且可以调节各个音的快满度。确定节拍的方法如下1. 在一张乐谱中,我们经常会看到这样的表达式, 等等,这里1=C,1=G表示乐谱的曲调,和我们前面所谈的音调有很大的关联(呵呵,其关联就是升或降音调),就是用来表示节拍的。以为例加以说明,它表示乐谱中以四分
9、音符为节拍,每一小结有三拍。比如:其中1 、2 为一拍,3、4、5 为一拍,6为一拍共三拍。1 、2的时长为四分音符的一半,即为八分音符长,3、4的时长为八分音符的一半,即为十六分音符长,5 的时长为四分音符的一半,即为八分音符长,6的时长为四分音符长。那么一拍到底该唱多长呢?一般说来,如果乐曲没有特殊说明,一拍的时长大约为400500ms 。如果我们以一拍的时长为400ms 为例,则当以四分音符为一节拍时,四分音符的时长就为400ms,八分音符(即1/2拍)的时长就为200ms,十六分音符(1/4拍)的时长就为100ms。只要设定延迟时间就可求得节拍的时间。假设1/4拍为1DELAY,则1拍
10、应为4DELAY,以此类推。所以只要求得1/4拍的DELAY时间,其余的节拍就是它的倍数。2. 若知道了一首歌曲的每分钟的节拍数,也可求出每一节拍的时间。以每分钟94拍为例:一拍的时间=60/94=0.64s=640ms节拍时间S 1/40.16 3/40.48 1又1/40.80 1又3/41.12 2又1/41.44 2又3/41.76 3又1/42.08 3又3/42.40 关于音符长短的知识:在简谱中,1、2、3、4、5、6、7这七个基本音符,不仅表示音的高低,而且还是表示时值长短的基本单位,称为四分音符,其他音符均是在四分音符的基础上,用加记短横线-和附点表示。1.单纯音符在简谱中,
11、如果音符时值的长短用短横线 -表示,就称为单纯音符。单纯音符除四分音符外,有以下两种形式: 在基本音符右侧加记一条短横线,表示增长一个四分音符的时值。这类加记在音符右侧、使音符时值增长的短横线,称为增时线。增时线越多,音符的时值越长。 在基本音符下方加记一条短横线,表示缩短原音符时值的一半。这类加记在音符下方、使音符时值缩短的短横线,称为减时线。减时线越多,音符的时值越短。单纯音符的名称以全音符为标准而定。如:全音符的二分之一称为二分音符,全音符的四分之一称为四分音符,其余类推。常见的单纯音符的名称、写法及时值长短列表如下: 2.附点音符在简谱中,加记在单纯音符的右侧的使音符时值增长的小圆点,
12、称为附点加记附点的音符称为附点音符。附点本身并无一定的长短,其长短由前面的单纯音符来决定。附点的意义在于增长原音符时值的一半,常用于四分音符和小于四分音符的各种音符之后。例如:附点四分音符: 附点八分音符: 附点十六分音符: 在简谱中,大于四分音符的单纯音符通常不加记附点,而用增时线来表示。例如;附点二分音符: 不用 表示。带有两个附点的单纯音符称为复附点音符,第二个附点表示增长第一个附点时值的一半,即音符时值的四分之-。例如: 复附点常用于器乐曲中,在歌曲中很少使用。通过上面关于一个音符音调和节拍的确定方法,我们就可以在单片机上实现演奏音乐了。具体的实现方法为:将乐谱中的每个音符的音调及节拍
13、变换成相应的音调参数和节拍参数,将他们做成数据表格,存放在存储器中,通过程序取出一个音符的相关参数,播放该音符,该音符唱完后,接着取出下一个音符的相关参数,如此直到播放完毕最后一个音符,根据需要也可循环不停地播放整个乐曲。另外,对于乐曲中的休止符,一般用00H表示,乐曲结束音符用FFH来表示。说到这里看看你能不能够看懂简谱了呢,来对照着简谱看看为了方便编程下面再来看看编码吧do re mi fa so la si分别编码为17,重音do编为8,重音re编为9,停顿编为0。播放长度以十六分音符为单位(在本程序中为165ms),一拍即四分音符等于4个十六分音符,编为4,其它的播放时间以此类推。音调
14、作为编码的高4位,而播放时间作为低4位,如此音调和节拍就构成了一个编码。以0xff作为曲谱的结束标志。举例1:音调do,发音长度为两拍,即二分音符,将其编码为0x18。举例2:音调re,发音长度为半拍,即八分音符,将其编码为0x22歌曲播放的设计。先将歌曲的简谱进行编码,储存在一个数据类型为unsigned char 的数组中。程序从数组中取出一个数,然后分离出高4位得到音调,接着找出相应的值赋给定时器0,使之定时操作蜂鸣器,得出相应的音调;接着分离出该数的低4位,得到延时时间,接着调用软件延时。简谱对应的音调简码、节拍简码发音音调音调简码节拍数音符长度节拍简码停顿00中音DO111/4拍十六
15、分音符1中音RE221/2拍八分音符2中音MI333/4拍3中音FA441拍四分音符4中音SO555/4拍1又1/4拍全分音符5中音LA666/4拍1又1/2拍6中音SI778/4拍2拍二分音符8高音DO1810/4拍2又1/2拍A高音RE2912/4拍3拍C高音MI3A15/4拍3又3/4拍E高音FA4B4拍全分音符F高音SO5C高音LA6D高音SI7E结束F例子:#include #define uchar unsigned char#define uint unsigned intsbit buzzer=P37;/蜂鸣器连续的IO口uchar timeH,timeL,i;/-简谱-/编程
16、规则:/字节高四位是音调(1-7代表中央C调,8-E代表高八度,0代表停顿),/低四位是节拍/最后的FF是结束标志uchar code xiaoPingGuo = /小苹果简谱0x62, 0x62, 0x62, 0x31, 0x81, 0x82, 0x72, 0x62, 0x32, 0x01,0xa2, 0x92, 0x82, 0x62, 0x52, 0x64, 0x01,0xc2, 0xa2, 0x92, 0x81, 0x91, 0x92, 0xa2, 0x92, 0x52,0x62, 0xa2, 0x92, 0x82, 0x82, 0x52, 0x62,0x62, 0x61, 0x71,
17、0x82, 0x92, 0xc2, 0xb2, 0xa2, 0x82,0x82, 0x32, 0x52, 0x62, 0x02, 0x52, 0x64,0xa2, 0x92, 0x82, 0x61, 0x91, 0x92, 0x82, 0x62, 0x32,0x52, 0xa2, 0x92, 0x82, 0x82, 0xc2, 0x64, 0x08,/前奏0x82, 0x82,0x82, 0x82, 0x82, 0x82, 0x82, 0x64,/我种下一颗种子0x82, 0x82,0x82, 0x82, 0x82, 0x82, 0x82, 0x54,/终于长出了果实0x52, 0x52,0x
18、52, 0x52, 0x52, 0x62, 0x52, 0x62,0x6f,/今天是个伟大日子0x82, 0x82,0x82, 0x82, 0x82, 0x82, 0x82, 0x64,/摘下星星送给你0x82, 0x82,0x82, 0x82, 0x82, 0x82, 0x82, 0x54,/拽下月亮送给你0x52, 0x52,0x52, 0x52, 0x52, 0x62, 0x52, 0x62,0x6f,/让太阳每天为你升起0x62, 0x62,0x62, 0x72, 0x82, 0xa2, 0x92, 0x82,/变成蜡烛燃烧自己0x72, 0x62,0x72, 0x62, 0x78,/
19、只为照亮你0x52, 0x52, 0x52, 0x62,0x72, 0x92,0x82, 0x72,/把我一切都献给你0x62, 0x52,0x62, 0x52, 0x68,/只要你欢喜0x62, 0x62,0x62, 0x72, 0x82, 0xa2, 0x92, 0x82,/你让我每个明天都0x72, 0x62,0x72, 0x62, 0x78,/变得有意义0x52, 0x52, 0x52, 0x62,0x72, 0x92,0x82, 0x72,/生命虽短爱你永远0x14, 0x14, 0x14, 0x14,/不离不弃0xa4, 0x84, 0x94, 0x64,/你是我的 0xa2, 0
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 演奏 简单 音乐 19

限制150内