1、信息科学与技术系嵌入式系统课程设计报告设计题目:数码相框的设计与实现 班 级: XXXXXXXXXX 学 号: XXXXXXXXXX 姓 名: XXXXXX 指导教师: XXXXXX 完成日期: 2013-4-14 成绩: 数码相框的设计与实现目 录1 绪论 11.1 数码相框的发展和应用 .11.1.1 数码相框的发展 11.1.2 数码相框的应用 11.2 课题研究 .12 需求分析 22.1 平台需求分析 .22.2 功能需求分析 .23 总体设计 23.1 功能的总体设计 .23.1.1 主模块组织框架图 23.2 基于 Qt 的图形界面程序设计 33.3 数码相框布局界面设计 .34
2、 详细设计 44.1 各中功能的程序设计 .44.2 交叉编译环境设计 .44.3 图形界面的详细设计 .45 编码 55.1 数码相框界面布局 .55.2 功能的实现 .65.3 设计结果的显示 .86 总结和学习体会 87 致谢 9参考文献 9数码相框的设计与实现11 绪 论1.1数码相框的发展和应用1.1.1 数码相框的发展随着科技的飞速发展,人类历史将进入一个崭新的时代信息时代,各种高科技产品进入了人们的生活,当然数码相框也成为了人们生活中不可或缺的一部分,数码相框是展示数码照片而非纸质照片的相框。数码摄影必然推动数码相框的发展,现在大多数人很少会将照的相片打印出来。数码相框的发展大大
3、的方便了人们的生活。我们设计的相框首先得能够循环播放照片,比普通的相框的单一显示功能更有优势。现在数码相框市场呈现飞速发展的态势,其产销量和市场需求将保持大幅度的增长,具有很高的市场价值。在未来的几年内市场尚无萎缩的可能。1.1.2 数码相框的应用数码相框是时尚的电子消费品、也是家庭必备的装饰品。继承了数码的时尚和相框的温情,用途十分广泛。比如,可以作为商务礼品、节日礼品、纪念品、展览展示、 福利奖品、现代家私、婚纱摄影、车载、数码摄影器材、 随身个性饰品等。随着数码相框的大众化,一定会出现越来越多有意思的创意应用,为我们的平淡的生活带来无穷的乐趣。可当做精美的艺术画框和相框,可摆放在柜台桌面
4、,也可挂墙当做壁画,同时也可作为动态及静态广告机使用适用于家庭,各种高雅场所如商场,宾馆,酒店,休闲中心,酒吧,咖啡馆,走廊等 许多幸福的爱侣与自己心爱的人走进新婚的殿堂,婚纱,戒指,教堂,鲜花,蛋糕,美酒,彩带,笑容,感动的泪水,听着为自己而奏响的婚礼进行曲,所有这一切都凝聚成一生中最幸福的时刻。当你们携手走入教堂,当他为你戴上钻戒,当你们深情拥吻,当鲜花绽放彩带飞舞,当小金牛诞生来时的笑容,相信没有人愿意忘记那一幕幕美妙的瞬间,于是照片成为了爱情的记载。但是你可想过就是这一张张的照片可以让你的新婚再现么?让数码相框给你“好看”。 一般的相框只能放置一张照片,有的可以正反两面分别放一张。而对
5、于刚刚结婚的女士来说,传统的相框可容纳的照片太少了。一般刚刚结婚的人都会洗个十多张七寸的婚照,只是苦于无法将它们同时放入一个相框。然而现在就不同了,有一种东西叫“数码相框”。原来一个相框只能放一张照片,最多前后放两张,而数码相框比较新颖,而且价格比传统的相框也贵不了多少钱,比较适合需要新婚家居装潢增添气氛的新婚家庭。1.2课题研究嵌入式系统无疑是当前最热门最有发展前途的 IT 领域之一,对于嵌入式用到的设备资源会很有限,并且对成本很敏感。特别是随着物联网的发展,人们的生活逐渐走向家电的智能化。此次设计是为了实现 ARM 平台系统的移植和 QT 应用程序的设计。首先是进行端口的设置,然后通过bo
6、otloader 实现内核的移植,当握手成功后就可以进行程序的移植以及 QT 最终界面的设置。邢台学院信息科学与技术系嵌入式课程设计22 需求分析2.1平台需求分析随着经济和社会的发展,科技也在飞速的发展,人们对于照片不再满足于冲洗照片,而是利用现在的科技,通过数码相框来保存和浏览照片。而且人们对于数码相框的需求也越来越大。这就需要我们不断地对其进行更新和完善。数码相框的用户群体是广大的普通消费者,为了实现产品的各种功能,必须有人性化、易操作的图形用户界面。与以前嵌入式设备简单的黑白用户界面相比,现在的嵌入式 GUI 软件功能十分强大,界面图像华丽。我选用的是跨平台的 QT。2.2功能需求分析
7、(1) 实现图片的自动循环播放。为了方便用户的是用,设置了自动播放,这样就不必费事去自己手动的切换图片,为用户省去了很多的事情。(2) 实现播放速度的调整。这样就会使自己设计的数码相框更具有个性,更受大家的喜爱,同时也满足了大多数人群的消费需求。(3) 实现图片的静止显示。当用户需要详细观看某张图片时可以利用停止按钮使播放停止下来。(4) 手动浏览图片,即上一张、下一张的功能。当然有的用户就是喜欢手动浏览自己的相册,就会手动浏览他们,来享受图片的乐趣。这样使自己的相框具有多功能。适应了大多数用户的需求。3 总体设计3.1功能的总体设计数字相框主要分为三个模块:(1) 图片播放模块,当单击播放按
8、钮时可以第一张自动播放所添加的图片。(2) 图片停止模块,当单击停止按钮时播放的图片会自动停止在当前的图片。(3) 单张浏览模块,当单击上一张或下一张时会手动的浏览相邻的图片。3.1.1 主模块组织框架图(1) 主模块的组织结构图如图 3-1 所示。数码相框的设计与实现3双倍速度播放单倍速度播放下一张(next)上一张(pre )主控制模块单张浏览模块图片停止模块循环播放模块图 3-1 主模块组织结构图3.2基于 Qt 的图形界面程序设计本设计包含三个模块,每个模块都需要对应的信号和槽,他们的动作需要他们的函数来实现这三个模块是相互联系的,当接收到信号时就会做出相应的响应。本设计的按钮通过接收
9、信号,来做出响应,并遍历多添加的图片文件,这样就实现了图片的浏览。而且当另一个信号发出后,前一个响应就会停止,响应当前的信号和指令。这样就实现了图片的播放盒停止以及单张浏览图片的功能。3.3数码相框布局界面设计数码相框的界面结构图如图 3-2 所示。数码相框界面左侧的按钮右侧的图片显示框Start NextPre Stop Fast*2图 3-2 数码相框界面结构图邢台学院信息科学与技术系嵌入式课程设计44 详细设计4.1各中功能的程序设计(1) 播放功能的程序设计当单击 start 按钮时,信号会发出并且做出相应过得响应,并遍历所添加的图片文件,实现循环播放。当然图片都是编号的,当图片播放了
10、一遍的时候就会将所定义的变量会减去图片的张数,来达到返回第一张。这样就实现了图片的循环播放。当停止后在播放时就会从第一张图片开始播放。当然图片是自动播放的,只要让其遍历时设置好显示的时间间隔来显示所有的图片。这样就可以就可以控制图片的播放速度了,当单机 fast*2 时,播放速度就会提高一倍,这样就加快了播放速度。(2) 停止功能的设计当单击 stop 按钮时,另一个信号就会发出做出相应的响应,并且循环播放所相应的事件就会停止,并且停止后相框所显示的图片就是播放到达的图片而不是第一张图片。(3) 单张浏览功能的设计当单击 pre 按钮或 next 按钮时就会实现浏览上一张图片或下一张图片,并且
11、中断前面所有的响应,即使是在循环播放的时候也可以实现,如果是在图片循环播放时单击的,那么就会进行两个操作,那就是先让该响应停止,再对其进行向前或向后翻动的操作。这样就实现了图片的前后浏览了。4.2交叉编译环境设计编译 qt-embedded-free-3.3.7。(1) 首先对其进行解压,解压指令是:tar zxvf qt-embedded-free-3.3.7。(2) 将相应的文件复制到制定的位置,指令是:cp qt-xll-free-3.3.7/bin/uic qt-embedded-free-3.3.7/bin; cp qt-xll-free-3.3.7/bin/moc qt-embed
12、ded-free-3.3.7/bin。(3) 进入到解压的文件夹中,指令是:cd qt-embedded-free-3.3.7。(4) ./configure shared thread -embedded arm qvfb -freetype-depths4,8,16,24,32-qt gif-qt libpng qt-libmng qt-libjpeg sqlite no qvfb/usr/bin/gmake。(5) 运行 qt-embedded-free-3.3.7/example/hello/hello.#cd qt-embedded-free-3.3.7/ example/hello
13、./hello-qws。如果屏幕显示 hello,就说明移植成功了。注意:如果在编译的过程中出错,在重新 make 前需要先执行 make clean,然后再./configure ,再执行 make 的操作。现在搭建的环境是交叉编译的,如果不用交叉编译,则环境变量那里都设成 QT4.6 的,而不用QTE 的。4.3图形界面的详细设计在 QT 中的.ui 的文件中对其进行界面的详细设计,首先添加 5 个 button,分别表示所对应的 5各功能,并对每一个按钮添加相应地槽,建立相应的链接。当然要实现这些功能也需要.h 文件中添加定义全局变量和相应的函数体,这样就可以实现按钮的各项功能了,还有就
14、是图片的遍历,让图片的显示大小和位置都调节好只需要将其位置数码相框的设计与实现5定位在 50px,0px,再使其高度和窗口的高度一致,宽度是窗口高度减少 50px 即可。当然左侧的按钮背景太单调了,所以我通过图片的显示利用图片的显示将其背景添加在按钮的下方,这项功能只需要对其位置和大小进行设置即可。在界面左侧的五个按钮分别写着 start、fast*2、pre、next、stop ,这五个键分别表示自动循环播放、播放速度加倍、上一张、下一张、停止播放,当然图片的大小是随着窗口的大小来变换的,所以图片一直是铺满真个窗口的。而四个按钮也悬浮在图片的上方。但是为了美观就将四个按钮放在了左侧,以等间距
15、排列着。5 编 码5.1数码相框界面布局(1) 左侧的按钮添加和布局start0907523 /各种按钮的添加和定位和以及大小的调整 其中的0 ,90是对按钮的定位,而且通过和 来对按钮的大小进行设置,而按钮的显示内容就有来定义了。(2) 图片的显示和背景MainWindow00600400这是对窗口的大小进行设置,并且将图片显示的位置也设置了。而且通过和来对窗口的大小进行设置。邢台学院信息科学与技术系嵌入式课程设计6而如何使图片跟随着窗口的大小变化需要以下函数来实现:void MainWindow:paintEvent(QPaintEvent *)setWindowTitle(tr(“Pho
16、to View“);QPixmap pixImage;QPixmap pixImage2;pixImage.load(tr(“K:/picture0/pp/%1.jpg“).arg(Data:i);pixImage2.load(tr(“K:/picture0/pp/left.jpg“).arg(Data:i);QPainter painter(this);painter.drawPixmap(0,0,50,QWidget:height(),pixImage2);painter.drawPixmap(50,0,QWidget:width(),QWidget:height(),pixImage);
17、if(Data:i=18)Data:i=1;elseData:i+;其中的 painter.drawPixmap(50,0,QWidget:width(),QWidget:height(),pixImage)语句就是对其进行设置的,是图片的长和宽等于窗口的长和宽。这样如果调整窗口的大小,图片的大小也会随之变化。但是按钮就不会随着变化。另外其中的 pixImage2 对象是对左侧按钮设置背景的,因为没有% ,所以他不会遍历,而添加了%就会对文件进行遍历并显示出来。5.2功能的实现(1) 槽的建立和连接的建立为了实现各种功能,槽和连接的建立是不可缺少的。其代码如下:MainWindow:MainW
18、indow(QWidget *parent) :QMainWindow(parent),ui(new Ui:MainWindow)ui-setupUi(this);timer=new QTimer(this);connect(timer,SIGNAL(timeout(),this,SLOT(update();这样就建立了连接和槽,只要再对按钮进行事件监听就可以了。(2) 循环播放实现void MainWindow:paintEvent(QPaintEvent *)setWindowTitle(tr(“Photo View“);QPixmap pixImage;QPixmap pixImage2
19、;数码相框的设计与实现7pixImage.load(tr(“K:/picture0/pp/%1.jpg“).arg(Data:i);pixImage2.load(tr(“K:/picture0/pp/left.jpg“).arg(Data:i);QPainter painter(this);painter.drawPixmap(0,0,50,QWidget:height(),pixImage2);painter.drawPixmap(50,0,QWidget:width(),QWidget:height(),pixImage);if(Data:i=18)Data:i=1;elseData:i+
20、;void MainWindow:on_pushButton_clicked()timer-start(600); /以 0.6 秒的间隔速度来播放图片void MainWindow:on_pushButton_5_clicked()timer-start(300); /以 0.3 秒的间隔速度来播放图片而上面的函数就可以实现图片的循环播放,主要是通过 pixImage.load(tr(“K:/picture0/ pp/%1. jpg “ ).arg(Data:i);来实现图片的遍历的,这样就可以使其自动地循环播放所添加的图片文件。(1) 实现图片的单张浏览为了方便人们的需求特别设置的手动浏览
21、图片,可以上下翻动图片来观看,代码如下:void MainWindow:on_pushButton_2_clicked()timer-stop();Data:i-;if(Data:i 18)Data:i = 0;update();邢台学院信息科学与技术系嵌入式课程设计8(3) 实现循环播放的终止当图片循环播放后,就应该有停止按钮来使播放停止在用户需要停止的位置,这样就方便了用户的使用。其代码如下:void MainWindow:on_pushButton_4_clicked()timer-stop();5.3设计结果的显示经过调试后终于有了结果,而且可以实现以上的各种功能。测试结果如图 5-1
22、 所示。图 5-1 主模块效果图6 总结和学习体会本学期我们开设了电子相框课程设计,本设计与我们的专业方向有联系,正所谓“纸上谈兵终觉浅,觉知此事要躬行。 ”学习任何知识,仅从理论上去求知,而不去实践、探索是不够的,所以在本学期进行一些相关的课程设计是很必要的。这样不仅能加深我们对相关专业的知识的了解,而且真正的做到了学以致用。在这次课程设计过程中,我也遇到了很多问题。比如如何将图片添加到所见的工程中、如何应用程序来使所添加的图片循环播放等困难,然后翻阅了大量书籍,查资料,终于在书中查到了有关章节,并参考设计出了相应地子程序。数码相框的设计与实现9这次课程设计不仅让我学到了很多,而且暴漏了很多
23、的弱点,由于以前的懒惰,造成现在什么也不会,我相信我一定会努力学习的,通过这次课程我可以学习可巩固先前学的 Linux 的 bootloader的内核移植和 minicom 的配置以及 ARM 等相关知识,并努力学习如何通过 QT 来进行播放器的设置,而且也培养了我的动手能力,更令我的创造性思维得到拓展。希望今后类似这样课程设计、类似这样的锻炼机会能更多些!这次的设计实验使我受益匪浅,不仅让我学会了知识,而且让我懂得了很多道理,在以后的学习中我一定努力学习,争取更好地成绩。只有做好了充分的准备,才能迎接新的挑战。才能取得更好的成绩。这样有利于自己更好的发展。7 致 谢在设计过程中遇到了无数的困
24、难和障碍,都在同学和老师的帮助下度过了。尤其要强烈感谢我的指导老师李海颖老师,她对我进行了无私的指导和帮助。另外,在校图书馆查找资料的时候,图书馆的老师也给我提供了很多方面的支持与帮助。在此向帮助和指导过我的各位老师表示最中心的感谢!感谢我的同学和朋友,在我设计的过程中给予我了很多相关素材和资料,还在报告的撰写和排版的过程中提供热情的帮助。参 考 文 献1魏永明.实时嵌入式 Linux 系统上 GUI 的发展与展望,微电脑世界, 2000, 47 期:49502霍妍,凡荣.基于 Linux 嵌入式系统的研究与实现,计算机系统的应用, 2004, 08 期:463王学龙.嵌入式 Linux 系统
25、设计与应用.北京: 清华大学出版社, 2001-8, 70774丁林松,黄丽琴. Qt 图形设计与嵌入式开发. 北京人民邮电出版社 . 2009-4:16205丁明,范书瑞,曾祥烨.ARM9 嵌入式系统设计与开发程序 .北京电子工业出版社,2006-4:46516Daniel Solin 著,袁鹏飞.24 小时学通 Qt 编程.北京人民邮电出版社,2000-11:61657杜冠.基于 ARM9 的嵌入式 Linux 系统移植的研究与实现.武汉华中科技大学,20078陈云鹤,徐晶.基于 QT 的媒体播放器的设计与实现 .微型电脑应用,Embedded 8 20069孙琼.嵌入式 Linux 应用程序开发详解.人民邮电出版社,2006