嵌入式实验报告触摸屏驱动实验(共19页).doc
《嵌入式实验报告触摸屏驱动实验(共19页).doc》由会员分享,可在线阅读,更多相关《嵌入式实验报告触摸屏驱动实验(共19页).doc(19页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上 武汉大学计算机学院嵌入式系统设计实验报告题目: 触摸屏驱动实验 成员:一、实验题目在现有ARM平台上实现触摸屏功能。编制触摸屏驱动,设计一个简单的俄罗斯方块的小游戏,通过触摸屏点击触发按钮动作进行游戏。二、实验目的综合运用ARM平台,掌握驱动程序设计方法,了解触摸屏工作原理。三、实验原理(一) 、方块和背景的表示: 在俄罗斯方块中共有7种方块,它们都由四个小方块组成,因此我们采用4*4的01数组表示。这7种方块的图形以及对应的矩阵表示如下:1、 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 2、 0 0 0 0 1 1 1 0 0 0 1 0 0
2、0 0 03、 0 0 0 0 0 1 1 1 0 1 0 0 0 0 0 04、 0 0 0 0 0 1 1 0 0 0 1 1 0 0 0 05、 0 0 0 0 0 1 1 0 1 1 0 0 0 0 0 06、 0 0 0 0 0 1 1 1 0 0 1 0 0 0 0 07、 0 0 0 0 0 1 1 0 0 1 1 0 0 0 0 0 俄罗斯方块的背景为一个无盖的杯子,我们用一个20个短整型一维数组表示,其中数的低12位每位表示是否有方块,1为有方块,0表示没有。初始时矩阵及其表示的图形如下,其中图中空白区域为活动区域: 【1】【0】【0】【0】【0】【0】【0】【0】【0】【0
3、】【0】【1】【1】【0】【0】【0】【0】【0】【0】【0】【0】【0】【0】【1】【1】【0】【0】【0】【0】【0】【0】【0】【0】【0】【0】【1】【1】【0】【0】【0】【0】【0】【0】【0】【0】【0】【0】【1】【1】【0】【0】【0】【0】【0】【0】【0】【0】【0】【0】【1】【1】【0】【0】【0】【0】【0】【0】【0】【0】【0】【0】【1】【1】【0】【0】【0】【0】【0】【0】【0】【0】【0】【0】【1】【1】【0】【0】【0】【0】【0】【0】【0】【0】【0】【0】【1】【1】【0】【0】【0】【0】【0】【0】【0】【0】【0】【0】【1】【1】【0
4、】【0】【0】【0】【0】【0】【0】【0】【0】【0】【1】【1】【0】【0】【0】【0】【0】【0】【0】【0】【0】【0】【1】【1】【0】【0】【0】【0】【0】【0】【0】【0】【0】【0】【1】【1】【0】【0】【0】【0】【0】【0】【0】【0】【0】【0】【1】【1】【0】【0】【0】【0】【0】【0】【0】【0】【0】【0】【1】【1】【0】【0】【0】【0】【0】【0】【0】【0】【0】【0】【1】【1】【0】【0】【0】【0】【0】【0】【0】【0】【0】【0】【1】【1】【0】【0】【0】【0】【0】【0】【0】【0】【0】【0】【1】【1】【0】【0】【0】【0】【0
5、】【0】【0】【0】【0】【0】【1】【1】【0】【0】【0】【0】【0】【0】【0】【0】【0】【0】【1】【1】【0】【0】【0】【0】【0】【0】【0】【0】【0】【0】【1】【1】【1】【1】【1】【1】【1】【1】【1】【1】【1】【1】【1】 最后用两个整型变量(x,y)表示方块对应在背景中的位置。其中(x,y)表示方块对应4*4矩阵的左上角小方块据背景左上角的横纵格子数个数,初始值为(3,0)。(二) 方块的变形。方块的变形是用旋转的形式:将表示方块的4*4矩阵绕着矩阵的中心顺时针旋转90度,用得到的新矩阵表示变形后的方块。过程如下图 依此类推.(三) 变形和下降、左右移动的可行
6、性判断。将变形或者下降、左右移动后的方块映射到背景矩阵的相应位置,如果在背景上的对应位置不为空(即为1),那么变形或者下降、左右移动不可执行。如果是方块触底了,则将方块矩阵映射到背景矩阵相应位置,使其变为背景的一部分。(四) 消行。当某一行全部被方块占满(即背景矩阵的该行对应的无符号短整型数前12位全为1),则删除该行,并将该行以上的所有行下降一行。(五) 到顶。当方块堆满,即方块堆到背景矩阵的活动区域最上面一行,则游戏结束。四、实验代码#include#include#include#include#include#include#include #include #include #inc
7、lude #include #include #include #include #include #include #include #include #define FBDEV /dev/fb/0#define ORANGE 0xfb00#define BLUE 0x00ff#define WHITE 0xffffstatic char * default_frameArraybuffer=FBDEV;typedef structunsigned short pressure;unsigned short x;unsigned short y;unsigned short pad;TS_E
8、VENT;/* 方块*/typedef structint x;int y;int color;block;struct fb_dev int fb; void *fb_mem; int fb_width,fb_height,fb_line_len,fb_size; int fb_bpp;static struct fb_dev fbdev;unsigned short frameArray20=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0;block O_up,O_down,O_left,O_right;typedef struct unsigned sho
9、rt fr25;frame;typedef struct unsigned short x;unsigned short y;location;typedef struct unsigned short a44;Shape; frame fra,fullFrame;location lo;/当前坐标 Shape shapeMove,nextShape,sh7=0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0
10、,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0;void init()/产生随机shapeMoveShape temp; int i;shapeMove=nextShape;srand(time(NULL);i=rand()%7;nextShape=sh6-i;lo.x=4;lo.y=0;void initial() int i;/fra.fr0=fra.fr1=fra.fr2=0;srand(time(NULL);i=rand()%
11、7;nextShape=shapeMove=shi;for (i=0;i24;i+)fra.fri=1+(111);fra.fr24=(112)-1;fullFrame=fra;init();unsigned short change(unsigned short f,unsigned short x,unsigned short j)return !(f&(1(11-x-j);void judge(Shape sha)/返回1,表示可变换 .可,即变换 unsigned short i,j;for (i=0;i4;i+)for (j=0;j4;j+)if(change(fra.frlo.y+
12、i,lo.x,j)&sha.aij)return;shapeMove=sha; void transform()/变换形态,也是up() Shape temp;int i,j;for (i=0;i4;i+)for (j=0;j4;j+)temp.aj3-i=shapeMove.aij;judge(temp); int beEnd()/返回1 到底 unsigned short i,j,end; /printf(beEnd()n); for (i=0;i4;i+) for (j=0;j4;j+) end=change(fra.frlo.y+i+1,lo.x,j); if(shapeMove.ai
13、j&end=1) return 1; return 0; int beLeft()/返回1 到左边 unsigned short i,j,ledge; for (i=0;i4;i+) for (j=0;j4;j+) ledge=change(fra.frlo.y+i,lo.x,j-1)&shapeMove.aij; if(ledge=1) return 1; return 0; int beRight()/返回1 到右边 unsigned short i,j,redge; for (i=0;i4;i+) for (j=0;j4;j+) redge=change(fra.frlo.y+i,lo.
14、x,j+1)&shapeMove.aij; if(redge=1) return 1; return 0; void left() if (!beLeft() lo.x-; void right() if (!beRight() lo.x+; void combine() unsigned short i,j;/printf(combine()n); for (i=0;i4;i+) for (j=0;j4;j+) if (shapeMove.aij) fra.frlo.y+i+=(shapeMove.aij(11-lo.x-j); void down() /printf(down()n); i
15、f(!beEnd() lo.y+; elseif (lo.y=2)exit(1);combine();init(); void view()/生成显示数组 unsigned short i,j;/printf(view()n);fullFrame=fra; for (i=0;i4;i+) for (j=0;j4;j+) if (shapeMove.aij) fullFrame.frlo.y+i+=(shapeMove.aij(11-lo.x-j); for (i=4;i24;i+)frameArrayi-4 = fullFrame.fri/2;/printf(%un,frameArray1);
16、unsigned getBit(unsigned short f,int bit)int i=0;unsigned short t=1;while(i5;i-)for(j=1;j0;k-)fra.frk = fra.frk-1;fra.fr0 = (111)+1;i+;fullFrame=fra;/printf(deldrowEnd()n);for (i=4;i24;i+)frameArrayi-4 = fullFrame.fri/2;void drawNext() int i,j,m,k; unsigned short int *p=(unsigned short int *)fbdev.f
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 实验 报告 触摸屏 驱动 19
限制150内