2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩28頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、<p><b>  課程設(shè)計(jì)說明書</b></p><p>  題 目: 電子相冊 </p><p>  課程名稱: 嵌入式系統(tǒng) </p><p>  學(xué) 院: </p><p>  專 業(yè):學(xué) 號: </p><p> 

2、 姓 名: </p><p>  指導(dǎo)教師: </p><p>  完成日期: 2017年6月10日 </p><p><b>  目 錄</b></p><p>  1. 設(shè)計(jì)的工程背景2</p><p>  1.1 任務(wù)闡述2&

3、lt;/p><p>  1.2 任務(wù)分析2</p><p>  1.3 課題項(xiàng)目管理計(jì)劃進(jìn)度表3</p><p>  2.工程設(shè)計(jì)方案3</p><p>  2.1 系統(tǒng)方案設(shè)計(jì)3</p><p>  2.2 硬件電路設(shè)計(jì)5</p><p>  2.3 軟件程序設(shè)計(jì)5</p>

4、<p><b>  3. 方案實(shí)施6</b></p><p>  3.1軟件程序調(diào)試過程6</p><p>  4. 結(jié)果與結(jié)論12</p><p>  4.1 設(shè)計(jì)結(jié)果12</p><p><b>  4.2 結(jié)論13</b></p><p>  5

5、. 收獲與致謝14</p><p>  6. 參考文獻(xiàn)15</p><p><b>  7. 附件16</b></p><p>  附件1 :答辯問題回答記錄表27</p><p>  1. 設(shè)計(jì)的工程背景</p><p><b>  1.1 任務(wù)闡述</b><

6、;/p><p><b>  設(shè)計(jì)任務(wù):</b></p><p>  制作一個電子相冊,要求每個人一種特效,結(jié)果顯示在ARM開發(fā)板上。開發(fā)平臺為LINUX。</p><p><b>  電子相冊簡介:</b></p><p>  以數(shù)字照片的存儲和瀏覽為主要功能,具有內(nèi)置數(shù)據(jù)存儲器、USB等卡接口、強(qiáng)大的

7、文件管理等特征。</p><p><b>  背景:</b></p><p>  在市場需求上,隨著數(shù)碼相機(jī)的普及,作為一種以數(shù)字照片的保存、回放和瀏覽為核心的功能產(chǎn)品迎合了消費(fèi)者需求,嵌入式linux的電子相冊比一般電子相冊更具優(yōu)越性和實(shí)用性。目前市場,目前主流電子相冊軟件普遍體積龐大、占用內(nèi)存多、硬件要求高。所以開發(fā)一個運(yùn)行速度快,占用空間小,對硬件要求較低的功能

8、實(shí)用的嵌入式Linux電子相冊很有意義。</p><p>  Linux開發(fā)優(yōu)勢:</p><p>  Linux是一種自由和開放源碼的類Unix操作系統(tǒng)。目前存在著許多不同的Linux,但它們都使用了Linux內(nèi)核。Linux可安裝在各種計(jì)算機(jī)硬件設(shè)備中,從手機(jī)、平板電腦、路由器和視頻游戲控制臺,到臺式計(jì)算機(jī)、大型機(jī)和超級計(jì)算機(jī)。Linux是一個領(lǐng)先的操作系統(tǒng),世界上運(yùn)算最快的10臺超級

9、計(jì)算機(jī)運(yùn)行的都是Linux操作系統(tǒng)。嚴(yán)格來講,Linux這個詞本身只表示Linux內(nèi)核,但實(shí)際上人們已經(jīng)習(xí)慣了用Linux來形容整個基于Linux內(nèi)核,并且使用GNU 工程各種工具和數(shù)據(jù)庫的操作系統(tǒng)。 Linux是我國軟件的國策,尤其是在IT行業(yè),龐大的使用群體、開放的體系和豐富資源使得Linux將是日后普及和推廣的重點(diǎn)。Linux的優(yōu)越性日益凸顯Linux將是我們學(xué)習(xí)和工作實(shí)用的首選。目前,很多網(wǎng)絡(luò)技術(shù)、服務(wù)器、網(wǎng)絡(luò)設(shè)備都是基于Li

10、nux操作系統(tǒng),并且在不少時尚的手機(jī)、PDA、媒體播放器等消費(fèi)類電子產(chǎn)品中已經(jīng)廣泛使用Linux作為操作系統(tǒng)。 </p><p>  在Linux軟件國策的指引下,Linux已經(jīng)得到很大的普及。很多學(xué)生已經(jīng)自發(fā)地通過書籍、互聯(lián)網(wǎng)等資源學(xué)習(xí)Linux。 綜上所述,提高技術(shù)水平就是以市場流行需求為導(dǎo)向進(jìn)行研發(fā),特別是像嵌入式種工程類的技術(shù)。在條件允許的情況下,我們甚至應(yīng)該時刻與國際接軌,掌握當(dāng)前最領(lǐng)先的技術(shù)。&l

