基于某嵌入式系統(tǒng)地2048工程實(shí)訓(xùn)報告材料_第1頁
基于某嵌入式系統(tǒng)地2048工程實(shí)訓(xùn)報告材料_第2頁
基于某嵌入式系統(tǒng)地2048工程實(shí)訓(xùn)報告材料_第3頁
基于某嵌入式系統(tǒng)地2048工程實(shí)訓(xùn)報告材料_第4頁
基于某嵌入式系統(tǒng)地2048工程實(shí)訓(xùn)報告材料_第5頁
已閱讀5頁,還剩24頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、標(biāo)準(zhǔn)文案等級:工程實(shí)踐訓(xùn)練項(xiàng)目名稱物聯(lián)網(wǎng)應(yīng)用專業(yè)班級自動化1301姓 名黃奎倫學(xué) 號 201301020129指導(dǎo)教師汪超,謝一峰(粵嵌)2016年12月24日目錄第1章實(shí)訓(xùn)目的與任務(wù) 11.1工程實(shí)踐訓(xùn)練目的 11.2實(shí)訓(xùn)項(xiàng)目要求 1第2章知識點(diǎn)總結(jié) 12.1嵌入式系統(tǒng) 12.2 Linux 操作系統(tǒng)介紹 12.3交叉開發(fā) 12.4 SecureCRT的設(shè)置與連接 22.5 C程序的交叉編譯及運(yùn)行 22.6函數(shù)的定義 32.7 Linux 文件10函數(shù) 32.8 LCD顯示原理 3第3章2048游戲的設(shè)計(jì)流程圖 4第4章 相關(guān)的c語言游戲程序 4第5章2048游戲展示 21第6章游戲測試 2

2、26.1測試的意義 226.2測試過程 22心得體會 22電氣信息學(xué)院工程實(shí)踐訓(xùn)練評分標(biāo)準(zhǔn) 23大全第1章實(shí)訓(xùn)目的與任務(wù)1.1工程實(shí)踐訓(xùn)練目的本次自動化工程實(shí)踐訓(xùn)練第一部分是實(shí)訓(xùn)裝置的使用說明,講述了系統(tǒng)的組成、硬件 的特點(diǎn)和技術(shù)指標(biāo)、軟件的使用介紹。第二部分是實(shí)訓(xùn)項(xiàng)目部分,敘述了實(shí)訓(xùn)的原理、步 驟及注意事項(xiàng)等。通過對實(shí)訓(xùn)裝置各個儀表的原理、工作情況及實(shí)驗(yàn)原理、軟硬件的詳細(xì) 介紹,通過實(shí)際操作讓我們對復(fù)雜過程控制系統(tǒng)實(shí)訓(xùn)裝置有一個充分的認(rèn)識,又有益于我 們對工業(yè)生產(chǎn)現(xiàn)場控制系統(tǒng)的了解。培養(yǎng)學(xué)生的工程實(shí)踐能力,進(jìn)一步提高學(xué)生分析和解 決實(shí)際問題的能力。1.2實(shí)訓(xùn)項(xiàng)目要求輕松的益智游戲?qū)徑馍顗?/p>

3、力調(diào)節(jié)情緒具有重要的意義。2048這款小游戲是一款流行的數(shù)字游戲,游戲設(shè)計(jì)初衷是一款益智類的游戲,其特點(diǎn)在于輕松,簡單,有趣。因 此,開發(fā)要求做到各項(xiàng)功能要完備、操作要簡便、易學(xué)易用。所以本周的工程實(shí)訓(xùn)要求自 己設(shè)計(jì)一個2048小游戲,以及學(xué)習(xí)關(guān)于嵌入式的基本入門知識。第2章知識點(diǎn)總結(jié)2.1嵌入式系統(tǒng)嵌入式系統(tǒng)是以應(yīng)用為中心,以計(jì)算機(jī)技術(shù)為基礎(chǔ),軟硬件可裁減,以適應(yīng)應(yīng)用系統(tǒng)對功 能、可靠性、成本、體積和功耗等有嚴(yán)格要求的專用計(jì)算機(jī)系統(tǒng)。2.2 Linux 操作系統(tǒng)介紹Linux是一套免費(fèi)使用和自由傳播的類 UNIX操作系統(tǒng),其創(chuàng)始人為美國著名黑客-林納 斯托瓦茲。它能運(yùn)行主要的 UNIX工具軟

