基于嵌入式系统的工程实训报告.docx

上传人:wj 文档编号:1238357 上传时间:2023-04-30 格式:DOCX 页数:40 大小:202.98KB
下载 相关 举报
基于嵌入式系统的工程实训报告.docx_第1页
第1页 / 共40页
基于嵌入式系统的工程实训报告.docx_第2页
第2页 / 共40页
基于嵌入式系统的工程实训报告.docx_第3页
第3页 / 共40页
基于嵌入式系统的工程实训报告.docx_第4页
第4页 / 共40页
基于嵌入式系统的工程实训报告.docx_第5页
第5页 / 共40页
基于嵌入式系统的工程实训报告.docx_第6页
第6页 / 共40页
基于嵌入式系统的工程实训报告.docx_第7页
第7页 / 共40页
基于嵌入式系统的工程实训报告.docx_第8页
第8页 / 共40页
基于嵌入式系统的工程实训报告.docx_第9页
第9页 / 共40页
基于嵌入式系统的工程实训报告.docx_第10页
第10页 / 共40页
基于嵌入式系统的工程实训报告.docx_第11页
第11页 / 共40页
基于嵌入式系统的工程实训报告.docx_第12页
第12页 / 共40页
基于嵌入式系统的工程实训报告.docx_第13页
第13页 / 共40页
基于嵌入式系统的工程实训报告.docx_第14页
第14页 / 共40页
基于嵌入式系统的工程实训报告.docx_第15页
第15页 / 共40页
基于嵌入式系统的工程实训报告.docx_第16页
第16页 / 共40页
基于嵌入式系统的工程实训报告.docx_第17页
第17页 / 共40页
基于嵌入式系统的工程实训报告.docx_第18页
第18页 / 共40页
基于嵌入式系统的工程实训报告.docx_第19页
第19页 / 共40页
基于嵌入式系统的工程实训报告.docx_第20页
第20页 / 共40页
亲,该文档总共40页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

基于嵌入式系统的工程实训报告.docx

《基于嵌入式系统的工程实训报告.docx》由会员分享,可在线阅读,更多相关《基于嵌入式系统的工程实训报告.docx(40页珍藏版)》请在冰点文库上搜索。

基于嵌入式系统的工程实训报告.docx

等级:

工程实践训练

项目名称物联网应用

专业班级自动化1301

姓名黄奎伦

学号201301020129

指导教师汪超,谢一峰(粤嵌)

2016年12月24日

目录

第1章实训目的与任务 1

1.1工程实践训练目的 1

1.2实训项目要求 1

第2章知识点总结 1

2.1嵌入式系统 1

2.2Linux操作系统介绍 1

2.3交叉开发 2

2.4SecureCRT的设置与连接 2

2.5C程序的交叉编译及运行 2

2.6函数的定义 3

2.7Linux文件IO函数 3

2.8LCD显示原理 4

第3章2048游戏的设计流程图 4

第4章相关的c语言游戏程序 5

第5章2048游戏展示 21

第6章游戏测试 22

6.1测试的意义 22

6.2测试过程 22

心得体会 22

电气信息学院工程实践训练评分标准 23

第1章实训目的与任务

1.1工程实践训练目的

本次自动化工程实践训练第一部分是实训装置的使用说明,讲述了系统的组成、硬件的特点和技术指标、软件的使用介绍。

第二部分是实训项目部分,叙述了实训的原理、步骤及注意事项等。

通过对实训装置各个仪表的原理、工作情况及实验原理、软硬件的详细介绍,通过实际操作让我们对复杂过程控制系统实训装置有一个充分的认识,又有益于我们对工业生产现场控制系统的了解。

培养学生的工程实践能力,进一步提高学生分析和解决实际问题的能力。

1.2实训项目要求

轻松的益智游戏对缓解生活压力调节情绪具有重要的意义。

《2048》这款小游戏是一款流行的数字游戏,游戏设计初衷是一款益智类的游戏,其特点在于轻松,简单,有趣。

