




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、等級:工程實踐訓練項目名稱物聯網應用專業(yè)班級自動化1301姓名黃奎倫學號指導教師汪超,謝一峰(粵嵌)2016年12月24日目錄TOC o 1-5 h z HYPERLINK l bookmark4 o Current Document 第1章實訓目的與任務1 HYPERLINK l bookmark6 o Current Document 1.1工程實踐訓練目的1 HYPERLINK l bookmark8 o Current Document 1.2實訓項目要求1 HYPERLINK l bookmark10 o Current Document 第2章知識點總結1 HYPERLINK l
2、bookmark12 o Current Document 2.1嵌入式系統(tǒng)1 HYPERLINK l bookmark14 o Current Document 2.2Linux操作系統(tǒng)介紹1 HYPERLINK l bookmark16 o Current Document 2.3交叉開發(fā)2 HYPERLINK l bookmark18 o Current Document 2.4SecureCRT的設置與連接2 HYPERLINK l bookmark20 o Current Document 2.5C程序的交叉編譯及運行2 HYPERLINK l bookmark22 o Curren
3、t Document 2.6函數的定義3 HYPERLINK l bookmark24 o Current Document 2.7Linux文件IO函數3 HYPERLINK l bookmark26 o Current Document 2.8LCD顯示原理4 HYPERLINK l bookmark28 o Current Document 第3章2048游戲的設計流程圖4 HYPERLINK l bookmark30 o Current Document 第4章相關的c語言游戲程序5 HYPERLINK l bookmark32 o Current Document 第5章2048游戲
4、展示21 HYPERLINK l bookmark34 o Current Document 第6章游戲測試22 HYPERLINK l bookmark36 o Current Document 6.1測試的意義22 HYPERLINK l bookmark38 o Current Document 6.2測試過程22 HYPERLINK l bookmark40 o Current Document 心得體會22電氣信息學院工程實踐訓練評分標準23 第1章實訓目的與任務1.1工程實踐訓練目的本次自動化工程實踐訓練第一部分是實訓裝置的使用說明,講述了系統(tǒng)的組成、硬件的特點和技術指標、軟件的使
5、用介紹。第二部分是實訓項目部分,敘述了實訓的原理、步驟及注意事項等。通過對實訓裝置各個儀表的原理、工作情況及實驗原理、軟硬件的詳細介紹,通過實際操作讓我們對復雜過程控制系統(tǒng)實訓裝置有一個充分的認識,又有益于我們對工業(yè)生產現場控制系統(tǒng)的了解。培養(yǎng)學生的工程實踐能力,進一步提高學生分析和解決實際問題的能力。1.2實訓項目要求輕松的益智游戲對緩解生活壓力調節(jié)情緒具有重要的意義。2048這款小游戲是一款流行的數字游戲,游戲設計初衷是一款益智類的游戲,其特點在于輕松,簡單,有趣。因此,開發(fā)要求做到各項功能要完備、操作要簡便、易學易用。所以本周的工程實訓要求自己設計一個2048小游戲,以及學習關于嵌入式的
6、基本入門知識。第2章知識點總結2.1嵌入式系統(tǒng)嵌入式系統(tǒng)是以應用為中心,以計算機技術為基礎,軟硬件可裁減,以適應應用系統(tǒng)對功能、可靠性、成本、體積和功耗等有嚴格要求的專用計算機系統(tǒng)。2.2Linux操作系統(tǒng)介紹Linux是一套免費使用和自由傳播的類UNIX操作系統(tǒng),其創(chuàng)始人為美國著名黑客一林納斯托瓦茲。它能運行主要的UNIX工具軟件、應用程序和網絡協(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交叉
7、開發(fā)一般來說,研發(fā)嵌入式產品,由于從產品成本及功能專用性角度出發(fā)考慮。嵌入式產品一般只有程序的運行環(huán)境,而并沒有程序的編譯開發(fā)環(huán)境。所以,我們一般在通用電腦上用各種編譯開發(fā)軟件把程序編譯調試好后,再下載到開發(fā)板或相關產品上去運行。這個過程,我們稱之為交叉開發(fā)。2.4SecureCRT的設置與連接獲取連接上的端口號用串口線連接好開發(fā)板后,啟動開發(fā)板。在設備管理器中,查找識別出的端口。若不能正確識別端口(有感嘆號),則需要安裝驅動。SecureCRT的設置點擊快速連接,并進行設置協(xié)議:Serial端口:你電腦識別出的端口號波特率:115200把數據流控制中的RTS/CTS(R)勾去掉其它保持默認設
8、置2.5C程序的交叉編譯及運行由于ARM處理器與Inter處理器其設計架構有本質區(qū)別。所以要在arm開發(fā)板上運行的程序,則必須要用專用的編譯器來編譯。在文本編輯軟件中編寫好C源代碼文件,并保存到共享文件夾中。=hello.c在Ubuntu系統(tǒng)的共享目錄中,用arm-linux-gcc編譯器對hello.c進行編譯,使生成一個可執(zhí)行程序。arm-linux-gcchello.c-ohello=hello下載到開發(fā)板中rz運行hello這個程序chmod+xhello./hello2.6函數的定義返回類型函數名(輸入參數列表)函數語句;/指令序列。返回類型:函數返回值(return語句后面那個表達
9、式值的類型)一般是單值類型,函數也可以沒有返回值(void)函數名:C語言標識符。把一個名字與特定的功能模塊相關聯輸入參數列表:功能模塊的輸入。格式如下:參數類型參數名1,參數類型2參數2,函數也可以沒有參數。主調函數:調用其他函數的函數被調函數:被別人調用的函數“實際參數”:在函數調用過程中,主調函數傳遞給被調函數的輸入參數值,我們稱之為“實際參數”,簡稱”實參”。“形式參數”:函數定義時,參數列表中的參數。我們稱之為”形式參數”,簡稱”形參”。2.7Linux文件IO函數#include#include#includeopen用來打開一個文件intopen(constchar*pathna
10、me,intflags)pathname:要打開或創(chuàng)建的文件名(帶路徑名)flags:打開標志。告訴系統(tǒng),是以何種方式打開這個文件O_RDONLY:readonlyO_WRONLY:writeonlyO_RDWR:read/write以上三個標志選其一。返回值:如果成功返回文件描述符(0,后續(xù)所有對文件的操作都必須通過它,因為它代表這個文件。)失敗返回-1,并且errno被設置。2.8LCD顯示原理屏幕由y行且每行x個像素點的矩陣組成;在屏幕上顯示圖像,就是給每個像素點顯示一種顏色。顏色值,可以量化:Color=xGreen+yBlue+zRed我們向屏幕設備文件/dev/fb0中寫入各點顏色
11、值就可以讓屏幕顯示相應的圖片了第3章2048游戲的設計流程圖第4章相關的c語言游戲程序#include#include#include#include#include/*perror,errno,.*/#include/*abs的頭文件*/#include/*printf*/#include#include#include#include/*time*/#include#defineLCD_WIDTH800#defineLCD_HEIGHT480#defineLCD_BYTESPERPIXEL4/每個像素點占幾個字節(jié)#defineLCD_SIZE(LCD_WIDTH*LCD_HEIGHT*LC
12、D_BYTESPERPIXEL)#defineMATRIX_X0#defineMATRIX_Y0#definePIECE_SIZE0/整個棋盤的左上角頂點的x軸坐標0/整個棋盤的左上角頂點的y軸坐標100/棋子的像素點大小#defineBOARDSIZE4/整個棋盤的大小BORADSIZE*BOARDSIZE#defineMOVE_LEFT1#defineMOVE_RIGHT2#defineMOVE_UP3#defineMOVE_DOWN4unsignedcharbmpdataLCD_SIZE;/讀bmp圖片數據臨時數組intgame_over=0;/游戲結束的標志,1表示游戲結束/0表示游戲
13、不結束/棋盤矩陣intmatrixBOARDSIZEBOARDSIZE=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:要填充的辨色值返回值:無返回值。*/voidlcd_draw_point(intx,inty,intcolor)int*p=plcd;if(x=0&x=0&y=0&x0+w=0&y0+h=0&h=0)inti,j;for(i=x0;ix0+w;i+)for(
14、j=y0;jy0+h;j+)LCD_draw_point(i,j,color);elseprintf(drawdectfailed!x0=%dy0=%dw=%dh=%dn,x0,y0,w,h);/將所有的圖片名保存到一個數組中constchar*bmpfiles=military_font_7_2.bmp,/2military_font_7_4.bmp,/4military_font_7_8.bmp,/8military_font_7_16.bmp,/16military_font_7_32.bmp,military_font_7_64.bmp,military_font_7_128.bmp,
15、military_font_7_256.bmp,military_font_7_512.bmp,military_font_7_1024.bmp,military_font_7_2048.bmp,military_font_7_4096.bmp,military_font_7_8192.bmp,military_font_7_16384.bmp,military_font_7_32768.bmp,military_font_7_65536.bmp,;/*get_bmpfiles_index:根據你要顯示的數字(2,4,816,.)返回你對應的文件名的下標返回值:返回x對應的文件名在數組bmpf
16、iles的下標*/intget_bmpfiles_index(intx)/*draw_bmp_byname:把一張bmp圖片顯示在屏幕上特定的位置bmpfile:要顯示的bmp圖片的文件名x0:在屏幕上顯示的左上角頂點的x軸坐標y0:在屏幕上顯示的左上角頂點的y軸坐標w:位圖寬度h:位圖高度返回值:無返回值.*/voiddraw_bmp_byname(constchar*bmpfile,intx0,inty0,intw,inth)intfd;intx,y;fd=open(bmpfile,O_RDONLY);if(fd=-1)perror(openbmpfileerror:);return;ls
17、eek(fd,54,SEEK_SET);read(fd,bmpdata,w*h*3);close(fd);inti=0;for(y=0;yh;y+)unsignedcharr,g,b;intcolor;for(x=0;xw;x+)已知圖片色深為24位b=bmpdatai+;g=bmpdatai+;r=bmpdatai+;color=(r16)|(g8)|b;lcd_draw_point(x0+x,y0+(h-1-y),color);/*draw_matrix:把棋盤矩陣在屏幕上顯示出來*/voiddraw_matrix()inti,j;for(i=0;iBOARDSIZE;i+)for(j=0
18、;j=1,x=3intx=(random()%3)+1;inti;for(i=0;i30)&(abs_x2*abs_y)close(fd);returnMOVE_RIGHT;elseif(x_cz2*abs_y)close(fd);returnMOVE_LEFT;elseif(y_cz30)&(abs_y2*abs_x)close(fd);returnMOVE_UP;elseif(y_cz2*abs_x)close(fd);returnMOVE_DOWN;elsex1=y1=-1;continue;close(fd);/*change_matrix:根據手指滑動(direction),變換棋盤
19、矩陣*/intchange_matrix()value=matrixij; intdirection=get_finger_direction();if(direction=MOVE_LEFT)fin_left();elseif(direction=MOVE_RIGHT)fin_right();elseif(direction=MOVE_UP)fin_up();elsefin_down();/*fineft:手指左劃后棋子移動及合并的方式*/voidfin_left()/intfin=get_finger_direction();inti,j;/i為矩陣行下標,j為矩陣列下標intvalue,
20、save_zero;for(i=0;iBOARDSIZE;i+)value=0;save_zero=0;for(j=0;jBOARDSIZE;j+)if(matrixij=0)continue;if(value=0)elseif(value=matrixij)合并 matrixisave_zero+=value*2;value=0;elsematrixisave_zero+=value;value=matrixij;matrixij=0;if(value!=0)matrixisave_zero=value;/*fin_right:手指上劃后棋子移動及合并的方式*/voidfin_right()
21、inti,j;/i為矩陣行下標,j為矩陣列下標intvalue;intsave_zero;for(i=0;i=0;j-)if(matrixij=0)continue;if(value=0)value=matrixij;elseif(value=matrixij)value=matrixij; value=matrixij; matrixisave_zero-=2*value;value=0;elsematrixisave_zero-=value;value=matrixij;matrixij=0;if(value!=0)matrixisave_zero=value;/*fin_up:手指上劃后
22、棋子移動及合并的方式*/voidfin_up()inti,j;/i為矩陣行下標,j為矩陣列下標intvalue;intsave_zero;for(j=0;jBOARDSIZE;j+)value=0;save_zero=0;for(i=0;iBOARDSIZE;i+)if(matrixij=0)continue;if(value=0)elseif(value=matrixij)matrixsave_zero+j=2*value;value=0;elsematrixsave_zero+j=value;value=matrixij;matrixij=0;if(value!=0)matrixsave_
23、zeroj=value;/*fin_down:手指上劃后棋子移動及合并的方式*/voidfin_down()inti,j;/i為矩陣行下標,j為矩陣列下標intvalue;intsave_zero;for(j=0;j=0;i-)if(matrixij=0)continue;if(value=0)else if(value=matrixij)matrixsave_zero-j=2*value;value=0;elsematrixsave_zero-j=value;value=matrixij;matrixij=0;if(value!=0)matrixsave_zeroj=value;/*move
24、_judge:判斷是否還能移動returnvalue:1gameover0continue*/intmove_judge()inti,j;if(get_zero_num()!=0)return0;for(i=0;iBOARDSIZE;i+)for(j=0;jBOARDSIZE;j+)if(j!=BOARDSIZE-1)if(matrixij=matrixij+1)return0;if(i!=BOARDSIZE-1)if(matrixij=matrixi+1j)return0;return1;/*rand1_matrix:移動之后隨機產生一個數字填充到任意一個0的位置上*/voidrand_ma
25、trix()intpos=(random()%get_zero_num()+1;ints=2,4,8,2;ints_i=(random()%4);set_matrix(pos,ss_i);draw_matrix();主函數intmain()intfd;/*step1:打開屏幕*/fd=open(/dev/fb0,O_RDWR);if(fd=-1)perror(openfb0failed:);return-1;/*step2:mmap*/plcd=mmap(NULL,/第一個參數,為映射后的內存地址,為NULL,表示讓操作系統(tǒng)自行分配800*480*4,/第二個參數,為映射的長度。PROT_WR
26、ITE,/第三個參數,為映射內存區(qū)域的權限MAP_SHARED,/第四個參數,為映射標志,sharedfd,/第五個參數,為文件描述符,表示您要/映射哪個文件0/第六個參數為偏移量,表示您要從文件的/哪個位置開始映射);lcd_draw_dect(O,0,800,480,Oxffffff);/畫背景srandom(time(NULL);/設置隨機數種子,種子一樣,產生的/隨機數是一樣的init_matrix();初始化棋盤,并在任意x個位置,填充x個數字,并顯示while(game_over=0)/游戲沒結束/*step1:把原來的矩陣的值保存在matrix_vi數組中*/intmatrix_
27、v1BOARDSIZEBOARDSIZE;inti,j;for(i=0;iBOARDSIZE;+i)for(j=0;jBOARDSIZE;+j)matrix_v1ij=matrixij;/*step2:變換矩陣*/change_matrix();/*step3:檢查矩陣是否有變動*/intflag=0;/矩陣是否有變化標志位for(i=0;iBOARDSIZE;+i)for(j=0;jBOARDSIZE;+j)if(matrix_v1ij!=matrixij)flag=1;i=j=BOARDSIZE;if(flag)/矩陣有變動rand_matrix();draw_matrix();else/矩陣沒有變動draw_matrix();/*step4:判斷游戲是否結束*/game_over=move_judge();printf(GameOver);munmap(plcd,800*480*4);close(fd);第5章2048游戲展示xueba_2BMP文件39.1KBBxueba_16BMP文井39.1KBxueba_12SBMPn39.1KBxueba_1024BMP文件39.1KB圖1學霸版2048游戲xueba_4BMP文件I39.1KBxueba_32BMP文件39.1KExueLa_258BMP文件3
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 項目孵化日常管理制度
- 集體企業(yè)工資管理制度
- 鐵廠員工宿舍管理制度
- 財務印章管理制度規(guī)定
- 郵政內部處理管理制度
- 車輛維修進度管理制度
- 骨科醫(yī)院管理制度模板
- 酒店運營日常管理制度
- 食品安全清單管理制度
- 超市相關制度管理制度
- 2025年高考思辨作文備考之17例高級思辨素材
- (甘肅二診)2025年甘肅省高三月考試卷(4月)物理試卷(含官方答案)
- 2025年中國二氧化碳市場運行態(tài)勢及行業(yè)發(fā)展前景預測報告
- 格構梁班組合同
- 福建省泉州市20023年第29屆WMO競賽二年級數學下學期競賽試卷
- 2025年安全生產有限空間作業(yè)應急處理能力試題集試卷
- 四川省昭覺中學高中地理 1.2 當代環(huán)境問題的產生及特點教學實錄 新人教版選修6
- 內蒙古赤峰山金紅嶺有色礦業(yè)有限責任公司招聘考試真題2024
- 蘇州卷-2025年中考第一次模擬考試英語試卷(含答案解析)
- 撬裝式承壓設備系統(tǒng)安全技術規(guī)范
- 融資面試試題及答案
評論
0/150
提交評論