2008年12月12日 星期五

8051卡拉OK

http://www.dianziw.com/t-691.htm

引言

在当今这样一个充满竞争与挑战的社会,人们的生活显得日益紧张而繁忙,同时也对休闲娱乐的要求越来越高。卡拉OK作为一种休闲娱乐项目一直备受人们青睐。但人们在唱歌时往往被局限于狭小的卡拉OK厅内,行动、思维、灵感上都大大受到影响,无法最佳发挥。针对这种现状,我们设计出一种基于U盘存储的体积小巧的移动卡拉OK系统。用户可以在精心设计的环境中随心所欲地引吭高歌,充分展示自己的激情与灵感,使人与音乐达到完美结合。


系统硬件实现

本系统以AT89C51SND1C为核心处理器,采用美国国家半导体公司的LM4832LMV722LM4838作为立体声音频功率放大器 CS4330为音频DACK9F5608U0A存储器并通过USB接口与主机通信,从而实现歌曲播放与麦克风输入;同时辅以键盘输入控制和LCD实时显示。整体硬件结构如图1所示。

歌曲播放部分设计

歌曲播放部分主要实现歌曲播放与麦克风输入,即实现音乐与用户歌声的融合,是系统的核心部分。本系统采用AT89C51SND1C作为中央处理器。Flash中存储的MP3文件经解码器解码后输出I2S格式的数字信号,通过数模转换芯片转换后输出左右两路微弱的音频模拟信号,分别作为LM4832左右声道的输入信号。本设计利用LM4832LMV722LM4838的巧妙结合(如图1所示),对音乐信号和用户歌声进行混合和功率放大,达到绝佳的音响效果。

LM4832是具有I2C接口的数控音质音量的立体声音频功率放大器。它的左右声道、高低音均独立可调,并具有3D音响效果和软件可控低功耗休眠模式。此外,它还提供两路独立可选的麦克风输入前置放大与音量控制,这就使得整个系统实现卡拉OK的功能成为可能。但LM4832的音频输出与麦克风输出是独立的,这就需要对歌曲和用户歌声进行前置混合。在此采用LMV722构成的加法运算电路,它具有低噪声高增益带宽的特点,其增益带宽高达10MHz,完全满足本系统的要求。由于LMV722是单电源供电的,要结合前级输入信号幅值来设计它的直流偏置电压值,同时其输出的两路混合信号要经过滤波电路滤除其直流偏置后方可作为后级功放输入。为了达到卡拉OK震撼人心的音响效果,需要对音频信号进行功率放大,因此选用功率高达2WLM4838音频功率放大器。它具有DC音量控制、可选内外部增益、低音加重等特点,并带有过热保护电路和低功耗休眠模式(休眠电流为0.7 A)。这里通过螺旋电位器来调节功率大小。LM4838输出提供扬声器和耳机两种接口,而且两者之间可以方便切换,使得用户可以随意改变自己的方式。

值得注意的是:在整个音频功放实现过程中,要合理分配每级电路的增益,以免音频信号失真。 LCD实时显示部分设计


LCD
用于实时歌词和状态显示。由于Windows 系统自带的字库有267K之多,因此选用容量为512KFlash W29C040来存放字库。同时考虑到主处理器RAM大小及音频解码的连续性,我们选用一片单片机(即从处理器)来专门处理LCD的显示,它与主处理器之间通过串口(UART)来通信。LCD上的每个汉字是以16 16点阵方式来显示的,需用32字节来表示;每个ASCII字符是以8 16点阵方式显示,需用16字节来表示。而1首歌曲歌词文件(*.lrc)一般有12K字节左右大小,故采用外扩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。另外硬件初始化还包括键盘、LCDUART初始化等工作。

获取U盘中的mp3歌曲列表通过查找U盘根目录区中每个目录项来实现,同时将歌曲数目通过串口发送给LCD显示从处理器。

歌曲播放和LCD显示是程序的核心部分。主处理器和LCD从处理器之间通过串口进行通信,以达到歌曲播放与歌词显示的同步以及键盘操作状态的及时刷新。其程序流程图如图3所示。

MP3解码器一旦开始工作,就会一直向 CPU请求数据,直至歌曲结束。只有用键盘操作才能中断CPU。键盘操作总共4个按键(Menu/Previous/Next/Play)。Menu负责功能切换,共有5项功能:歌曲音量控制、高音调节、低音调节、麦克风音量控制和歌曲选择。在不同功能下PreviousNext分别代表不同的含义。在音量控制上为加/减音量,在歌曲选择上为上一首/下一首歌曲。LCD在显示歌词的同时实时显示键盘操作状态,以便用户操作。

USB海量存储设计

主处理器让USB海量存储设备在批量传输方式下工作,这样共需要3个端点。

0端点:控制端点。用于控制传输,PC机通过与端点0相对应的管道来读取设备描述符,完成对设备地址的设置,并完成配置。此端点为双向数据传输端点。

两个非0端点:批量传输端点。这种端点为单向数据传输端点,分别为批量输入端点和批量输出端点。

主处理器通过一个端点中断寄存器(UEPINT)和PC机通信。如果某个端点完成了相应的操作,就会引发中断。U盘主程序流程图如图4所示。

USB设备插入到PC机时,PC机一旦检测到设备后,就会通过控制管道向默认地址发送USB标准请求,进入设备配置阶段,即PC机向设备索取各种描述符的过程,如Get DescriptorSet AddressSet Configuration等。每当设备收到主机发送的数据后,便会触发端点中断寄存器中端点0所代表的位。此时,应读取端点0的数据缓冲区,对照USB标准设备请求的数据格式,对请求类型进行识别,然后转向相应的标准请求处理函数。配置完成后,主机便使用在描述符中所选定的命令块向批量传输端点发送控制消息和数据。

在批量传输方式下,有3种类型的数据在USB和设备之间传送:CBWCSW和普通数据。因此,批量传输阶段程序设计的任务就是要识别来自批量输出端点的CBW与数据,进行相应的处理,然后通过批量输入端点向主机回传相应的CSW或数据。PC机依次向设备发出InquiryRead CapacityUFI Mode SenseRead Format Capacity等请求,这几个命令用于告知PC这个设备的存储器情况,PC基于此创建一个存储器设备,即在浏览器中生成一个移动盘符,并可以复制、删除或创建文件等。系统自动将这些命令都转换成ReadWrite两种命令,通过USBREADWRITE命令块描述符从Flash中相应扇区读取数据,或是将特定长度的数据写入Flash相应簇中。文件在U盘中按Fat16协议存储。由于PC对存储器的读写是按扇区(512字节/扇区)为最小单位进行的,但Bulk端点的最大传输能力为64字节。因此,主机读写操作的数据传输过程要分多次才能完成。而写操作比读操作更加繁琐一些,这是因为Flash在对某扇区进行写之前,必须要将其擦除,而擦之前存在已有数据的保存问题。为了加快主机与U盘之间数据传输率,读写操作的代码改用汇编来编写。测试表明,U盘的读写速度可达到450Kbps


结束语

本系统采用LM4832LMV722LM4838的巧妙结合作为立体声音频功率放大器,并利用U盘存储技术来存储歌曲,使得整个系统不仅拥有优质的视听效果,而且体积仅有180mm 70mm 100mm这么大。实验表明,本移动卡拉OK系统不仅具有数控音质音量、立体声音频功率放大和超强3D音响效果的特点,而且功耗低、用户界面友好、便于携带。同时它也可作为MP3播放器或U盘使用,功能齐全。

沒有留言: