数码相框嵌入式课程设计报告
嵌入式系统课程设计报告

嵌入式系统课程设计报告一、教学目标本课程的教学目标是使学生掌握嵌入式系统的基本概念、原理和设计方法,能够运用嵌入式系统进行实际项目的开发和实现。
具体来说,知识目标包括了解嵌入式系统的定义、特点、分类和应用领域;掌握嵌入式系统的硬件和软件组成及工作原理;熟悉嵌入式操作系统的基本概念和常用操作系统。
技能目标包括能够使用嵌入式系统开发工具和平台进行程序设计和调试;具备嵌入式系统硬件电路的设计和调试能力;能够运用嵌入式系统进行实际项目的开发和实现。
情感态度价值观目标包括培养学生的创新意识和团队合作精神,提高学生解决实际问题的能力和责任感。
二、教学内容根据课程目标,本课程的教学内容主要包括嵌入式系统的基本概念、原理和设计方法。
具体包括以下几个方面:1. 嵌入式系统的定义、特点、分类和应用领域;2. 嵌入式系统的硬件组成,如处理器、存储器、输入输出接口等;3. 嵌入式系统的软件组成,如固件、操作系统、应用程序等;4. 嵌入式操作系统的基本概念和常用操作系统;5. 嵌入式系统的设计方法和开发流程;6. 嵌入式系统硬件电路的设计和调试方法;7. 嵌入式系统在实际项目中的应用和案例分析。
三、教学方法为了实现课程目标,本课程将采用多种教学方法,包括讲授法、讨论法、案例分析法和实验法等。
通过多样化的教学方法,激发学生的学习兴趣和主动性。
具体教学方法如下:1. 讲授法:通过讲解嵌入式系统的基本概念、原理和设计方法,使学生掌握相关知识;2. 讨论法:通过分组讨论和课堂讨论,培养学生的思考能力和团队合作精神;3. 案例分析法:通过分析实际项目案例,使学生了解嵌入式系统在实际中的应用和设计方法;4. 实验法:通过实验操作和调试,锻炼学生的动手能力和实际问题解决能力。
四、教学资源为了支持教学内容和教学方法的实施,本课程将选择和准备以下教学资源:1.教材:选用权威、实用的嵌入式系统教材,为学生提供系统的学习资料;2. 参考书:推荐学生阅读相关参考书籍,丰富学生的知识体系;3. 多媒体资料:制作课件、教案等多媒体教学资料,提高课堂教学效果;4. 实验设备:准备嵌入式系统开发板、仿真器等实验设备,为学生提供实践操作的机会。
基于ARM的嵌入式电子相框系统.doc

基于ARM的嵌入式电子相框系统..华南师范大学嵌入式系统课程设计报告设计题目:基于ARM的嵌入式的电子相框系统专业班级电路与系统学院物理与电信工程学院指导教师熊爱民姓名学号XXXX年12 月25日基于ARM的嵌入式电子相框系统摘要:本设计采用搭载飞思卡尔的MCIMX28x 芯片的Esayarm-基于ARM的嵌入式的电子相框系统专业班级电路与系统学院物理与电信工程学院指导教师熊爱民姓名学号XXXX年12 月25日基于ARM的嵌入式电子相框系统摘要:本设计采用搭载飞思卡尔的MCIMX28x 芯片的Esayarm:用户通过对界面的操作就可对数码相框中图片的浏览与管理,以及进行幻灯片播放功能,实现个人图片的掌上管理。
关键词:linux嵌入式系统;周立功开发板;虚拟机环境;移植。
目录1. 61设计内容71.1 设计目的71.2 设计意义71.3电子相框的设计任务和要求82. 周立功开发板的介绍92.1Esayarm-linux嵌入式系统;周立功开发板;虚拟机环境;移植。
目录1. 61设计内容71.1 设计目的71.2 设计意义71.3电子相框的设计任务和要求82. 周立功开发板的介绍92.1Esayarm:support for frame buffer devices (4)编译5.2 关于触摸屏驱动的配置对于触摸屏驱动的设计,本文采用的是基于Linux本身自带的输入子系统方式设计的,由于设计的代码比较繁杂,所以本文列出其主要的设计方法,主要的设计方法如下:(1)设置输入结果input_dev: (A)通过设置struct input_dev 的evdev数组表示能产生key和ABS类事件。
(B)设置产生key和ABS类事件里面的触摸按键事件,X/Y绝对位移,绝对位移压力事件。
(2)硬件操作:(A)ioremap寄存器(B)设置AD分频系数和ADCDLY (C)注册INT_TS和AD中断6电子相框的效果演示及功能测试6.1 电子相框性能分析方法简述本设计是一个能够读取指定位置照片的电子相框,选择自动浏览模式时能够自动播放该目录下的所有照片,选择手动模式能读取操作者在触摸屏上发出的指令,是否能够流畅显示照片,是否能显示主页面和子页面,便可判断该电子相框的性能。
嵌入式课程设计报告毕业论文教案

