數(shù)碼相框嵌入式課程設(shè)計報告_第1頁
數(shù)碼相框嵌入式課程設(shè)計報告_第2頁
數(shù)碼相框嵌入式課程設(shè)計報告_第3頁
數(shù)碼相框嵌入式課程設(shè)計報告_第4頁
數(shù)碼相框嵌入式課程設(shè)計報告_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上武漢工業(yè)學院計算機系數(shù)碼相框設(shè)計實驗報告課程:嵌入式班級:網(wǎng)絡(luò)工程081姓名:彭曉曉學號:日期:2011-11-28一設(shè)計目的開設(shè)本課程設(shè)計的目的是,通過本課程設(shè)計,提高學生的分析問題、解決問題的能力,鞏固嵌入式系統(tǒng)的基本理論知識,進一步了解和掌握課程中所講授的概念,方法。同時通過本課程設(shè)計,全面綜合應用所學過的基礎(chǔ)知識,建立一個完整的嵌入式系統(tǒng)的開發(fā)過程的概念,并掌握其中的主要原理和方法本課程設(shè)計的目的是通過開發(fā)一個消費類電子產(chǎn)品數(shù)字相框,了解嵌入式產(chǎn)品開發(fā)的主要步驟,包括需求分析、系統(tǒng)結(jié)構(gòu)設(shè)計、圖形界面設(shè)計、驅(qū)動程序、功能優(yōu)化、系統(tǒng)測試等,從而培養(yǎng)學生獨立完成比較

2、復雜的實際系統(tǒng)設(shè)計的能力。二設(shè)計內(nèi)容和要求2.1設(shè)計的內(nèi)容作為一個消費類電子產(chǎn)品,數(shù)碼相框整個系統(tǒng)要完成的基本功能大致如下:1、用戶界面友好,操作簡便。由于該產(chǎn)品的使用者大多是非專業(yè)人士,用戶界面是否清晰明了、操作是否簡捷方便成為用戶是否能迅速接受此產(chǎn)品的重要因素。2、數(shù)字相框的功能應包括以下方面:(1)在LCD屏上全屏循環(huán)顯示多幅圖像文件;(2)根據(jù)設(shè)定的時間間隔更新圖像;(3)顯示時間、日期;(4)通過按鈕進行操作;2.2 要求本課程設(shè)計要求學生根據(jù)實際應用的特點對產(chǎn)品進行完整的需求分析,形成比較完善的總體設(shè)計方案。同時,要求學生具備Linux操作系統(tǒng)下簡單的設(shè)備驅(qū)動程序開發(fā)、圖形用戶接口

3、設(shè)計的能力。此外,還要求讀者掌握基本的系統(tǒng)功能及性能測試技術(shù),從而具備比較全面的嵌入式應用系統(tǒng)開發(fā)能力。三總體設(shè)計主要步驟和方法根據(jù)數(shù)字相框的主要特點和設(shè)計功能那個要求,我們將課設(shè)分為以下幾個步驟:3.1、數(shù)字相框軟硬件平臺的選擇性能方面,由于數(shù)字圖像的解碼算法比較復雜,而且大量圖片需要從外部Flash存儲器中讀取,所以對嵌入式微處理器的性能要求比較高。外部接口方面,該芯片最好能在外圍直接支持CF卡的Compact Flash接口,還應提供按鈕、LCD顯示屏、觸摸屏、聲音輸出通道等。在本課程設(shè)計中,采用了Intel的PXA270作為微處理器,完全能滿足上述硬件平臺的要求。數(shù)字相框?qū)儆谙M類電子

