当前位置:文档之家› 带有背景音乐的动态图片

带有背景音乐的动态图片

带有背景音乐的动态图片
带有背景音乐的动态图片

目录

第1章设计要求 (1)

第2章方案设计及基本原理 (2)

2.1 方案设计 (2)

2.2 SPLC501液晶显示模组基本原理 (2)

2.3 SACM_A2000基本原理 (7)

2.4 硬件连接 (9)

第3章程序设计 (10)

3.1 主程序流程图 (10)

3.2 程序代码 (11)

3.3 程序调试结果及分析 (11)

第4章结论与体会 (12)

4.1 实验结论 (12)

4.2 实验体会 (12)

参考文献 (14)

附录 (15)

第1章设计要求

用一台装有Windows系统和μ’nSP? IDE仿真环境的PC机和一个μ’nSP? 十六位单片机实验箱来作设计,其中用到的实验箱硬件模块为:SPCE061A核心及周边电路模块(包含32个I/O口),两路音频输出电路,LCD显示模组模块。

(1)编程要求:主程序利用C语言编写。

(2)实现功能:图片显示配合背景音乐播放。由于实验中要播放音乐,对音质的要求比较高,所以本实验要求利用SACM_A2000格式播放音乐。

(3)实验现象:开机后显示图象ON_01,接着按ON_01→ON_02→ON_03→ON_04→ON_05→ON_06→ON_07→ON_08→ON_010的顺序循环显示动态

图片,同时播放背景音乐。

第2章方案设计及基本原理

2.1方案设计

新建一个工程ex8_LCD_DynamicGraphicMusic,在新工程里建立一个C语言文件main.c。在IDE的安装路径下找到实验要求的9幅图片。提取这9幅图片的字模数据,一次提取它们的全部图片,不需要一幅幅提取;字模文件保存在新建的ex8_LCD_DynamicGraphicMusic工程文件夹当中,命名为PicData。用一台装有Windows系统和μ’nSP? IDE仿真环境的PC机和一个μ’nSP? 十六位单片机实验箱来作设计,其中用到的实验箱硬件模块为:SPCE061A核心及周边电路模块(包含32个I/O口),两路音频输出电路,LCD显示模组模块。拷贝语音播放库sacmv26e.lib和头文件a2000.h、a2000.inc到新建的ex8_LCD _DynamicGraphicMusic工程文件夹。拷贝支持sacmv26e.lib的汇编语言文件hardware.asm和IDE的安装路径下找到实验要求的头文件hardware.h、hardware.inc到新建的ex8_LCD_DynamicGraphicMusic工程文件夹。拷贝SPLC501IDE的安装路径下找到实验要求的液晶显示DataOSforLCD.asm、IDE的安装路径下找到实验要求的SPLC501Driver_IO.asm、SPLC501Driver_IO.inc、SPLC501User.c和SPLC501User.h五个驱动程序文件到新建的ex8_LCD_ DynamicGraphic Music工程文件夹。在IDE集成开发环中链接sacmv26e.lib库到新建的工程中。添加IDE的安装路径下找到实验要求的PicData.c、hardware.asm、DataOSforLCD.asm、SPLC501Driver_IO.asm和SPLC501User.c 到新建的工程的“Source Files”,添加PicData.h、a2000.h、a2000.inc、hardware.h、hardware.inc、SPLC501Driver_IO.inc、SPLC501User.h六个头文件到“Head Files”。用一台装有Windows系统和μ’nSP? IDE仿真环境的PC 机和一个μ’nSP? 十六位单片机实验箱来作设计,其中用到的实验箱硬件模块为:SPCE061A核心及周边电路模块(包含32个I/O口),两路音频输出电路,LCD显示模组模块。按照程序流程图编写程序。Rebuild All。按照硬件连接图连接硬件。注意把JP3和JP7所有引脚全部断开,即把JP3和JP7的所有跳线全部拔掉,以免对I/O口的数据造成影响。下载程序,运行。

2.2SPLC501液晶显示模组基本原理

1. DM Tool字模提取工具

利用一台装有Windows系统和单片机仿真环境的PC机和一个凌阳十六位单片机实验箱来作设计,其中用到的实验箱硬件模块为:SPCE061A核心及周边电路模块,两路音频输出电路,LCD显示模组模块。DM Tool字模提取工具提取BMP

