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

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論