4、產(chǎn)品,對價格比較敏感,而嵌入式Linux操作系統(tǒng)上有比較豐富的軟件資源、驅(qū)動程序和開發(fā)工具,因此本課程設(shè)計采用嵌入式Linux作為軟件開發(fā)平臺。在Linux操作系統(tǒng)平臺上有多種嵌入式圖形界面開發(fā)工具可供使用,主要包括MicroWindows、MuniGUI、TinyX和Qt/Embedded等幾種。本課程設(shè)計將集中討論在Qt/Embedded系統(tǒng)上數(shù)字相框的實現(xiàn)技術(shù),當然也可以通過其他圖形開發(fā)界面工具實現(xiàn)數(shù)字相框功能。3.2、數(shù)字相框的軟件總體設(shè)計數(shù)字相框軟件系統(tǒng)功能可以劃分為三個模塊:1)圖片瀏覽模塊,可以通過按鍵控制選定某個圖像或更新圖像頁(上一頁、下一頁)。2)播放模塊,對瀏覽界面選定的

5、圖片進行循環(huán)播放。3)系統(tǒng)設(shè)置模塊,可設(shè)置循環(huán)播放更換頻率等。3.2.1、功能模塊組織架構(gòu)圖功能模塊圖片瀏覽模塊圖片播放模塊系統(tǒng)設(shè)置模塊圖片瀏覽模塊上一張圖片下一張圖片縮 小 圖 片擴 放 圖 片圖片播放模塊系統(tǒng)設(shè)置模塊快速播放圖片中速播放圖片慢速播放圖片3.3、基于Qt的圖形界面程序設(shè)計本設(shè)計中包括了瀏覽、循環(huán)播放和配置三個界面模塊。這些模塊之間需要進行通信,利用Qt提供的信號/槽機制很好地解決了這幾問題,每個模塊中都有自己定義的一些信號和槽,已發(fā)送給其他模塊或者從其他模塊接受到對應信號后作出響應。數(shù)字相框在初始化時會掃描指定目錄下(包括子目錄)的所有支持圖片文件,并將其存放在列表中,以備之

6、后的瀏覽界面生成縮略圖。本系統(tǒng)使用Qt提供的QDir類實現(xiàn)遍歷目錄的功能,在遍歷目錄的同時通過設(shè)置文件類型過濾位來獲得指定文件,并使用一個雙向的字符串指針鏈表來記錄掃描得到的結(jié)果。四.詳細設(shè)計根據(jù)以上的分析,將程序分為2個部分:一部分為用戶界面層、一部分為功能模塊層。4.1用戶界面層代碼設(shè)計如下定義頭文件庫window.h作用于:該類中的函數(shù)、用于實現(xiàn)用戶界面層的工作按鈕添加信號觸發(fā)槽#ifndef WINDOW_H#define WINDOW_H#include <QPixmap>#include <QWidget>class RenderArea;class Win

7、dow : 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用戶層圖形界面與按鈕信號槽功能實現(xiàn)代碼:#inc

8、lude "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 QPushB

9、utton("Fstart"); /“快速播放”按鈕 QPushButton *startbutton1=new QPushButton("Mstart");/“中速播放”按鈕 QPushButton *startbutton2=new QPushButton("Sstart");/“慢速播放”按鈕 QPushButton *b=new QPushButton("big");/“擴放圖片”按鈕 QPushButton *s=new QPushButton("small");/“縮小圖片”按鈕 Q

10、PushButton *exitbutton=new QPushButton("exit");/“退出”按鈕 QHBoxLayout *belowlayout=new QHBoxLayout;/水平布局 QHBoxLayout *belowlayout1=new QHBoxLayout; QVBoxLayout *mainlayout=new QVBoxLayout;/垂直布局 belowlayout->addStretch(); belowlayout->addWidget(frontbutton); belowlayout->addWidget(nex

11、tbutton); belowlayout->addStretch(); belowlayout->addWidget(startbutton); belowlayout->addWidget(startbutton1); belowlayout->addWidget(startbutton2); belowlayout->addStretch(); belowlayout->addWidget(b); belowlayout->addWidget(s); belowlayout->addStretch(); belowlayout->ad

