新型MP3播放器设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

简易模拟MP3播放器功能

一.目的:

1.通过学习,尝试编写歌曲简谱,加深对PWM音乐输出控制原理的认识和理解。

2.实验通过7段数码管显示播放曲目,提高对SPI接口的应用能力。

3.通过修改和添加《深入浅出ARM7》中的相关程序,控制歌曲的快进、快退、暂停、

循环播放、停止等实现简易模拟MP3播放器功能,增强对ARM的程序读写能力。

二.仪器:

ARM开发板一块、

装有ADS1.2及EasyJTAG仿真器的电脑一台

三.原理:

1.SPI接口控制7段数码管显示:

(1)SPI数据和时钟的相位关系:

(2)SPI寄存器描述:

①SPI控制寄存器SPCR:

②SPI状态寄存器SPSR:

通过对相关寄存器的读写操作,即可控制主从机的数据传输。

2.PWM控制音乐输出:

(1)两个匹配寄存器可用控制单边沿PWM输出。PWMMR0控制PWM周期速率,另一个匹配寄存器(PWMMR1~PWMMR6)控制PWM边沿的位置。

每个额外的单边沿PWM输出只需要一个匹配寄存器,因为所有PWM输

出的重复速率是相同的。多个单边控制PWM周期的开始,当PWMMR0

发生匹配时,都有一个上升沿。

(2)PWM管脚汇总:

(3)PWM定时器控制寄存器PWMMTCR:

(4)PWM匹配寄存器PWMMR0—PWMMR6:

PWM匹配寄存器值连续与PWM定时器计数TC值比较。当两个值相等时自动触发相应动作(产生中断、复位计数器或停止定时器)。具体执行什么动作油PWMMCR 寄存器控制。

(5)PWM锁存使能寄存器PWMLER:

四.实验程序:

1.实验流程图:

2.实验程序:(见附录)

五.调试结果:

(跳线连接:PWMMR3,4,5,6输出口连接LED1~4; PWMMR1连接BEEP;)

当烧录程序后,数码管先显示0,然后按KEY3或KEY4可播放下一首或上一首歌曲,同时数码管更新显示曲目;放音过程中,按一次KEY5可实现放音暂停,再按KEY5继续放音;放音过程中,按KEY1键可复位播放当前歌曲,并实现重复播放。按KEY2键复位并停止播放音乐。放音过程中LED1~4伴随播放音调明暗变化。

六.调试总结及体会:

通过不断调试,终于实现了简易模拟MP3播放功能,调试过程是自己不断学习进步的过程,从中收获了很多。

通过对课本中关于“虹彩妹妹”音乐编程的分析,以及通过网络学习了相关的音乐简谱常识,掌握了用蜂鸣器实现播放音乐的编程方法。实验中“倩女幽魂”、“沉默是金”、“当年情”都是自己通过歌曲简谱编写的音乐程序。事物都是相互联系的。通过对音乐程序的编写,加深了对用PWM播放音乐原理的认识。

通过反复的调试,对AXD调试环境更加的熟悉,更加熟练了对其基本功能的应用。

同时,提高了ARM编程应用能力。能够对一些基本的错误快速识别,为今后的编程奠定一定基础。

附录:

//跳线连接:PWMMR3,4,5,6输出口连接LED1~4; PWMMR1连接BEEP;

#include "config.h"

#include "music.h"

#define HC595_CS (1 << 29) // P0.29口为74HC595的片选

#define AA 1<<12

// 歌曲曲谱-倩女幽魂

const uint32 HCMM1[] =

{

_LA, _SO, _MI, _MI,

_MI, _RE, _DO, _SO,

_LA, _DO, _LA, _LA,

_DO1, _DO1,_LA, _LA,

_MI,

_DO1,_DO, _1TI, _DO, _1TI,

_1LA,

_DO1, _DO1,_MI,_SO,

_DO,_DO,_LA,

_RE,

_DO1, _DO1,_RE, _RE, _RE,

_FA,

_DO1, _FA, _MI, _FA, _LA,

_MI,_RE, _DO,

_DO1,_FA, _MI, _RE,

_1TI, _1TI, _FA,

_MI, _RE,_DO,

_1LA, _1SO, _1LA, _1LA,

_1LA,

};

// 歌曲节拍

const uint32 HCMM_L1[] =

{

_16, _16,_8, _2d,

_4d, _4, _4, _8,

_16, _16,_8, _2d,

_4, _4,_4d, _8,

_1,

_4,_8, _8, _4d, _8,

_1,

_4, _4,_4, _4,

_4, _2, _4,

_8, _4,_8,_4, _4,

_1,

_4, _4,_8, _4, _8,

_1,

_4, _8, _8, _4, _4,

_4d,_8, _2,

_4d, _8, _4, _4,

_4, _2, _4,

_4d, _8, _2,

_4d, _8,_4, _4,

_1,

};

//歌曲曲谱-虹彩妹妹

const uint32 HCMM2[] =

{

_LA, _LA, _SO, _LA,

_LA, _SO, _MI, _LA, _SO, _MI,

_RE, _RE, _DO, _RE,

_MI, _MI, _SO, _LA, _DO1, _LA, _SO,

_MI, _MI, _SO, _DO,

_MI, _MI, _MI, _MI, _MI,

_1LA,_1LA,_1SO,_1LA,

};

// 歌曲节拍

const uint32 HCMM_L2[] =

{

_4, _8, _8, _4, _8, _8,

_8, _4, _8, _2,

_4, _8, _8, _4, _8, _8,

_8, _4, _8, _2,

_4, _8, _8, _8, _8, _8, _8,

_8, _4, _8, _2,

_4, _4, _4, _8, _8,

_8, _4, _8, _2,

};

//当年情

const uint32 HCMM3[] =

{

_MI, _MI, _RE, _MI, _MI,_RE,

_MI, _SO, _SO, _LA,_SO,_FA, _MI,

_FA, _FA, _MI, _FA,_RE,_DO,

_TI,_LA, _TI,_MI, _RE,

_MI,_MI, _RE, _MI, _MI,_RE,

_MI, _LA,_LA,_TI,_LA, _LA,_RE, _MI,_RE, _DO, _RE, _RE,_MI,_RE, _DO, _1LA,_DO,

_DO,

_MI,_MI,_RE,_MI,_MI,_RE,

_MI,_SO,_SO,_LA,_SO,_SO,_MI,_MI,

_FA,_MI,_MI,_FA,_MI,_DO,

_RE, _DO1,_DO1,

_MI,_MI,_RE,_MI,_MI,_RE,

_MI,_LA,_LA,_TI,_LA,_LA,_RE,_DO,

_RE,_RE,_DO,_MI,_RE,_DO,

_SO, _DO1,_SO, _SO,_FA,

_MI,_MI,_RE,_MI,_MI,_RE,

相关文档
最新文档