嵌入式课程设计报告毕业论文教案一、教学目标通过本课程的学习,学生应该能够:1.了解嵌入式系统设计的基本原理和流程2.掌握基本的嵌入式硬件和软件开发技术3.能够使用开发板和相关工具进行嵌入式系统的设计和开发4.掌握常用的接口协议和通信方式,包括串口通信、SPI、I2C、CAN等5.能够设计和开发基本的嵌入式应用程序,如LED灯的控制、按键的检测、温度传感器的读取等二、教学内容及安排1.嵌入式系统概述内容:介绍嵌入式系统的定义、特点、应用领域、市场和发展趋势等内容。
时间:2学时2.嵌入式系统设计流程内容:介绍嵌入式系统设计的主要步骤和流程,包括需求分析、硬件设计、软件设计、测试和调试等内容。
时间:4学时3.嵌入式开发环境搭建内容:介绍嵌入式开发环境的基本配置和使用,包括Keil C51软件、ST-LINK下载器、ST-FLASH工具等。
时间:4学时4.嵌入式硬件设计内容:介绍嵌入式硬件设计的基本原理和方法,包括硬件选型、电路原理图设计、PCB布局和焊接等内容。
时间:10学时5.嵌入式软件设计内容:介绍嵌入式软件设计的基本原理和方法,包括汇编语言、C语言、编译、调试和下载等内容。
同时讲解如何使用方案手册和数据手册加速学习。
时间:16学时6.嵌入式应用程序设计内容:介绍嵌入式应用程序的设计和开发,包括LED灯的控制、按键的检测、温度传感器的读取、串口通信、SPI/I2C接口的应用等内容。
时间:14学时7.嵌入式系统测试和调试内容:介绍嵌入式系统的测试和调试方法,包括硬件测试、软件测试、仿真测试和调试工具等内容。
时间:4学时三、教学方法1.理论教学与实践结合,提高学生的实际操作能力。
2.讲授代码编写方法,由浅入深、由简到难地进行讲解。
3.组织实验、调试和考试等考核环节,促进学生知识的巩固和提高。
4.引导学生通过网络、图书馆等途径自主学习和获取嵌入式技术知识,培养学生的自主学习和创新能力。
四、教学手段1.教师演示和现场演示,帮助学生理解课程内容并进行实践操作。
嵌入式课程设计