11、t;/p><p><b>  1.2 任務(wù)分析</b></p><p>  設(shè)計(jì)的目標(biāo)是制作5種電子相冊特效,每個人負(fù)責(zé)制作一種。在制作前期,首先要查閱資料,了解電子相冊的背景和制作原理,對其形成大致的設(shè)計(jì)方案。然后,根據(jù)資料安裝linux和虛擬機(jī)軟件,搭建開發(fā)環(huán)境,安裝交叉編譯。最后,根據(jù)自己設(shè)計(jì)的方案進(jìn)行嘗試,不斷修改錯誤,直到達(dá)到目標(biāo)。</p><

12、;p>  1.3 課題項(xiàng)目管理計(jì)劃進(jìn)度表</p><p><b>  2.工程設(shè)計(jì)方案</b></p><p>  2.1 系統(tǒng)方案設(shè)計(jì)</p><p>  目前市場上的主要設(shè)計(jì)方案:</p><p><b>  單芯片解決方案</b></p><p>  以單芯片的解

13、決方案,以ESS/AMLOGIC/MPX等芯片設(shè)計(jì)為代表,PHILIP/Sony等品牌廠商也以該方式為主。 該方案的優(yōu)點(diǎn): </p><p> ?。?)結(jié)構(gòu)簡單,成本低,芯片功能強(qiáng)大; </p><p> ?。?)多媒體的編解碼速度快。 </p><p><b>  該方案的缺點(diǎn): </b></p><p> ?。?

14、)可擴(kuò)展的余地不足; </p><p> ?。?)對讀卡部分,某些方案使用硬件實(shí)現(xiàn),不能支持新類型的卡; </p><p>  (3)應(yīng)客戶要求的二次開發(fā)比較不方便。</p><p> ?、谝訢SP+FPGA等硬件為基礎(chǔ),用軟件算法實(shí)現(xiàn)功能</p><p>  這種方案,是以DSP來實(shí)現(xiàn)多媒體部分的編解碼算法,再由FPGA實(shí)現(xiàn)顯示輸出格式的

15、算法轉(zhuǎn)化;讀卡部分,文件系統(tǒng)部分由DSP軟件處理,外圍設(shè)備大的驅(qū)動由DSP的軟件算法實(shí)現(xiàn)。 </p><p>  這種方案的優(yōu)點(diǎn): </p><p>  功能擴(kuò)展升級性強(qiáng),軟件實(shí)現(xiàn)讀卡部分,新的類型卡,外圍設(shè)備可以通過升級方式實(shí)現(xiàn)。</p><p><b>  這種方案的缺點(diǎn): </b></p><p> ?。?)整體

16、成本比較大; </p><p> ?。?)客戶二次開發(fā)難度大。DSP和FPGA的算法實(shí)現(xiàn)需要專業(yè)人員; </p><p> ?。?)顯示輸出由FPGA實(shí)現(xiàn),該類輸出大部分是數(shù)字的輸出,模擬輸出支持比較弱。</p><p><b> ?、跘RM核心方案</b></p><p>  以ARM等強(qiáng)大的CPU為核心,以WINC

17、E、LINUX等操作系統(tǒng)為軟件核心架構(gòu)系統(tǒng)。此方案以ARM如S3C2410、Intel xscale等強(qiáng)大的嵌入式CPU為架構(gòu),速度在200M-300MHZ。嵌入WINCE、LINUX等操作系統(tǒng),實(shí)現(xiàn)多媒體的編解碼。 </p><p><b>  該方案的優(yōu)點(diǎn): </b></p><p> ?。?)系統(tǒng)芯片功能強(qiáng)大,實(shí)現(xiàn)的功能多,對于新的多媒體格式支持好,只需要安

18、裝更新的軟件; </p><p> ?。?)硬件電路簡單; </p><p> ?。?)二次開發(fā)容易實(shí)現(xiàn)。 </p><p><b>  該方案的缺點(diǎn): </b></p><p>  (1)成本較大,該類強(qiáng)大的CPU一般使用在PDA等嵌入式領(lǐng)域;(2)比較耗電,使用軟件解碼功耗與頻率相關(guān)性很大。</p>

