新型mp3播放器设计

上传人:Bod****ee 文档编号:47463855 上传时间:2018-07-02 格式:DOC 页数:20 大小:393.53KB
返回 下载 相关 举报
新型mp3播放器设计_第1页
第1页 / 共20页
新型mp3播放器设计_第2页
第2页 / 共20页
新型mp3播放器设计_第3页
第3页 / 共20页
新型mp3播放器设计_第4页
第4页 / 共20页
新型mp3播放器设计_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《新型mp3播放器设计》由会员分享,可在线阅读,更多相关《新型mp3播放器设计(20页珍藏版)》请在金锄头文库上搜索。

1、简易模拟简易模拟 MP3 播放器功能播放器功能一目的目的:1.通过学习,尝试编写歌曲简谱,加深对 PWM 音乐输出控制原理的认识和理解。 2.实验通过 7 段数码管显示播放曲目,提高对 SPI 接口的应用能力。 3.通过修改和添加深入浅出 ARM7中的相关程序,控制歌曲的快进、快退、暂 停、循环播放、停止等实现简易模拟 MP3 播放器功能,增强对 ARM 的程序读写 能力。二仪器仪器:ARM 开发板一块、 装有 ADS1.2 及 EasyJTAG 仿真器的电脑一台三原理原理:1.SPI 接口控制 7 段数码管显示:(1)SPI 数据和时钟的相位关系:(2)SPI 寄存器描述:SPI 控制寄存器

2、 SPCR:SPI 状态寄存器 SPSR:通过对相关寄存器的读写操作,即可控制主从机的数据传输。2.PWM 控制音乐输出: (1)两个匹配寄存器可用控制单边沿 PWM 输出。PWMMR0 控制 PWM 周期 速率,另一个匹配寄存器(PWMMR1PWMMR6)控制 PWM 边沿的位 置。每个额外的单边沿 PWM 输出只需要一个匹配寄存器,因为所有 PWM 输出的重复速率是相同的。多个单边控制 PWM 周期的开始,当 PWMMR0 发生匹配时,都有一个上升沿。 (2)PWM 管脚汇总:(3)PWM 定时器控制寄存器 PWMMTCR:(4)PWM 匹配寄存器 PWMMR0PWMMR6:PWM 匹配寄

3、存器值连续与 PWM 定时器计数 TC 值比较。当两个值相等时 自动触发相应动作(产生中断、复位计数器或停止定时器) 。具体执行什么动作油 PWMMCR 寄存器控制。 (5)PWM 锁存使能寄存器 PWMLER:四实验程序实验程序:1 实验流程图:开始 AA 取反Num1-Num1+AA=1KEY1,KEY2,KEY 3,KEY4 是否有按 下KEY1,2,3,4 有按下 KEY5=1发送数码管显示播放第 num1 首歌同时判断 KEY1, 2, 3, 4, 5 是否按下暂停播放初始化程序:管脚初始化; PWM 初始化;SPI 初始化AA=0AA=0KEY5=0NY KEY1KEY3KEY4K

4、EY2NYNYNYYNYYNN2 实验程序:(见附录)五调试结果调试结果:(跳线连接:PWMMR3,4,5,6 输出口连接 LED14; PWMMR1 连接 BEEP;)当烧录程序后,数码管先显示 0,然后按 KEY3 或 KEY4 可播放下一首或上一首歌曲, 同时数码管更新显示曲目;放音过程中,按一次 KEY5 可实现放音暂停,再按 KEY5 继续 放音;放音过程中,按 KEY1 键可复位播放当前歌曲,并实现重复播放。按 KEY2 键复位 并停止播放音乐。放音过程中 LED14 伴随播放音调明暗变化。六调试总结及体会调试总结及体会:通过不断调试,终于实现了简易模拟 MP3 播放功能,调试过程

5、是自己不断学习进 步的过程,从中收获了很多。 通过对课本中关于“虹彩妹妹”音乐编程的分析,以及通过网络学习了相关的音 乐简谱常识,掌握了用蜂鸣器实现播放音乐的编程方法。实验中“倩女幽魂” 、 “沉默 是金” 、 “当年情”都是自己通过歌曲简谱编写的音乐程序。事物都是相互联系的。通 过对音乐程序的编写,加深了对用 PWM 播放音乐原理的认识。 通过反复的调试,对 AXD 调试环境更加的熟悉,更加熟练了对其基本功能的应 用。 同时,提高了 ARM 编程应用能力。能够对一些基本的错误快速识别,为今后的 编程奠定一定基础。附录附录:/跳线连接:PWMMR3,4,5,6 输出口连接 LED14; PWM