嵌入式课程设计基于SDL的数字相框班级:学院:指导老师:姓名:一.嵌入式课程设计概述:本程序基于SDL开发的一个带有幻灯片功能的数字相框。
二.课程设计的目的:本课程设计的目的是通过开发一个消费类电子产品——数字相框,了解嵌入式产品开发的主要步骤,包括需求分析、系统结构设计、图形界面设计、驱动程序、功能优化、系统测试等,从而培养自己独立完成比较复杂的实际系统设计的能力。
三.课程设计内容:3.1设计的内容利用SDL实现图片的调用的功能,利用信号来实现图片的播放功能,利用SDL的可移植性,将该设计方案移植到开发板上,该数字相框的功能包括以下方面:(1)在LCD屏上全屏循环显示多幅图像文件;(2)根据设定的时间间隔更新图像;(4)通过键盘进行操作;四.总体设计:数字相框软件系统功能分为三个模块:1)图片浏览模块,可以通过按键控制选定某个图像或更新图像页(上一页、下一页)。
2)播放模块,对浏览界面选定的图片进行循环播放。
3)退出模块,退出图片播放和退出程序。
功能模块组织架构图:五.详细设计:该程序分为2个部分:一部分为用户界面层,一部分为功能模块层。
5.1用户界面层代码设计如下:int Init() //初始化SDL{if(( SDL_Init(SDL_INIT_VIDEO) | IMG_Init(IMG_INIT_PNG) )){fprintf(stderr,"SDL init error:%s",SDL_GetError());return -1;}return 0;}void creatScreen(int width , int height , Uint8 bpp , Uint32 flags) // 创建屏幕640*480 0 SDL_SWSURFACE{screen = SDL_SetVideoMode(width , height, bpp , flags);if(screen == NULL){fprintf(stderr,"Could not Creat a Screen!:%s",SDL_GetError());exit(1);}return;}void show_Pic(SDL_Surface *bmp ,SDL_Rect *rect) //显示图片{SDL_BlitSurface(bmp , NULL , screen , rect);SDL_UpdateRect(screen , 0 , 0 , 0 , 0 );SDL_FreeSurface(bmp);return ;}int appMode(){int width = WIDTH;int heigth = HEIGTH;Uint8 bpp = 0;Init();creatScreen(width , heigth, bpp , SDL_SWSURFACE);backpng = IMG_Load("./image/beijing.jpg");show_Pic(backpng ,&(screen->clip_rect));SDL_Delay(3000);caidan();SDL_WM_SetCaption(TITLE_NAME, ICON_NAME); //设置窗口标题return 0;}效果如下图:封面:菜单:5.2.功能模块实现代码:int getRightPic(int a){a++;if(a > 15 ){a = 0;return a;}int getLeftPic(int a){a--;if(a < 0){a = 15;}return a;}int ShowPic(char *string) //更换显示图片{if(strcmp(string , "left") == 0){i = getLeftPic(i);}elsei = getRightPic(i);backpng = IMG_Load(picture[i]);if(!backpng){fprintf(stderr,"Could not load %s: %s\n",picture[i],SDL_GetError());exit(1);}SDL_Rect rect;rect.x = (screen->w - backpng->w ) / 2;rect.y = (screen->h - backpng->h ) / 2;rect.w = backpng->w;rect.h = backpng->h;SDL_UpdateRect(screen , 0 , 0 , 0 , 0 );show_Pic(backpng , &rect);return 0;}int caidan(){png = IMG_Load("./image/caidan.jpg");show_Pic(png ,&(screen->clip_rect));}void timefunc(int sig) /* 定时事件代码*/ShowPic("left");signal(SIGPROF, timefunc); /* 捕获定时信号*/}void xinhao(int signo){if(signo == SIGALRM){//printf("123\n");}else{signal(SIGALRM, timefunc);struct itimerval value;value.it__sec=3; /* 定时3秒后启动定时器*/value.it__usec=0;value.it__sec=3; /* 每隔3秒执行下一个相应的函数*/ value.it__usec=0;signal(SIGPROF, timefunc); /* 捕获定时信号*/setitimer(ITIMER_PROF, &value, NULL); /* 定时开始*/int ret = setitimer(ITIMER_REAL,&value,NULL);}}int main(int argc,char **argv){appMode();int i=0;double zoom_x,zoom_y;SDL_Event event;while(SDL_WaitEvent(&event)){switch(event.type){case SDL_KEYDOWN:if(event.key.keysym.sym == SDLK_ESCAPE){goto loop;}/*if(event.key.keysym.sym == SDLK_SPACE){xinhao(0);}if(event.key.keysym.sym == SDLK_END){alarm(1);SDL_Delay(1000);caidan();} */break;case SDL_KEYUP:if(event.key.keysym.sym == 276){ShowPic("left");}if(event.key.keysym.sym == 275){ShowPic("right");}break;case SDL_QUIT:printf("quit\n");goto loop;break;}}loop:raise(SIGKILL);return 0;}效果如下图:六.在开发板上移植:6.1.安装arm-linux交叉编译库.6.2.对SDL进行交叉编译安装,对程序进行交叉编译。
数码相框嵌入式课程设计报告