19、<p>  本設(shè)計(jì)選用的是第三種方案:以Cortex A8為核心,以Linux操作系統(tǒng)為軟件核心架構(gòu)。 基于Cortex A8的微處理器具有低功耗、低成本、高性能等特點(diǎn)。</p><p>  GEC210開發(fā)板簡介:</p><p>  GEC210是一款高性能的Cortex A8核心板,它由廣州粵嵌股份設(shè)計(jì)、生產(chǎn)和發(fā)行銷售。它采用三星S5PV210作為主處理器,運(yùn)行主頻可高1

20、GHz。S5PV210內(nèi)部集成了PowerVR SGX540高性能圖形引擎,支持3D圖形流暢運(yùn)行,并可流暢播放1080P大尺寸視頻。</p><p>  GEC210主要采用了2.0mm間距的雙排針,引出CPU大部分常用功能引腳,,另外還根據(jù)S5PV210芯片的特性,分別引出了標(biāo)準(zhǔn)的miniHDMI接口,如圖所示。</p><p>  GEC210板載512M DDR2內(nèi)存,可流暢運(yùn)行An

21、droid, Linux和WinCE6等高級操作系統(tǒng)。它非常適合開發(fā)高端物聯(lián)網(wǎng)終端,廣告多媒體終端,智能家居,高端監(jiān)控系統(tǒng),游戲機(jī)控制板等設(shè)備。</p><p>  圖2-1 GEC210開發(fā)板(a) 圖2-2 GEC210開發(fā)板(b)</p><p>  2.2 硬件電路設(shè)計(jì)</p><p>  粵嵌GEC210開發(fā)板為硬件平臺,U

22、buntu為開發(fā)環(huán)境,通過串口進(jìn)行文件的傳輸,在工程師給定的項(xiàng)目基礎(chǔ)函數(shù)上,通過修改和運(yùn)用“void lcd_draw_bmp(char *name, int x0, int y0, int w, int h)”函數(shù)實(shí)現(xiàn)圖片位置,大小的改變,再加上延時函數(shù)的運(yùn)用,實(shí)現(xiàn)五種圖片特效。</p><p>  圖2-3 硬件總框圖</p><p>  2.3 軟件程序設(shè)計(jì)</p>&

23、lt;p><b>  總設(shè)計(jì)方案:</b></p><p><b>  3. 方案實(shí)施</b></p><p>  3.1軟件程序調(diào)試過程</p><p> ?、侔惭b虛擬機(jī)和linux軟件。</p><p> ?、诖罱ōh(huán)境和安裝交叉編譯。</p><p>  1)找到u

24、buntu系統(tǒng)工作目錄</p><p><b>  圖3-1</b></p><p>  2)在windos系統(tǒng)下找到該工作目錄并創(chuàng)建一個文件夾,將arm-2009q3.tar.bz2復(fù)制過去。</p><p><b>  圖3-2</b></p><p><b>  3)啟用共享文件夾&

25、lt;/b></p><p><b>  圖3-3</b></p><p>  4)主機(jī)路徑為windos系統(tǒng)下arm-2009q3.tar.bz2的目錄,名稱自動生成</p><p><b>  圖3-4</b></p><p><b>  圖3-5</b></p

26、><p>  5)可以在文件系統(tǒng)中/mnt/hgfs/share目錄下看到這些。</p><p><b>  圖3-6</b></p><p>  6)為了可以將arm-2009q3.tar.bz2復(fù)制到/opt目錄下,/opt默認(rèn)所有者為root,所以要更改/opt的所有者為我登陸的賬戶。</p><p><b>

27、;  圖3-7</b></p><p>  7)將文件復(fù)制到/opt 目錄下。</p><p><b>  圖3-8</b></p><p>  8)執(zhí)行如下解壓命令。</p><p>  聚焦逐現(xiàn)特效部分調(diào)試</p><p>  原本打算做圖片翻轉(zhuǎn)的特效,在網(wǎng)上查到圖片翻轉(zhuǎn)特效的算法

28、并經(jīng)過修改如下:</p><p>  //24bit to 32bit </p><p>  for(x=0,y=800*480*4-1;x<800*480*3;x+=3) </p><p><b>  { </b></p><p>  pic_mem[y-3] = bmp_mem[x] ; </p&

29、gt;<p>  pic_mem[y-2] = bmp_mem[x+1] ; </p><p>  pic_mem[y-1] = bmp_mem[x+2] ; </p><p><b>  y-=4; </b></p><p>  } </p><p>  但是在調(diào)試時總是出錯,尋

