音乐盒播放器.ds.ppt_第1页
音乐盒播放器.ds.ppt_第2页
音乐盒播放器.ds.ppt_第3页
音乐盒播放器.ds.ppt_第4页
音乐盒播放器.ds.ppt_第5页
免费预览已结束,剩余33页可下载查看

付费下载

下载本文档

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

文档简介

1、1、单片机是如何发出音乐声 原理: 声音是通过震动产生的。单片机对某一I/O引脚以一定的频率循环置1 和清0,这一引脚便产生一定频率的方波,该方法通过放大后作用于扬声器便产生一定频率的声音。若改变输出方波的频率,产生的声音也就改变了。通过控制输出方波的时间长短,声音的长短也就得到控制,因此,根据乐谱,单片机就可以产生音乐。音乐中最关键的两个要素是音调和节拍。 音调表示一个音符唱多高的频率, 节拍表示一个音符唱多长的时间。,一、单键演奏一组音符,1、单片机是如何发出音乐声 一首音乐是由很多音符组合而成的,一个音符代表了一种频率的乐声,通过不同频率乐声的组合,就可以产生一首音乐了。这就是电子音乐的

2、基本方法。 单片机可以通过定时器生成不同频率的信号,按照音乐音符的频率来生成各种频率的信号,并将其按照音乐构建好,然后将信号通过电声器件转换为声波,这样单片机就能发出一段音乐的声音了。,一、单键演奏一组音符,2、音调的确定 音调就是我们常说的音高。它是由频率来确定的!我们可以查出各个音符所对应的相应的频率,那么现在就需要我们来用51来发出相应频率的声音! 我们常采用的方法就是通过单片机的定时器定时中断,将单片机上对应蜂鸣器的 I/O口来回取反,或者说来回清零,置位,从而让蜂鸣器发出声音,为了让单片机发出不同频率的声音,我们只需将定时器预置不同的定时值就可实现。那么怎样确定一个频率所对应的定时器

3、的定时值呢?,一、单键演奏一组音符,2、音调的确定 例如:中音DO的频率为523Hz,周期为:T=1/f=1912us 单片机上对应蜂鸣器的I/O 口来回取反的时间应即半个周期为:t=T/2=956us 这个时间t 就是单片机上定时器应有的中断触发时间。 只要将定时器的定时时间设置为956us,就可以产生频率为523Hz的方波信号。 一般情况下,单片机奏乐时,其定时器为工作方式1,设振荡器频率为f,则定时器的予置初值由下式来确定: t=(216-X)*(12/f),一、单键演奏一组音符,2、音调的确定 因此定时器的高低计数器的初值为: TH =X/ 256 = ( 216 t* f/12) /

4、 256 TL = X % 256 = (216t* f/12) %256,一、单键演奏一组音符,C调各音符频率与计数值T的对照表如图所示:,2、音调的确定 一般我们要为这个音符建立一个表格,有助于单片机通过查表的方式来获得相应的数据。 uint code tab=63628,63835,64021,64103, 64260,64400,64524,64580, 64684,64777,64820,64898, 64968,95030,65058,65110;,一、单键演奏一组音符,实例演示: 要求:用一只单键产生一组音符的声音,发声从低音阶向高音阶进展,可以通过虚拟示波器观察到单片机产生的方

5、波的周期变化。单片机演奏音乐的电路只需要单片机和声音播放电路,电路原理图如图所示。,一、单键演奏一组音符,三极管,蜂鸣器,一、单键演奏一组音符,一、单键演奏一组音符,节拍的实现: 在一张乐谱中,我们经常会看到这样的表达式,如1=C (4/4) 、1=G(3/4) 等等,这里1=C (4/4),1=G(3/4) 表示乐谱的曲调,与前面所谈的音调有很大的关联,4/4、3/4 就是用来表示节拍的。以3/4 为例加以说明,它表示乐谱中以四分音符为节拍,每一小结有三拍。,二、演奏一首音乐,其中1 、2 为一拍,3、4、5为一拍,6为一拍共三拍。1 、2的时长为四分音符的一半,即为八分音符长,3、4的时长