位图字模的步骤如下:

图 2-1 导入图片第一步

第一步,导入图片:打开DM Tool工具,新建一个DM Tool的工程,在“Picture”的下拉菜单点击“Import Pictures…”,如图 2-1。

图 2-2 导入图片第二步

点击“Import Pictures…”后出现下图的对话框,在IDE的安装路径\SPCE061A\example\model_Exa\ex3_LCD501_Graphic\picture\sunplus找到我们要提取的图片sp1,如图2-2。

注意:利用“Import Pictures…”菜单导入图象的选项只能导入BMP格式的位图; DM Tool工具可以最终生成字模数据的尺寸为240×240点,所以用户在导图象时要注意图象的尺寸;但由于SPLC501液晶显示器的屏幕大小为128×64点,则在SPLC501液晶显示模块上显示的图片尺寸就不能超过128×64

点,如超过则无法显示。用户可以利用图像处理的软件对原始图像进行修改后再导入DM Tool中,提取合适的图像字模数据。

图 2-3 导入图片第三步

选择sp1,点击“打开”,出现图2-3的对话框。按照图中选择“source image”和“Invariable”,点击“OK”就导入图片了。如图2-4,导入的图片就出现在Regionbar转换列表和操作区中。

图 2-4 导入图片后DM Tool界面

图 2-5Edit and Export Cchar File界面

第二步,提取字模并保存:点击图标,打开图 2-5的对话框。

图 2-6选择“Down to Up,Left to Right”

点击图标,打开图 2-6的对话框。“Select”选择“Down to Up,Left to Right”,点击“char.c file:”右边的浏览图标,打开图 2-7的对话框。

图 2-7选择保存路径

图 2-8生成字模数据文件

这里选择保存到“我的文档”文件夹中,选择保存的文件名为sunplus,点击保存,回到“Export Cchar File”窗口,点击“OK”。这时字模数据的生成操作已完成,生成了sunplus.c和sunplus.h两个字模数据文件,如图 2-8。

导出文件后,用户可以关闭字模数据生成窗口,返回到DM Tool软件的主窗口,以便进行其它的操作,DM Tool的使用方法可以参考DM Tool的用户手册。

和导出的汉字字模数据相同,BMP位图字模数据也以数组的形式保存,可以直接包含到工程中进行引用。

2. SPLC501液晶显示模组显示图片

图2-9 SPLC501液晶显示模组显示BMP位图的过程

利用SPLC501液晶显示模组显示BMP位图和显示汉字的过程基本相同,见图2-9。

图2-10 利用SPLC501液晶显示模组显示BMP位图需要的操作过程

利用SPLC501液晶显示模组显示BMP位图的过程为:新建一个工程,利用字模提取工具提取字模,把字模数据文件保存在工程文件夹,添加字模数据文件到工程,拷贝并添加驱动程序文件,编写程序,运行显示。利用一台装有Windows 系统和单片机仿真环境的PC机和一个凌阳十六位单片机实验箱来作设计,其中用到的实验箱硬件模块为:SPCE061A核心及周边电路模块,两路音频输出电路,LCD显示模组模块。如图2-10所示。

图2-11硬件连接框图

硬件连接图如图 2-11,分别用实验箱跳线连接IOB4与AO,IOB5与RWP,IOB6与EP,IOB9与/CS,IOA8-IOA15与D0-D7。即用跳线把实验箱JP6(*)的所有引针全部短接。利用一台装有Windows系统和单片机仿真环境的PC机和一个凌阳十六位单片机实验箱来作设计,其中用到的实验箱硬件模块为:SPCE061A 核心及周边电路模块,两路音频输出电路,LCD显示模组模块。另外,VR、C86和PS跳线都与V3短接,把SPLC501液晶显示模组的时序选择为6800时序。2.3SACM_A2000基本原理

SACM_A2000压缩算法压缩比较小(8:1),利用SPLC501液晶显示模组显示BMP位图的过程为:新建一个工程,利用字模提取工具提取字模,把字模数据文件保存在工程文件夹,添加字模数据文件到工程,拷贝并添加驱动程序文件,利用一台装有Windows系统和单片机仿真环境的PC机和一个凌阳十六位单片机实验箱来作设计,其中用到的实验箱硬件模块为:SPCE061A核心及周边电路模块,两路音频输出电路,LCD显示模组模块。编写程序,运行显示。所以具有高质量、

