湖北汽车工业学院 Hubei Automotive Industrise Institute
课程设计说明书
课程名称 设计题目 班号 专业 学号 学生姓名 指导教师(签字)
起至日期 年 月 日—— 年 月 日
目录
一.目的与要求 ................................................................................................................... 3 二.设计内容 ........................................................................................................................ 3 三.总体方案设计 ............................................................................................................. 3 四.各个功能模块的主要实现程序 ..................................................................... 6
1.上翻页功能 ............................................................................... 6 2.下翻页功能 ............................................................................... 6 3.循环播放功能 ........................................................................... 7 4.暂停功能.................................................................................... 7 5.放大功能.................................................................................... 7 6.缩小功能.................................................................................... 8 7.浏览功能.................................................................................... 8 8.退出功能..................................................................................... 9 9.显示图片功能 ............................................................................ 9 10.其他主要函数 ......................................................................... 9 五.测试和调试 ................................................................................................................. 12
1.正常显示情况 .......................................................................... 12 2.放大后 ....................................................................................... 13 3.缩小后 ....................................................................................... 13 六.课程设计总结与体会 .......................................................................................... 14 七.参考文献 ...................................................................................................................... 15
一.目的与要求
本课程设计的目的是通过开发一个消费类电子产品——数字相框,了解嵌入式产品开发的主要步骤,包括需求分析、系统结构设计、图形界面设计、驱动程序、功能优化、系统测试等,从而培养学生独立完成比较复杂的实际系统设计的能力。
本课程设计要求学生根据实际应用的特点对产品进行完整的需求分析,形成比较完善的总体设计方案。同时,要求学生具备Linux操作系统下简单的设备驱动程序开发、图形用户接口设计的能力。此外,还要求读者掌握基本的系统功能及性能测试技术,从而具备比较全面的嵌入式应用系统开发能力。
二.设计内容
作为一个消费类电子产品,数码相框整个系统要完成的基本功能大致如下: 1、用户界面友好,操作简便。由于该产品的使用者大多是非专业人士,用户界面是否清晰明了、操作是否简捷方便成为用户是否能迅速接受此产品的重要因素。
2、数字相框的功能应包括以下方面: (1)在LCD屏上全屏循环显示多幅图像文件; (2)根据设定的时间间隔更新图像; (3)显示时间、日期; (4)通过按钮进行操作;
三.总体方案设计
根据数字相框的主要特点和设计功能那个要求,我们将课设分为以下几个步骤:
1、数字相框软硬件平台的选择
性能方面,由于数字图像的解码算法比较复杂,而且大量图片需要从外部Flash存储器中读取,所以对嵌入式微处理器的性能要求比较高。外部接口方面,该芯片最好能在外围直接支持CF卡的Compact Flash接口,还应提供按钮、LCD显示屏、触摸屏、声音输出通道等。在本课程设计中,采用了Intel的PXA270作
为微处理器,完全能满足上述硬件平台的要求。
数字相框属于消费类电子产品,对价格比较敏感,而嵌入式Linux操作系统上有比较丰富的软件资源、驱动程序和开发工具,因此本课程设计采用嵌入式Linux作为软件开发平台。在Linux操作系统平台上有多种嵌入式图形界面开发工具可供使用,主要包括MicroWindows、MuniGUI、TinyX和Qt/Embedded等几种。本课程设计将集中讨论在Qt/Embedded系统上数字相框的实现技术,当然也可以通过其他图形开发界面工具实现数字相框功能。
2、数字相框的软件总体设计
数字相框软件系统功能可以划分为三个模块: 1)图片浏览模块,可以通过按键控制选定某个图像或更新图像页(上一页、下一页)。
2)播放模块,对浏览界面选定的图片进行循环播放。 3)系统设置模块,可设置循环播放更换频率等。 3、基于Qt的图形界面程序设计
本设计中包括了浏览、循环播放和配置三个界面模块。这些模块之间需要进行通信,利用Qt提供的信号/槽机制很好地解决了这几问题,每个模块中都有自己定义的一些信号和槽,已发送给其他模块或者从其他模块接受到对应信号后作出响应。
数字相框在初始化时会扫描指定目录下(包括子目录)的所有支持图片文件,并将其存放在列表中,以备之后的浏览界面生成缩略图。本系统使用Qt提供的QDir类实现遍历目录的功能,在遍历目录的同时通过设置文件类型过滤位来获得指定文件,并使用一个双向的字符串指针链表来记录扫描得到的结果。 主控模块分为图片浏览模块,图片播放模块,系统设置模块。如图3所示。 图片浏览模块如图4所示,图品播放模块和系统设置模块如图所示
主控模块 图图系片片统
浏播设
览放置 模模模块图3主控 块块
图片浏览模块 上一张图片下一张图片
扩放图片缩小图片
本设计中包括了浏览、循环播放和配置三个界面模块。这些模块之间需要进行通信,利用Qt提供的信号/槽机制很好地解决了这几问题,每个模块中都有自己定义的一些信号和槽,已发送给其他模块或者从其他模块接受到对应信号后作出响应。
数字相框在初始化时会扫描指定目录下(包括子目录)的所有支持图片文件,并将其存放在列表中,以备之后的浏览界面生成缩略图。本系统使用Qt提供的QDir类实现遍历目录的功能,在遍历目录的同时通过设置文件类型过滤位来获得指定文件,并使用一个双向的字符串指针链表来记录扫描得到的结果。
四.各个功能模块的主要实现程序
1.上翻页功能
功能实现:首先确定当前显示的图片,点击下一张按钮,判断当前照片是不是第一张,不是就直接调出上一张照片显示,如果是的话,调出最后一张照片显示。
程序代码:
void Function::pre_area() //上一张图片功能实现 {
if( (i i--; } else if(i==0) { i=list.size()-1; } update(); } 2.下翻页功能 功能实现:首先确定当前显示的图片,点击下一张按钮,判断当前照片是不是第一张,不是就直接调出下一张照片显示,如果是的话,调出第一张照片显示。 程序代码: void Function::fun_area(){ if( ( (i>0) || (i==0) ) && ( (i update(); } 3.循环播放功能 功能实现:定义变量bool,并定义为假,点击循环播放时,重新定义bool为真,然后调用下翻页功能,那么就会不断地下翻页,这时再调用延时程序,控制好翻页的时间,从而实现了循环播放的功能。 程序代码: void Function::Start() { b=true; while(b){ fun_area(); delay(); } 4.暂停功能 功能实现:定义变量bool,点击暂停按钮时,定义bool为假,那么循环播放应为bool为假,就不会执行下去。 程序代码; void Function::Stop() { b=false; } 5.放大功能 功能实现:对于放大图片,首先赢控制放大比例,定义了水平比例和高度比例,再放大的时候是水平和高度同时放大,控制放大的倍数,不得大于5,。 点击放大按钮,每次水平和高度同时放大1.1倍,然后调用显示图片功能,吧放大的图片显示出来。 程序代码: void Function::Big() { if(w<5) { w=w*1.1; h=h*1.1; update(); } } 6.缩小功能 功能实现:对于放大图片,首先赢控制缩小比例,定义了水平比例和高度比例,再放大的时候是水平和高度同时缩小,控制缩小的倍数,不得小于0.1,。 点击放大按钮,每次水平和高度同时缩小0.9倍,然后调用显示图片功能,吧缩小的图片显示出来 程序代码: void Function::Small(){ if(w>0.1) { w=w*0.9; h=h*0.9; update(); } } 7.浏览功能 程序代码: void Function::fun_open() //dakai { timer->stop(); QStringList list; list=QFileDialog::getOpenFileNames(this,\"open E:\ for(j=list.begin();j pix.load(imge[k]); label->setPixmap(pix); k++; } } 8.退出功能 程序代码: void Function::fun_exit() { this->close(); } 9.显示图片功能 程序代码: void Function::paintEvent(QPaintEvent *) { QPainter painter(this); QFileInfo fileInfo = list.at(i); QString path=fileInfo.filePath(); QPixmap pixmap; pixmap.load(path); qDebug(\"\\n pi=%d\\n\ qDebug(path.toLatin1().data()); int x=( size().width()-(int)(pixmap.width()*w))/2; int y=( size().height()-(int)( pixmap.height()*h))/2; painter.drawPixmap(x,y,(int)(pixmap.width()*w),(int)(pixmap.height()*h),pixmap,0,0,0,0); qDebug(\"update %d,%d\ } 10.其他主要函数 程序代码: #include \"phoframe.h\" #include #include \"Function.h\" phoframe::phoframe() { function = new Function; } void phoframe::predisplay() { function->pre_area(); } void phoframe::nextdisplay() { function->fun_area(); } void phoframe::start() { function->Start(); } void phoframe::stop() { function->Stop(); } void phoframe::big() { function->Big(); } void phoframe::small() { function->Small(); } void phoframe::keyPressEvent(QKeyEvent *event) { if ( event->key() == Qt::Key_Right) { predisplay(); } if ( event->key() == Qt::Key_Left) { nextdisplay(); } } #include #include #include Function::Function(QWidget *parent) : QWidget(parent) { i=0; dir=\"e:/images\"; 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; //图片的水平比例 setWindowFlags(this->windowFlags() | Qt::SplashScreen); QPalette palette=this->palette(); setAutoFillBackground(true); palette.setBrush(QPalette::Window,QBrush(QPixmap(\"e:/photo/3..jpg\"))); setPalette(palette); update();//触 } QSize Function::minimumSizeHint() const { return QSize(10,10); } QSize Function::sizeHint() const { return QSize(10000, 10000);} 五.测试和调试 1.正常显示情况 2.放大后 3.缩小后 六.课程设计总结与体会 这次课程设计我选择的是第三个题目——数字相框,经历了选题,查找资料,编写程序,调试修改等阶段,终于成功设计出了一个数字相框 在学习嵌入式的过程中,感觉很空洞,很难理解,经理了这次课设,才让我明白,学习和生活是密不可分的,学习起源于生活。就像这次的嵌入式实验,刚开始的时候虽然很忙,但是不清楚自己目的是什么,将要做出去的东西在自己的脑海中没有印象,仅仅只是做一点多一点而已。 在完成课设的过程中,由于我的嵌入式课程学习的不好,开始的时候困难重重,后来在老师的指导下,上网超找资料,并且参考有关的书籍,对我帮助很大。这里我也发现原来网络上有这么多的学习资料,以前都忽视了。 当然,完成课设的时候,遇到有些功能的实现方法以前没有遇到过,在自己想办法的时候,有些想法也常常因为自己能力不够而无法实现,最后在自己思考以及和同学讨论的情况下,用其他的思路来实现 经过本次课设,也感觉到了自己的能力缺陷,缺乏知识,更加缺乏经验,冰冻三尺非一日之寒,在以后的学习中,要努力弥补自己的弱点,才能在能力水平方面才会有所提高。 七.参考文献 《QT Creator快速入门》——霍亚飞 编著 《嵌入式系统原理与设计》——陈文志 王总辉 编著 《Linux教程》——孟庆昌 牛欣源 因篇幅问题不能全部显示,请点此查看更多更全内容