蜂鸣器播放歌曲

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

整理者:左手流年丶右手命运蜂鸣器播放歌曲首先,大家要知道蜂鸣器按其结构可分为两种蜂鸣器:压电式、电磁式。关于其内部构造这里就不详细讨论!也许大家遇到过这样的事情:为什么周围人买的蜂鸣器只要给个合适的电压蜂鸣器就不停的叫,而我的却只叫一下,原因很简单!因为蜂鸣器按其是否带有信号源又分为有源跟无源两种类型!注意:有源蜂鸣器和无源蜂鸣器。有源蜂鸣器内部带振荡源,无源蜂鸣器内部不带振荡源。这里所说的“源”不是指“电源”,而是指“振荡源”。有源蜂鸣器直接接上额定电源就可连续发声;而无源的需要在其供电端上加上高低不断变化的电信号才可以驱动发出声音。这里举个简单的例子,对于无源的我们可以先让BUZZ=1接着延时一小段时间,在又关闭BUZZ(即BUZZ=0);这样才能听到连续变化的声音。蜂鸣器的工作原理蜂鸣器发声原理是电流通过电磁线圈,使电磁线圈产生磁场来驱动振动膜发声的,因此需要一定的电流才能驱动它,单片机IO引脚输出的电流较小,单片机输出的TTL电平基本上驱动不了蜂鸣器,因此需要增加一个电流放大的电路,一多半采取一个三极管来放大驱动蜂鸣器。蜂鸣器的正极接到Q1的集电极C极上面,蜂鸣器的负极地,三极管发射极E极接电源VCC,基极B经过限流电阻R33后由单片机的P1.7引脚控制,当P1.7输出高电平时,三极管T1截止,没有电流流过线圈,蜂鸣器不发声;当P1.7输出低电平时,三极管导通,这样蜂鸣器的电流形成回路,发出声音。因此,我们可以通过程序控制P1.7脚的电平来使蜂鸣器发出声音和关闭声音。程序中改变单片机P1.7引脚输出波形的频率,就可以调整控制蜂鸣器音调,产生各种不同音色音调的声音,另外改变P1.7输出电平的高低电平占空比则可以控制蜂鸣器的声音大小。单片机如何输出频率,为了让单片机发出不同频率的声音,我们采用定时中断来计算延时时间,我们只需将定时器预置不同的定时值就可实现不同时间的定时。那么怎样确定一个频率所对应的定时器的定时值呢?以标准音高A为例:A的频率f=440Hz,其对应的周期为:T=1/f=1/440=2272us单片机如何输出频率单片机控制蜂鸣器的波形图,通过对端口P17循环的置位、清零来达到输出固定频率波形,GeneratedbyFoxitPDFCreator©FoxitSoftware=2272us,那么t=T/2=2272/2=1136us所以,我们只要在程序中将P17置为高电平,延时1136us,再置为低电平,延时1136us,如此循环,就可以得到440Hz频率的声音。这个延时,可以用定时器中断来做,假设单片机晶振频率为12MHz,以定时器工作方式1来做定时中断,可以得到定时器计数器初值为TH=(65536–1136)/256=0xFBTL=(65536–1136)%256=0x90音符频率及定时器初值对照表单片机频率音频计算方法从上图中可以看出,高、中、低音的音符频率存在倍频关系,比如1其低音频率是262Hz,中音频率是523Hz,中音是低的2倍频率,高音频率是1045Hz,高音又是中音的2倍频率,所以,我们可以根据其中的12个音符频率来推算出其它的音符频率。这种可推算的频率关系有利于我们在程序采用运算方法来确定音符的频率。音乐基础知识如果驱动无源蜂鸣器发出频率、持续时间不同的声音,就可以达到单片机控制演奏歌曲的目的。一般说来,单片机演奏音乐基本都是单音频率,因为单片机的IO端口,只能输出高电平或低电平,相当于方波信号,它虽然谐波很丰富,但不包含足够幅度的谐波频率,也就是说不能象电子琴那样能奏出多种音色的声音,这也就是为什么单片机演奏歌曲听起来声音单调的原因。因此单片机用于演奏歌曲,只需搞清楚两个概念即可,也就是“音调”和“节拍”。音调表示一个音符该唱的频率,节拍表示一个音符该唱多长的时间。音乐中的音调在音乐中所谓“音调”,其实就是我们常说的“音高”,实质就是频率不同的声音。音乐中以ABCDEFG来表示音高,A音定为标准音高,其频率f=440Hz。当两个声音信号的频率相差一倍时,也即f2=2f1时,则称f2比f1高一个倍频程,在音乐中1(do)与,2(来)与……正好相差一个倍频程,在音乐学中称它相差一个八度音。在一个八度音内,有12个半音。音乐中的音调以1—i八音区为例,12个半音是:1—#1、#1—2、2—#2、#2—3、3—4、4—#4,#4—5、5一#5、#5—6、6—#6、#6—7、7—i。这12个音阶的分度基本上是以对数关系来划分的。如果我们只要知道了这十二个音符的音高,也就是其基本音调的频率,我们就可根据倍频程的关系得到其他音符基本音调的频率。音乐基础GeneratedbyFoxitPDFCreator©FoxitSoftware=A,就是说,这首歌曲的“导”要唱得同A一样高,人们也把这首歌曲叫做A调歌曲,或叫“唱A调”。1=C,就是说,这首歌曲的“导”要唱得同C一样高,或者说“这歌曲唱C调”。同样是“导”,不同的调唱起来的高低是不一样的。音乐基础音调的确定,我们在前面已经详细讲解过,这里就不再重复。对于一个音符,确定了它的发音频率后,就要确定这个音符发音要发多长时间,也就是节拍,在一张乐谱中,我们经常会看到这样的表达式,如1=C、1=G……等等,这里1=C、1=G表示乐谱的曲调,和我们前面所谈的音调有很大的关联,、就是用来表示节拍的。以为例加以说明,它表示乐谱中以四分音符为节拍,每一小结有三拍。音乐基础其中1、2为一拍,3、4、5为一拍,6为一拍共三拍。1、2的时长为四分音符的一半,即为八分音符长,3、4的时长为八分音符的一半,即为十六分音符长,5的时长为四分音符的一半,即为八分音符长,6的时长为四分音符长。那么一拍到底该唱多长呢?一般说来,如果乐曲没有特殊说明,一拍的时长大约为400~500ms。我们以一拍的时长为400ms为例,则当以四分音符为节拍时,四分音符的时长就为400ms,八分音符的时长就为200ms,十六分音符的时长就为100ms。连音,顿音,符点音乐中较为常见的还有连音、顿音、符点等,连音就是乐谱上用连线连起来的音,它是用连线来标记的,表示连线内不同音高的音要奏的连贯,即中间不需要停顿。顿音是用三角符标记在音符的上面,在演奏或表演上要表现得短促而又轻巧有弹性。符点就是记在音符右边的小圆点,表示增加前面音符时值的一半,带符点的音符叫符点音符。音符演奏长度控制实现在单片机上控制一个音符唱多长可采用循环延时的方法来实现。首先,我们确定一个基本时长的延时程序,为了使这个时间更精确,使用定时器来实现,设定定时器为10ms中断一次,那么,我们需要多少延长时间就延时多少次中断。比如说十六分音符的时长为100ms,八分音符的时长就为200ms,那么,对于一个音符,如果它为十六分音符,则只需产生10次中断,延时时间就刚好是100ms,如果它为八分音符,则只需产生20次中断,依次类推。音频数据保存格式在编写程序中,定义数组用于存放乐曲的信息,用2个字节来表示,第1个存储音调信息,第2个存储音长信息,而以两个字节均为0表示乐曲信息数组的结尾。其格式如下:ucharcodeMusicName{音调,音长,音调,音长....,0,0};音调存储结构GeneratedbyFoxitPDFCreator©FoxitSoftware音长数据结构单片机演奏步骤(1)1.根据歌曲的演奏调号和演奏音区生成新的频率表。因为不同的演奏调号,意味着最低的频率不一定是从A起,像(生日快乐)就是F调起。升F调:1=#F,也就是降G调:1=BG;369HZ演奏音区代表是(降调)(平调)(升调)演奏。这些参数都影响音调的频率,所以需要这二个参数来生成新的频率表。单片机演奏步骤22.计算歌曲长度。计算出歌曲的长度,方便判断出歌曲是否播放完毕。这个部分可以用一个while循环来做判断。单片机演奏步骤33.取出音乐数组数据,并根据新的频率表,计算出新的频率参数,并送到定时器中。百位:0不升,1升半音十位:1低音,2中音,3高音个位:1-7代表这七个音符定时器值=65536-(1000000/频率/2)单片机演奏步骤44.读出音乐数组数据,设置1分音的时长,再根据音乐数组数据,计算出连音,顿音,符号等数据。如果当前音符小于16分音,则发连音时需要间隔。间隔时间=原时间的4/5。单片机演奏步骤5GeneratedbyFoxitPDFCreator©FoxitSoftware读取演奏的时长数据,并读取不演奏时长数据。同时打开蜂鸣器。演奏完指向下一数据,并一直演奏完。流程图注意:一定先要把流程图统统看一遍,由于编译器的问题,不能把流程图合成一部。GeneratedbyFoxitPDFCreator©FoxitSoftware©FoxitSoftware©FoxitSoftware©FoxitSoftware©FoxitSoftware©FoxitSoftware

1 / 10
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功