4、件、應(yīng)用程序和網(wǎng)絡(luò)協(xié)議,且支持 32位和64 位硬件,是一個性能穩(wěn)定的多用戶網(wǎng)絡(luò)操作系統(tǒng)。操作系統(tǒng):操作系統(tǒng)是計(jì)算機(jī)系統(tǒng)中最基本的系統(tǒng)軟件,它用于有效地管理系統(tǒng)資源,并為用戶使用計(jì)算機(jī)提供了便利的環(huán)境。ubuntu是一個基于linux的免費(fèi)開源桌面PC操作系統(tǒng)。2.3交叉開發(fā)一般來說,研發(fā)嵌入式產(chǎn)品,由于從產(chǎn)品成本及功能專用性角度出發(fā)考慮。嵌入式產(chǎn) 品一般只有程序的運(yùn)行環(huán)境,而并沒有程序的編譯開發(fā)環(huán)境。所以,我們一般在通用電腦上用各種編譯開發(fā)軟件把程序編譯調(diào)試好后,再下載到開發(fā)板或相關(guān)產(chǎn)品上去運(yùn)行這個過程,我們稱之為交叉開發(fā)。2.4 SecureCRT的設(shè)置與連接(1) 獲取連接上的端口號用串

5、口線連接好開發(fā)板后,啟動開發(fā)板。在設(shè)備管理器中,查找識別出的端口。若不能正確識別端口(有感嘆號),則需要安裝驅(qū)動(2) SecureCRT 的設(shè)置點(diǎn)擊快速連接,并進(jìn)行設(shè)置a. 協(xié)議:Serialb. 端口:你電腦識別出的端口號c. 波特率:115200d. 把數(shù)據(jù)流控制中的RTS/CTS(R勾去掉其它保持默認(rèn)設(shè)置2.5 C程序的交叉編譯及運(yùn)行由于ARM處理器與In ter處理器其設(shè)計(jì)架構(gòu)有本質(zhì)區(qū)別。所以要在arm開發(fā)板上運(yùn)行的程序,則必須要用專用的編譯器來編譯。(1)在文本編輯軟件中編寫好 C源代碼文件,并保存到共享文件夾中。= hello.c 在Ubuntu系統(tǒng)的共享目錄中,用arm-lin

6、ux-gcc 編譯器對hello.c 進(jìn)行編譯,使生成 一個可執(zhí)行程序。arm-linux-gcc hello.c- o hello= hello(3) 下載到開發(fā)板中rz運(yùn)行hello這個程序chmod +x hello./hello標(biāo)準(zhǔn)文案2.6函數(shù)的定義返回類型 函數(shù)名(輸入?yún)?shù)列表)函數(shù)語句;/指令序列0 0 0返回類型:函數(shù)返回值(return 語句后面那個表達(dá)式值的類型)一般是單值類型, 函數(shù)也可以沒有返回值(void)函數(shù)名:C語言標(biāo)識符。把一個名字與特定的功能模塊相關(guān)聯(lián)輸入?yún)?shù)列表:功能模塊的輸入。格式如下:參數(shù)類型 參數(shù)名1 ,參數(shù)類型2參數(shù)2,函數(shù)也可以沒有參數(shù)。 主調(diào)函數(shù)

7、:調(diào)用其他函數(shù)的函數(shù)被調(diào)函數(shù):被別人調(diào)用的函數(shù)“實(shí)際參數(shù)”:在函數(shù)調(diào)用過程中,主調(diào)函數(shù)傳遞給被調(diào)函數(shù)的輸入?yún)?shù)值, 我們稱之為“實(shí)際參數(shù)”, 簡稱”實(shí)參”?!靶问絽?shù)”:函數(shù)定義時,參數(shù)列表中的參數(shù)。我們稱之為”形式參數(shù)”,簡稱”形參”。2.7 Linux 文件10函數(shù)#in clude #in clude #in clude vfcn tl.hopen用來打開一個文件int ope n(const char *path name, int flags)path name:要打開或創(chuàng)建的文件名(帶路徑名)flags:打開標(biāo)志。告訴系統(tǒng),是以何種方式打開這個文件O_RDONLY : read o

