引言
在当今这样一个充满竞争与挑战的社会,人们的生活显得日益紧张而繁忙,同时也对休闲娱乐的要求越来越高。卡拉OK作为一种休闲娱乐项目一直备受人们青睐。但人们在唱歌时往往被局限于狭小的卡拉OK厅内,行动、思维、灵感上都大大受到影响,无法最佳发挥。针对这种现状,我们设计出一种基于U盘存储的体积小巧的移动卡拉OK系统。用户可以在精心设计的环境中随心所欲地引吭高歌,充分展示自己的激情与灵感,使人与音乐达到完美结合。
系统硬件实现
本系统以AT89C51SND1C为核心处理器,采用美国国家半导体公司的LM4832、LMV722和LM4838作为立体声音频功率放大器, 以CS4330为音频DAC,K9F5608U0A为存储器并通过USB接口与主机通信,从而实现歌曲播放与麦克风输入;同时辅以键盘输入控制和LCD实时显示。整体硬件结构如图1所示。
歌曲播放部分设计
歌曲播放部分主要实现歌曲播放与麦克风输入,即实现音乐与用户歌声的融合,是系统的核心部分。本系统采用AT89C51SND1C作为中央处理器。Flash中存储的MP3文件经解码器解码后输出I2S格式的数字信号,通过数模转换芯片转换后输出左右两路微弱的音频模拟信号,分别作为LM4832左右声道的输入信号。本设计利用LM4832、LMV722和LM4838的巧妙结合(如图1所示),对音乐信号和用户歌声进行混合和功率放大,达到绝佳的音响效果。
LM4832是具有I2C接口的数控音质音量的立体声音频功率放大器。它的左右声道、高低音均独立可调,并具有3D音响效果和软件可控低功耗休眠模式。此外,它还提供两路独立可选的麦克风输入前置放大与音量控制,这就使得整个系统实现卡拉OK的功能成为可能。但LM4832的音频输出与麦克风输出是独立的,这就需要对歌曲和用户歌声进行前置混合。在此采用LMV722构成的加法运算电路,它具有低噪声高增益带宽的特点,其增益带宽高达10MHz,完全满足本系统的要求。由于LMV722是单电源供电的,要结合前级输入信号幅值来设计它的直流偏置电压值,同时其输出的两路混合信号要经过滤波电路滤除其直流偏置后方可作为后级功放输入。为了达到卡拉OK震撼人心的音响效果,需要对音频信号进行功率放大,因此选用功率高达2W的LM4838音频功率放大器。它具有DC音量控制、可选内外部增益、低音加重等特点,并带有过热保护电路和低功耗休眠模式(休眠电流为0.7 A)。这里通过螺旋电位器来调节功率大小。LM4838输出提供扬声器和耳机两种接口,而且两者之间可以方便切换,使得用户可以随意改变自己的方式。
值得注意的是:在整个音频功放实现过程中,要合理分配每级电路的增益,以免音频信号失真。 LCD实时显示部分设计
LCD用于实时歌词和状态显示。由于Windows 系统自带的字库有267K之多,因此选用容量为512K的Flash W29C040来存放字库。同时考虑到主处理器RAM大小及音频解码的连续性,我们选用一片单片机(即从处理器)来专门处理LCD的显示,它与主处理器之间通过串口(UART)来通信。LCD上的每个汉字是以16 16点阵方式来显示的,需用32字节来表示;每个ASCII字符是以8 16点阵方式显示,需用16字节来表示。而1首歌曲歌词文件(*.lrc)一般有1~2K字节左右大小,故采用外扩RAM(62256)来存储歌词文件。整个LCD显示部分采用总线结构,编程简单方便,处理数据游刃有余。
U盘设计部分
歌曲的存放与更新采用USB接口。存储器大小可以自选,作为代表性实验,本系统采用32M Flash K9F5608U0A作存储器。U盘设计的硬件电路十分简单,只需将Flash和主处理器的一些相应引脚相连即可。U盘设计的重点是USB协议的实现,在后文将会详细介绍。为了保证系统能正确识别出当前状态是处于U盘状态,还是处于歌曲播放状态,需要设置状态判定电路,如图2所示。
系统软件设计
系统软件主要包括歌曲播放和USB通信程序。系统上电后,根据P3_4口判断当前所处的状态而分别执行相应的程序代码。 歌曲播放软件设计
歌曲播放器程序要与键盘和LCD配合起来设计。程序流程大概可分为:硬件初始化→获取U盘中mp3歌曲列表→歌曲播放和LCD显示。
硬件初始化主要负责mp3解码器的时钟设置、Flash复位和LM4832的初始化,这是系统正常工作的关键。LM4832上电时,其声道音量和麦克风音量均为无声状态,表1为左声道的I2C数据流格式真值表,其他类似,具体可参考LM4832芯片资料。因此需设置各状态初始值,将各初始值均设在0dB。另外硬件初始化还包括键盘、LCD、UART初始化等工作。
获取U盘中的mp3歌曲列表通过查找U盘根目录区中每个目录项来实现,同时将歌曲数目通过串口发送给LCD显示从处理器。
歌曲播放和LCD显示是程序的核心部分。主处理器和LCD从处理器之间通过串口进行通信,以达到歌曲播放与歌词显示的同步以及键盘操作状态的及时刷新。其程序流程图如图3所示。