找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3684|回复: 0
打印 上一主题 下一主题
收起左侧

我的WAV播放器

[复制链接]
跳转到指定楼层
楼主
ID:77705 发表于 2015-4-22 11:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我的WAV播放器
自己可以说是一个资深的、水平十分有限的真正音乐爱好者,尤其对古典音乐以及国内经典歌曲和乐曲十分喜爱,对于目前流行歌坛则比较陌生。凭借自己的自控专业,从80年代的单板机(现在好多人没见过和听说过)、8位单片机、PLC、到现在的DCS都开发过,因此动手制作WAV播放器的想法由来已久。虽说原先使用过单片机编程,对C语言也比较熟悉,但比较论坛中的各种方案,认为一般的单片机难以处理和传送WAV的庞大数据量。因此,选用了STM32F103RBT6为主控芯片、VS1053B作为解码芯片、LCD1602为显示器、SD卡(8G)。
为加快项目的进度,先采用模块拼接,在春节后开始动工,终于在“五一”前夕初步完成各项软件的调试。
下图为各个模块:
下图为各模块之间的接线表
各个模块组装后放入机箱中,接线比较乱。因第一阶段的工作主要是软件调试,因此未安装DA解码板(采用与VS1053BI2S接口匹配的PCM1793解码器和运放组成)。
面板按上、下、左、右、中布置了5个按键,这5个按键的功能在不同的界面上是不同的。
下图为VS1053B的测试画面。
各项功能测试完成后,表明模块功能完好。RAM测试结果为“0x83ff”,确定了解码芯片确实是VS1053B。为减少程序的字节数,测试完成后,将今后编程不再需要的测试函数和定义全部删除(当然要做好备份)。
进行完整的程序设计……,最终完成。
下图为开机画面。
按下中间按键后,进入“菜单”界面,有3个选项:
1next:进入下一级画面;
2、音效调整:默认关闭;
3、高低音调整:默认高低音增益均为最大值。
采用按动左按键,闪烁光标在3个选项上循环移动。按下中间按键后,选定光标所在的选项。
采用默认值,可直接进入下一级画面。
下图为“音效调整”画面。共有“关闭、最小、中等和最大”4个选项,通过左右按键,各个选项分别显示,按下中间按键后进行确认,回到“菜单”界面。
下图为“音调调整”画面。通过按动左右键,闪烁光标在“低音”和“高音”之间移动,按上下键可以改变光标坐在选项的数值,按下中间按键后进行确认,回到“菜单”界面。
在“菜单”界面中,按下中间按键后进入到“选曲”界面。显示SD卡的根目录中存放的可播放的WAN文件总数。在设计上,最大数目为99首。通过上下按键可快速(±10)循环选曲,左右按键可逐个(±1)循环选曲,按下中间按键后进行确认,进入到“播放”界面
下图为“播放”界面。
1、界面第一行分别显示的是:正在播放的曲号、播放的剩余时间以及当前的音量值。在播放时按动上下键可改变音量(音量值为0~30),按动左右按键可进行前后换曲。
2、界面第二行分别显示“传输速率”和“采样频率”。因1602的显示量有限,程序设计时这些数据均使用整数定义,显示中未包含小数。如下图中的“采样频率”实际值应为“44.1kHz”。
播放时,从VS1053B模块的耳机插孔传出的声音十分流畅,没有卡顿现象。主要在播放程序上开辟了4096字节的缓冲区。首先从SD卡中一次读出4096个字节的数据,存放在缓冲区中;再由缓冲区向VS1053B传送数据,按照要求每次传送32个字节。详细指令网上都有。注意:SPI的读写操作一定要采用寄存器指令方式进行,生成的代码量小,可加快程序的实时性;如果采用库函数指令方式操作,由于代码量较大,非常容易出现卡顿现象。
在程序设计中,为方便编写,对大部分实时性要求不高的代码,应采用库函数指令。
在播放当中,按下中间按键时,退出播放。在画面上闪烁的“>”的字符,提示关闭电源。
主要功能就介绍到这里。项目中使用程序大部分借鉴网上,自己主要在菜单和画面显示上进行了程序设计。
说实在的,第一次使用STM32,程序调试中出现了不少问题,逐一解决,终于完成全部程序的编写和调试。
下一步,自己设计电路,将各个模块(包含DA和功放)设计在一块线路板上,电源部分为±15V,最终实现用高保真耳机欣赏无损WAV音乐。

评分

参与人数 1黑币 +35 收起 理由
admin + 35 共享资料的积分奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表