8、n lyO_WRONLY : write on lyO_RDWR : read/write 以上三個標(biāo)志選其一。返回值:如果成功返回文件描述符(0,后續(xù)所有對文件的操作都必須 通過它,因?yàn)樗磉@個文件。)失敗返回-1, 并且errno被設(shè)置。2.8 LCD顯示原理屏幕由y行且每行x個像素點(diǎn)的矩陣組成;在屏幕上顯示圖像,就是給每個像素點(diǎn)顯示 一種顏色。顏色值,可以量化:Color = xGree n + yBlue + zRed我們向屏幕設(shè)備文件/dev/fbO中寫入各點(diǎn)顏色值就可以讓屏幕顯示相應(yīng)的圖片了大全標(biāo)準(zhǔn)文案第3章2048游戲的設(shè)計(jì)流程圖開始游戲打開屏幕第4章相關(guān)的c語言游戲程序#in

9、 elude #i nclude #in elude vfen tl.h#in elude #in elude /*perror, errno ,.*/#include /*abs的頭文件 */#in elude /*pri ntf*/#i nclude #in elude #i nclude #in elude /*time */#i nclude #defi ne LCD_WIDTH 800#defi ne LCD_HEIGHT 480un sig ned char bmpdataLCD_SIZE ; / int game_over = 0;/游戲結(jié)束的標(biāo)志,/0表示游戲不結(jié)束#defin

10、e LCD_BYTESPERPIXEL 4 /每個像素點(diǎn)占幾個字節(jié)#defi ne MATRIX_X00 /整個棋盤的左上角頂點(diǎn)的x軸坐標(biāo)#defi ne MATRIX_Y00 /整個棋盤的左上角頂點(diǎn)的y軸坐標(biāo)#defi ne PIECE_SIZE100 /棋子的像素點(diǎn)大小#defi ne BOARDSIZE4 /整個棋盤的大小 BORADSIZE * BOARDSIZE#defi ne MOVE_LEFT1#defi ne MOVE_RIGHT2#defi ne MOVE_UP3#define MOVE DOWN4#defi ne LCD_SIZE (LCD_WIDTH * LCD_HEIG

