音乐盒播放器ds_第1页
音乐盒播放器ds_第2页
音乐盒播放器ds_第3页
音乐盒播放器ds_第4页
音乐盒播放器ds_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1 1、单片机是如何发出音乐声、单片机是如何发出音乐声原理:原理:声音是通过震动产生的。单片机对某一声音是通过震动产生的。单片机对某一I/OI/O引脚以一定引脚以一定的频率循环置的频率循环置1 1 和清和清0 0,这一引脚便产生一定频率的,这一引脚便产生一定频率的方波,该方法通过放大后作用于扬声器便产生一定方波,该方法通过放大后作用于扬声器便产生一定频率的声音。若改变输出方波的频率,产生的声音频率的声音。若改变输出方波的频率,产生的声音也就改变了。通过控制输出方波的时间长短,声音也就改变了。通过控制输出方波的时间长短,声音的长短也就得到控制,因此,根据乐谱,单片机就的长短也就得到控制,因此,根

2、据乐谱,单片机就可以产生音乐。音乐中最关键的两个要素是可以产生音乐。音乐中最关键的两个要素是音调和音调和节拍节拍。音调表示一个音符唱多高的频率,音调表示一个音符唱多高的频率,节拍表示一个音符唱多长的时间。节拍表示一个音符唱多长的时间。 一、单键演奏一组音符一、单键演奏一组音符1 1、单片机是如何发出音乐声、单片机是如何发出音乐声一首音乐是由很多音符组合而成的,一个音符代表了一一首音乐是由很多音符组合而成的,一个音符代表了一种频率的乐声,通过不同频率乐声的组合,就可以产生种频率的乐声,通过不同频率乐声的组合,就可以产生一首音乐了。这就是电子音乐的基本方法。一首音乐了。这就是电子音乐的基本方法。单

3、片机可以通过定时器生成不同频率的信号,按照音乐单片机可以通过定时器生成不同频率的信号,按照音乐音符的频率来生成各种频率的信号,并将其按照音乐构音符的频率来生成各种频率的信号,并将其按照音乐构建好,然后将信号通过电声器件转换为声波,这样单片建好,然后将信号通过电声器件转换为声波,这样单片机就能发出一段音乐的声音了。机就能发出一段音乐的声音了。一、单键演奏一组音符一、单键演奏一组音符2 2、音调的确定、音调的确定音调就是我们常说的音高。它是由频率来确定的!我们音调就是我们常说的音高。它是由频率来确定的!我们可以查出各个音符所对应的相应的频率,那么现在就需可以查出各个音符所对应的相应的频率,那么现在

4、就需要我们来用要我们来用5151来发出相应频率的声音!来发出相应频率的声音! 我们常采用的方法就是通过单片机的定时器定时中断,我们常采用的方法就是通过单片机的定时器定时中断,将单片机上对应蜂鸣器的将单片机上对应蜂鸣器的 I/O I/O口来回取反,或者说来回口来回取反,或者说来回清零,置位,从而让蜂鸣器发出声音,清零,置位,从而让蜂鸣器发出声音,为了让单片机发为了让单片机发出不同频率的声音,我们只需将定时器出不同频率的声音,我们只需将定时器预置预置不同的定时不同的定时值就可实现。值就可实现。那么怎样确定一个频率所对应的定时器的那么怎样确定一个频率所对应的定时器的定时值呢?定时值呢? 一、单键演奏

5、一组音符一、单键演奏一组音符2 2、音调的确定、音调的确定例如:中音例如:中音DODO的频率为的频率为523Hz523Hz,周期为:,周期为:T=1/f=1912usT=1/f=1912us单片机上对应蜂鸣器的单片机上对应蜂鸣器的I/O I/O 口来回取反的时间应即半个口来回取反的时间应即半个周期为:周期为:t=T/2=956ust=T/2=956us这个时间这个时间t t 就是单片机上定时器应有的中断触发时间。就是单片机上定时器应有的中断触发时间。只要将定时器的定时时间设置为只要将定时器的定时时间设置为956us956us,就可以产生频,就可以产生频率为率为523Hz523Hz的方波信号。的