30、找最終的原因,應(yīng)該是圖片轉(zhuǎn)換為矩陣時和圖片翻轉(zhuǎn)之間的步驟有誤,導(dǎo)致調(diào)試時一直報(bào)錯。因此轉(zhuǎn)變設(shè)計(jì)方案,先確定所要出現(xiàn)圖片的位置,再通過在不同位置處顯示不同圖片的大小依次出現(xiàn)達(dá)到一個三維視覺動態(tài)效果,最后經(jīng)過反轉(zhuǎn)函數(shù)實(shí)現(xiàn)圖片的反轉(zhuǎn),在制作過程中想要加入音樂,但是由于時間有限就未能實(shí)現(xiàn)。圖片顯示函數(shù)如下:</p><p>  //顯示一張24位的bmp圖片,圖片的寬度必須為4的倍數(shù)</p><p&g

31、t;  void lcd_draw_bmp(char *name, int x0, int y0, int w, int h)</p><p><b>  {</b></p><p><b>  int fd;</b></p><p>  fd = open(name, O_RDWR);</p><p&

32、gt;  if (-1 == fd)</p><p><b>  {</b></p><p>  printf("open %s error!\n", name);</p><p><b>  return ;</b></p><p><b>  }</b>

33、</p><p><b>  圖片反轉(zhuǎn)函數(shù)如下:</b></p><p><b>  //位運(yùn)算</b></p><p>  int x, y, k,i = 0;</p><p>  for (y = 0; y < h; y++)</p><p><b>  

34、{</b></p><p>  for (x = w; x >0; x--)</p><p><b>  {</b></p><p>  b = ch[i];</p><p>  g = ch[i+1];</p><p>  r = ch[i+2];</p><

35、;p><b>  i += 3;</b></p><p>  color = (r << 16) | (g << 8) | b;</p><p>  lcd_draw_point(x+x0, h-y+y0,color);</p><p><b>  }</b></p><p

36、><b>  }</b></p><p><b>  }</b></p><p>  顯示界面調(diào)用函數(shù)如下:</p><p><b>  //顯示BMP圖片</b></p><p>  lcd_draw_bmp("zs.bmp", 1, 1, 796,

37、 477);</p><p>  delayms(3000000);</p><p>  lcd_draw_bmp("zsone.bmp", 100, 60, 600, 360);</p><p>  delayms(3000000);</p><p>  lcd_draw_bmp("zstwo.bmp"

38、;, 200, 120, 400, 240);</p><p>  delayms(3000000);</p><p>  lcd_draw_bmp("zsthree.bmp", 300, 140, 200, 200);</p><p>  delayms(3000000);</p><p>  lcd_draw_bmpo

39、p("zs.bmp", 1, 1, 796, 477);</p><p>  圖片效果的速度可通過改變延時函數(shù)的時間來改變。</p><p><b>  4. 結(jié)果與結(jié)論</b></p><p><b>  4.1 設(shè)計(jì)結(jié)果</b></p><p>  設(shè)計(jì)結(jié)果實(shí)現(xiàn)了以下4點(diǎn):&

40、lt;/p><p>  在LCD上顯示圖片,文字;</p><p>  關(guān)于GEC210芯片的使用,Ubuntu環(huán)境下的操作;</p><p>  可隨時更換圖片,具有串行通信功能;</p><p><b>  聚焦逐現(xiàn)圖片特效。</b></p><p><b>  效果分布展示如下:<

41、;/b></p><p><b>  圖4-1 開始界面</b></p><p>  圖4-2 逐步縮小界面</p><p>  圖4-3 放大反轉(zhuǎn)界面</p><p><b>  4.2 結(jié)論</b></p><p><b>  設(shè)計(jì)優(yōu)缺點(diǎn):</b&g

42、t;</p><p>  實(shí)現(xiàn)了多種不同的圖片播放特效。</p><p><b>  二次開發(fā)容易實(shí)現(xiàn)。</b></p><p><b>  圖片的自動播放。</b></p><p>  未實(shí)現(xiàn)手動播放和音樂功能。</p><p>  設(shè)計(jì)的核心及工程實(shí)用價(jià)值:</p&

43、gt;<p>  隨著數(shù)碼相機(jī)的大量普及和人們對多媒體播放的需求,不同用戶的計(jì)算機(jī)中存滿各種照片,連桌上相框中照片的更換頻率也提高了。對數(shù)碼相片進(jìn)行便捷的顯示、分享、編輯、刪除、打印等操作逐漸成為市場的需求。電子相框,數(shù)碼伴侶等概念型產(chǎn)品逐漸出現(xiàn)在數(shù)碼市場,電子相冊也由概念型產(chǎn)品進(jìn)入市場已有六、七年。目前,電子相冊產(chǎn)品主要應(yīng)用于禮品市場,其真正的目標(biāo)用戶卻是非常廣的,并且它的最終消費(fèi)人群應(yīng)該是以家庭為主的普通消費(fèi)者,其應(yīng)用