6、为八分音符的一半,即为十六分音符长,5的时长为四分音符的一半,即为八分音符长,6的时长为四分音符长。,二、演奏一首音乐,乐曲的数据,一般写入数据表,表中每三个数字,说明了一个音符,它们分别代表: 第一个数字是音符的数值1234567之一,代表多来咪.; 第二个数字是123之一,代表低音、中音、高音; 第三个数字是时间长度,以半拍为单位。 乐曲数据表的结尾是三个0。 乐谱中数字上面带点表示高音,下面带点表示低音。什么都不带表示中音。 下划线:单个数字是四分音符,两个数字下画一条线是八分音符了。 感兴趣的同学应该去查看乐谱相关的知识。,二、演奏一首音乐,据此就可以写出送别前二小节的数据表: cod

7、e unsigned char sszymmh = 5, 2, 2, 3, 2, 1, 5, 2, 1, 1, 3, 4, /嗦,中音,2个半拍;咪,中音,1个半拍;嗦,中音,1个半拍;哆,高音,4个半拍 6, 2, 2, 1, 3, 2, 5, 2, 4, /啦,中音,2个半拍;哆,高音,1个半拍;嗦,中音,4个半拍 0, 0, 0;,二、演奏一首音乐,单片机演奏音乐的电路只需要单片机和声音播放电路,电路原理图如图所示。,二、演奏一首音乐,/*演奏“世上只有妈妈好”*/ #include sbit speaker = P30;unsigned char timer0h, timer0l, t

8、ime;/-/单片机晶振采用11.0592MHz,二、演奏一首音乐,/各种音符频率所对应的、半周期的定时时间初始值。 / 频率-半周期数据表 高八位 code unsigned char FREQH = 0 xF2, 0 xF3, 0 xF5, 0 xF5, 0 xF6, 0 xF7, 0 xF8, /低音1234567 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 xFC, 0 xFD, 0 xFD, 0 xFD, 0 xFD, 0 xFE, /中音 234567 0 xFE, 0 xFE,

9、 0 xFE, 0 xFE, 0 xFE, 0 xFE, 0 xFF; /高音 1234567 / 频率-半周期数据表 低八位code unsigned char FREQL = 0 x42, 0 xC1, 0 x17, 0 xB6, 0 xD0, 0 xD1, 0 xB6, /低音1234567 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 xEE, 0 x44, 0 x6B, 0 xB4, 0 xF4, 0 x2D, /中音音 234567 0 x47, 0 x77, 0 xA2, 0

10、xB6, 0 xDA, 0 xFA, 0 x16; /高音 1234567,二、演奏一首音乐,二、演奏一首音乐,/世上只有妈妈好数据表 要想演奏不同的乐曲, 只需要修改这个数据表code unsigned char sszymmh = 6, 2, 3, 5, 2, 1, 3, 2, 2, 5, 2, 2, 1, 3, 2, 6, 2, 1, 5, 2, 1, /一个音符有三个数字。前为第几个音、中为第几个八度、后为时长(以半拍为单位)。/6, 2, 3 分别代表:, 中音, 个半拍;/5, 2, 1 分别代表:, 中音, 个半拍;/3, 2, 2 分别代表:, 中音, 个半拍;/5, 2, 2

11、 分别代表:, 中音, 个半拍;/1, 3, 2 分别代表:, 高音, 个半拍;/6, 2, 4, 3, 2, 2, 5, 2, 1, 6, 2, 1, 5, 2, 2, 3, 2, 2, 1, 2, 1,6, 1, 1, 5, 2, 1, 3, 2, 1, 2, 2, 4, 2, 2, 3, 3, 2, 1, 5, 2, 2,5, 2, 1, 6, 2, 1, 3, 2, 2, 2, 2, 2, 1, 2, 4, 5, 2, 3, 3, 2, 1,2, 2, 1, 1, 2, 1, 6, 1, 1, 1, 2, 1, 5, 1, 6, 0, 0, 0;/-,二、演奏一首音乐,/*定时器T0中

12、断函数*/ void t0int() interrupt 1 /T0中断程序,控制发音的音调 TR0 = 0; /先关闭T0 speaker = !speaker; /输出方波, 发音 TH0 = timer0h; /下次的中断时间, 这个时间, 控制音调高低 TL0 = timer0l; TR0 = 1; /启动T0 /*延时程序控制发音的时长*/ void delay(unsigned char t) /延时程序,控制发音的时间长度 unsigned char t1; unsigned long t2; for(t1 = 0; t1 t; t1+) /双重循环, 共延时t个半拍 for(t

13、2 = 0; t2 8000; t2+); /延时期间, 可进入T0中断去发音 TR0 = 0; /关闭T0, 停止发音 ,二、演奏一首音乐,/*演奏一个音符*/ void song() /演奏一个音符 TH0 = timer0h; /控制音调 TL0 = timer0l; TR0 = 1; /启动T0, 由T0输出方波去发音 delay(time); /控制时间长度 ,二、演奏一首音乐,/*演奏一个音符*/ void main(void) unsigned char k, i; TMOD = 1; /置T0定时工作方式1 ET0 = 1; /开T0中断 EA = 1; /开CPU中断 whi

