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

下載本文檔

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

文檔簡(jiǎn)介

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

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

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

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

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

6、后的瀏覽界面生成縮略圖。本系統(tǒng)使用Qt提供的QDir類實(shí)現(xiàn)遍歷目錄的功能,在遍歷目錄的同時(shí)通過(guò)設(shè)置文件類型過(guò)濾位來(lái)獲得指定文件,并使用一個(gè)雙向的字符串指針鏈表來(lái)記錄掃描得到的結(jié)果。四.詳細(xì)設(shè)計(jì)根據(jù)以上的分析,將程序分為2個(gè)部分:一部分為用戶界面層、一部分為功能模塊層。4.1用戶界面層代碼設(shè)計(jì)如下定義頭文件庫(kù)window.h作用于:該類中的函數(shù)、用于實(shí)現(xiàn)用戶界面層的工作按鈕添加信號(hào)觸發(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對(duì)象用于顯示圖片private:protected: void keyPressEvent(QKeyEvent *event); private slots:void start(); void start1(); void start2(); void predisplay(); void nextdisplay(); void big(); void small();#endif用戶層圖形界面與按鈕信號(hào)槽功能實(shí)現(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");/“擴(kuò)放圖片”按鈕 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.功能模塊實(shí)現(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è)置圖片默認(rèn)路徑 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畫(huà)圖函數(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);/通過(guò)指針i

20、獲取該圖片的文件名 QString path=fileInfo.filePath(); /通過(guò)文件名獲得圖片的絕對(duì)路徑 QPixmap pixmap; pixmap.load(path);/加載圖片的絕對(duì)路徑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坐標(biāo)控制顯示位置painter.drawPixmap(x,

21、y,(int)(pixmap.width()*w),(int)(pixmap.height()*h),pixmap,0,0,0,0);/通過(guò)圖片的路徑畫(huà)出該圖片用于顯示qDebug("update %d,%d",pixmap.width(),pixmap.height();void RenderArea:fun_area()/下一張圖片功能實(shí)現(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)/當(dāng)圖片顯示到最后一張將指針指導(dǎo)第一張 i=0; update();void RenderArea:pre_area()/上一張圖片功能實(shí)現(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控制時(shí)間break;i+; else b=false;w=1;h=1;repaint();void RenderArea:Big()/擴(kuò)放圖片功能 if(w<4

24、)/最大比例 w=w*1.1;/每單擊按鈕圖片擴(kuò)大比例1.1 h=h*1.1; update(); void RenderArea:Small()/圖片縮小功能 if(w>0.1)/最小比例 w=w*0.9; h=h*0.9; update(); 效果圖:五.測(cè)試與調(diào)試程序的功能實(shí)現(xiàn)部分是使用Qt 中QDir、 QPixmap類實(shí)現(xiàn)的。通過(guò)QDir來(lái)獲得圖片的路徑,通過(guò)QPixmap使用QDir得到的路徑來(lái)顯示圖片。所以在程序調(diào)試過(guò)程中出現(xiàn)了2個(gè)問(wèn)題5.1.文件路徑加載問(wèn)題: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);問(wèn)題如下:?jiǎn)栴}:當(dāng)圖片顯示最后一張圖片繼續(xù)點(diǎn)下一張圖片按鈕的時(shí)候,圖片路勁是正確的,但窗口顯示的仍是最后一張圖片分析原因:因?yàn)镼Pixmap pixmap為全局變量,在圖片瀏覽功能時(shí) pixmap.load(path)將所有的圖片路徑都加載進(jìn)去,雖然指針iQFileInfo fileInfo = list.at(i) 控制圖片的路徑,用qDebug打印路徑是正確的,但QPixmap pixmap 一直取的是所有圖片中的最后一張圖片的路徑。解決的方案是:將QPixmap pixmap設(shè)置為局部變量,位置位于void RenderArea:paintEvent(QPaintEvent *)畫(huà)圖函數(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)控制播放的問(wèn)題QPixmap pixmap是通過(guò)觸發(fā)調(diào)用void RenderArea

溫馨提示

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

評(píng)論

0/150

提交評(píng)論