数码相框嵌入式课程设计报告
- 格式:doc
- 大小:798.00 KB
- 文档页数:16
嵌入式系统课程设计报告一、教学目标本课程的教学目标是使学生掌握嵌入式系统的基本概念、原理和设计方法,能够运用嵌入式系统进行实际项目的开发和实现。
具体来说,知识目标包括了解嵌入式系统的定义、特点、分类和应用领域;掌握嵌入式系统的硬件和软件组成及工作原理;熟悉嵌入式操作系统的基本概念和常用操作系统。
技能目标包括能够使用嵌入式系统开发工具和平台进行程序设计和调试;具备嵌入式系统硬件电路的设计和调试能力;能够运用嵌入式系统进行实际项目的开发和实现。
情感态度价值观目标包括培养学生的创新意识和团队合作精神,提高学生解决实际问题的能力和责任感。
二、教学内容根据课程目标,本课程的教学内容主要包括嵌入式系统的基本概念、原理和设计方法。
具体包括以下几个方面:1. 嵌入式系统的定义、特点、分类和应用领域;2. 嵌入式系统的硬件组成,如处理器、存储器、输入输出接口等;3. 嵌入式系统的软件组成,如固件、操作系统、应用程序等;4. 嵌入式操作系统的基本概念和常用操作系统;5. 嵌入式系统的设计方法和开发流程;6. 嵌入式系统硬件电路的设计和调试方法;7. 嵌入式系统在实际项目中的应用和案例分析。
三、教学方法为了实现课程目标,本课程将采用多种教学方法,包括讲授法、讨论法、案例分析法和实验法等。
通过多样化的教学方法,激发学生的学习兴趣和主动性。
具体教学方法如下:1. 讲授法:通过讲解嵌入式系统的基本概念、原理和设计方法,使学生掌握相关知识;2. 讨论法:通过分组讨论和课堂讨论,培养学生的思考能力和团队合作精神;3. 案例分析法:通过分析实际项目案例,使学生了解嵌入式系统在实际中的应用和设计方法;4. 实验法:通过实验操作和调试,锻炼学生的动手能力和实际问题解决能力。
四、教学资源为了支持教学内容和教学方法的实施,本课程将选择和准备以下教学资源:1.教材:选用权威、实用的嵌入式系统教材,为学生提供系统的学习资料;2. 参考书:推荐学生阅读相关参考书籍,丰富学生的知识体系;3. 多媒体资料:制作课件、教案等多媒体教学资料,提高课堂教学效果;4. 实验设备:准备嵌入式系统开发板、仿真器等实验设备,为学生提供实践操作的机会。
基于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语言和嵌入式系统的编程技术。
qt数码相框课程设计一、课程目标知识目标:1. 学生能理解并掌握Qt编程基础,包括信号与槽机制、基本界面组件的使用;2. 学生能够了解数码相框的工作原理,掌握图像显示、文件读取等基本功能;3. 学生了解嵌入式设备的基本概念及其在生活中的应用。
技能目标:1. 学生能够运用Qt Creator开发环境设计并实现一个简单的数码相框程序;2. 学生通过实践操作,培养解决实际问题的能力,例如图片的读取、展示和切换;3. 学生能够通过小组合作,提高沟通与协作能力,共同完成项目任务。
情感态度价值观目标:1. 学生通过动手实践,培养对信息技术的兴趣,激发创新意识和探索精神;2. 学生在项目实施过程中,学会尊重他人意见,培养团队精神和责任感;3. 学生能够认识到编程在生活中的应用,增强学习信息技术的自信心和自觉性。
课程性质:本课程属于信息技术学科,结合实践操作,培养学生的编程技能和实际应用能力。
学生特点:考虑到学生所在年级,已具备一定的信息技术基础和逻辑思维能力,对新鲜事物充满好奇。
教学要求:注重理论与实践相结合,引导学生主动探究,鼓励小组合作,培养实际操作能力。
将课程目标分解为具体的学习成果,便于教学设计和评估。
二、教学内容1. Qt编程基础:- 界面组件的使用(教材第3章)- 信号与槽机制(教材第4章)- 文件读写操作(教材第5章)2. 数码相框工作原理:- 嵌入式设备基本概念(教材第6章)- 图像显示原理(教材第7章)- 图片读取与切换(教材第8章)3. 项目实践:- 设计并实现简单数码相框程序(结合第3-8章内容)- 小组合作完成项目任务,实现相框功能(讨论、实践)教学安排与进度:1. 第1-2课时:Qt编程基础,介绍界面组件使用、信号与槽机制;2. 第3-4课时:文件读写操作,讲解图片读取方法;3. 第5-6课时:数码相框工作原理,介绍嵌入式设备基本概念、图像显示原理;4. 第7-8课时:项目实践,分组讨论、设计并实现数码相框程序;5. 第9-10课时:项目完善与展示,小组合作完成相框功能,分享成果。
嵌入式数码相框设计摘要嵌入式系统是以应用为中心,以计算机技术为基础,软硬件可以配置,通常对功能、可靠性、成本、体积、功耗有严格约束的一种专用计算机系统。
当前先进的嵌入式系统,通常由嵌入式微处理器、外围硬件设备、嵌入式操作系统以及嵌入式应用程序四个部分组成,实计算机基于ARM Linux和Qt/Embedded的嵌入式数码相框系统的研究和实现应用系统,称为嵌入式系统、实时系统或者嵌入式实时系统。
根据目前国内外对嵌入式的研究和开发,结合实际的实验条件,本项目使用硬件平台广东省嵌入式软件公共技术中心开发的GEC2440开发板作为目标机,使用安装Windows XP的PC机作为宿主机,并在宿主机Windows平台上安装了一个虚拟机软件,虚拟机里安装的是Red Hat EnterpriseLinux 5作为开发环境。
主要实现工作包括:在宿主机上安装交叉编译工具,建立交叉编译环境,配置tftp、DNW(或超级终端)以建立嵌入式软件平台。
进行一个可以浏览与管理图片功能,且能进行幻灯片播放的课程设计。
针对项目需求实现对驱动程序的完善和移植,制作适合此开发板的根文件系统,最后将基于qt设计的应用程序程植到开发板上,实现个人图片的掌上管理。
关键词:嵌入式系统;GEC2440开发板;虚拟机环境;移植。
目录摘要 (2)Abstract (3)目录 (4)第一章概要 (5)第二章所需环境及设备 (6)2.1硬件部分: (6)2.1.1 GEC2440开发板介绍 (6)2.2软件部分 (7)2.2.1 Linux系统平台介绍: (7)2.2.2 QT/Embeded界面介绍: (7)第三章嵌入式开发环境的搭建 (7)3.1嵌入式交叉环境的概述 (8)3.2 交叉编译环境的搭建 (8)3.3交叉调试环境的搭建 (9)3.4交叉服务器的搭建 (10)3.5关于交叉调试 (10)第四章U-boot的移植 (10)4.1建立工作目录 (10)4.2设置环境 (11)4.3进入目录配置编译 (16)4.4 bootloader的烧写 (16)第五章 Linux内核的移植 (17)5.1 准备工作 (17)5.2 修改内核源码顶层 (17)5.3 修改机器码 (17)5.4 设置 flash 分区 (17)5.5 配置编译内核 (18)5.6 Linux内核编译 (22)5.7下载到开发板中测试 (22)第六章基于qt3平台的应用程序 (22)6.1新建一个数码相框工程 (23)6. 2函数源代码 (23)6.3在主机上运行 (35)6.4交叉编译生成目标文件 (36)6.5在目标板上运行 (36)第七章结束语 (37)2第一章概要1.1背景随着PC时代数码技术的发展,数码相机以其低廉的价格,方便的操作成为摄影器材未来的发展方向。
武汉工业学院计算机系数码相框设计实验报告课程:嵌入式班级:网络工程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类实现的。