6、方波信号。一般情况下,单片机奏乐时,其定时器为工作方式一般情况下,单片机奏乐时,其定时器为工作方式1 1,设振荡器频率为设振荡器频率为f f,则定时器的予置初值由下式来确定,则定时器的予置初值由下式来确定: t=t=(2 21616-X-X)* *(12/f)(12/f)一、单键演奏一组音符一、单键演奏一组音符2 2、音调的确定、音调的确定因此定时器的高低计数器的初值为:因此定时器的高低计数器的初值为: TH =X/ 256 = ( 2TH =X/ 256 = ( 21616 t t* * f/12) / 256 f/12) / 256 TL = X % 256 = (2TL = X % 25

7、6 = (21616tt* * f/12) %256 f/12) %256 一、单键演奏一组音符一、单键演奏一组音符C C调各音符频率与计数值调各音符频率与计数值T T的对照表如图所示:的对照表如图所示:2 2、音调的确定、音调的确定一般我们要为这个音符建立一个表格,有助于单片机通一般我们要为这个音符建立一个表格,有助于单片机通过查表的方式来获得相应的数据。过查表的方式来获得相应的数据。uint code tab=63628,63835,64021,64103,uint code tab=63628,63835,64021,64103,64260,64400,64524,64580,64260

8、,64400,64524,64580,64684,64777,64820,64898,64684,64777,64820,64898,64968,95030,65058,65110;64968,95030,65058,65110;一、单键演奏一组音符一、单键演奏一组音符实例演示:实例演示:要求:用一只单键产生一组音符的声音,发声从低音阶要求:用一只单键产生一组音符的声音,发声从低音阶向高音阶进展,可以通过虚拟示波器观察到单片机产生向高音阶进展,可以通过虚拟示波器观察到单片机产生的方波的周期变化。单片机演奏音乐的电路只需要单片的方波的周期变化。单片机演奏音乐的电路只需要单片机和声音播放电路,电路

9、原理图如图所示。机和声音播放电路,电路原理图如图所示。一、单键演奏一组音符一、单键演奏一组音符三极管蜂鸣器一、单键演奏一组音符一、单键演奏一组音符一、单键演奏一组音符一、单键演奏一组音符节拍的实现:节拍的实现:在一张乐谱中,我们经常会看到这样的表达式,如在一张乐谱中,我们经常会看到这样的表达式,如1=C 1=C (4/4) (4/4) 、1=G(3/4) 1=G(3/4) 等等,这里等等,这里1=C 1=C (4/4),1=G(3/4) (4/4),1=G(3/4) 表示乐谱的曲调,与前面所谈的音调表示乐谱的曲调,与前面所谈的音调有很大的关联,有很大的关联,4/44/4、3/4 3/4 就是用

10、来表示节拍的。以就是用来表示节拍的。以3/4 3/4 为例加以说明,它表示乐谱中以四分音符为节拍,为例加以说明,它表示乐谱中以四分音符为节拍,每一小结有三拍。每一小结有三拍。二、演奏一首音乐二、演奏一首音乐其中其中1 1 、2 2 为一拍,为一拍,3 3、4 4、5 5为一拍,为一拍,6 6为一拍共三拍。为一拍共三拍。1 1 、2 2的时长为四分音符的一半,即为八分音符长,的时长为四分音符的一半,即为八分音符长,3 3、4 4的时长为八分音符的一半,即为十六分音符长,的时长为八分音符的一半,即为十六分音符长,5 5的时的时长为四分音符的一半,即为八分音符长,长为四分音符的一半,即为八分音符长,