44、的領(lǐng)域?qū)⒏鼜V闊。</p><p><b>  改進(jìn)意見:</b></p><p>  1) 實(shí)現(xiàn)通過觸屏實(shí)現(xiàn)圖片特效間的切換。</p><p>  2) 音樂播放功能的增加。</p><p>  3) 多張圖片合成一張圖片播放功能的實(shí)現(xiàn)。</p><p><b>  展望:</b&

45、gt;</p><p>  電子相框結(jié)合液晶顯示技術(shù)、電視技術(shù)、數(shù)字存儲技術(shù),日益成為面向時尚個性的數(shù)碼相機(jī)、數(shù)碼攝像的最佳伴侶。隨著核心器件NandFlash和LCD屏的降價(jià),必將進(jìn)一步刺激電子相框的市場需求。</p><p>  多功能電子相冊方便攜帶、重量輕、樣式豐富,在今后必定有更大發(fā)展空間。</p><p><b>  5. 收獲與致謝</

46、b></p><p>  在本次設(shè)計(jì)開始前,我們最先開始的是查資料,通過查找資料了解圖片顯示和各種特效的實(shí)現(xiàn)原理,然后再自己嘗試設(shè)計(jì)特效,一開始我們想的特效都很復(fù)雜,想要一步實(shí)現(xiàn),嘗試了很多方法,都沒能成功。最后,我們改變了思路,用圖片逐層顯示來實(shí)現(xiàn)動態(tài)過程,這個特效雖然簡單,但它是復(fù)雜特效的一個基礎(chǔ),讓我明白了復(fù)雜的設(shè)計(jì)要從簡單開始,不能想著一口吃個大胖子。到答辯前一天我們各自設(shè)計(jì)的特效才有了一點(diǎn)自己想要

47、的效果,當(dāng)時還很想實(shí)現(xiàn)觸屏和音樂播放功能,但前期嘗試時一直調(diào)試不成功所以就沒有來得及實(shí)現(xiàn),這是本次設(shè)計(jì)中的一個遺憾。</p><p>  通過本次設(shè)計(jì)也更加熟悉了linux的操作流程,熟悉了做實(shí)驗(yàn)中的搭建環(huán)境和交叉編譯,開始時很多步驟都記不太清楚了,所以又復(fù)習(xí)了一遍以前的實(shí)驗(yàn)。在這里我體會到了平時的學(xué)習(xí)都是為了以后的復(fù)雜工程做鋪墊,讓我們能更好的解決一些設(shè)計(jì)工程,理論是基礎(chǔ),只有基礎(chǔ)打好了,上層建筑才會更加穩(wěn)和順

48、利。同時完成了圖片在LED屏上的顯示和聚焦逐現(xiàn)特效。在顯示圖片的操作上,開始屏幕總是會花,顯示的圖片不理想,后來仔細(xì)看了工程師給的顯示圖片代碼和清屏代碼,通過和同學(xué)商量最終完成了圖片的顯示。在特效的實(shí)現(xiàn)過程中,一開始很想做一個立體的炫酷的特效,也通過查找資料理解了其原理和算法實(shí)現(xiàn)流程,但在調(diào)試時總是不成功,在這里用了很長時間。最后,改變了設(shè)計(jì)思路,覺得應(yīng)該從簡單的開始做,再一步步增加功能,通過和同學(xué)的商量與摸索,終于實(shí)現(xiàn)了簡單的特效。雖

49、然從設(shè)計(jì)到實(shí)現(xiàn)的過程有很多困難,但是體會到了和同學(xué)一起完成同一個任務(wù)的快了,也收獲了很多課本上沒有的知識,體會到了實(shí)踐的樂趣。</p><p>  在此,感謝我的隊(duì)友給予的幫助,老師和粵嵌工程師給的平臺和機(jī)會,尤其是粵嵌工程師給我的學(xué)習(xí)指導(dǎo)。</p><p><b>  6. 參考文獻(xiàn) </b></p><p>  [1] 童凱. 基于Lin

50、ux以及Qt的網(wǎng)絡(luò)電子相框設(shè)計(jì)與實(shí)現(xiàn)[D]. 電子科技大學(xué), 2014.</p><p>  [2] 林鋒. 基于ARM7TDMI芯片的嵌入式LINUX交叉調(diào)試器的設(shè)計(jì)和實(shí)現(xiàn)[D]. 四川大學(xué), 2002.</p><p>  [3] 王浩, 陳邦瓊. 嵌入式Qt開發(fā)項(xiàng)目教程[M]. 中國水利水電出版社, 2014.</p><p>  [4] 梁融凌, 余昌嵩.

