版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p><b> 目錄</b></p><p><b> 一.目的與要求1</b></p><p><b> 二.設(shè)計內(nèi)容1</b></p><p> 三.總體方案設(shè)計2</p><p> 四.各個功能模塊的主要實現(xiàn)程序6</p>&l
2、t;p><b> 1.上翻頁功能6</b></p><p><b> 2.下翻頁功能6</b></p><p> 3.循環(huán)播放功能7</p><p><b> 4.暫停功能7</b></p><p><b> 5.放大功能7</b>
3、;</p><p><b> 6.縮小功能8</b></p><p><b> 7.瀏覽功能8</b></p><p><b> 8.退出功能9</b></p><p> 9.顯示圖片功能9</p><p> 10.其他主要函數(shù)9&l
4、t;/p><p><b> 五.測試和調(diào)試9</b></p><p> 1.正常顯示情況9</p><p><b> 2.放大后10</b></p><p><b> 3.縮小后10</b></p><p> 六.課程設(shè)計總結(jié)與體會14&
5、lt;/p><p><b> 七.參考文獻15</b></p><p><b> 一.目的與要求</b></p><p> 本課程設(shè)計的目的是通過開發(fā)一個消費類電子產(chǎn)品——數(shù)字相框,了解嵌入式產(chǎn)品開發(fā)的主要步驟,包括需求分析、系統(tǒng)結(jié)構(gòu)設(shè)計、圖形界面設(shè)計、驅(qū)動程序、功能優(yōu)化、系統(tǒng)測試等,從而培養(yǎng)學(xué)生獨立完成比較復(fù)雜的實際
6、系統(tǒng)設(shè)計的能力。</p><p> 本課程設(shè)計要求學(xué)生根據(jù)實際應(yīng)用的特點對產(chǎn)品進行完整的需求分析,形成比較完善的總體設(shè)計方案。同時,要求學(xué)生具備Linux操作系統(tǒng)下簡單的設(shè)備驅(qū)動程序開發(fā)、圖形用戶接口設(shè)計的能力。此外,還要求讀者掌握基本的系統(tǒng)功能及性能測試技術(shù),從而具備比較全面的嵌入式應(yīng)用系統(tǒng)開發(fā)能力。</p><p><b> 二.設(shè)計內(nèi)容</b></p&
7、gt;<p> 作為一個消費類電子產(chǎn)品,數(shù)碼相框整個系統(tǒng)要完成的基本功能大致如下:</p><p> 1、用戶界面友好,操作簡便。由于該產(chǎn)品的使用者大多是非專業(yè)人士,用戶界面是否清晰明了、操作是否簡捷方便成為用戶是否能迅速接受此產(chǎn)品的重要因素。</p><p> 2、數(shù)字相框的功能應(yīng)包括以下方面:</p><p> ?。?)在LCD屏上全屏循環(huán)顯
8、示多幅圖像文件;</p><p> ?。?)根據(jù)設(shè)定的時間間隔更新圖像;</p><p> ?。?)顯示時間、日期;</p><p> ?。?)通過按鈕進行操作;</p><p><b> 三.總體方案設(shè)計</b></p><p> 根據(jù)數(shù)字相框的主要特點和設(shè)計功能那個要求,我們將課設(shè)分為以下
9、幾個步驟:</p><p> 1、數(shù)字相框軟硬件平臺的選擇</p><p> 性能方面,由于數(shù)字圖像的解碼算法比較復(fù)雜,而且大量圖片需要從外部Flash存儲器中讀取,所以對嵌入式微處理器的性能要求比較高。外部接口方面,該芯片最好能在外圍直接支持CF卡的Compact Flash接口,還應(yīng)提供按鈕、LCD顯示屏、觸摸屏、聲音輸出通道等。在本課程設(shè)計中,采用了Intel的PXA270作為微
10、處理器,完全能滿足上述硬件平臺的要求。</p><p> 數(shù)字相框?qū)儆谙M類電子產(chǎn)品,對價格比較敏感,而嵌入式Linux操作系統(tǒng)上有比較豐富的軟件資源、驅(qū)動程序和開發(fā)工具,因此本課程設(shè)計采用嵌入式Linux作為軟件開發(fā)平臺。在Linux操作系統(tǒng)平臺上有多種嵌入式圖形界面開發(fā)工具可供使用,主要包括MicroWindows、MuniGUI、TinyX和Qt/Embedded等幾種。本課程設(shè)計將集中討論在Qt/Emb
11、edded系統(tǒng)上數(shù)字相框的實現(xiàn)技術(shù),當(dāng)然也可以通過其他圖形開發(fā)界面工具實現(xiàn)數(shù)字相框功能。</p><p> 2、數(shù)字相框的軟件總體設(shè)計</p><p> 數(shù)字相框軟件系統(tǒng)功能可以劃分為三個模塊:</p><p> 1)圖片瀏覽模塊,可以通過按鍵控制選定某個圖像或更新圖像頁(上一頁、下一頁)。</p><p> 2)播放模塊,對瀏覽界面
12、選定的圖片進行循環(huán)播放。</p><p> 3)系統(tǒng)設(shè)置模塊,可設(shè)置循環(huán)播放更換頻率等。</p><p> 3、基于Qt的圖形界面程序設(shè)計</p><p> 本設(shè)計中包括了瀏覽、循環(huán)播放和配置三個界面模塊。這些模塊之間需要進行通信,利用Qt提供的信號/槽機制很好地解決了這幾問題,每個模塊中都有自己定義的一些信號和槽,已發(fā)送給其他模塊或者從其他模塊接受到對應(yīng)信號
13、后作出響應(yīng)。</p><p> 數(shù)字相框在初始化時會掃描指定目錄下(包括子目錄)的所有支持圖片文件,并將其存放在列表中,以備之后的瀏覽界面生成縮略圖。本系統(tǒng)使用Qt提供的QDir類實現(xiàn)遍歷目錄的功能,在遍歷目錄的同時通過設(shè)置文件類型過濾位來獲得指定文件,并使用一個雙向的字符串指針鏈表來記錄掃描得到的結(jié)果。</p><p> 主控模塊分為圖片瀏覽模塊,圖片播放模塊,系統(tǒng)設(shè)置模塊。如圖3所
14、示。</p><p> 圖片瀏覽模塊如圖4所示,圖品播放模塊和系統(tǒng)設(shè)置模塊如圖所示</p><p><b> 圖3主控</b></p><p> 本設(shè)計中包括了瀏覽、循環(huán)播放和配置三個界面模塊。這些模塊之間需要進行通信,利用Qt提供的信號/槽機制很好地解決了這幾問題,每個模塊中都有自己定義的一些信號和槽,已發(fā)送給其他模塊或者從其他模塊接受
15、到對應(yīng)信號后作出響應(yīng)。</p><p> 數(shù)字相框在初始化時會掃描指定目錄下(包括子目錄)的所有支持圖片文件,并將其存放在列表中,以備之后的瀏覽界面生成縮略圖。本系統(tǒng)使用Qt提供的QDir類實現(xiàn)遍歷目錄的功能,在遍歷目錄的同時通過設(shè)置文件類型過濾位來獲得指定文件,并使用一個雙向的字符串指針鏈表來記錄掃描得到的結(jié)果。</p><p> 四.各個功能模塊的主要實現(xiàn)程序</p>
16、<p><b> 1.上翻頁功能</b></p><p> 功能實現(xiàn):首先確定當(dāng)前顯示的圖片,點擊下一張按鈕,判斷當(dāng)前照片是不是第一張,不是就直接調(diào)出上一張照片顯示,如果是的話,調(diào)出最后一張照片顯示。</p><p><b> 程序代碼:</b></p><p> void Function::pre_
17、area() //上一張圖片功能實現(xiàn)</p><p><b> {</b></p><p> if( (i<list.size() ) && (i>0) )</p><p><b> {</b></p><p><b> i--;<
18、;/b></p><p><b> }</b></p><p> else if(i==0)</p><p><b> {</b></p><p> i=list.size()-1;</p><p><b> }</b></p>
19、;<p><b> update();</b></p><p><b> }</b></p><p><b> 2.下翻頁功能</b></p><p> 功能實現(xiàn):首先確定當(dāng)前顯示的圖片,點擊下一張按鈕,判斷當(dāng)前照片是不是第一張,不是就直接調(diào)出下一張照片顯示,如果是的話,調(diào)出第一
20、張照片顯示。</p><p><b> 程序代碼:</b></p><p> void Function::fun_area(){</p><p> if( ( (i>0) || (i==0) ) && ( (i<list.size()-1) ) ){ </p><p>
21、<b> i++;</b></p><p><b> }</b></p><p> else if(i==(list.size()-1)){</p><p><b> i=0;</b></p><p><b> }</b></p&
22、gt;<p><b> update();</b></p><p><b> }</b></p><p><b> 3.循環(huán)播放功能</b></p><p> 功能實現(xiàn):定義變量bool,并定義為假,點擊循環(huán)播放時,重新定義bool為真,然后調(diào)用下翻頁功能,那么就會不斷地下翻頁,
23、這時再調(diào)用延時程序,控制好翻頁的時間,從而實現(xiàn)了循環(huán)播放的功能。</p><p><b> 程序代碼:</b></p><p> void Function::Start() </p><p><b> {</b></p><p><b> b=true;</b>&l
24、t;/p><p><b> while(b){</b></p><p> fun_area();</p><p><b> delay();</b></p><p><b> }</b></p><p><b> 4.暫停功能</b
25、></p><p> 功能實現(xiàn):定義變量bool,點擊暫停按鈕時,定義bool為假,那么循環(huán)播放應(yīng)為bool為假,就不會執(zhí)行下去。</p><p><b> 程序代碼;</b></p><p> void Function::Stop()</p><p><b> {</b></
26、p><p><b> b=false;</b></p><p><b> }</b></p><p><b> 5.放大功能</b></p><p> 功能實現(xiàn):對于放大圖片,首先贏控制放大比例,定義了水平比例和高度比例,再放大的時候是水平和高度同時放大,控制放大的倍數(shù),不
27、得大于5,。</p><p> 點擊放大按鈕,每次水平和高度同時放大1.1倍,然后調(diào)用顯示圖片功能,吧放大的圖片顯示出來。</p><p><b> 程序代碼:</b></p><p> void Function::Big() </p><p><b>
28、 {</b></p><p> if(w<5) </p><p><b> {</b></p><p> w=w*1.1;</p><p><b> h=h*1.1;</b></p><p><b>
29、update();</b></p><p><b> }</b></p><p><b> }</b></p><p><b> 6.縮小功能</b></p><p> 功能實現(xiàn):對于放大圖片,首先贏控制縮小比例,定義了水平比例和高度比例,再放大的時候是水平
30、和高度同時縮小,控制縮小的倍數(shù),不得小于0.1,。</p><p> 點擊放大按鈕,每次水平和高度同時縮小0.9倍,然后調(diào)用顯示圖片功能,吧縮小的圖片顯示出來</p><p><b> 程序代碼:</b></p><p> void Function::Small(){ </p><p> if(w&
31、gt;0.1) </p><p><b> {</b></p><p><b> w=w*0.9;</b></p><p><b> h=h*0.9;</b></p><p><b> update();</b></p>
32、;<p><b> }</b></p><p><b> }</b></p><p><b> 7.瀏覽功能</b></p><p><b> 程序代碼:</b></p><p> void Function::fun_open()
33、 //dakai</p><p><b> {</b></p><p> timer->stop();</p><p> QStringList list;</p><p> list=QFileDialog::getOpenFileNames(this,"open E:",
34、"/","*.jpg");</p><p> for(j=list.begin();j<list.end();j++)</p><p><b> {</b></p><p> imge[k]=*j;</p><p> pix.load(imge[k]);</p&
35、gt;<p> label->setPixmap(pix);</p><p><b> k++;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> 8.退出功能</b>
36、;</p><p><b> 程序代碼:</b></p><p> void Function::fun_exit() </p><p><b> {</b></p><p> this->close();</p><p><b> }&
37、lt;/b></p><p><b> 9.顯示圖片功能</b></p><p><b> 程序代碼:</b></p><p> void Function::paintEvent(QPaintEvent *)</p><p><b> {</b></p&g
38、t;<p> QPainter painter(this);</p><p> QFileInfo fileInfo = list.at(i); </p><p> QString path=fileInfo.filePath(); </p><p> QPixmap pixmap;</p><p&g
39、t; pixmap.load(path); </p><p> qDebug("\n pi=%d\n",i);</p><p> qDebug(path.toLatin1().data());</p><p> int x=( size().width()-(int)(pixmap.width()*w))/2;</p&g
40、t;<p> int y=( size().height()-(int)( pixmap.height()*h))/2; </p><p> painter.drawPixmap(x,y,(int)(pixmap.width()*w),(int)(pixmap.height()*h),pixmap,0,0,0,0);</p><p> qDebug("up
41、date %d,%d",pixmap.width(),pixmap.height());</p><p><b> }</b></p><p><b> 10.其他主要函數(shù)</b></p><p><b> 程序代碼:</b></p><p> #includ
42、e "phoframe.h"</p><p> #include <QtGui></p><p> #include "Function.h"</p><p> phoframe::phoframe()</p><p><b> {</b></p>
43、<p> function = new Function;</p><p><b> }</b></p><p> void phoframe::predisplay()</p><p><b> {</b></p><p> function->pre_area();&
44、lt;/p><p><b> }</b></p><p> void phoframe::nextdisplay()</p><p><b> {</b></p><p> function->fun_area();</p><p><b> }<
45、/b></p><p> void phoframe::start()</p><p><b> {</b></p><p> function->Start();</p><p><b> }</b></p><p> void phoframe::s
46、top()</p><p><b> {</b></p><p> function->Stop();</p><p><b> }</b></p><p> void phoframe::big()</p><p><b> {</b>
47、</p><p> function->Big();</p><p><b> }</b></p><p> void phoframe::small()</p><p><b> {</b></p><p> function->Small();<
48、;/p><p><b> }</b></p><p> void phoframe::keyPressEvent(QKeyEvent *event)</p><p><b> {</b></p><p> if ( event->key() == Qt::Key_Right)</p&
49、gt;<p><b> {</b></p><p> predisplay();</p><p><b> }</b></p><p> if ( event->key() == Qt::Key_Left)</p><p><b> {</b>&l
50、t;/p><p> nextdisplay();</p><p><b> }</b></p><p><b> }</b></p><p> #include <QtGui></p><p> #include <qvariant.h><
51、/p><p> #include <QLabel></p><p> #include <qwhatsthis.h></p><p> #include <qpainter.h></p><p> #include "Function.h"</p><p>
52、 bool b=false;</p><p> Function::Function(QWidget *parent)</p><p> : QWidget(parent)</p><p><b> {</b></p><p> i=0;</p><p> dir=
53、"e:/images"; </p><p><b> QDir DIR;</b></p><p> if(!DIR.exists(dir))</p><p><b> {</b></p><p><b> return ;</b></
54、p><p><b> }</b></p><p> QDir picdir(dir);</p><p> QStringList filters;</p><p> filters << "*.bmp" << "*.jpg" << &quo
55、t;*.png"<<"*.gif"; </p><p> picdir.setNameFilters(filters);</p><p> list = picdir.entryInfoList();</p><p> h=1;//圖片的高度比例</p><p> w=1;//圖片的水
56、平比例</p><p> setWindowFlags(this->windowFlags() | Qt::SplashScreen);</p><p> QPalette palette=this->palette();</p><p> setAutoFillBackground(true);</p><p> pal
57、ette.setBrush(QPalette::Window,QBrush(QPixmap("e:/photo/3..jpg")));</p><p> setPalette(palette);</p><p> update();//觸</p><p><b> }</b></p><p>
58、 QSize Function::minimumSizeHint() const</p><p><b> {</b></p><p> return QSize(10,10);</p><p><b> }</b></p><p> QSize Function::sizeHint() c
59、onst</p><p><b> {</b></p><p> return QSize(10000, 10000);}</p><p><b> 五.測試和調(diào)試</b></p><p><b> 1.正常顯示情況</b></p><p>&l
60、t;b> 2.放大后</b></p><p><b> 3.縮小后</b></p><p> 六.課程設(shè)計總結(jié)與體會</p><p> 這次課程設(shè)計我選擇的是第三個題目——數(shù)字相框,經(jīng)歷了選題,查找資料,編寫程序,調(diào)試修改等階段,終于成功設(shè)計出了一個數(shù)字相框</p><p> 在學(xué)習(xí)嵌入式的過
61、程中,感覺很空洞,很難理解,經(jīng)理了這次課設(shè),才讓我明白,學(xué)習(xí)和生活是密不可分的,學(xué)習(xí)起源于生活。就像這次的嵌入式實驗,剛開始的時候雖然很忙,但是不清楚自己目的是什么,將要做出去的東西在自己的腦海中沒有印象,僅僅只是做一點多一點而已。</p><p> 在完成課設(shè)的過程中,由于我的嵌入式課程學(xué)習(xí)的不好,開始的時候困難重重,后來在老師的指導(dǎo)下,上網(wǎng)超找資料,并且參考有關(guān)的書籍,對我?guī)椭艽?。這里我也發(fā)現(xiàn)原來網(wǎng)絡(luò)上有
62、這么多的學(xué)習(xí)資料,以前都忽視了。</p><p> 當(dāng)然,完成課設(shè)的時候,遇到有些功能的實現(xiàn)方法以前沒有遇到過,在自己想辦法的時候,有些想法也常常因為自己能力不夠而無法實現(xiàn),最后在自己思考以及和同學(xué)討論的情況下,用其他的思路來實現(xiàn)</p><p> 經(jīng)過本次課設(shè),也感覺到了自己的能力缺陷,缺乏知識,更加缺乏經(jīng)驗,冰凍三尺非一日之寒,在以后的學(xué)習(xí)中,要努力彌補自己的弱點,才能在能力水平方
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 嵌入式課程設(shè)計報告2
- 嵌入式數(shù)碼相框設(shè)計
- 嵌入式課程設(shè)計報告---嵌入式文件鎖應(yīng)用
- 嵌入式課程設(shè)計報告 (2)
- 嵌入式課程設(shè)計報告91452
- 嵌入式技術(shù)課程設(shè)計--數(shù)字時鐘
- 《嵌入式系統(tǒng)設(shè)計》課程設(shè)計報告
- 嵌入式課程設(shè)計
- 嵌入式課程設(shè)計
- 嵌入式課程設(shè)計
- 嵌入式課程設(shè)計
- 嵌入式課程設(shè)計
- 嵌入式課程設(shè)計
- 基于sopc的嵌入式數(shù)字秒表課程設(shè)計
- 嵌入式課程設(shè)計報告--qtopia移植
- 嵌入式課程設(shè)計報告畢業(yè)論文
- 嵌入式課程設(shè)計報告畢業(yè)論文
- 嵌入式硬件課程設(shè)計報告---電梯系統(tǒng)
- 嵌入式課程設(shè)計---嵌入式網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)
- 嵌入式課程設(shè)計--串口通信
評論
0/150
提交評論