高码率的特点,适用于高保真音乐和语音。

图 2-12 自动播放

图2-13 IRQ4_1KHz中断

凌阳SACM_A2000压缩算法有两种语音播放方式:自动方式和手动方式。凌阳SACM_A2000压缩算法的语音播放要经过一个语音播放初始化,即初始化为自动方式或者手动方式,取数据,填充语音队列(或者是解压缩队列),解压缩,

输出播放的过程。自动播放时,取数据,填充语音队列及解压缩只要调用SACM_A2000_ServiceLoop()一个函数就可以实现。参见图2-12。

由于CPU处理的速度非常快,于是在视觉上,就会感觉到一个动态的图片并且配有音乐背景。IRQ4_1KHz中断服务程序流程图如图2-13。在自动播放中,语音播放的主循环当中调用SACM_A2000_ ServiceLoop()函数,完成获取语音资源并填充语音队列、进行语音解码的操作;主循环中要先显示一帧或者几帧图象,而显示程序相对来说耗时较长;为了保证语音资源的及时获取,同时得到及时的解码,在设计当中利用IRQ4的1KHz中断用SACM_ A2000_ServiceLoop()函数,主循环当中只进行刷新显示即可。

2.4硬件连接

图 2-14 硬件连接图

如图2-14硬件连接图,IOA8-IOA15连接SPLC501液晶显示模块的D0-D7,IOB4连接AO,IOB5连接RWP,IOB6连接EP,RE连接/RES,IOB9连接/CS,VR、C86和PS跳线都与V3短接,把SPLC501液晶显示模组的时序选择为6800时序;即把JP6中所有左右两排的引针全部用跳线短接,把J8和J13靠左边的两个引针用跳线短接起来。

第3章程序设计

3.1主程序流程图

图3-1主程序流程图

主程序流程图如图3-1,初始化操作包括初始化LCD和初始化语音播放,语音播放初始化为自动播放方式;开IRQ4_1KHz中断,完成获取语音资源并填充语音队列、进行语音解码的操作;主循环中要先显示一帧或者几帧图象,而显示程序相对来说耗时较长;为了保证语音资源的及时获取,同时得到及时的解码,在1KHz中断当中完成语音的服务程序(SACM_ A2000_ServiceLoop())调用,以及进行计数累加(定义有一个全局的变量,用于中断计时),响应300次IRQ4_1KHz 中断的时间刚好是LCD动态图片的显示刷新时间0.3s;显示第一帧图象,也就是ON_01图象。调用SACM_A2000_Play函数播放语音;进入显示动态图片加背景音乐循环,按照实验要求顺序显示图片,刷新时间为0.3s,判断是否播放结束,如果播放结束,则停止播放后,调用SACM_A2000_Play函数循环播放,如果没有播放结束,清看门狗。

3.2程序代码

SPLC501液晶显示模组英文字符显示相关的API函数如下:

void LCD501_Init(unsigned int InitialData) //初始化液晶显示

void LCD501_ClrScreen(unsigned int Mode) //点亮屏幕或清屏

void LCD501_SetPaintMode(unsigned ModeCode) //设置图形显示模式

unsigned int LCD501_GetPaintMode(void) //获取图形显示模式

void LCD501_Bitmap(unsigned int x,unsigned int y,unsigned int *word)//显示汉字或者位图的字模数据

SACM_A2000自动播放方式相关的API函数如下:

int SACM_A2000_Initial(int Init_Index) //初始化

void SACM_ A2000_ServiceLoop(void) //获取语音资料,填入译码队列

void SACM_ A2000_Play(int Speech_Index, int Channel, int Ramp_Set) //播放

完整程序代码见附录。

3.3程序调试结果及分析

运行程序后,主程序利用C语言编写。实现功能:图片显示配合背景音乐播放。开机后显示图象ON_01,接着按ON_01→ON_02→ON_03→ON_04→ON_05→ON_06→ON_07→ON_08→ON_010的顺序循环显示动态图片,同时播放背景音乐。

通过本次试验是我对单片机又有了深一层次的理解和认识,以前许多不懂得地方,不理解的地方现在基本上已经全部理解。现在我对单片机产生了浓厚的兴趣。特别是看到一个小小的单片机居然可以控制很多的东西。我现在才认识到单片机的重要性。