6、MR1 连接 BEEP; #include “config.h“ #include “music.h“ #define HC595_CS (1 0; dly-) for(i = 0; i 0x7FFFF; i+); /* * * 函数名称:MSPI_Init() * 函数功能:初始化 SPI 接口,设置为主机。 * 入口参数:无 * 出口参数:无 * */ void MSPI_Init(void) /PINSEL0 = (PINSEL0 / 设置管脚连接 SPI PINSEL0 = (PINSEL0 SPI_SPCCR = 0x52; / 设置 SPI 时钟分频SPI_SPCR = (0 3)

7、 |/ CPHA = 0, 数据在 SCK 的第一个时钟沿采样(1 4) |/ CPOL = 1, SCK 为低有效(1 5) |/ MSTR = 1, SPI 处于主模式(0 6) |/ LSBF = 0, SPI 数据传输 MSB (位 7)在先(0 7);/ SPIE = 0, SPI 中断被禁止 /* * * 函数名称:MSPI_SendData() * 函数功能:向 SPI 总线发送数据。 * 入口参数:data 待发送的数据 * 出口参数:返回值为读取的数据 * */ uint8 MSPI_SendData(uint8 data) IOCLR = HC595_CS; / 片选 74

8、HC595SPI_SPDR = data;while( 0 = (SPI_SPSR / 等待 SPIF 置位,即等待数据发送完毕IOSET = HC595_CS;return(SPI_SPDR); /* 此表为 LED0F 以及 L、P 的字模 */ uint8 const DISP_TAB19 = / 0 1 2 3 4 5 6 7 8 9 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8, 0x80,0x90, / A b C d E F 0x88, 0x83, 0xC6, 0xA1,0x86, 0x8E, / L P C0xC7, 0x8C,0xC6 ;/*

9、 此表为 LPC2131 字模 */ /L P C 2 1 3 1 uint8 const LPC21317 = 0xC7, 0x8C, 0xC6, 0xA4, 0xF9, 0xB0, 0xF9;uint8 rcv_data; int main (void)uint32 i;uint8 num1=0;PINSEL1 =0x00000000;PINSEL0 = (PINSEL0 IO0DIR =AA|HC595_CS;IO0SET =AA;PWMPR = 0x00; / 不分频,计数频率为 FpclkPWMMCR = 0x02;/ 设置 PWMMR0 匹配时复位 PWMTCPWMPCR = 0x

10、7E00;/ 允许 PWM123456 输出,单边 PWM123456PWMMR0 = Fpclk / 1000;PWMMR1 = PWMMR0 / 2;/ PWMMR2 = PWMMR0 / 2;PWMMR3 = PWMMR0 / 2;PWMMR4 = PWMMR0 / 2;PWMMR5 = PWMMR0 / 2;PWMMR6 = PWMMR0 / 2; PWMLER = 0x7F;/ PWM0 和 PWM123456 匹配锁存PWMTCR = 0x02; / 复位 PWMTCPWMTCR = 0x09; / 启动 PWM 输出MSPI_Init();rcv_data = MSPI_Send

11、Data(DISP_TAB0);/ 发送显示数据while(1) a: PINSEL0 =0x000005500 ;PINSEL1 =0x00000000;if(IO0PINif(IO0PINif(IO0SETelse IO0CLR=AA;if(IO0PINif(IO0PINIO0SET=AA;if(IO0PIN i 0x30000; i+);if(IO0PINif(IO0PINelse num1+;while(IO0PINif(IO0PINif(IO0PINelse num1-;while(IO0PINrcv_data = MSPI_SendData(DISP_TABnum1); / 发送显

12、示数据switch(num1) case 1: PINSEL0 =(0x020)|(0x022)|(0x0216)|(0x0218);PINSEL1 =0x00000400;for(i = 0; i sizeof(HCMM1)/4; i+)PWMMR0 = Fpclk / HCMM1i; PWMLER = 0x7F; Delay(HCMM_L1i);if(IO0PIN PINSEL1 =0x00000000;while(IO0PINDelay(5);while(IO0PINPINSEL0 =(0x020)|(0x022)|(0x0216)|(0x0218);PINSEL1 =0x0000040

13、0; if(IO0PINif(IO0PINPINSEL0 =0x00000000; PINSEL1 =0x00000000;break;case 2: PINSEL0 =(0x020)|(0x022)|(0x0216)|(0x0218);PINSEL1 =0x00000400;for(i = 0; i sizeof(HCMM2)/4; i+)PWMMR0 = Fpclk / HCMM2i; PWMLER = 0x7F; Delay(HCMM_L2i); if(IO0PIN PINSEL1 =0x00000000;while(IO0PINDelay(5);while(IO0PINPINSEL0 =(0x020)|(0x022)|(0x0216)|(0x0218);PINSEL1 =0x00000400; if(IO0PINif(IO0PINPINSEL0 =0x00000000;PINSEL1 =0x00000000;break; case 3: PINSEL0 =(0x020)|(0x022)|(0x0216)|(0x0218);PINSEL1 =0x00000400;for(i = 0; i sizeof(HCMM3)/4; i+)PWM

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 毕业论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号