11、6 6的时长为四的时长为四分音符长。分音符长。 二、演奏一首音乐二、演奏一首音乐乐曲的数据,一般写入数据表,表中每三个数字,说明了乐曲的数据,一般写入数据表,表中每三个数字,说明了一个音符,它们分别代表:一个音符,它们分别代表:第一个数字是音符的数值第一个数字是音符的数值12345671234567之一,代表多来咪之一,代表多来咪.;第二个数字是第二个数字是123123之一,代表低音、中音、高音;之一,代表低音、中音、高音;第三个数字是时间长度,以第三个数字是时间长度,以半拍半拍为单位。为单位。乐曲数据表的结尾是三个乐曲数据表的结尾是三个0 0。乐谱中数字上面带点表示高音,下面带点表示低音。什

12、么乐谱中数字上面带点表示高音,下面带点表示低音。什么都不带表示中音。都不带表示中音。下划线:单个数字是四分音符,两个数字下画一条线是八下划线:单个数字是四分音符,两个数字下画一条线是八分音符了。分音符了。感兴趣的同学应该去查看乐谱相关的知识。感兴趣的同学应该去查看乐谱相关的知识。二、演奏一首音乐二、演奏一首音乐据此就可以写出据此就可以写出送别送别前二小节的数据表:前二小节的数据表:code unsigned char sszymmh = code unsigned char sszymmh = 5 5, 2, 2, , 2, 2, 3 3, 2, 1, , 2, 1, 5 5, 2, 1, ,

13、 2, 1, 1 1, 3, 4, , 3, 4, /嗦嗦, ,中音中音,2,2个半拍个半拍; ;咪咪, ,中音中音,1,1个半拍个半拍; ;嗦嗦, ,中音中音,1,1个半拍个半拍; ;哆哆, ,高音高音,4,4个半拍个半拍6 6, 2, 2, , 2, 2, 1 1, 3, 2, , 3, 2, 5 5, 2, 4, 2, 4,/啦啦, ,中音中音,2,2个半拍个半拍; ;哆哆, ,高音高音,1,1个半拍个半拍; ;嗦嗦, ,中音中音,4,4个个半拍半拍0, 0, 0;0, 0, 0;二、演奏一首音乐二、演奏一首音乐单片机演奏音乐的电路只需要单片机和声音播放电路,单片机演奏音乐的电路只需要单

14、片机和声音播放电路,电路原理图如图所示。电路原理图如图所示。二、演奏一首音乐二、演奏一首音乐/ /* *演奏演奏“世上只有妈妈好世上只有妈妈好”* */ /#include #include sbit speaker = P30;sbit speaker = P30;unsigned char timer0h, timer0l, time;unsigned char timer0h, timer0l, time;/-/-/单片机晶振采用单片机晶振采用11.0592MHz11.0592MHz二、演奏一首音乐二、演奏一首音乐/各种音符频率所对应的、半周期的定时时间初始值。各种音符频率所对应的、半周

15、期的定时时间初始值。/ / 频率频率- -半周期数据表半周期数据表 高八位高八位code unsigned char FREQH = code unsigned char FREQH = 0 xF2, 0 xF3, 0 xF5, 0 xF5, 0 xF6, 0 xF7, 0 xF8, / 0 xF2, 0 xF3, 0 xF5, 0 xF5, 0 xF6, 0 xF7, 0 xF8, /低音低音12345671234567 0 xF9, 0 xF9, 0 xFA, 0 xFA, 0 xFB, 0 xFB, 0 xFC, 0 xFC,/1,2,3,4,5,6,7,i 0 xF9, 0 xF9,

16、0 xFA, 0 xFA, 0 xFB, 0 xFB, 0 xFC, 0 xFC,/1,2,3,4,5,6,7,i 0 xFC, 0 xFD, 0 xFD, 0 xFD, 0 xFD, 0 xFE, / 0 xFC, 0 xFD, 0 xFD, 0 xFD, 0 xFD, 0 xFE, /中音中音 234567 234567 0 xFE, 0 xFE, 0 xFE, 0 xFE, 0 xFE, 0 xFE, 0 xFF; / 0 xFE, 0 xFE, 0 xFE, 0 xFE, 0 xFE, 0 xFE, 0 xFF; /高音高音 1234567 1234567/ / 频率频率- -半周期数

