版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 電子相冊課程設(shè)計(jì)論文
- 畢業(yè)論文--基于qt的嵌入式電子相冊
- flash課程設(shè)計(jì)---電子相冊制作過程
- 電子相冊畢業(yè)設(shè)計(jì)
- 嵌入式課程設(shè)計(jì)
- 嵌入式課程設(shè)計(jì)
- 嵌入式課程設(shè)計(jì)
- 嵌入式課程設(shè)計(jì)
- 嵌入式課程設(shè)計(jì)
- 嵌入式課程設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)----flash電子相冊設(shè)計(jì)
- 畢業(yè)論文--電子相冊的設(shè)計(jì)
- 畢業(yè)論文---個人電子相冊設(shè)計(jì)
- 嵌入式課程設(shè)計(jì)---嵌入式網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)
- 嵌入式課程設(shè)計(jì)報(bào)告---嵌入式文件鎖應(yīng)用
- 嵌入式課程設(shè)計(jì)--基于lcd的電子時鐘
- 嵌入式課程設(shè)計(jì)--串口通信
- 嵌入式課程設(shè)計(jì)報(bào)告2
- 嵌入式課程設(shè)計(jì)大作業(yè)
- 嵌入式系統(tǒng)綜述課程設(shè)計(jì)
評論
0/150
提交評論