因此,开发要求做到各项功能要完备、操作要简便、易学易用。

所以本周的工程实训要求自己设计一个2048小游戏,以及学习关于嵌入式的基本入门知识。

第2章知识点总结

2.1嵌入式系统

嵌入式系统是以应用为中心,以计算机技术为基础,软硬件可裁减,以适应应用系统对功能、可靠性、成本、体积和功耗等有严格要求的专用计算机系统。

2.2Linux操作系统介绍

Linux是一套免费使用和自由传播的类UNIX操作系统,其创始人为美国著名黑客--林纳斯·托瓦兹。

它能运行主要的UNIX工具软件、应用程序和网络协议,且支持32位和64位硬件,是一个性能稳定的多用户网络操作系统。

操作系统:

操作系统是计算机系统中最基本的系统软件,它用于有效地管理系统资源,并为用户使用计算机提供了便利的环境。

ubuntu是一个基于linux的免费开源桌面PC操作系统。

2.3交叉开发

一般来说,研发嵌入式产品,由于从产品成本及功能专用性角度出发考虑。

嵌入式产品一般只有程序的运行环境,而并没有程序的编译开发环境。

所以,我们一般在通用电脑上用各种编译开发软件把程序编译调试好后,再下载到开发板或相关产品上去运行。

这个过程,我们称之为交叉开发。

2.4SecureCRT的设置与连接

(1)获取连接上的端口号

用串口线连接好开发板后,启动开发板。

在设备管理器中,查找识别出的端口。

若不能正确识别端口(有感叹号),则需要安装驱动。

(2)SecureCRT的设置

点击快速连接,并进行设置

a.协议:

Serial

b.端口:

你电脑识别出的端口号

c.波特率:

115200

d.把数据流控制中的RTS/CTS(R)勾去掉

其它保持默认设置

2.5C程序的交叉编译及运行

由于ARM处理器与Inter处理器其设计架构有本质区别。

所以要在arm开发板上运行的程序,则必须要用专用的编译器来编译。

(1)在文本编辑软件中编写好C源代码文件,并保存到共享文件夹中。

===>hello.c

(2)在Ubuntu系统的共享目录中,用arm-linux-gcc编译器对hello.c进行编译,使生成一个可执行程序。

arm-linux-gcchello.c–ohello

===>hello

(3)下载到开发板中

rz

(4)运行hello这个程序

chmod+xhello

./hello

2.6函数的定义

返回类型函数名(输入参数列表)

{

函数语句;//指令序列

}

"返回类型":

函数返回值(return语句后面那个表达式值的类型)一般是"单值"类型,函数也可以没有返回值(void)

"函数名":

C语言标识符。

把一个名字与特定的功能模块相关联

"输入参数列表":

功能模块的输入。

格式如下:

参数类型参数名1,参数类型2参数2,……函数也可以没有参数。

主调函数:

调用其他函数的函数

被调函数:

被别人调用的函数

“实际参数”:

在函数调用过程中,主调函数传递给被调函数的输入参数值,我们称之为“实际参数”,简称”实参”。

“形式参数”:

函数定义时,参数列表中的参数。

我们称之为”形式参数”,简称”形参”。

2.7Linux文件IO函数

#include

#include

#include

open用来打开一个文件

intopen(constchar*pathname,intflags)

pathname:

要打开或创建的文件名(带路径名)

flags:

打开标志。

告诉系统,是以何种方式打开这个文件

O_RDONLY:

readonly

O_WRONLY:

writeonly

O_RDWR:

read/write

以上三个标志选其一。

返回值:

如果成功返回文件描述符(>0,后续所有对文件的操作都必须

通过它,因为它代表这个文件。

失败返回-1,并且errno被设置。

2.8LCD显示原理

屏幕由y行且每行x个像素点的矩阵组成;在屏幕上显示图像,就是给每个像素点显示一种颜色。

颜色值,可以量化:

Color=xGreen+yBlue+zRed

我们向屏幕设备文件/dev/fb0中写入各点颜色值就可以让屏幕显示相应的图片了

第3章2048游戏的设计流程图

是否为有效移动

能否继续游戏

绘制棋盘矩阵

在随机的空位置上

显示一个随机值

判断手势并做相应移动

初始化棋盘矩阵

打开屏幕

开始游戏

N

Y

游戏结束

N

Y

第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*LCD_BYTESPERPIXEL)