武汉工业学院计算机系数码相框设计实验报告课程:嵌入式班级:网络工程081姓名:***学号:*********日期:2011-11-28一.设计目的开设本课程设计的目的是,通过本课程设计,提高学生的分析问题、解决问题的能力,巩固嵌入式系统的基本理论知识,进一步了解和掌握课程中所讲授的概念,方法。
同时通过本课程设计,全面综合应用所学过的基础知识,建立一个完整的嵌入式系统的开发过程的概念,并掌握其中的主要原理和方法本课程设计的目的是通过开发一个消费类电子产品——数字相框,了解嵌入式产品开发的主要步骤,包括需求分析、系统结构设计、图形界面设计、驱动程序、功能优化、系统测试等,从而培养学生独立完成比较复杂的实际系统设计的能力。
二.设计内容和要求2.1设计的内容作为一个消费类电子产品,数码相框整个系统要完成的基本功能大致如下:1、用户界面友好,操作简便。
由于该产品的使用者大多是非专业人士,用户界面是否清晰明了、操作是否简捷方便成为用户是否能迅速接受此产品的重要因素。
2、数字相框的功能应包括以下方面:(1)在LCD屏上全屏循环显示多幅图像文件;(2)根据设定的时间间隔更新图像;(3)显示时间、日期;(4)通过按钮进行操作;2.2 要求本课程设计要求学生根据实际应用的特点对产品进行完整的需求分析,形成比较完善的总体设计方案。
同时,要求学生具备Linux操作系统下简单的设备驱动程序开发、图形用户接口设计的能力。
此外,还要求读者掌握基本的系统功能及性能测试技术,从而具备比较全面的嵌入式应用系统开发能力。
三.总体设计主要步骤和方法根据数字相框的主要特点和设计功能那个要求,我们将课设分为以下几个步骤:3.1、数字相框软硬件平台的选择性能方面,由于数字图像的解码算法比较复杂,而且大量图片需要从外部Flash存储器中读取,所以对嵌入式微处理器的性能要求比较高。
外部接口方面,该芯片最好能在外围直接支持CF卡的Compact Flash接口,还应提供按钮、LCD显示屏、触摸屏、声音输出通道等。
数码相框嵌入式实训报告

一、实训背景随着信息技术的飞速发展,嵌入式系统在各个领域得到了广泛应用。
数码相框作为智能家居的一部分,其功能也逐渐丰富,对嵌入式系统的要求也越来越高。
为了更好地掌握嵌入式系统的设计与应用,提高实践能力,我们开展了数码相框嵌入式实训项目。
二、实训目的1. 熟悉嵌入式系统的基本原理和开发流程。
2. 掌握嵌入式硬件平台(如Blackfin处理器)的原理和应用。
3. 学习嵌入式操作系统(如uClinux)的使用和编程。
4. 掌握嵌入式软件开发工具和调试方法。
5. 设计并实现具有WiFi无线连接、电子邮件发送、RSS新闻阅读、即时照片分享、全触摸操作等功能的数码相框。
三、实训环境1. 硬件平台:Blackfin处理器、数码相框外壳、显示屏、WiFi模块、传感器等。
2. 软件平台:uClinux操作系统、嵌入式开发工具(如Eclipse、Keil等)、编程语言(如C/C++)等。
四、实训原理1. Blackfin处理器:Blackfin处理器是一款高性能、低功耗的嵌入式处理器,具有强大的多媒体处理能力,适用于数码相框等应用。
2. uClinux操作系统:uClinux是一种轻量级的嵌入式操作系统,适用于资源受限的嵌入式设备。
3. WiFi模块:WiFi模块用于实现数码相框的无线连接功能,可以方便地实现照片分享、新闻阅读等应用。
4. 传感器:传感器用于采集环境信息,如温度、光线等,可以用于调整相框显示效果。
五、实训过程1. 硬件设计:根据数码相框的功能需求,设计硬件电路,包括Blackfin处理器、显示屏、WiFi模块、传感器等。
2. 软件设计:编写嵌入式应用程序,实现数码相框的各项功能,如照片展示、新闻阅读、WiFi连接等。
3. 系统集成:将硬件和软件进行集成,调试系统,确保系统稳定运行。
4. 功能测试:对数码相框的各项功能进行测试,确保功能正常。
六、实训结果1. 硬件设计:成功设计并搭建了数码相框的硬件电路,包括Blackfin处理器、显示屏、WiFi模块、传感器等。
关于数码相框嵌入式实训报告范文