第4章结论与体会

4.1实验结论

图4-1 实验调试结果

4.2实验体会

本次课程设计是带有背景音乐的动态图片。应用了所学的单片机知识、SPLC501液晶显示模块的知识及在图书馆搜集的资料,对题目所要求的工程进行了设计。

在这次的课程设计中,用到了SPCE061A核心及周边电路模块(包含32个I/O口),两路音频输出电路,LCD显示模组模块等元器件。设计了由SPLC501液晶显示模组和SACM_A2000格式语音播放等部分构成的工程。在规定的时间内,由于技术水平有限,此设计还不够完美。

用过这次的学习,使我对单片机有了初步的认识,并在运用和软件模拟运用上有了很大的提高。通过学习不仅使自己的能力提高了,还提高了和同学共同协

作完成的团队能力,发现自己的不足,学习同学的长处。在增强了团队意识和协作能力的时候,也增进了我们的友谊!有了这次的设计的基础,为以后的学习打下了坚实的基础,对今后的学习充满了信心。

这些都是我在这次课程设计中学到的,这次课程设计的制作是我对本专业有了更深一步的认识,同时对专业基础知识以及专业要求的基本素质有了一些深入了解。经过这次的学习,让我了解到单一的知识虽然乏味,但只要融会贯通,将所有单一的知识综合后就能产生巨大的实用效果。将自己学到的课本上的知识应用于实际当中,将理论与实际相结合,使我的综合能力有所提高。

参考文献

[1] 罗亚非,凌阳16位单片机应用基础[M].北京:航空航天大学出版社,2005

[2] 张伟巍,单片机实验箱使用说明[M].青海:青海工业出版社,1998

[3] 刘希玉,控制器图形液晶显示模组基础[M].北京:理工大学出版社,1997

[4] 周路西,SPCE061A英文编程手册[M].吉林:吉林大学出版社,1997

[5] 王凤才,凌阳单片机入门手册[M].北京:航空航天大学出版社,1998

附录

#define P_SystemClock (volatile unsigned int *)0x7013

#define P_INT_Ctrl (volatile unsigned int *)0x7010

#define P_INT_Clear (volatile unsigned int *)0x7011

#define P_INT_Ctrl_New (volatile unsigned int *)0x702D

#define P_Watchdog_Clear (volatile unsigned int *)0x7012

#include "PicData.h"

#include "SPLC501User.h"

#include "A2000.h"

const unsigned int* BMP_Cartoon3[] =

{(unsigned int*)9,(unsigned int*)encoding_00,(unsigned int*)encoding_01, (unsigned int*)encoding_02,(unsigned int*)encoding_03,(unsigned int*)encoding_04, (unsigned int*)encoding_05,(unsigned int*)encoding_06,(unsigned int*)encoding_07, (unsigned int*)encoding_09};

unsigned int IRQ1KHz_Couter;

int main(void)

{

unsigned int uiTemp;

int i=1;

LCD501_Init(0x0000);

SACM_A2000_Initial(1);

LCD501_SetPaintMode(4);

uiTemp = *P_INT_Ctrl_New;

uiTemp = uiTemp|0x0010;

*P_INT_Ctrl_New = uiTemp;

__asm("IRQ ON");

LCD501_Bitmap(16,0,(unsigned int *)BMP_Cartoon3[1]);

IRQ1KHz_Couter=0;

SACM_A2000_Play(0,3,3);

while(1)

{

if(IRQ1KHz_Couter>=300)

{

IRQ1KHz_Couter=0;

LCD501_Bitmap(16,0,(unsigned int *)BMP_Cartoon3[i]);

i++;

if(i==10)

{

i=1;

}

}

if((SACM_A2000_Status()&0x0001)==0)

{

SACM_A2000_Stop();

SACM_A2000_Play(0,3,3);

}

*P_Watchdog_Clear = 0x0001;

}

}

void BMP_Play_IRQ_Service(void)

{

IRQ1KHz_Couter++;

SACM_A2000_ServiceLoop();

}

void IRQ4(void)__attribute__((ISR));

void IRQ4(void)

{

if(*P_INT_Ctrl&0x0010)

{

*P_INT_Clear = 0x0010;

BMP_Play_IRQ_Service();

}

}

相关主题
文本预览
相关文档 最新文档