嵌入式課程設(shè)計報告--數(shù)字相框_第1頁
已閱讀1頁,還剩13頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論