#defineMATRIX_X00//整个棋盘的左上角顶点的x轴坐标

#defineMATRIX_Y00//整个棋盘的左上角顶点的y轴坐标

#definePIECE_SIZE100//棋子的像素点大小

#defineBOARDSIZE4//整个棋盘的大小BORADSIZE*BOARDSIZE

#defineMOVE_LEFT1

#defineMOVE_RIGHT2

#defineMOVE_UP3

#defineMOVE_DOWN4

unsignedcharbmpdata[LCD_SIZE];//读bmp图片数据临时数组

intgame_over=0;//游戏结束的标志,1表示游戏结束

//0表示游戏不结束

//棋盘矩阵

intmatrix[BOARDSIZE][BOARDSIZE]=

{

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

{

*(p+LCD_WIDTH*y+x)=color;

}

}

/*

lcd_draw_dect:

在屏幕上画一个矩形,并且用

color这种颜色填充该矩形。

@x0:

该矩形的左上角的那个点x轴坐标

@y0:

该矩形的左上角的那个点y轴坐标

@w:

该矩形的宽

@h:

该矩形的高

@color:

该矩形要填充的辨色值

返回值:

无返回值。

*/

voidlcd_draw_dect(intx0,inty0,intw,inth,intcolor)

{

if(x0>=0&&x0+w<=LCD_WIDTH&&y0>=0&&y0+h<=LCD_HEIGHT&&w>=0&&h>=0)

{

inti,j;

for(i=x0;i

{

for(j=y0;j

{

LCD_draw_point(i,j,color);

}

}

}

else

{

printf("drawdectfailed!

x0=%dy0=%dw=%dh=%d\n",x0,y0,w,h);

}

}

//将所有的图片名保存到一个数组中

constchar*bmpfiles[]=

{

"military_font_7_2.bmp",//2

"military_font_7_4.bmp",//4

"military_font_7_8.bmp",//8

"military_font_7_16.bmp",//16

"military_font_7_32.bmp",

"military_font_7_64.bmp",

"military_font_7_128.bmp",

"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,8,,16,...)

返回你对应的文件名的下标

返回值:

返回x对应的文件名在数组bmpfiles的下标

*/

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;

}

lseek(fd,54,SEEK_SET);

read(fd,bmpdata,w*h*3);

close(fd);

inti=0;

for(y=0;y

{

unsignedcharr,g,b;

intcolor;

for(x=0;x

{

b=bmpdata[i++];

g=bmpdata[i++];

r=bmpdata[i++];

color=(r<<16)|(g<<8)|b;

lcd_draw_point(x0+x,y0+(h-1-y),color);

}

}

}

/*

draw_matrix:

把棋盘矩阵在屏幕上显示出来

*/

voiddraw_matrix()

{

inti,j;

for(i=0;i

{

for(j=0;j

{

intx0,y0;

x0=185;//棋盘矩阵左上角那个点的x轴坐标

y0=25;//棋盘矩阵左上角那个点的y轴坐标

if(matrix[i][j]==0)

{

lcd_draw_dect(x0+j*110,y0+i*110,PIECE_SIZE,PIECE_SIZE,

0xb4eeb4);//如果此处元素的值为0,那么

//就显示

}

else

{

intf_index=get_bmpfiles_index(matrix[i][j]);

draw_bmp_byname(bmpfiles[f_index],

x0+j*110,y0+i*110,

PIECE_SIZE,PIECE_SIZE);

}

}

}

}

/*

get_zero_num:

求棋盘矩阵里面有多少个0

返回值:

返回棋盘矩阵中0的个数

*/

intget_zero_num()

{

}

/*

set_matrix:

给棋盘矩阵第z个0的位置,填充一个

值s

*/

voidset_matrix(intz,ints)

{

}

/*

init_matrix:

初始化棋盘矩阵

在任意x个位置,填充x个数字(2,4,8)

*/

voidinit_matrix()

{

/*

step1:

随机产生x个数字,并填充到棋盘矩阵中去

*/

//规则x>=1,x<=3

intx=(random()%3)+1;

inti;

for(i=0;i

{

intpos=(random()%get_zero_num())+1;

ints[]={2,4,8,2};

ints_i=(random()%3);

set_matrix(pos,s[s_i]);//给棋盘矩阵第pos个0的位置,填充一个值s[s_i]

}

/*

step2:

绘制棋盘矩阵

*/

draw_matrix();

}

/*

get_finger_direction:

获取手指在触摸屏上面的滑动方向

返回值:

MOVE_LEFT:

手指向左移动

MOVE_RIGHT:

手指向右移动

MOVE_UP:

手指向上移动

MOVE_DOWN:

手指向下移动

*/

intget_finger_direction()

{

intret;

intfd=open("/dev/event0",O_RDONLY);

if(fd==-1)

{

perror("openeventfailed:

");

return-1;

}

structinput_eventev;

intx1=-1;//在滑动过程中第一个点的x轴坐标

intx2;//在滑动过程中最后一个点的x轴坐标

inty1=-1;//在滑动过程中第一个点的y轴坐标

inty2;//在滑动过程中最后一个点的y轴坐标

while

(1)

{

ret=read(fd,&ev,sizeof(ev));

if(ret!

=sizeof(ev))

{

continue;

}

if(ev.type==EV_ABS&&ev.code==ABS_X)//是x轴坐标

{

if(x1==-1)//x1重来没有赋过值,那么肯定是第一个点

{

x1=ev.value;

}

x2=ev.value;

}

if(ev.type==EV_ABS&&ev.code==ABS_Y)//是y轴坐标

{

if(y1==-1)//y1重来没有赋过值,那么肯定是第一个点

{

y1=ev.value;

}

y2=ev.value;

}

if(ev.type==EV_ABS&&ev.code==ABS_PRESSURE//手指弹起,再计算滑动方向

&&ev.value==0)//触摸屏压力值为0,pressup

{

intx_cz;//x轴的位移

inty_cz;//y轴的位移

intabs_x;

intabs_y;

x_cz=x2-x1;

y_cz=y2-y1;

abs_x=abs(x_cz);

abs_y=abs(y_cz);

if((x_cz>30)&&(abs_x>2*abs_y))

{

close(fd);

returnMOVE_RIGHT;

}

elseif((x_cz<-30)&&(abs_x>2*abs_y))

{

close(fd);

returnMOVE_LEFT;

}

elseif((y_cz>30)&&(abs_y>2*abs_x))

{

close(fd);

returnMOVE_UP;

}

elseif((y_cz<-30)&&(abs_y>2*abs_x))

{

close(fd);

returnMOVE_DOWN;

}

else

{

x1=y1=-1;

continue;

}

}

}

close(fd);

}

/*

change_matrix:

根据手指滑动(direction),

变换棋盘矩阵

*/

intchange_matrix()

{

intdirection=get_finger_direction();

if(direction==MOVE_LEFT)

{

fin_left();

}

elseif(direction==MOVE_RIGHT)

{

fin_right();

}

elseif(direction==MOVE_UP)

{

fin_up();

}

else

{

fin_down();

}

}

/*

fin_left:

手指左划后棋子移动及合并的方式

*/

voidfin_left()

{

//intfin=get_finger_direction();

inti,j;//i为矩阵行下标,j为矩阵列下标

intvalue,save_zero;

for(i=0;i

{

value=0;

save_zero=0;

for(j=0;j

{

if(matrix[i][j]==0)

continue;

if(value==0)

{

value=matrix[i][j];

}

else

{

if(value==matrix[i][j])//合并

{

matrix[i][save_zero++]=value*2;

value=0;

}

else

{

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2