17、据表半周期数据表 低八位低八位code unsigned char FREQL = code unsigned char FREQL = 0 x42, 0 xC1, 0 x17, 0 xB6, 0 xD0, 0 xD1, 0 xB6, / 0 x42, 0 xC1, 0 x17, 0 xB6, 0 xD0, 0 xD1, 0 xB6, /低音低音12345671234567 0 x21, 0 xE1, 0 x8C, 0 xD8, 0 x68, 0 xE9, 0 x5B, 0 x8F, /1,2,3,4,5,6,7,i 0 x21, 0 xE1, 0 x8C, 0 xD8, 0 x68, 0 x

18、E9, 0 x5B, 0 x8F, /1,2,3,4,5,6,7,i 0 xEE, 0 x44, 0 x6B, 0 xB4, 0 xF4, 0 x2D, / 0 xEE, 0 x44, 0 x6B, 0 xB4, 0 xF4, 0 x2D, /中音中音音音 234567 234567 0 x47, 0 x77, 0 xA2, 0 xB6, 0 xDA, 0 xFA, 0 x16; / 0 x47, 0 x77, 0 xA2, 0 xB6, 0 xDA, 0 xFA, 0 x16; /高音高音 1234567 1234567二、演奏一首音乐二、演奏一首音乐二、演奏一首音乐二、演奏一首音乐/世上只

19、有妈妈好数据表世上只有妈妈好数据表 要想演奏不同的乐曲要想演奏不同的乐曲, , 只需要修改这只需要修改这个数据表个数据表code unsigned char sszymmh = code unsigned char sszymmh = 6 6, 2, 3, 2, 3, 5 5, 2, 1, 2, 1, 3 3, 2, 2, 2, 2, 5 5, 2, 2, 2, 2, 1 1, 3, 2, 3, 2, 6 6, 2, 1, 2, 1, 5 5, 2, , 2, 1, 1, /一个音符有三个数字。前为第几个音、中为第几个八度、后为时长一个音符有三个数字。前为第几个音、中为第几个八度、后为时长(以

20、半拍为单位)。(以半拍为单位)。/6, 2, 3 /6, 2, 3 分别代表:分别代表:, , 中音中音, , 个半拍个半拍; ;/5, 2, 1 /5, 2, 1 分别代表:分别代表:, , 中音中音, , 个半拍个半拍; ;/3, 2, 2 /3, 2, 2 分别代表:分别代表:, , 中音中音, , 个半拍个半拍; ;/5, 2, 2 /5, 2, 2 分别代表:分别代表:, , 中音中音, , 个半拍个半拍; ;/1, 3, 2 /1, 3, 2 分别代表:分别代表:, , 高音高音, , 个半拍个半拍; ;/6 6, 2, 4, , 2, 4, 3 3, 2, 2, , 2, 2,

21、5 5, 2, 1, , 2, 1, 6 6, 2, 1, , 2, 1, 5 5, 2, 2, , 2, 2, 3 3, 2, 2, , 2, 2, 1 1, 2, 1, 2, 1,6 6, 1, 1, , 1, 1, 5 5, 2, 1, , 2, 1, 3 3, 2, 1, , 2, 1, 2 2, 2, 4, , 2, 4, 2 2, 2, 3, , 2, 3, 3 3, 2, 1, , 2, 1, 5 5, 2, 2, 2, 2,5 5, 2, 1, , 2, 1, 6 6, 2, 1, , 2, 1, 3 3, 2, 2, , 2, 2, 2 2, 2, 2, , 2, 2, 1