12、dWidget(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

13、: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("D

14、igital photo frame"); connect(frontbutton,SIGNAL(clicked(), this,SLOT( predisplay() ); /單擊按鈕觸發(fā)函數(shù) connect(nextbutton,SIGNAL(clicked(), this,SLOT(nextdisplay(); connect(startbutton,SIGNAL(clicked(), this,SLOT(start(); connect(startbutton1,SIGNAL(clicked(), this,SLOT(start1(); connect(startbutton2

15、,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:

16、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(); i

17、f ( event->key() = Qt:Key_Left) nextdisplay(); 效果圖如下:4.2.功能模塊實現(xiàn)代碼:#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=&q

18、uot;/home/Katrina/wisdom/fxy1/photo" /設(shè)置圖片默認路徑 QDir DIR; if(!DIR.exists(dir) return ; QDir picdir(dir); QStringList filters; filters << "*.bmp" << "*.jpg" << "*.png"<<"*.gif" /支持顯示圖片的格式 picdir.setNameFilters(filters); list = picdir

19、.entryInfoList(); h=1;/圖片的高度比例 w=1;/圖片的水平比例 update();/觸發(fā)paintEvent畫圖函數(shù)將圖片顯示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

20、獲取該圖片的文件名 QString path=fileInfo.filePath(); /通過文件名獲得圖片的絕對路徑 QPixmap pixmap; pixmap.load(path);/加載圖片的絕對路徑qDebug("n pi=%dn",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,

21、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()/下一張圖片功能實現(xiàn)w=1;h=1; if( (list.size()=0)| list.size()=1)/判斷是否有圖片用于顯示 return ; if( ( (i>0) | (i=0) ) && ( (i<list.si

22、ze()-1) ) ) /單擊按鈕則向下顯示一張圖片 i+; else if(i=(list.size()-1)/當圖片顯示到最后一張將指針指導第一張 i=0; update();void RenderArea:pre_area()/上一張圖片功能實現(xiàn)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)/循環(huán)播

23、放圖片功能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

24、)/最大比例 w=w*1.1;/每單擊按鈕圖片擴大比例1.1 h=h*1.1; update(); void RenderArea:Small()/圖片縮小功能 if(w>0.1)/最小比例 w=w*0.9; h=h*0.9; update(); 效果圖:五.測試與調(diào)試程序的功能實現(xiàn)部分是使用Qt 中QDir、 QPixmap類實現(xiàn)的。通過QDir來獲得圖片的路徑,通過QPixmap使用QDir得到的路徑來顯示圖片。所以在程序調(diào)試過程中出現(xiàn)了2個問題5.1.文件路徑加載問題:QPixmap pixmap;/全局變量QFileInfoList list;/全局變量 QString dir=

25、"/home/Katrina/wisdom/fxy1/photo" QDir picdir(dir); QStringList filters;filters << "*.bmp" << "*.jpg" << "*.png"<<"*.gif" picdir.setNameFilters(filters); list = picdir.entryInfoList();QFileInfo fileInfo = list.at(i);QString pa

26、th=fileInfo.filePath(); pixmap.load(path);問題如下:問題:當圖片顯示最后一張圖片繼續(xù)點下一張圖片按鈕的時候,圖片路勁是正確的,但窗口顯示的仍是最后一張圖片分析原因:因為QPixmap pixmap為全局變量,在圖片瀏覽功能時 pixmap.load(path)將所有的圖片路徑都加載進去,雖然指針iQFileInfo fileInfo = list.at(i) 控制圖片的路徑,用qDebug打印路徑是正確的,但QPixmap pixmap 一直取的是所有圖片中的最后一張圖片的路徑。解決的方案是:將QPixmap pixmap設(shè)置為局部變量,位置位于void RenderArea:paintEvent(QPaintEvent *)畫圖函數(shù)的作用域。void RenderArea:paintEvent(QPaintEvent *) QPainter painter(this);QFileInfo fileInfo = list.at(i); QString path=fileInfo.filePath(); QPixmap pixmap;pixmap.load(path);5.2.循環(huán)控制播放的問題QPixmap pixmap是通過觸發(fā)調(diào)用void RenderArea

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論