千里之行,始于足下。
关于数码相框嵌入式实训报告范文数码相框嵌入式实训报告一、实训目的本次实训的目的是为了让我们学会使用嵌入式系统中的硬件和软件来实现一个数码相框的功能。
通过这次实训,我们可以掌握嵌入式系统的基本原理和开发流程,提升我们的实际操作能力和问题解决能力。
二、实训内容1. 硬件部分在实训开始前,我们首先学习了数码相框的基本原理和硬件组成。
数码相框主要由显示屏、控制器和存储器组成,其中显示屏用来显示图片、控制器用来控制显示屏的工作状态、存储器用来存储图片等数据。
在实训中,我们需要完成以下硬件部分的实际操作:- 拆解和重新组装数码相框,熟悉数码相框的内部结构和各个组件的连接方式。
- 使用示波器测量和分析显示屏的信号波形,了解显示屏的工作原理。
- 使用逻辑分析仪分析控制器和存储器之间的数据传输过程,研究控制器的工作原理。
- 使用烙铁和焊锡线对数码相框的电路板进行维修和改装,提升我们的实际操作能力。
2. 软件部分在硬件部分的实训完成后,我们开始进行数码相框的软件开发。
数码相框的软件部分主要包括界面设计、数据处理和控制逻辑实现。
第1页/共3页锲而不舍,金石可镂。
在实训中,我们需要完成以下软件部分的实际操作:- 学习和掌握数码相框的软件开发流程,包括需求分析、系统设计、编码和测试等。
- 使用嵌入式开发平台进行软件开发,学习掌握C语言和嵌入式系统的编程技术。
- 实现数码相框的界面设计,包括菜单、图片浏览和设置等功能。
- 实现数码相框的数据处理功能,包括图片压缩和解压缩、图片格式转换等。
- 实现数码相框的控制逻辑,包括按键和触摸屏的事件处理、定时任务的调度等。
三、实训收获通过这次实训,我学到了很多关于嵌入式系统和数码相框的知识和技术。
在硬件部分,我学会了如何拆解和组装数码相框,熟悉了数码相框的内部结构和各个组件的连接方式。
我还学会了如何使用示波器和逻辑分析仪来分析和研究数码相框的工作原理。
在软件部分,我学会了使用嵌入式开发平台进行软件开发,掌握了C语言和嵌入式系统的编程技术。
项目开题汇报(数码相框)