14、le(1) i = 0; time = 1; while(time) k = sszymmhi + 7 * sszymmhi + 1 - 1; /第i个是音符, 第i+1个是第几个八度 timer0h = FREQHk; /从数据表中读出频率数值 timer0l = FREQLk; /实际上, 是定时的时间长度 time = sszymmhi + 2; /读出时间长度数值 i += 3; song(); /发出一个音符 ,课后思考: 增加一个按键控制选播多首音乐? 也可以增加一个数码管用于显示正在播放的是第几首歌曲?,(1)任务要求: 采用单片机控制方式,设计制造电子琴,能够通过串口对键盘进行

15、简单调音控制。电子琴具有16只音乐输入键盘,可以进行简单的音乐演奏。LED数码管能显示按下的键盘,实现单片机电子琴和PC之间的通信,能通过PC向单片机发送数据指令,实现对键盘所对应的高低音调整,并将PC所发送数据显示出来。各工作小组对键盘调音的上调和下调指令码分别为0-9和A-J。,三、简易电子琴设计,(2)方案框图 根据任务要求,单片机电子琴主控芯片为8051单片机,有16只音符输入键盘,可以从PC输入控制数码,输入数码通过串口传送给单片机,通过控制码能调整音键的音阶,并能显示从PC输入的数码,用LED数码管显示音键名。电子琴方案框图如图所示。,三、简易电子琴设计,单 片 机,PC串行输入数

16、码,矩阵键盘,时钟复位电源,LED显示键盘名,中断显示输入数码,声频播放,(2)硬件电路 输入键盘设计: 矩阵键盘:4*4=16只按键,P1口接矩阵键盘 采用虚拟终端VIRTUAL TERMINAL模拟PC的作用。 虚拟终端接单片机串口,单片机的发送端接虚拟终端接收端,单片机的接收端连虚拟终端发送端 P3.7端输出音频信号,并连接虚拟示波器以测试音频方波的周期,观察控制数码的调音效果。 P0端口接LED数码管显示音键名。 电子琴电路原理图如图所示:,三、简易电子琴设计,三、简易电子琴设计,(3)软件设计流程图-电子琴主程序流程图,三、简易电子琴设计,初始化,是否有键按下,键盘扫描,识别按下键的

17、列值,键盘扫描,识别按下键的行值,根据键值和控制码,键音调整,停止定时器,关闭播放,Y,N,启动定时器,生成方波信号播放音频,(3)软件设计流程图电子琴串行通信流程图,三、简易电子琴设计,串行中断入口,是否收到数据?,读取数据,清除接收标志,键盘向下调音,Y,是否有下调控制码?,是否有上调控制码?,键盘向上调音,发送数据,清除发送标志,Y,N,N,N,Y,(4)源程序编写 根据单片机串行通信的编写步骤,首先是编写定时器和串口的初始化。 串口工作在方式1,允许接收数据: SCON=0 x50; 定时器T0工作于方式1,T1工作于方式2: TMOD=0 x21; 波特率为9600,时钟频率为11.0592MHz,定时器初值TH1=TL1=0 xfd; 开中断: EA=1;ET0=1;ET1=1;,三、简易电子琴设计,(4)源程序编写 矩阵键盘采用扫描方式判别按键是否按下。首先看是否有键按下,若有键按下,再判别按键的行列位置,根据行列位置得到按键的键值,将键名送LED

温馨提示

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

评论

0/150

提交评论