22、1, 2, 4, , 2, 4, 5 5, 2, 3, , 2, 3, 3 3, 2, 1, 2, 1,2 2, 2, 1, , 2, 1, 1 1, 2, 1, , 2, 1, 6 6, 1, 1, , 1, 1, 1 1, 2, 1, , 2, 1, 5 5, 1, 6, 0, 0, 0;, 1, 6, 0, 0, 0;/-/-二、演奏一首音乐二、演奏一首音乐/ /* *定时器定时器T0T0中断函数中断函数* */ /void t0int() interrupt 1 /T0void t0int() interrupt 1 /T0中断程序,控制发音的音调中断程序,控制发音的音调 TR0 =

23、0; / TR0 = 0; /先关闭先关闭T0T0 speaker = !speaker; / speaker = !speaker; /输出方波输出方波, , 发音发音 TH0 = timer0h; /TH0 = timer0h; /下次的中断时间下次的中断时间, , 这个时间这个时间, , 控制音调高低控制音调高低 TL0 = timer0l;TL0 = timer0l; TR0 = 1; / TR0 = 1; /启动启动T0T0 / /* *延时程序控制发音的时长延时程序控制发音的时长* */ /void delay(unsigned char t) /void delay(unsign

24、ed char t) /延时程序,控制发音的时间长延时程序,控制发音的时间长度度 unsigned char t1; unsigned char t1; unsigned long t2; unsigned long t2; for(t1 = 0; t1 t; t1+) / for(t1 = 0; t1 t; t1+) /双重循环双重循环, , 共延时共延时t t个半拍个半拍 for(t2 = 0; t2 8000; t2+); /for(t2 = 0; t2 8000; t2+); /延时期间延时期间, , 可进入可进入T0T0中断中断去发音去发音 TR0 = 0; /TR0 = 0; /关

25、闭关闭T0, T0, 停止发音停止发音 二、演奏一首音乐二、演奏一首音乐/ /* *演奏一个音符演奏一个音符* */ /void song() /void song() /演奏一个音符演奏一个音符 TH0 = timer0h; / TH0 = timer0h; /控制音调控制音调 TL0 = timer0l;TL0 = timer0l; TR0 = 1; / TR0 = 1; /启动启动T0, T0, 由由T0T0输出方波去发音输出方波去发音 delay(time); /delay(time); /控制时间长度控制时间长度 二、演奏一首音乐二、演奏一首音乐/ /* *演奏一个音符演奏一个音符*

26、 */ /void main(void)void main(void) unsigned char k, i; unsigned char k, i; TMOD = 1; / TMOD = 1; /置置T0T0定时工作方式定时工作方式1 1 ET0 = 1; / ET0 = 1; /开开T0T0中断中断 EA = 1; /EA = 1; /开开CPUCPU中断中断 while(1) while(1) i = 0; i = 0; time = 1; time = 1; while(time) while(time) k = sszymmhi + 7 k = sszymmhi + 7 * * ss

27、zymmhi + 1 - 1; sszymmhi + 1 - 1; / /第第i i个是音符个是音符, , 第第i+1i+1个是第几个八度个是第几个八度 timer0h = FREQHk; /timer0h = FREQHk; /从数据表中读出频率数值从数据表中读出频率数值 timer0l = FREQLk; /timer0l = FREQLk; /实际上实际上, , 是定时的时间长度是定时的时间长度 time = sszymmhi + 2; /time = sszymmhi + 2; /读出时间长度数值读出时间长度数值 i += 3;i += 3; song(); / song(); /发出