51、基于嵌入式 Linux 電子書的設(shè)計(jì)與實(shí)現(xiàn)[J]. 牡丹江師范學(xué)院學(xué)報(bào)(自然科學(xué)版), 2014(4):12-14.</p><p>  [5] Yan H, Liu L, Xue T. SPLIT-SCREEN PROCESSING METHOD AND DEVICE, AND COMPUTER STORAGE MEDIUM:, WO/2015/123937[P]. 2015.</p><p

52、>  [6] 燕麗紅, 林志雄, 楊星. 基于Windows 7操作系統(tǒng)和Qt技術(shù)的電子相冊設(shè)計(jì)Design of electronic photo album based on Windows 7 operating system and QT[J]. 現(xiàn)代電子技術(shù), 2013. </p><p>  [7] 范定焓. 基于ARM9平臺的便攜式媒體播放器的設(shè)計(jì)與開發(fā)[D]. 復(fù)旦大學(xué), 2009.<

53、/p><p>  [8] 朱濤. 一種基于互聯(lián)網(wǎng)絡(luò)的電子相冊: CN, CN 201846349 U[P]. 2011.</p><p>  [9] 范定焓. 基于ARM9平臺的便攜式媒體播放器的設(shè)計(jì)與開發(fā)[D]. 復(fù)旦大學(xué), 2009.</p><p>  [10] Zhu M. CATERING INFORMATION SYSTEM BASED ON DIGITAL

54、 MENU SUPPORTING CARD SWIPING:, WO 2013152620 A1[P]. 2013.</p><p>  [11] 楊燕, 陳祝. 一種基于Cortex內(nèi)核的家用電子相冊設(shè)計(jì)[C]// 2014`全國半導(dǎo)體器件產(chǎn)業(yè)發(fā)展、創(chuàng)新產(chǎn)品和新技術(shù)研討會暨第七屆中國微納電子技術(shù)交流與學(xué)術(shù)研討會. 2014.</p><p><b>  7. 附件</b&

55、gt;</p><p>  1)答辯問題回答記錄(必需)</p><p>  問:有沒有實(shí)現(xiàn)手動播放功能?</p><p>  答:沒有,目前我們完成的只有自動播放和圖片替換功能。</p><p><b>  2)元器件清單</b></p><p>  粵嵌GEC210開發(fā)板、安裝有虛擬機(jī)和LIN

56、UX的電腦。</p><p><b>  3)設(shè)計(jì)代碼</b></p><p><b>  /*</b></p><p><b>  NAME</b></p><p>  open and possibly create a file or device</p>

57、<p><b>  SYNOPSIS</b></p><p>  #include <sys/types.h></p><p>  #include <sys/stat.h></p><p>  #include <fcntl.h></p><p>  int open(co

58、nst char *pathname, int flags);</p><p>  int open(const char *pathname, int flags, mode_t mode);</p><p>  file descriptor:文件描述符</p><p><b>  */</b></p><p> 

59、 #include <stdio.h></p><p>  #include <stdlib.h></p><p>  #include <string.h></p><p>  #include <sys/types.h></p><p>  #include <sys/stat.h&g

60、t;</p><p>  #include <fcntl.h>//for open</p><p>  #include <sys/mman.h></p><p>  #include <linux/input.h></p><p>  #include<termios.h></p>

61、;<p>  #include<unistd.h>//for close</p><p>  int *plcd = NULL;</p><p>  char wo[] = {</p><p>  0x04,0x40,0x0E,0x50,0x78,0x48,0x08,0x48,0x08,0x40,0xFF,0xFE,0x08,0x40,0

62、x08,0x44,</p><p>  0x0A,0x44,0x0C,0x48,0x18,0x30,0x68,0x22,0x08,0x52,0x08,0x8A,0x2B,0x06,0x10,0x02</p><p><b>  };</b></p><p>  void lcd_draw_point(int x0, int y0, int co

63、lor)</p><p><b>  {</b></p><p>  *(plcd + y0*800 + x0) = color;</p><p><b>  }</b></p><p>  //在頂點(diǎn)為x0,y0的位置開始顯示一個顏色矩形,矩形的寬//度為w, 高度為h,顏色為color</

64、p><p>  void lcd_draw_rect(int x0, int y0, int w, int h, int color)</p><p><b>  {</b></p><p><b>  int x, y;</b></p><p>  for (y = y0; y < y0+h;

65、y++)</p><p><b>  {</b></p><p>  for (x = x0; x < x0+w; x++)</p><p>  lcd_draw_point(x, y, color);</p><p><b>  }</b></p><p><b

66、>  }</b></p><p>  //把lcd清成color顏色</p><p>  void lcd_clean_screen(int color)</p><p><b>  {</b></p><p><b>  int x, y;</b></p><

