嵌入式音乐播放器实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计报告
音频播放器
班级:20090614 学号:
姓名:
2012年10月
1. 题目
音频播放器设计
2. 系统简介
本系统为音频播放器,其支持WA V格式音频播放,支持触摸屏操作(主要有ENTER 键、播放键、上一首、下一首、停止键、OPEN等),小键盘输入(上键,下键,ENTER 键)和显示相应的歌词。
3. 系统设计
本系统的触摸屏操作的设计流程应为:界面设计,触摸屏按键设计,编码设计等。
3. 1界面设计
初始状态肯定是在启动界面上,先是待机界面设计、然后是操作界面设计、最后是播放歌曲时的界面状态设计。
待机界面设计:待机时,即未进行任何操作时,屏幕上只有一个ENTER按键(其在一个话筒背景上),一旦ENTER按键被触摸,即进入操作界面。
操作界面设计:操作界面内有播放键、上一首、下一首、停止键、OPEN键等。播放键分为第一首、第二首、第三首歌曲播放三个按键。当随意点击这三个按键中的任意一个时,即会播放相应的歌曲。上一首按键:当点击上一首按键时,当前播放歌曲的上一首歌首被播放。下一首按键:当点击下一首按键时,当前播放歌曲的下一首歌曲即被播放。当点击停止键时,当前歌曲即会被停止。
播放界面设计:在歌曲进行播放时,界面应包含所有的按键,并且要歌曲的曲目单,还有显示歌词。
3. 2触摸屏按键设计
本系统要完成触摸屏按键的功能,即要让系统接收到触摸屏的消息,如果触摸点在pFirst_Button_RECT里,创建播放界面及置这个framestate标志位为1。
定义矩形框结构、设置PID参数轴1P的文本框、将字符转换为Unicode数据、设置文本框内容。
定义矩形结构、创建列表框控件、焦点移到列表框控件、将文件名转换为Unicode、向列表框中添加表项、将文件名存入文件名数组、重画控件。
3. 3编码设计
本系统的流程是初始化硬件、初始化操作系统和创建用户任务。
因为只要硬件就得有驱动程序才能去使用,而工程下面的一些头文件.h和对应的.c 文件都是驱动程序。这一层即是驱动层(对于本系统最重要的是液晶驱动和IIS音频驱动)。
上面一层是API接口层,它给程序提供很多接口(即函数),它可以在main.c之间调用。
本系统的所有功能全部在用户任务里,设计的任务maintask只有一个。
在用户任务中设计一些控件的创建如文本框、列表框,还有showbmp来显示图片。这样便可以出现相应的按钮。
然后就是等待系统的消息(即pMsg=WaitMessage(0))在这里有两种。而本部分主要设计的是触摸屏消息。接下来是对消息进行更加具体的判定。
4. 系统实现
当初始界面接收到触摸屏消息时,如果触摸点在pFirst_Button_RECT里,创建播放界面及置这个framestate(自己定义的状态标志位)标志位为1。
if(IsInRect2(pFirst_Button_RECT, pTouch_Position))
{
ClearScreen();
Frame_State=1;
ClearScreen();
ShowBmp(pdc,bmpname2,10,90);
DrawButton(pPlay1_Button);
DrawButton(pPlay2_Button);
DrawButton(pPlay3_Button);
DrawButton(pStop_Button);
DrawButton(pNext_Button);
DrawButton(pPrior_Button);
DrawButton(pExit_Button);
DrawButton(pOpen_Button);
CreateText();
}
}
以上代码即是显示系统操作界面的代码,只要触摸了图4.1中的ENTER键,便可以进入操作界面。显示播放第一首、第二首、第三首歌曲键,停止键,OPEN键,下一
曲键,上一曲键。
图4.1初始界面
if(Frame_State==1)// 当正处在播放界面时
{
if(IsInRect2(pPlay1_Button_RECT, pTouch_Position))
{
ShowBmp(pdc,bmpname3,105,0);
Play_State=1;
Frame_State=1;
strChar2Unicode(str,start);//将字符转换为Unicode数据
SetTextCtrlText(pTextCtrl, str,TRUE);//设置文本框内容
song_index = 0;
rIISCON=0; //首先禁止IIS控制器
rIISMOD=IISMOD_TX| //初始化为发送模式
IISMOD_16BIT|
IISMOD_32FS|
IISMOD_MCLK_384FS;
rIISFCON=IISFCON_TXDMA|IISFCON_TXFIFO;
rIISPSR=0x11;
rIISCON=IISCON_PRESCALE|IISCON_ENABLE;
Init_UDA1341();
pfile=OpenOSFile(filename, FILEMODE_READ);
if(!pfile)
return ;
ReadOSFile(pfile, (U8*) buffer, 0x16*2);//读取头文件信息
nbyte=ReadOSFile(pfile, (U8*) buffer, sizeof(buffer));//读取波形数据
for(;;)
{//死循环
/****** BDMA0 Initialize ******/
//for Source
rBDISRC0=(1<<30)+(1<<28)+(int)buffer; //Half word,inc,Buf
//for des
rBDIDES0=(1<<30)+(3<<28)+((int)0x1d18010); //M2IO,fix,IISFIF
//Size
//iis,reserve,done_int,not auto-reload/start,DMA enable,COUNT
rBDICNT0=(1<<30)+(1<<26)+(3<<22)+(0<<21)+(0<<20)+(sizeof(buffer)&(~0x3));
rBDICNT0 |= (1<<20);//enable
//Enable DMA
rBDCON0 = 0x0<<2;
//Tx DMA
rIISCON|=IISCON_TXDMA;
break ;
}
}
以上代码即为播放第一首按键被触摸时,系统做的反应。首先要保证界面处在播放界面时,触摸第一首按键,显示一张图片,置播放歌曲状态标志位为1(即Play_State=1),置界面状态标志位(即Frame_State=1)。然后要将start字符转换为Unicode数据,并将其显示在文本框中,即标示着当前歌曲开始被播放。最后是将歌曲播放(读取头文件信息、读取波形数据、播放歌曲)。