28、一个音符发出一个音符 课后思考:课后思考:增加一个按键控制选播多首音乐?增加一个按键控制选播多首音乐?也可以增加一个数码管用于显示正在播放的也可以增加一个数码管用于显示正在播放的是第几首歌曲?是第几首歌曲?(1 1)任务要求:)任务要求:采用单片机控制方式,设计制造电子琴,能够通采用单片机控制方式,设计制造电子琴,能够通过串口对键盘进行简单调音控制。电子琴具有过串口对键盘进行简单调音控制。电子琴具有1616只音乐输入键盘,可以进行简单的音乐演奏。只音乐输入键盘,可以进行简单的音乐演奏。LEDLED数码管能显示按下的键盘,实现单片机电子数码管能显示按下的键盘,实现单片机电子琴和琴和PCPC之间的

29、通信,能通过之间的通信,能通过PCPC向单片机发送数据向单片机发送数据指令,实现对键盘所对应的高低音调整,并将指令,实现对键盘所对应的高低音调整,并将PCPC所发送数据显示出来。各工作小组对键盘调音的所发送数据显示出来。各工作小组对键盘调音的上调和下调指令码分别为上调和下调指令码分别为0-90-9和和A-JA-J。三、简易电子琴设计三、简易电子琴设计(2 2)方案框图)方案框图根据任务要求,单片机电子琴主控芯片为根据任务要求,单片机电子琴主控芯片为80518051单片机,单片机,有有1616只音符输入键盘,可以从只音符输入键盘,可以从PCPC输入控制数码,输入数输入控制数码,输入数码通过串口传

30、送给单片机,通过控制码能调整音键的音码通过串口传送给单片机,通过控制码能调整音键的音阶,并能显示从阶,并能显示从PCPC输入的数码,用输入的数码,用LEDLED数码管显示音键数码管显示音键名。电子琴方案框图如图所示。名。电子琴方案框图如图所示。三、简易电子琴设计三、简易电子琴设计单单片片机机PCPC串行输入数码串行输入数码矩阵键盘矩阵键盘时钟复位电源时钟复位电源LEDLED显示键盘名显示键盘名中断显示输入数码中断显示输入数码声频播放声频播放(2 2)硬件电路)硬件电路输入键盘设计:输入键盘设计:矩阵键盘:矩阵键盘:4 4* *4=164=16只按键,只按键,P1P1口接矩阵键盘口接矩阵键盘采用

31、虚拟终端采用虚拟终端VIRTUAL TERMINALVIRTUAL TERMINAL模拟模拟PCPC的作用。的作用。虚拟终端接单片机串口,单片机的发送端接虚拟终端接虚拟终端接单片机串口,单片机的发送端接虚拟终端接收端,单片机的接收端连虚拟终端发送端收端,单片机的接收端连虚拟终端发送端P3.7P3.7端输出音频信号,并连接虚拟示波器以测试音频方端输出音频信号,并连接虚拟示波器以测试音频方波的周期,观察控制数码的调音效果。波的周期,观察控制数码的调音效果。P0P0端口接端口接LEDLED数码管显示音键名。数码管显示音键名。电子琴电路原理图如图所示:电子琴电路原理图如图所示:三、简易电子琴设计三、简

32、易电子琴设计三、简易电子琴设计三、简易电子琴设计(3 3)软件设计流程图)软件设计流程图- -电子琴主程序流程图电子琴主程序流程图三、简易电子琴设计三、简易电子琴设计初始化初始化是否有键按下是否有键按下键盘扫描,识别按下键的列值键盘扫描,识别按下键的列值键盘扫描,识别按下键的行值键盘扫描,识别按下键的行值根据键值和控制码,键音调整根据键值和控制码,键音调整停止定时器,关闭播放停止定时器,关闭播放YN启动定时器,生成方波信号播放音频启动定时器,生成方波信号播放音频(3 3)软件设计流程图)软件设计流程图电子琴串行通信流程图电子琴串行通信流程图三、简易电子琴设计三、简易电子琴设计串行中断入口串行中断入口是否收到数据?是否收到数据?读取数据,清除接收标志读取数据,清除接收标志键盘向下调音键盘向下调音Y是否有下调控制码是否有下调控制码? ?是否有上调控制码是否有上调控制码? ?

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论