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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

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

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

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

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

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

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

8、n lyO_WRONLY : write on lyO_RDWR : read/write 以上三個標志選其一。返回值:如果成功返回文件描述符(0,后續(xù)所有對文件的操作都必須 通過它,因為它代表這個文件。)失敗返回-1, 并且errno被設置。2.8 LCD顯示原理屏幕由y行且每行x個像素點的矩陣組成;在屏幕上顯示圖像,就是給每個像素點顯示 一種顏色。顏色值,可以量化:Color = xGree n + yBlue + zRed我們向屏幕設備文件/dev/fbO中寫入各點顏色值就可以讓屏幕顯示相應的圖片了大全標準文案第3章2048游戲的設計流程圖開始游戲打開屏幕第4章相關的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;/游戲結束的標志,/0表示游戲不結束#defin

10、e LCD_BYTESPERPIXEL 4 /每個像素點占幾個字節(jié)#defi ne MATRIX_X00 /整個棋盤的左上角頂點的x軸坐標#defi ne MATRIX_Y00 /整個棋盤的左上角頂點的y軸坐標#defi ne PIECE_SIZE100 /棋子的像素點大小#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圖片數據臨時數組1表示游戲結束/棋盤矩陣 int matrixBOARDSIZEBOARDSIZE= 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0屏幕顯存第一個點的內存); int *plcd = NULL;/ 指向 framebuffer( /*lcd_draw_point:在屏幕坐為(x, y)這個點,填充color這個顏色值。 x: x軸坐標y:y軸坐標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);/將所有的圖片名保存到一個數組中 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:根據你要顯示的數字(2,4,8,16,.)返回你對應的文件名的下標返回值:返回x對應的文件名在數組bmpfiles的下標*/int get_bmpfiles_i ndex(i nt x)/*draw_bmp_bynamelE張bmp圖片顯示在屏幕上特定的位置 bmpfile:要顯示的bmp圖片的文件名x0:在屏幕上顯示的左上角頂點的x軸坐標y0:在屏幕上顯示的左上角頂點的y軸坐標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) 大全標準文案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:根據手指滑動(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為矩陣行下標,j為矩陣列下標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;大全標準文案matrixij = 0;if (value != 0) matrixisave_zero = value; _/*finight:手指上劃后棋子移動及合并的方式*/void fin _right() _int i, j;/i為矩陣行下標,j為矩陣列下標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;大全標準文案if(value != 0)matrixisave_zero = value; _/*fin_up:手指上劃后棋子移動及合并的方式*/void fin _up() _int i, j;/i為矩陣行下標,j為矩陣列下標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為矩陣行下標,j為矩陣列下標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;標準文案return 1;/*rand1_matrix:移動之后隨機產生一個數字填充到 任意一個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,/第一個參數,為映射后的內存地址, /為NULL表示讓操作系統(tǒng)自行分配800*480*4, /第二個參數,為映射的長度。PROT_WRITE,/第三個參數,為映射內存區(qū)域的權限MAP_SHARED,第四個參數,為映射標志,sharedfd, /第五個參數,為文件描述符,表示您要/映射哪個文件0 /第六個參數為偏移量,表示您要從文件的 /哪個位置開始映射);lcd_draw_dect(O, 0, 800, 480, Oxffffff);/畫背景sran dom( time(NULL) ); /設置隨機數種子,種子一樣,產生的/隨機數是一樣的init_matrix();初始化棋盤,并在任意x

27、個位置,填充x個數字,并顯示while (game_over = 0) /游戲沒結束 _/*step1:把原來的矩陣的值保存在matrix_vi數組中*/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;/矩陣是否有變化標志位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:判斷游戲是否結束*/game_over = move_judge(); _printf(Game Over);mu nmap (plcd, 800*480*4);close(fd);第5章2048游戲展示圖1學霸版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)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論