基于嵌入式系统的2048工程实训报告_第1页
基于嵌入式系统的2048工程实训报告_第2页
基于嵌入式系统的2048工程实训报告_第3页
基于嵌入式系统的2048工程实训报告_第4页
基于嵌入式系统的2048工程实训报告_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、等级:工程实践训练项目名称物联网应用专业班级自动化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嵌入式系统1 HYPERLINK l bookmark14 o Current Document 2.2Linux操作系统介绍1 HYPERLINK l bookmark16 o Current Document 2.3交叉开发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工程实践训练目的本次自动化工程实践训练第一部分是实训装置的使用说明,讲述了系统的组成、硬件的特点和技术指标、软件的使

5、用介绍。第二部分是实训项目部分,叙述了实训的原理、步骤及注意事项等。通过对实训装置各个仪表的原理、工作情况及实验原理、软硬件的详细介绍,通过实际操作让我们对复杂过程控制系统实训装置有一个充分的认识,又有益于我们对工业生产现场控制系统的了解。培养学生的工程实践能力,进一步提高学生分析和解决实际问题的能力。1.2实训项目要求轻松的益智游戏对缓解生活压力调节情绪具有重要的意义。2048这款小游戏是一款流行的数字游戏,游戏设计初衷是一款益智类的游戏,其特点在于轻松,简单,有趣。因此,开发要求做到各项功能要完备、操作要简便、易学易用。所以本周的工程实训要求自己设计一个2048小游戏,以及学习关于嵌入式的

6、基本入门知识。第2章知识点总结2.1嵌入式系统嵌入式系统是以应用为中心,以计算机技术为基础,软硬件可裁减,以适应应用系统对功能、可靠性、成本、体积和功耗等有严格要求的专用计算机系统。2.2Linux操作系统介绍Linux是一套免费使用和自由传播的类UNIX操作系统,其创始人为美国著名黑客一林纳斯托瓦兹。它能运行主要的UNIX工具软件、应用程序和网络协议,且支持32位和64位硬件,是一个性能稳定的多用户网络操作系统。操作系统:操作系统是计算机系统中最基本的系统软件,它用于有效地管理系统资源,并为用户使用计算机提供了便利的环境。ubuntu是一个基于linux的免费开源桌面PC操作系统。2.3交叉

7、开发一般来说,研发嵌入式产品,由于从产品成本及功能专用性角度出发考虑。嵌入式产品一般只有程序的运行环境,而并没有程序的编译开发环境。所以,我们一般在通用电脑上用各种编译开发软件把程序编译调试好后,再下载到开发板或相关产品上去运行。这个过程,我们称之为交叉开发。2.4SecureCRT的设置与连接获取连接上的端口号用串口线连接好开发板后,启动开发板。在设备管理器中,查找识别出的端口。若不能正确识别端口(有感叹号),则需要安装驱动。SecureCRT的设置点击快速连接,并进行设置协议:Serial端口:你电脑识别出的端口号波特率:115200把数据流控制中的RTS/CTS(R)勾去掉其它保持默认设

8、置2.5C程序的交叉编译及运行由于ARM处理器与Inter处理器其设计架构有本质区别。所以要在arm开发板上运行的程序,则必须要用专用的编译器来编译。在文本编辑软件中编写好C源代码文件,并保存到共享文件夹中。=hello.c在Ubuntu系统的共享目录中,用arm-linux-gcc编译器对hello.c进行编译,使生成一个可执行程序。arm-linux-gcchello.c-ohello=hello下载到开发板中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:要打开或创建的文件名(带路径名)flags:打开标志。告诉系统,是以何种方式打开这个文件O_RDONLY:readonlyO_WRONLY:writeonlyO_RDWR:read/write以上三个标志选其一。返回值:如果成功返回文件描述符(0,后续所有对文件的操作都必须通过它,因为它代表这个文件。)失败返回-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/每个像素点占几个字节#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,表示让操作系统自行分配800*480*4,/第二个参数,为映射的长度。PROT_WR

26、ITE,/第三个参数,为映射内存区域的权限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. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论