67、p>  for (y = 0; y < 480; y++)</p><p><b>  {</b></p><p>  for (x = 0; x < 800; x++)</p><p>  lcd_draw_point(x, y, color);</p><p><b>  }</b&

68、gt;</p><p><b>  }</b></p><p>  void delayms(int xms){</p><p><b>  int i,j;</b></p><p>  for( i = 0; i < xms; i++)</p><p>  for(

69、j = 110; j > 0; j--);</p><p><b>  }</b></p><p>  //顯示一張24位的bmp圖片,圖片的寬度必須為4的倍數(shù)</p><p>  void lcd_draw_bmp(char *name, int x0, int y0, int w, int h)</p><p>

70、;<b>  {</b></p><p><b>  int fd;</b></p><p>  fd = open(name, O_RDWR);</p><p>  if (-1 == fd)</p><p><b>  {</b></p><p> 

71、 printf("open %s error!\n", name);</p><p><b>  return ;</b></p><p><b>  }</b></p><p>  //1、跳過前54個byte</p><p>  lseek(fd, 54, SEEK_SET)

72、;</p><p>  char ch[w*h*3];</p><p>  read(fd, ch, sizeof(ch));</p><p>  close(fd);</p><p>  //lcd 的像素點(diǎn)占4byte, 24位bmp 3byte</p><p>  int color;</p>&l

73、t;p>  char r, g, b;</p><p><b>  //位運(yùn)算</b></p><p>  int x, y, i = 0;</p><p>  for (y = 0; y < h; y++)</p><p><b>  {</b></p><p>

74、;  for (x = 0; x < w; x++)</p><p><b>  {</b></p><p>  b = ch[i];</p><p>  g = ch[i+1];</p><p>  r = ch[i+2];</p><p><b>  i += 3;</b

75、></p><p>  color = (r << 16) | (g << 8) | b;</p><p>  lcd_draw_point(x+x0, h-y+y0, color);</p><p>  delayms(1);</p><p><b>  }</b></p>

76、<p><b>  }</b></p><p><b>  }</b></p><p>  //顯示一張24位的bmp圖片,圖片的寬度必須為4的倍數(shù) ,左右顛倒</p><p>  void lcd_draw_bmpop(char *name, int x0, int y0, int w, int h)</

77、p><p><b>  {</b></p><p><b>  int fd;</b></p><p>  fd = open(name, O_RDWR);</p><p>  if (-1 == fd)</p><p><b>  {</b></p&

78、gt;<p>  printf("open %s error!\n", name);</p><p><b>  return ;</b></p><p><b>  }</b></p><p>  //1、跳過前54個byte</p><p>  lseek(fd

79、, 54, SEEK_SET);</p><p>  char ch[w*h*3];</p><p>  read(fd, ch, sizeof(ch));</p><p>  close(fd);</p><p>  //lcd 的像素點(diǎn)占4byte, 24位bmp 3byte</p><p>  int color

80、;</p><p>  char r, g, b;</p><p><b>  //位運(yùn)算</b></p><p>  int x, y, k,i = 0;</p><p>  for (y = 0; y < h; y++)</p><p><b>  {</b><

81、;/p><p>  for (x = w; x >0; x--)</p><p><b>  {</b></p><p>  b = ch[i];</p><p>  g = ch[i+1];</p><p>  r = ch[i+2];</p><p><b>

82、;  i += 3;</b></p><p>  color = (r << 16) | (g << 8) | b;</p><p>  lcd_draw_point(x+x0, h-y+y0,color);</p><p><b>  }</b></p><p><b> 

83、 }</b></p><p><b>  }</b></p><p>  void monitor_touch()</p><p><b>  {</b></p><p><b>  int fd;</b></p><p>  fd = op

84、en("/dev/event0", O_RDWR);</p><p>  if (-1 == fd)</p><p><b>  return ;</b></p><p>  struct input_event ev;</p><p><b>  int x, y;</b>&l

85、t;/p><p><b>  while (1)</b></p><p><b>  {</b></p><p>  read(fd, &ev, sizeof(ev));</p><p>  //如何判斷該事件是一個觸摸事件</p><p>  if ((ev.type

86、== EV_ABS) && (ev.code == ABS_X))</p><p><b>  {</b></p><p>  x = ev.value;</p><p><b>  }</b></p><p>  else if ((ev.type == EV_ABS) &

87、& (ev.code == ABS_Y))</p><p><b>  {</b></p><p>  y = ev.value;</p><p><b>  }</b></p><p><b>  //手指彈起</b></p><p>  if