11、HT *LCD_BYTESPERPIXEL)讀bmp圖片數(shù)據(jù)臨時數(shù)組1表示游戲結(jié)束/棋盤矩陣 int matrixBOARDSIZEBOARDSIZE= 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0屏幕顯存第一個點(diǎn)的內(nèi)存); int *plcd = NULL;/ 指向 framebuffer( /*lcd_draw_point:在屏幕坐為(x, y)這個點(diǎn),填充color這個顏色值。 x: x軸坐標(biāo)y:y軸坐標(biāo)color:要填充的辨色值返回值: 無返回值。*/void lcd_draw_po in t(i nt x, i nt y, i nt color)int *p = p

12、led;if (x = 0 & x =0 & y =0 & xO+wv=LCD_WIDTH & y0=0 & yO+h=0 & h=0) int i,j; for(i=x0;ix0+w;i+)for(j=yO;jvyO+h;j+)LCD_draw_poi nt(i,j,color);elseprin tf(draw dect failed!xO=%d yO=%d w=%d h=%dn,xO,yO,w,h);/將所有的圖片名保存到一個數(shù)組中 const char * bmpfiles=military_fo nt_7_2.bmp, / 2military_fo nt_7_4.bmp, / 4 m

13、ilitary_fo nt_7_8.bmp, 8 military_fo nt_7_16.bmp, / 16 military_fo nt_7_32.bmp, military_fo nt_7_64.bmp, military_fo nt_7_128.bmp, military_fo nt_7_256.bmp, military_fo nt_7_512.bmp, military_fo nt_7_1024.bmp, military_fo nt_7_2048.bmp, military_fo nt_7_4096.bmp, military_fo nt_7_8192.bmp, military_

14、fo nt_7_16384.bmp, military_fo nt_7_32768.bmp, military_fo nt_7_65536.bmp,; -一/*get_bmpfiles_index:根據(jù)你要顯示的數(shù)字(2,4,8,16,.)返回你對應(yīng)的文件名的下標(biāo)返回值:返回x對應(yīng)的文件名在數(shù)組bmpfiles的下標(biāo)*/int get_bmpfiles_i ndex(i nt x)/*draw_bmp_bynamelE張bmp圖片顯示在屏幕上特定的位置 bmpfile:要顯示的bmp圖片的文件名x0:在屏幕上顯示的左上角頂點(diǎn)的x軸坐標(biāo)y0:在屏幕上顯示的左上角頂點(diǎn)的y軸坐標(biāo)w:位圖寬度h:位圖

15、高度返回值:無返回值.*/void draw_bmp_b yn ame(c onst char *bmpfile, int x0, int y0, int w, int h) 一 一int fd;int x, y;fd = ope n(bmpfile, O_RDONLY);if (fd = -1)perror(ope n bmpfile error:); return ;lseek(fd, 54, SEEK_SET);read(fd, bmpdata, w*h*3);close(fd);int i = 0;for (y = 0; y h; y+)un sig ned char r,g ,b;i

16、nt color;for (x = 0; x w; x+)已知圖片色深為24位b = bmpdatai+;g = bmpdatai+;r = bmpdatai+;color = (r 16) | (g 8) | b;lcd_draw_point(x0+ x, y0 + (h -1 - y) ,color); 一 一/*draw_matrix:把棋盤矩陣在屏幕上顯示出來*/void draw_matrix()int i, j;for (i = 0; i BOARDSIZE; i+)for (j = 0; j = 1,x = 3int x = (random() % 3) + 1;int i;fo

17、r(i = 0; i 30) & (abs_x 2 * abs_y) 大全標(biāo)準(zhǔn)文案close(fd);return MOVE_RIGHT;else if(x_cz 2 * abs_y) close(fd);return MOVE_LEFT;else if(y_cz 30) & (abs_y 2 * abs_x) close(fd);return MOVE_UP; _else if(y_cz 2 * abs_x) close(fd);return MOVE_DOWN;elsex1 = y1 = -1;con ti nue;close(fd); /*change_matrix:根據(jù)手指滑動(dir

18、ection),變換棋盤矩陣*/int cha nge_matrix() _int direct ion = get_fi nger_directio n(); if (direction = MOVE_LEFT) fin_left();else if (direction = MOVE_RIGHT) fin_ right(); else if (direction = MOVE_UP) fin_up();elsefin _dow n();/*fin_left:手指左劃后棋子移動及合并的方式*/void fin_left() _int fin = get_fi nger_direct ion(

19、);int i, j;/i為矩陣行下標(biāo),j為矩陣列下標(biāo)int value, save_zero;for(i = 0; i BOARDSIZE; i+)value = 0;save_zero= 0;for(j = 0; j BOARDSIZE ; j+)if (matrixij = 0)con ti nue;if (value = 0) value = matrixij;elseif (value = matrixij)/合并matrixisave_zero+ = value * 2; value = 0;elsematrixisave_zero+ = value; value = matrix

20、ij;大全標(biāo)準(zhǔn)文案matrixij = 0;if (value != 0) matrixisave_zero = value; _/*finight:手指上劃后棋子移動及合并的方式*/void fin _right() _int i, j;/i為矩陣行下標(biāo),j為矩陣列下標(biāo)int value;int save_zero;for(i = 0; i = 0 ; j-)if(matrixij = 0)con ti nue; if(value = 0)value = matrixij;elseif(value = matrixij)matrixisave_zero- = 2 * value; value

21、 = 0;elsematrixisave_zero- = value; value = matrixij;matrixij = 0;大全標(biāo)準(zhǔn)文案if(value != 0)matrixisave_zero = value; _/*fin_up:手指上劃后棋子移動及合并的方式*/void fin _up() _int i, j;/i為矩陣行下標(biāo),j為矩陣列下標(biāo)int value;int save_zero;for(j = 0; j BOARDSIZE; j+)value = 0;save_zero= 0;for(i = 0; i BOARDSIZE ; i+)if(matrixij = 0)co

22、n ti nue;if(value = 0)value = matrixij;elseif(value = matrixij)matrixsave_zero+j =2 * value; value = 0;elsematrixsave_zero+j = value; value = matrixij;大全matrixij = 0;if(value != 0) matrixsave_zeroj = value; _/*fin_down:手指上劃后棋子移動及合并的方式*/void fin _dow n() _int i, j;/i為矩陣行下標(biāo),j為矩陣列下標(biāo)int value;int save_z

23、ero;for(j = 0; j = 0 ; i-)if(matrixij = 0)con ti nue;if(value = 0)value = matrixij;elseif(value = matrixij)matrixsave_zero-j = 2 * value; value = 0;elsematrixsave_zero-j = value; value = matrixij; matrixij = 0;if(value != 0) matrixsave_zeroj = value; _/*move_judge:判斷是否還能移動 retur n value:1 game over0

24、 con ti nue*/int move_judge()int i, j;if(get_zero_ num() != 0) 一 一return 0;for(i = 0; i BOARDSIZE; i+)for(j = 0; j BOARDSIZE ; j+)if (j != BOARDSIZE -1)if (matrixij = matrixij+1) return 0; if (i != BOARDSIZE - 1)if (matrixij = matrixi+1j) return 0;標(biāo)準(zhǔn)文案return 1;/*rand1_matrix:移動之后隨機(jī)產(chǎn)生一個數(shù)字填充到 任意一個0的位置

25、上*/void ran d_matrix() _int pos = (ran dom() % get_zero _num() + 1;int s = 2, 4, 8, 2; int s_i = (ran dom() % 4);set_matrix(pos, ss_i); draw_matrix();大全.主函*int main() int fd;/*step 1: 打開屏幕*/fd = ope n( /dev/fb0, O_RDWR); if (fd = -1)perror(ope n fb0 failed:); return -1;/*step 2: mmap*/pled = mmap(NU

26、LL,/第一個參數(shù),為映射后的內(nèi)存地址, /為NULL表示讓操作系統(tǒng)自行分配800*480*4, /第二個參數(shù),為映射的長度。PROT_WRITE,/第三個參數(shù),為映射內(nèi)存區(qū)域的權(quán)限MAP_SHARED,第四個參數(shù),為映射標(biāo)志,sharedfd, /第五個參數(shù),為文件描述符,表示您要/映射哪個文件0 /第六個參數(shù)為偏移量,表示您要從文件的 /哪個位置開始映射);lcd_draw_dect(O, 0, 800, 480, Oxffffff);/畫背景sran dom( time(NULL) ); /設(shè)置隨機(jī)數(shù)種子,種子一樣,產(chǎn)生的/隨機(jī)數(shù)是一樣的init_matrix();初始化棋盤,并在任意x

27、個位置,填充x個數(shù)字,并顯示while (game_over = 0) /游戲沒結(jié)束 _/*step1:把原來的矩陣的值保存在matrix_vi數(shù)組中*/int matrix_v1BOARDSIZEBOARDSIZE;int i, j;for (i = 0; i BOARDSIZE;+i)for (j = 0; j BOARDSIZE; +j)matrix_v1ij = matrixij; _/*step 2:變換矩陣*/cha nge_matrix();/*step 3:檢查矩陣是否有變動*/int flag = 0;/矩陣是否有變化標(biāo)志位for (i = 0; i BOARDSIZE; +

28、i)for (j = 0; j BOARDSIZE; +j)if (matrix_v1ij != matrixij) _flag = 1;i = j = BOARDSIZE;if (flag)/矩陣有變動ran d_matrix();draw_matrix();else /矩陣沒有變動draw_matrix(); _/*step 4:判斷游戲是否結(jié)束*/game_over = move_judge(); _printf(Game Over);mu nmap (plcd, 800*480*4);close(fd);第5章2048游戲展示圖1學(xué)霸版2048游戲Jxueba_2BMP文件39.1 KBxueba_4BMP文件 iG.l KBXLieba_SBMP文件39.1 KBxueba_16BMP文件39.1 KBxueba_32BMP文件39.1 KBxueba_64BMP文件39.1 KBxueba_128BMP文件39.1 KBxueba_25

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(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

提交評論