引言
在当今这样一个充满竞争与挑战的社会,人们的生活显得日益紧张而繁忙,同时也对休闲娱乐的要求越来越高。卡拉OK作为一种休闲娱乐项目一直备受人们青睐。但人们在唱歌时往往被局限于狭小的卡拉OK厅内,行动、思维、灵感上都大大受到影响,无法最佳发挥。针对这种现状,我们设计出一种基于U盘存储的体积小巧的移动卡拉OK系统。用户可以在精心设计的环境中随心所欲地引吭高歌,充分展示自己的激情与灵感,使人与音乐达到完美结合。
系统硬件实现
本系统以AT
|
歌曲播放部分设计
歌曲播放部分主要实现歌曲播放与麦克风输入,即实现音乐与用户歌声的融合,是系统的核心部分。本系统采用AT
LM4832是具有I
值得注意的是:在整个音频功放实现过程中,要合理分配每级电路的增益,以免音频信号失真。 LCD实时显示部分设计
LCD用于实时歌词和状态显示。由于Windows 系统自带的字库有267K之多,因此选用容量为512K的Flash W
U盘设计部分
歌曲的存放与更新采用USB接口。存储器大小可以自选,作为代表性实验,本系统采用
|
系统软件设计
系统软件主要包括歌曲播放和USB通信程序。系统上电后,根据P3_4口判断当前所处的状态而分别执行相应的程序代码。 歌曲播放软件设计
歌曲播放器程序要与键盘和LCD配合起来设计。程序流程大概可分为:硬件初始化→获取U盘中mp3歌曲列表→歌曲播放和LCD显示。
硬件初始化主要负责mp3解码器的时钟设置、Flash复位和LM4832的初始化,这是系统正常工作的关键。LM4832上电时,其声道音量和麦克风音量均为无声状态,表1为左声道的I
获取U盘中的mp3歌曲列表通过查找U盘根目录区中每个目录项来实现,同时将歌曲数目通过串口发送给LCD显示从处理器。
|
歌曲播放和LCD显示是程序的核心部分。主处理器和LCD从处理器之间通过串口进行通信,以达到歌曲播放与歌词显示的同步以及键盘操作状态的及时刷新。其程序流程图如图3所示。
|
MP3解码器一旦开始工作,就会一直向 CPU请求数据,直至歌曲结束。只有用键盘操作才能中断CPU。键盘操作总共4个按键(Menu/Previous/Next/Play)。Menu负责功能切换,共有5项功能:歌曲音量控制、高音调节、低音调节、麦克风音量控制和歌曲选择。在不同功能下Previous和Next分别代表不同的含义。在音量控制上为加/减音量,在歌曲选择上为上一首/下一首歌曲。LCD在显示歌词的同时实时显示键盘操作状态,以便用户操作。
USB海量存储设计
主处理器让USB海量存储设备在批量传输方式下工作,这样共需要3个端点。
0端点:控制端点。用于控制传输,PC机通过与端点0相对应的管道来读取设备描述符,完成对设备地址的设置,并完成配置。此端点为双向数据传输端点。
两个非0端点:批量传输端点。这种端点为单向数据传输端点,分别为批量输入端点和批量输出端点。
主处理器通过一个端点中断寄存器(UEPINT)和PC机通信。如果某个端点完成了相应的操作,就会引发中断。U盘主程序流程图如图4所示。
|
当USB设备插入到PC机时,PC机一旦检测到设备后,就会通过控制管道向默认地址发送USB标准请求,进入设备配置阶段,即PC机向设备索取各种描述符的过程,如Get Descriptor、Set Address、Set Configuration等。每当设备收到主机发送的数据后,便会触发端点中断寄存器中端点0所代表的位。此时,应读取端点0的数据缓冲区,对照USB标准设备请求的数据格式,对请求类型进行识别,然后转向相应的标准请求处理函数。配置完成后,主机便使用在描述符中所选定的命令块向批量传输端点发送控制消息和数据。
在批量传输方式下,有3种类型的数据在USB和设备之间传送:CBW、CSW和普通数据。因此,批量传输阶段程序设计的任务就是要识别来自批量输出端点的CBW与数据,进行相应的处理,然后通过批量输入端点向主机回传相应的CSW或数据。PC机依次向设备发出Inquiry、Read Capacity、UFI Mode Sense、Read Format Capacity等请求,这几个命令用于告知PC这个设备的存储器情况,PC基于此创建一个存储器设备,即在浏览器中生成一个移动盘符,并可以复制、删除或创建文件等。系统自动将这些命令都转换成Read或Write两种命令,通过USB的READ或WRITE命令块描述符从Flash中相应扇区读取数据,或是将特定长度的数据写入Flash相应簇中。文件在U盘中按Fat16协议存储。由于PC对存储器的读写是按扇区(512字节/扇区)为最小单位进行的,但Bulk端点的最大传输能力为64字节。因此,主机读写操作的数据传输过程要分多次才能完成。而写操作比读操作更加繁琐一些,这是因为Flash在对某扇区进行写之前,必须要将其擦除,而擦之前存在已有数据的保存问题。为了加快主机与U盘之间数据传输率,读写操作的代码改用汇编来编写。测试表明,U盘的读写速度可达到450Kbps。
结束语
沒有留言:
張貼留言