88、 ((ev.type == EV_ABS) && (ev.code == ABS_PRESSURE) && (ev.value == 0))</p><p><b>  {</b></p><p>  printf("x: %d, y: %d\n", x, y);</p><p><b&

89、gt;  }</b></p><p><b>  }</b></p><p>  close(fd);</p><p><b>  }</b></p><p><b>  //顯示一個字</b></p><p>  void lcd_draw

90、_word(unsigned char *ch, int color, int len, int w, int x, int y)</p><p><b>  {</b></p><p><b>  int i, j;</b></p><p><b>  int high;</b></p>

91、;<p><b>  //32 * 64</b></p><p>  // 一個字的顯示:畫點(diǎn)(一個一個像素點(diǎn))</p><p>  // 八個點(diǎn)用一個 unsigned char </p><p>  // 已知:數(shù)組長度:len => 像素點(diǎn)的個數(shù):len * 8</p><p>  // 已知:

92、字的寬度=> 高度:len*8/w </p><p>  high = len*8 / w; //64 </p><p><b>  int flag;</b></p><p>  flag = w/8; // 4</p><p>  for (i = 0; i < len; i++)</p>

93、<p><b>  {</b></p><p>  for (j = 7; j >= 0; j--)</p><p><b>  {</b></p><p>  if ((ch[i] >> j) & 1 == 1)</p><p><b>  {<

94、/b></p><p>  if (i%flag == 0)</p><p>  lcd_draw_point(7-j+x, i/flag+y, color);</p><p><b>  else</b></p><p>  lcd_draw_point(8*(i%flag)+7-j+x, i/flag+y, c

95、olor);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  int main(int argc,

96、char *argv[])</p><p><b>  {</b></p><p><b>  int fd;</b></p><p>  //O_RDWR: 可讀可寫</p><p>  fd = open("/dev/fb0", O_RDWR);</p><

97、;p>  // if(fd == -1)</p><p>  //if (fd = -1)</p><p>  if (-1 == fd)</p><p><b>  {</b></p><p>  printf("open dev/fb0 error !\n");</p><

98、;p><b>  return 0;</b></p><p><b>  }</b></p><p>  //內(nèi)存映射,吧一個文件或者設(shè)備映射到一個進(jìn)程的///地址空間中(內(nèi)存),在進(jìn)程中操作這塊映射的內(nèi)///存就相當(dāng)于操作 被映射的文件</p><p>  //plcd 存儲了映射的地址空間的首地址</p&g

99、t;<p>  plcd = mmap(NULL, 800*480*4, </p><p>  PROT_READ | PROT_WRITE,</p><p>  MAP_SHARED,</p><p><b>  fd,</b></p><p><b>  0);</b></p

100、><p>  //如何把lcd上的第n個像素點(diǎn) 顯示成紅色?</p><p>  //*(plcd + n) = 0x00ff0000;</p><p>  //如何把坐標(biāo)為(x, y)的像素點(diǎn),顯示成紅色?</p><p>  //*(plcd + y*800+x) = 0x00ff0000;</p><p>  //如

101、何把整個屏幕全部顯示白色?</p><p><b>  //循環(huán)</b></p><p>  lcd_clean_screen(0xFFFFFFFF);</p><p>  //如何顯示一個矩形</p><p>  //lcd_draw_rect(50, 50, 100, 100, 0x00ff0000);</p&

102、gt;<p><b>  //顯示BMP圖片</b></p><p>  lcd_draw_bmp("zs.bmp", 1, 1, 796, 477);</p><p>  delayms(3000000);</p><p>  lcd_draw_bmp("zsone.bmp", 100,

103、60, 600, 360);</p><p>  delayms(3000000);</p><p>  lcd_draw_bmp("zstwo.bmp", 200, 120, 400, 240);</p><p>  delayms(3000000);</p><p>  lcd_draw_bmp("zsthr

104、ee.bmp", 300, 140, 200, 200);</p><p>  delayms(3000000);</p><p>  lcd_draw_bmpop("zs.bmp", 1, 1, 796, 477);</p><p><b>  //初始化串口</b></p><p>  

105、//int com_fd = init_serial("/dev/s3c2410_serial3", 9600);</p><p>  //lcd_draw_word(wo, 0x00ff0000, 32, 16, 100, 100);</p><p>  monitor_touch();</p><p>  close(fd);</p&g

106、t;<p><b>  return 0;</b></p><p><b>  }</b></p><p><b>  實(shí)物上電效果圖</b></p><p><b>  圖7-1效果圖1</b></p><p><b>  圖7-

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論