数码相框是可以直接展示数码照片不用将照片冲印出来再展示的新型相框。
它采用传统普通相框的外框(外观)造型,把传统普通相框的中间照片部分换成液晶显示屏,配上电源,存储介质等部件,可以直接展示(播放)数码照片,同时,可以在同一个相框内循环展示(播放)不同照片,给日益增多的数码照片和喜好照片的人们提供一个更好的照片展示平台和空间。
它可以实现图片的显示,放大,缩小,旋转等功能,并让图片以幻灯片形式播放,以及从U盘传输。
本项目的特点和创新性
1、项目背景
开发平台:ARM开发平台; 系统所使用的外围模块:音频,U盘等
硬件
操作系统:嵌入式Linux; 驱动程序:USB u盘驱动,按键驱动等; 应用程序:系统将会才用C,汇编等语言编写;应用采用QT应用 软件程序
嵌入式Linux系统设计与应用开发 项目开题报告
计算机教研室 主讲:陈东伟
《数码相框》项目汇报
团队名称:11级计算机2班 指导教师:陈东伟 团队成员:翟运珊,张宏伟,李俊鑫,林钟越
嵌入式系统设计综合实训
选题来源
通过这个项目熟悉嵌入式平台下做开发的流程,加深对Linux操作系统的理解,并提升QT图形设计的能力,从多个方面培养项目的执行力。
项目整体时间安排
已经确定小组成员名单,开会讨论了所选的题目,对选题进行了大概 的了解,在网上查询了有关该项目开发的资料;遇到的问题:对项目
已作工作及问题
4、预计:项目进度安排
的了解并不清晰,分工尚未明确,还没有掌握各模块功能的实现方法
解决方案及下一步工作
查阅有关的书籍;
上网查找资料;
好好上课;
开会讨论研究
选题意义
1、项目背景
1、项目背景
现有的产品分析 数码相框是展示数码照片而非纸质照片的相框。数码摄影必然推动数码相框的发展,因为全世界打印的数码相片不到35%。数码相框通常直接插上相机的存储卡展示照片,当然更多的数码相框会提供内部存储空间以接外接存储卡功能。数码相框就是一个相框,不过它不再用放进相片的方式来展示,而是通过一个液晶的屏幕显示,它可以通过读卡器的接口从SD卡获取相片,并设置循环显示的方式,比普通的相框更灵活多变,也给现在日益使用的数码相片一个新的展示空间
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
武汉工业学院计算机系数码相框设计实验报告课程:嵌入式班级:网络工程081姓名:***学号:*********日期:2011-11-28一.设计目的开设本课程设计的目的是,通过本课程设计,提高学生的分析问题、解决问题的能力,巩固嵌入式系统的基本理论知识,进一步了解和掌握课程中所讲授的概念,方法。
同时通过本课程设计,全面综合应用所学过的基础知识,建立一个完整的嵌入式系统的开发过程的概念,并掌握其中的主要原理和方法本课程设计的目的是通过开发一个消费类电子产品——数字相框,了解嵌入式产品开发的主要步骤,包括需求分析、系统结构设计、图形界面设计、驱动程序、功能优化、系统测试等,从而培养学生独立完成比较复杂的实际系统设计的能力。
二.设计内容和要求2.1设计的内容作为一个消费类电子产品,数码相框整个系统要完成的基本功能大致如下:1、用户界面友好,操作简便。
由于该产品的使用者大多是非专业人士,用户界面是否清晰明了、操作是否简捷方便成为用户是否能迅速接受此产品的重要因素。
2、数字相框的功能应包括以下方面:(1)在LCD屏上全屏循环显示多幅图像文件;(2)根据设定的时间间隔更新图像;(3)显示时间、日期;(4)通过按钮进行操作;2.2 要求本课程设计要求学生根据实际应用的特点对产品进行完整的需求分析,形成比较完善的总体设计方案。
同时,要求学生具备Linux操作系统下简单的设备驱动程序开发、图形用户接口设计的能力。
此外,还要求读者掌握基本的系统功能及性能测试技术,从而具备比较全面的嵌入式应用系统开发能力。
三.总体设计主要步骤和方法根据数字相框的主要特点和设计功能那个要求,我们将课设分为以下几个步骤:3.1、数字相框软硬件平台的选择性能方面,由于数字图像的解码算法比较复杂,而且大量图片需要从外部Flash存储器中读取,所以对嵌入式微处理器的性能要求比较高。
外部接口方面,该芯片最好能在外围直接支持CF卡的Compact Flash接口,还应提供按钮、LCD显示屏、触摸屏、声音输出通道等。
在本课程设计中,采用了Intel的PXA270作为微处理器,完全能满足上述硬件平台的要求。
数字相框属于消费类电子产品,对价格比较敏感,而嵌入式Linux操作系统上有比较丰富的软件资源、驱动程序和开发工具,因此本课程设计采用嵌入式Linux作为软件开发平台。
在Linux操作系统平台上有多种嵌入式图形界面开发工具可供使用,主要包括MicroWindows、MuniGUI、TinyX和Qt/Embedded等几种。
本课程设计将集中讨论在Qt/Embedded系统上数字相框的实现技术,当然也可以通过其他图形开发界面工具实现数字相框功能。
3.2、数字相框的软件总体设计数字相框软件系统功能可以划分为三个模块:1)图片浏览模块,可以通过按键控制选定某个图像或更新图像页(上一页、下一页)。
2)播放模块,对浏览界面选定的图片进行循环播放。
3)系统设置模块,可设置循环播放更换频率等。
3.2.1、功能模块组织架构图3.3、基于Qt的图形界面程序设计本设计中包括了浏览、循环播放和配置三个界面模块。
这些模块之间需要进行通信,利用Qt提供的信号/槽机制很好地解决了这几问题,每个模块中都有自己定义的一些信号和槽,已发送给其他模块或者从其他模块接受到对应信号后作出响应。
数字相框在初始化时会扫描指定目录下(包括子目录)的所有支持图片文件,并将其存放在列表中,以备之后的浏览界面生成缩略图。
本系统使用Qt提供的QDir类实现遍历目录的功能,在遍历目录的同时通过设置文件类型过滤位来获得指定文件,并使用一个双向的字符串指针链表来记录扫描得到的结果。
四.详细设计根据以上的分析,将程序分为2个部分:一部分为用户界面层、一部分为功能模块层。
4.1用户界面层代码设计如下定义头文件库window.h作用于:该类中的函数、用于实现用户界面层的工作按钮添加信号触发槽#ifndef WINDOW_H#define WINDOW_H#include <QPixmap>#include <QWidget>class RenderArea;class Window : public QWidget{Q_OBJECTpublic:Window();RenderArea *renderArea; // RenderArea对象用于显示图片private:protected:void keyPressEvent(QKeyEvent *event);private slots:void start();void start1();void start2();void predisplay();void nextdisplay();void big();void small();};#endif用户层图形界面与按钮信号槽功能实现代码:#include "window.h"#include <QtGui>#include "renderarea.h"Window::Window(){renderArea = new RenderArea;QPushButton *frontbutton=new QPushButton("pre"); //“上一张图片”按钮QPushButton *nextbutton=new QPushButton("next"); //“下一张图片”按钮QPushButton *startbutton=new QPushButton("Fstart"); //“快速播放”按钮QPushButton *startbutton1=new QPushButton("Mstart"); //“中速播放”按钮QPushButton *startbutton2=new QPushButton("Sstart"); //“慢速播放”按钮QPushButton *b=new QPushButton("big"); //“扩放图片”按钮QPushButton *s=new QPushButton("small"); //“缩小图片”按钮QPushButton *exitbutton=new QPushButton("exit"); //“退出”按钮QHBoxLayout *belowlayout=new QHBoxLayout; //水平布局QHBoxLayout *belowlayout1=new QHBoxLayout;QVBoxLayout *mainlayout=new QVBoxLayout; //垂直布局belowlayout->addStretch();belowlayout->addWidget(frontbutton);belowlayout->addWidget(nextbutton);belowlayout->addStretch();belowlayout->addWidget(startbutton);belowlayout->addWidget(startbutton1);belowlayout->addWidget(startbutton2);belowlayout->addStretch();belowlayout->addWidget(b);belowlayout->addWidget(s);belowlayout->addStretch();belowlayout->addWidget(exitbutton);belowlayout1->addWidget(renderArea);mainlayout->addLayout(belowlayout1);mainlayout->addLayout(belowlayout);this->setFocusPolicy(Qt::ClickFocus);frontbutton->setFocusPolicy(Qt::NoFocus);nextbutton->setFocusPolicy(Qt::NoFocus);startbutton->setFocusPolicy(Qt::NoFocus);startbutton1->setFocusPolicy(Qt::NoFocus);startbutton2->setFocusPolicy(Qt::NoFocus);b->setFocusPolicy(Qt::NoFocus);s->setFocusPolicy(Qt::NoFocus);this->setFocusPolicy(Qt::ClickFocus);exitbutton->setFocusPolicy(Qt::NoFocus);setLayout(mainlayout);setWindowTitle(tr("Digital photo frame"));connect(frontbutton,SIGNAL(clicked()), this,SLOT( predisplay() )); //单击按钮触发函数connect(nextbutton,SIGNAL(clicked()), this,SLOT(nextdisplay()));connect(startbutton,SIGNAL(clicked()), this,SLOT(start()));connect(startbutton1,SIGNAL(clicked()), this,SLOT(start1()));connect(startbutton2,SIGNAL(clicked()), this,SLOT(start2()));connect(b,SIGNAL(clicked()), this,SLOT(big()));connect(s,SIGNAL(clicked()), this,SLOT(small()));connect(exitbutton,SIGNAL(clicked()),this,SLOT(close()));}void Window::predisplay(){renderArea->pre_area();}void Window::nextdisplay(){renderArea->fun_area();}void Window::start(){renderArea->Start(1);}void Window::start1(){renderArea->Start(2);}void Window::start2(){renderArea->Start(3);}void Window::big(){renderArea->Big();}void Window::small(){renderArea->Small();}void Window::keyPressEvent(QKeyEvent *event) {if ( event->key() == Qt::Key_Right){predisplay();}if ( event->key() == Qt::Key_Left){nextdisplay();}}效果图如下:4.2.功能模块实现代码:#include <QtGui>#include <qvariant.h>#include <QLabel>#include <qwhatsthis.h>#include <qpainter.h>#include "renderarea.h"RenderArea::RenderArea(QWidget *parent): QWidget(parent){i=0; //指针dir="/home/Katrina/wisdom/fxy1/photo"; //设置图片默认路径QDir DIR;if(!DIR.exists(dir)){return ;}QDir picdir(dir);QStringList filters;filters << "*.bmp" << "*.jpg" << "*.png"<<"*.gif"; //支持显示图片的格式picdir.setNameFilters(filters);list = picdir.entryInfoList();h=1; //图片的高度比例w=1; //图片的水平比例update(); //触发paintEvent画图函数将图片显示}QSize RenderArea::minimumSizeHint() const{return QSize(10,10);}QSize RenderArea::sizeHint() const{return QSize(10000, 10000);}void RenderArea::paintEvent(QPaintEvent *){QPainter painter(this);QFileInfo fileInfo = list.at(i); //通过指针i获取该图片的文件名QString path=fileInfo.filePath(); //通过文件名获得图片的绝对路径QPixmap pixmap;pixmap.load(path); //加载图片的绝对路径qDebug("\n pi=%d\n",i);qDebug(path.toLatin1().data());int x=( size().width()-(int)(pixmap.width()*w))/2;int y=( size().height()-(int)( pixmap.height()*h))/2; //x、y坐标控制显示位置painter.drawPixmap(x,y,(int)(pixmap.width()*w),(int)(pixmap.height()*h),pixmap,0,0,0,0);//通过图片的路径画出该图片用于显示qDebug("update %d,%d",pixmap.width(),pixmap.height());}void RenderArea::fun_area(){ //下一张图片功能实现w=1;h=1;if( (list.size()==0)|| list.size()==1){ //判断是否有图片用于显示return ;}if( ( (i>0) || (i==0) ) && ( (i<list.size()-1) ) ){ //单击按钮则向下显示一张图片i++;}else if(i==(list.size()-1)){ //当图片显示到最后一张将指针指导第一张i=0;}update();}void RenderArea::pre_area(){ //上一张图片功能实现w=1;h=1;if( (list.size()==0)|| list.size()==1){return;}if( (i<list.size() ) && (i>0) ){i--;}else if(i==0){i=list.size()-1;}update();}void RenderArea::Start(int p){ //循环播放图片功能int sum=0; //控制速度if(p==1){sum=1000; //快速播放}else if(p==2){sum=2000; //中速播放}else sum=3000; //慢速播放QTime t;bool b=true;bool a=true;if(i==(list.size()-1)){i=0;repaint();}while(b){if(i!=(list.size()-1)){while(a){if(t.elapsed()%sum== 0){ //Qtime控制时间break;}}i++;}else {b=false;}w=1;h=1;repaint();}}void RenderArea::Big(){ //扩放图片功能if(w<4) //最大比例{w=w*1.1; //每单击按钮图片扩大比例1.1h=h*1.1;update();}}void RenderArea::Small(){ //图片缩小功能if(w>0.1) //最小比例{w=w*0.9;h=h*0.9;update();}}效果图:五.测试与调试程序的功能实现部分是使用Qt 中QDir、QPixmap类实现的。