版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 目錄</b></p><p><b> 一.目的與要求1</b></p><p><b> 二.設(shè)計(jì)內(nèi)容1</b></p><p> 三.總體方案設(shè)計(jì)2</p><p> 四.各個(gè)功能模塊的主要實(shí)現(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> 五.測(cè)試和調(diào)試9</b></p><p> 1.正常顯示情況9</p><p><b> 2.放大后10</b></p><p><b> 3.縮小后10</b></p><p> 六.課程設(shè)計(jì)總結(jié)與體會(huì)14&
5、lt;/p><p><b> 七.參考文獻(xiàn)15</b></p><p><b> 一.目的與要求</b></p><p> 本課程設(shè)計(jì)的目的是通過開發(fā)一個(gè)消費(fèi)類電子產(chǎn)品——數(shù)字相框,了解嵌入式產(chǎn)品開發(fā)的主要步驟,包括需求分析、系統(tǒng)結(jié)構(gòu)設(shè)計(jì)、圖形界面設(shè)計(jì)、驅(qū)動(dòng)程序、功能優(yōu)化、系統(tǒng)測(cè)試等,從而培養(yǎng)學(xué)生獨(dú)立完成比較復(fù)雜的實(shí)際
6、系統(tǒng)設(shè)計(jì)的能力。</p><p> 本課程設(shè)計(jì)要求學(xué)生根據(jù)實(shí)際應(yīng)用的特點(diǎn)對(duì)產(chǎn)品進(jìn)行完整的需求分析,形成比較完善的總體設(shè)計(jì)方案。同時(shí),要求學(xué)生具備Linux操作系統(tǒng)下簡單的設(shè)備驅(qū)動(dòng)程序開發(fā)、圖形用戶接口設(shè)計(jì)的能力。此外,還要求讀者掌握基本的系統(tǒng)功能及性能測(cè)試技術(shù),從而具備比較全面的嵌入式應(yīng)用系統(tǒng)開發(fā)能力。</p><p><b> 二.設(shè)計(jì)內(nèi)容</b></p&
7、gt;<p> 作為一個(gè)消費(fèi)類電子產(chǎn)品,數(shù)碼相框整個(gè)系統(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è)定的時(shí)間間隔更新圖像;</p><p> ?。?)顯示時(shí)間、日期;</p><p> (4)通過按鈕進(jìn)行操作;</p><p><b> 三.總體方案設(shè)計(jì)</b></p><p> 根據(jù)數(shù)字相框的主要特點(diǎn)和設(shè)計(jì)功能那個(gè)要求,我們將課設(shè)分為以下
9、幾個(gè)步驟:</p><p> 1、數(shù)字相框軟硬件平臺(tái)的選擇</p><p> 性能方面,由于數(shù)字圖像的解碼算法比較復(fù)雜,而且大量圖片需要從外部Flash存儲(chǔ)器中讀取,所以對(duì)嵌入式微處理器的性能要求比較高。外部接口方面,該芯片最好能在外圍直接支持CF卡的Compact Flash接口,還應(yīng)提供按鈕、LCD顯示屏、觸摸屏、聲音輸出通道等。在本課程設(shè)計(jì)中,采用了Intel的PXA270作為微
10、處理器,完全能滿足上述硬件平臺(tái)的要求。</p><p> 數(shù)字相框?qū)儆谙M(fèi)類電子產(chǎn)品,對(duì)價(jià)格比較敏感,而嵌入式Linux操作系統(tǒng)上有比較豐富的軟件資源、驅(qū)動(dòng)程序和開發(fā)工具,因此本課程設(shè)計(jì)采用嵌入式Linux作為軟件開發(fā)平臺(tái)。在Linux操作系統(tǒng)平臺(tái)上有多種嵌入式圖形界面開發(fā)工具可供使用,主要包括MicroWindows、MuniGUI、TinyX和Qt/Embedded等幾種。本課程設(shè)計(jì)將集中討論在Qt/Emb
11、edded系統(tǒng)上數(shù)字相框的實(shí)現(xiàn)技術(shù),當(dāng)然也可以通過其他圖形開發(fā)界面工具實(shí)現(xiàn)數(shù)字相框功能。</p><p> 2、數(shù)字相框的軟件總體設(shè)計(jì)</p><p> 數(shù)字相框軟件系統(tǒng)功能可以劃分為三個(gè)模塊:</p><p> 1)圖片瀏覽模塊,可以通過按鍵控制選定某個(gè)圖像或更新圖像頁(上一頁、下一頁)。</p><p> 2)播放模塊,對(duì)瀏覽界面
12、選定的圖片進(jìn)行循環(huán)播放。</p><p> 3)系統(tǒng)設(shè)置模塊,可設(shè)置循環(huán)播放更換頻率等。</p><p> 3、基于Qt的圖形界面程序設(shè)計(jì)</p><p> 本設(shè)計(jì)中包括了瀏覽、循環(huán)播放和配置三個(gè)界面模塊。這些模塊之間需要進(jìn)行通信,利用Qt提供的信號(hào)/槽機(jī)制很好地解決了這幾問題,每個(gè)模塊中都有自己定義的一些信號(hào)和槽,已發(fā)送給其他模塊或者從其他模塊接受到對(duì)應(yīng)信號(hào)
13、后作出響應(yīng)。</p><p> 數(shù)字相框在初始化時(shí)會(huì)掃描指定目錄下(包括子目錄)的所有支持圖片文件,并將其存放在列表中,以備之后的瀏覽界面生成縮略圖。本系統(tǒng)使用Qt提供的QDir類實(shí)現(xiàn)遍歷目錄的功能,在遍歷目錄的同時(shí)通過設(shè)置文件類型過濾位來獲得指定文件,并使用一個(gè)雙向的字符串指針鏈表來記錄掃描得到的結(jié)果。</p><p> 主控模塊分為圖片瀏覽模塊,圖片播放模塊,系統(tǒng)設(shè)置模塊。如圖3所
14、示。</p><p> 圖片瀏覽模塊如圖4所示,圖品播放模塊和系統(tǒng)設(shè)置模塊如圖所示</p><p><b> 圖3主控</b></p><p> 本設(shè)計(jì)中包括了瀏覽、循環(huán)播放和配置三個(gè)界面模塊。這些模塊之間需要進(jìn)行通信,利用Qt提供的信號(hào)/槽機(jī)制很好地解決了這幾問題,每個(gè)模塊中都有自己定義的一些信號(hào)和槽,已發(fā)送給其他模塊或者從其他模塊接受
15、到對(duì)應(yīng)信號(hào)后作出響應(yīng)。</p><p> 數(shù)字相框在初始化時(shí)會(huì)掃描指定目錄下(包括子目錄)的所有支持圖片文件,并將其存放在列表中,以備之后的瀏覽界面生成縮略圖。本系統(tǒng)使用Qt提供的QDir類實(shí)現(xiàn)遍歷目錄的功能,在遍歷目錄的同時(shí)通過設(shè)置文件類型過濾位來獲得指定文件,并使用一個(gè)雙向的字符串指針鏈表來記錄掃描得到的結(jié)果。</p><p> 四.各個(gè)功能模塊的主要實(shí)現(xiàn)程序</p>
16、<p><b> 1.上翻頁功能</b></p><p> 功能實(shí)現(xiàn):首先確定當(dāng)前顯示的圖片,點(diǎn)擊下一張按鈕,判斷當(dāng)前照片是不是第一張,不是就直接調(diào)出上一張照片顯示,如果是的話,調(diào)出最后一張照片顯示。</p><p><b> 程序代碼:</b></p><p> void Function::pre_
17、area() //上一張圖片功能實(shí)現(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> 功能實(shí)現(xiàn):首先確定當(dāng)前顯示的圖片,點(diǎn)擊下一張按鈕,判斷當(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> 功能實(shí)現(xiàn):定義變量bool,并定義為假,點(diǎn)擊循環(huán)播放時(shí),重新定義bool為真,然后調(diào)用下翻頁功能,那么就會(huì)不斷地下翻頁,
23、這時(shí)再調(diào)用延時(shí)程序,控制好翻頁的時(shí)間,從而實(shí)現(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> 功能實(shí)現(xiàn):定義變量bool,點(diǎn)擊暫停按鈕時(shí),定義bool為假,那么循環(huán)播放應(yīng)為bool為假,就不會(huì)執(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> 功能實(shí)現(xiàn):對(duì)于放大圖片,首先贏控制放大比例,定義了水平比例和高度比例,再放大的時(shí)候是水平和高度同時(shí)放大,控制放大的倍數(shù),不
27、得大于5,。</p><p> 點(diǎn)擊放大按鈕,每次水平和高度同時(shí)放大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> 功能實(shí)現(xiàn):對(duì)于放大圖片,首先贏控制縮小比例,定義了水平比例和高度比例,再放大的時(shí)候是水平
30、和高度同時(shí)縮小,控制縮小的倍數(shù),不得小于0.1,。</p><p> 點(diǎn)擊放大按鈕,每次水平和高度同時(shí)縮小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> 五.測(cè)試和調(diào)試</b></p><p><b> 1.正常顯示情況</b></p><p>&l
60、t;b> 2.放大后</b></p><p><b> 3.縮小后</b></p><p> 六.課程設(shè)計(jì)總結(jié)與體會(huì)</p><p> 這次課程設(shè)計(jì)我選擇的是第三個(gè)題目——數(shù)字相框,經(jīng)歷了選題,查找資料,編寫程序,調(diào)試修改等階段,終于成功設(shè)計(jì)出了一個(gè)數(shù)字相框</p><p> 在學(xué)習(xí)嵌入式的過
61、程中,感覺很空洞,很難理解,經(jīng)理了這次課設(shè),才讓我明白,學(xué)習(xí)和生活是密不可分的,學(xué)習(xí)起源于生活。就像這次的嵌入式實(shí)驗(yàn),剛開始的時(shí)候雖然很忙,但是不清楚自己目的是什么,將要做出去的東西在自己的腦海中沒有印象,僅僅只是做一點(diǎn)多一點(diǎn)而已。</p><p> 在完成課設(shè)的過程中,由于我的嵌入式課程學(xué)習(xí)的不好,開始的時(shí)候困難重重,后來在老師的指導(dǎo)下,上網(wǎng)超找資料,并且參考有關(guān)的書籍,對(duì)我?guī)椭艽?。這里我也發(fā)現(xiàn)原來網(wǎng)絡(luò)上有
62、這么多的學(xué)習(xí)資料,以前都忽視了。</p><p> 當(dāng)然,完成課設(shè)的時(shí)候,遇到有些功能的實(shí)現(xiàn)方法以前沒有遇到過,在自己想辦法的時(shí)候,有些想法也常常因?yàn)樽约耗芰Σ粔蚨鵁o法實(shí)現(xiàn),最后在自己思考以及和同學(xué)討論的情況下,用其他的思路來實(shí)現(xiàn)</p><p> 經(jīng)過本次課設(shè),也感覺到了自己的能力缺陷,缺乏知識(shí),更加缺乏經(jīng)驗(yàn),冰凍三尺非一日之寒,在以后的學(xué)習(xí)中,要努力彌補(bǔ)自己的弱點(diǎn),才能在能力水平方
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 嵌入式課程設(shè)計(jì)報(bào)告2
- 嵌入式數(shù)碼相框設(shè)計(jì)
- 嵌入式課程設(shè)計(jì)報(bào)告---嵌入式文件鎖應(yīng)用
- 嵌入式課程設(shè)計(jì)報(bào)告 (2)
- 嵌入式課程設(shè)計(jì)報(bào)告91452
- 嵌入式技術(shù)課程設(shè)計(jì)--數(shù)字時(shí)鐘
- 《嵌入式系統(tǒng)設(shè)計(jì)》課程設(shè)計(jì)報(bào)告
- 嵌入式課程設(shè)計(jì)
- 嵌入式課程設(shè)計(jì)
- 嵌入式課程設(shè)計(jì)
- 嵌入式課程設(shè)計(jì)
- 嵌入式課程設(shè)計(jì)
- 嵌入式課程設(shè)計(jì)
- 基于sopc的嵌入式數(shù)字秒表課程設(shè)計(jì)
- 嵌入式課程設(shè)計(jì)報(bào)告--qtopia移植
- 嵌入式課程設(shè)計(jì)報(bào)告畢業(yè)論文
- 嵌入式課程設(shè)計(jì)報(bào)告畢業(yè)論文
- 嵌入式硬件課程設(shè)計(jì)報(bào)告---電梯系統(tǒng)
- 嵌入式課程設(shè)計(jì)---嵌入式網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)
- 嵌入式課程設(shè)計(jì)--串口通信
評(píng)論
0/150
提交評(píng)論