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

下載本文檔

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

文檔簡(jiǎn)介

1、標(biāo)準(zhǔn)文案等級(jí):工程實(shí)踐訓(xùn)練項(xiàng)目名稱物聯(lián)網(wǎng)應(yīng)用專業(yè)班級(jí)自動(dòng)化1301姓 名黃奎倫學(xué) 號(hào) 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章知識(shí)點(diǎn)總結(jié) 12.1嵌入式系統(tǒng) 12.2 Linux 操作系統(tǒng)介紹 12.3交叉開(kāi)發(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語(yǔ)言游戲程序 4第5章2048游戲展示 21第6章游戲測(cè)試 2

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

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

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

5、口線連接好開(kāi)發(fā)板后,啟動(dòng)開(kāi)發(fā)板。在設(shè)備管理器中,查找識(shí)別出的端口。若不能正確識(shí)別端口(有感嘆號(hào)),則需要安裝驅(qū)動(dòng)(2) SecureCRT 的設(shè)置點(diǎn)擊快速連接,并進(jìn)行設(shè)置a. 協(xié)議:Serialb. 端口:你電腦識(shí)別出的端口號(hào)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開(kāi)發(fā)板上運(yùn)行的程序,則必須要用專用的編譯器來(lái)編譯。(1)在文本編輯軟件中編寫(xiě)好 C源代碼文件,并保存到共享文件夾中。= hello.c 在Ubuntu系統(tǒng)的共享目錄中,用arm-lin

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

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

8、n lyO_WRONLY : write on lyO_RDWR : read/write 以上三個(gè)標(biāo)志選其一。返回值:如果成功返回文件描述符(0,后續(xù)所有對(duì)文件的操作都必須 通過(guò)它,因?yàn)樗磉@個(gè)文件。)失敗返回-1, 并且errno被設(shè)置。2.8 LCD顯示原理屏幕由y行且每行x個(gè)像素點(diǎn)的矩陣組成;在屏幕上顯示圖像,就是給每個(gè)像素點(diǎn)顯示 一種顏色。顏色值,可以量化:Color = xGree n + yBlue + zRed我們向屏幕設(shè)備文件/dev/fbO中寫(xiě)入各點(diǎn)顏色值就可以讓屏幕顯示相應(yīng)的圖片了大全標(biāo)準(zhǔn)文案第3章2048游戲的設(shè)計(jì)流程圖開(kāi)始游戲打開(kāi)屏幕第4章相關(guān)的c語(yǔ)言游戲程序#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 /每個(gè)像素點(diǎn)占幾個(gè)字節(jié)#defi ne MATRIX_X00 /整個(gè)棋盤(pán)的左上角頂點(diǎn)的x軸坐標(biāo)#defi ne MATRIX_Y00 /整個(gè)棋盤(pán)的左上角頂點(diǎn)的y軸坐標(biāo)#defi ne PIECE_SIZE100 /棋子的像素點(diǎn)大小#defi ne BOARDSIZE4 /整個(gè)棋盤(pán)的大小 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í)數(shù)組1表示游戲結(jié)束/棋盤(pán)矩陣 int matrixBOARDSIZEBOARDSIZE= 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0屏幕顯存第一個(gè)點(diǎn)的內(nèi)存); int *plcd = NULL;/ 指向 framebuffer( /*lcd_draw_point:在屏幕坐為(x, y)這個(gè)點(diǎn),填充color這個(gè)顏色值。 x: x軸坐標(biāo)y:y軸坐標(biāo)color:要填充的辨色值返回值: 無(wú)返回值。*/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);/將所有的圖片名保存到一個(gè)數(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,.)返回你對(duì)應(yīng)的文件名的下標(biāo)返回值:返回x對(duì)應(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、高度返回值:無(wú)返回值.*/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:把棋盤(pán)矩陣在屏幕上顯示出來(lái)*/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ù)手指滑動(dòng)(dir

18、ection),變換棋盤(pán)矩陣*/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:手指左劃后棋子移動(dòng)及合并的方式*/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:手指上劃后棋子移動(dòng)及合并的方式*/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:手指上劃后棋子移動(dòng)及合并的方式*/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:手指上劃后棋子移動(dòng)及合并的方式*/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:判斷是否還能移動(dòng) 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:移動(dòng)之后隨機(jī)產(chǎn)生一個(gè)數(shù)字填充到 任意一個(gè)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: 打開(kāi)屏幕*/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,/第一個(gè)參數(shù),為映射后的內(nèi)存地址, /為NULL表示讓操作系統(tǒng)自行分配800*480*4, /第二個(gè)參數(shù),為映射的長(zhǎng)度。PROT_WRITE,/第三個(gè)參數(shù),為映射內(nèi)存區(qū)域的權(quán)限MAP_SHARED,第四個(gè)參數(shù),為映射標(biāo)志,sharedfd, /第五個(gè)參數(shù),為文件描述符,表示您要/映射哪個(gè)文件0 /第六個(gè)參數(shù)為偏移量,表示您要從文件的 /哪個(gè)位置開(kāi)始映射);lcd_draw_dect(O, 0, 800, 480, Oxffffff);/畫(huà)背景sran dom( time(NULL) ); /設(shè)置隨機(jī)數(shù)種子,種子一樣,產(chǎn)生的/隨機(jī)數(shù)是一樣的init_matrix();初始化棋盤(pán),并在任意x

27、個(gè)位置,填充x個(gè)數(shù)字,并顯示while (game_over = 0) /游戲沒(méi)結(jié)束 _/*step1:把原來(lái)的矩陣的值保存在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:檢查矩陣是否有變動(dòng)*/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)/矩陣有變動(dòng)ran d_matrix();draw_matrix();else /矩陣沒(méi)有變動(dòng)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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(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)論