版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、我汉木禽针尊机曇浣嵌入式系统设计实验报告题目:触摸屏驱动实验成员:实验题目在现有ARM平台上实现触摸屏功能.编制触摸屏驱动,设计一个简单的俄罗斯方块 的小游戏,通过触摸屏点击触发按钮动作进行游戏.二实验目的综合运用ARM平台,掌握驱动程序设计方法,了解触摸屏工作原理.三. 实验原理一、方块和背景的表示:在俄罗斯方块中共有7种方块,它们都由四个小方块组成,因此我们釆用4*4的01 数组表示.这7种方块的图形以及对应的矩阵表示如下:1、 0 0 0 011110 0 0 02、00001110001000003、00000111010000004、00000110001100005、0000011
2、0110000006、00000111001000007、00000110011000000 0 0 0俄罗斯方块的背景为一个无盖的杯子,我们用一个20个短整型一维数组表示,其中 数的低12位每位表示是否有方块,1为有方块,0表示没有.初始时矩阵及其表示的图形如下,其中图中空白区域为活动区域:> 最后用两个整型变量xy表示方块对应在背景中的位置.其中x,y表示方块对 应炉4矩阵的左上角小方块据背景左上角的横纵格子数个数,初始值为3,0.二方块的变形.方块的变形是用旋转的形式:将表示方块的炉4矩阵绕着矩阵的中央顺 时针旋转90度,用得到的新矩阵表示变形后的方块.过程如下列图三变形和下降、左
3、右移动的可行性判断.将变形或者下降、左右移动后的方块映射到背 景矩阵的相应位置,如果在背景上的对应位置不为空即为1,那么变形或者下降、 左右移动不可执行.如果是方块触底了,那么将方块矩阵映射到背景矩阵相应位置,使 其变为背景的一局部.四消行.当某一行全部被方块占满即背景矩阵的该行对应的无符号短整型数前12位 全为1,那么删除该行,并将该行以上的所有行下降一行.五到顶.当方块堆满,即方块堆到背景矩阵的活动区域最上面一行,那么游戏结束.四. 实验代码#include<stdio.h> #include<fcntl.h> #include<stdlib.h> #i
4、nclude<emio. h> #inchide<sys/nmiaii.h> #include<linux/fb.h> include <sigiial.h>#include <terniios.h> #include <stimg.h>#include <sys/types.hinclude <sys/stat.h>include <sys/tiine.h>include <umstd.h>include <sys/ioctl.h>include <umstd.
5、h>#include <tune.h>#include <getopt.h>include <lmux.;ilc.h>#defiiie FBDEV 7dev/fb/On井define ORANGE OxfbOO井define BLUE OxOOff#defiiie WHITE Oxffffstatic chai * defaulcframeAnaybuffer=FBDEV; typedef stnictunsigned short pressure;unsigned short x;unsigned short y;unsigned short pad
6、;TS_EVENT;/*方块可 typedef stmct iiit x; int y; iiit color; block;stmct fb_devint fb;void *fb_mem;int fb_width.fb_height, fb_lme_len.fb_size;int fb_bpp;static stmct fb_dev fbdev;unsigned short fkameAnay20=0Q0Q0O0Q0O0,0O0Q0Q0O0; block 0_up.0_down.0_lefi,0_iight;typedef stmctunsigned short 丘25; frame;typ
7、edef stmctunsigned short x;unsigned short v;location;typedef stmctunsigned short a 4 4; Shape;flame fra,fullFrame;location lo;当前坐标Shape shapeMoveaiextShape.sh刀=0Q0,0,1 丄 1,1,0.0,0,0,0,0,0,0,0Q0,0,04,1,1,04,0,0,0,0,0,0,0Q0,0, 1 丄 1,0, 0.0,1,0,0A0,0,0Q0,0,0.1,1,1,0.0,1,0,0A0,0,0,0,0,0,0.1,1,0, 0.0,1,!
8、, 0A0,0,0,0,0,0,0.1,1,0,1,1,0,0,0A0,0,0,0,0,0,0.1,1,0,0.1,1,0, 0A0,0 ;void产生随机 shapeMoveShape temp;iiit i;shapeMove=nextShape; siand(tiine(NULL); i=rand()%7;nextShape=sli6-i;lo.x=4;lo.v=0;JJvoid initialQmt i;fhi£0=fhi£l=fhi£2=0; siand(tiine(NULL);i=rand()%7;nextShape=shapeMove=shi;for
9、 (i=0;i<24;i+)fia.fii=l+(l«ll);fra.fr24=(l«12)-l;fullFiaine=fia;HUt();unsigned short change(unsigiied short f unsigned short x,unsigned short j)leturn !(f&(l«(ll-x-j);void judge(Shape slia)/返回1,表示可变换可,即变换unsigned short i.j;for (i=0;i<4;i+)for (J=0;j<4j+)if(change(fra.filo
10、.y+iJo.xj)&&sha.aij)return;shapeMove=sha;void transformQ变换形态,也是 up()Shape tenip:mt ij;for (i=0;i<4;i+)for (J=0;j<4j+)temp.aj3-i=shapeMove.aij;judge(temp);int beEnd()/ 返回 1 到底unsigned short ijend;/prmtf(nbeEndOiiH);for (i=0;i<4;i+)for (J=0;j<4j+) end=change(fia.filo.y+i+lJo.xj); i
11、f(shapeMove.a i j &end= 1)return 1;return 0;int beLeftO/返回1到左边unsigned short ijjedge;for (i=0;i<4;i+)for (J=0;j<4j+) ledge=change(fia.filo.y+iJo.xj-l)&shap 亡 if(ledge=l)return 1;return 0;int beRight()/返回1到右边unsigned short ij,redge;for (i=0;i<4;i+)for (J=0;j<4j+) redge=change (fra
12、. filo .y+i Jo .x j+1)&shap 亡 Moveaij; if(iedge=l)return 1;return 0;void left()if (!beLeft()lo.x-;void rightQif (!beRight()lo.x-H-;void combineQ unsigned short ij;/piintf(McombmeQiiH);for (i=0;i<4;i+)for (j=0;j<4j+)if (shapeMove.ai j)fia.frlo.y+i+=(shapeMove.aij«(ll-lo.x-j);void down(
13、)/prmtf(ndownOnM);if(!beEnd()io.y+;elseif (lo.y<=2)exit(l);combmeQ;initO;void viewQ/生成显示数组unsigned short ij;/pnntf(MviewQiin);fullFiaine=fia;for (i=0;i<4;i+)for (J=0 J<4;j+)if (shapeMove.ai j )fiillFrame.filo.y+i+=(shapeMove.ai j«( 11 -lo.x-j); for (i=4;i<24;i+)fiameAiTavi-4 = fullF
14、rame.fii/2;/pimtufiameAirayt 1 ); unsigned getBit(unsigned short tint bit)mt i=0;unsigned short t=l;while(i<bit) t*=2;i+; return !(t&f);void delrow()mt i,J,k;/pnntf(MdeldiowOiiH); fbr(i=23;i>5;i) foi(j=lj<llj+)if(getB it(fra .仕1 j 尸=0) break;for(k=i;k>0;k-)fra.frk = fra.frk-l; fra.fr
15、O = (l«ll)+l; i+;fullFiaine=fia;/piintf(MdeldroxvEnd()nM);for (i=4;i<24;i+)fiameAiTavi-4 = fullFrame.fii/2; void diawNext()mt ljmk;unsigned short iiit *p=(unsigned short int *)fbdev.fb_mem; foi(i=0;i<60;i-H-,p+=fbdev.fb_liiie_leiV2)if(i>=50&&i<55)fbr(j=470j<582j+)pj = WHI
16、TE;if(i>=55)for(k=470;k<475 ;k+)pk=WHITE;for(k=577;k<582;k+)pk=WHITE;for(m=0 ;m<2 0;m+,p+=fbdev. fb_linjlen/2) foi(j=0j<4j+)if(nextShape.aiIj = 1)fbi(k=0;k<20;k-H-)pj *24+k+480=ORANGE;for(k=470;k<475;k+)pk=WHITE;for(k=577;k<582;k+)pk=WHITE;for(m;m<24 ;m+,p+=fbdev. fb_lme_l
17、eii/2) foi(k=470;k<475 ;k+)pk=WHITE;foi(k=577;k<582;k+)pk=WHITE; for(i=0;i< 10;i-H-,p+=fbdev.fb_lme_len/2) if(i>=5)fbi(j=470j<582j+)pj = WHITE;elsefor(k=470;k<475 ;k+)pk=WHITE;for(k=577;k<582;k+)pk=WHITE; void diavvrOperate(block a)mt ij;unsigned short mt *p=(unsigned short int
18、*)fbdev.fb_mem; for(i=0;i<a.y;i-H-,p=fbdev.fb_lme_len/2);foi(i=a.y;i<a.y+60;i-H-,p+=fbdev.fb_lme_len/2)fbr(j=a.xj<a.x-r60j+)pj=a.color; void diawEdgeQint ij;unsigned short mt *p=(unsigned short int *)fbdev.fb_mem; for(i=0;i<fbdev.fbJieight;i+,p+=fbdev.fb_lmeJeii/2)for(j=110j<115j+)PUF
19、WHITE;fbr(j=360j <365 j+) p|j=WHITE;void diawBlockQmtunsigned short iiit *p=(unsigned short int *)fbdev.fb_mem; for(i=0 ;i<2 0 ;i+,p+=fbdev. fb_line_len/2)for(m=0;m<2 0 ;m-r+ ,p+=fbdev. fb_lin jlen/2) foi(j=0j<10;j+)= 0)/priiitf(n%u M,getBit(fiameAiiayi,9-j); if(getBit(frameArrayi,9J) =
20、1)fbi(k=0;k<20;k-H-)pj *24+k+120=ORANGE;/prmtf(nnH); fbr(m;m<23;m-H-,p+=fbdev.fb_lme_leii/2);diawEdgeQ;diawOperate(O_up);diawOperate(O_down);diawOperate(O_left);diawOperate(O_right);diawNextQ;void fiinc() /捕捉到定时器产生的SIGALARM信号时的操作, pnnrffhmc()n);downQ;viewQ;deliow();viewQ;fiameAiiaybuffer_open(
21、);diawBlockQ;/signal(SIGALRNl.func);mt fiaineAiTaybuffer_open(void)mt fb;struct fb var screeninfo fb viiifo;stmct fb fix screenuifo fb finfb;char * fb dev name;if(! (fb_dev_naiiie=getenv(HfiameAiTayBUFFERM)fb_dev_name=default_fiameAiTaybuffer;fb=open(fb_dev_naiiie,O_RDXVrR);/翻开 fiaiiieAiraybuffer 缓存
22、if(fb<0)priiitf(ndevice %s open failedaiH,fb_dev_name);return -1;i坦octl(fb,FEIOGET_VSCREENINFO,&fb_vinfo)/获取与 fiameAiTaybuffer 有关的可变信息piiiitf(nCan,t get VSCREENINFO:%sii'strenor(enno);close(fb);return -1;if (ioctl(fbFBIOGET_FSCREENINFCL&fb_fhifd)/获取与 fiameAnaybuffer 有关的固定信息piintfpCant
23、 get FSCREENINFO:%sii'stienor(enno);letuin 1;fbdev.fb_bpp = fbvinfb.red .lengtli + fb_viiifo. green, length + fb_vmfo. blu e. leng tli + fb.viiifb. transp. length; fbdev.fb width = fb viiifb.xies;fbdev.fb_height = fb_vinfb.vies;fbdev.fbjmejen = fb_fiiifb.lme_length;fbdev.fb_size = fb_fiiifo. sme
24、mjen;/ 映射区人小/priiitflfiameAnaybuffer:%d(%d)x%d,%dbppOx%xbyten,fbdev.fb_width.fbdev.fbine_l 亡 ihfbdevfb_hMght,fbdevfb_bpp,fbdevfb_sizu);if (fbdev.fb_bpp != 16)piiiitf(nfiaiiieAiray buffer must be 16bpp modeiiH);exit(O);fbdev.fbmem = imnap(NULL, fbdev.fb_size? PROT_READ|PROT_WRITE. MAP_SHARED, fb, 0)建
25、立 文件到内存的映射if (fbdev.fb_mem = NULL | (mt) fbdev.fb_mem = -1)fbdev.fb_mem = NULL;piiiitf(nnmiap failed'nH);close(fb);return -1;fbdev.fb = fb;memset(fbdev.fbmeni. 0x0. fbdev.fb_size);return 0;void fiameAiTaybufiei_close()if (fbdev.fb_mem)muimiap(fbdev.fb_mem, fbdev.fb_size)y/ffllj除映射fbdev.fb_mem =
26、NULL;if (fbdev.fb)close(fbdev.fb);fbdev.fb = 0;void set_non_blocking(int sd)设置非阻塞 mt opts;opts = fcntl(sd. F_GETFL);if(opts < 0)exit(0);opts = opts | O_NONBLOCK; if(fcntl(sd, F_SETFL, opts) < 0) exit(0);mt niain(void)mt i,fd?temp.num=0,flag=0;static iiit ts = -1;static TS EVENT ts event;stmct
27、itimeival value;value.it_value.nr_sec=l;value.it_value.nr_usec=O;value.it int亡rval.tv sec=l;value.it int亡rval.tv usec=O;setitimei(ITEvIER_REAL,&value.NULL);signal(SIGALRNI、fiinc);O_i】p.x = 500;O_i】p.y = 300;Oup.color = ORANGE;O_down.x = 500;O_down.y = 375;O_down.color = ORANGE;O_left.x = 425;OJe
28、ft.y = 375;OJeft.coloi = ORANGE;O.right.x = 575;O.right.y = 375;O_right.color = ORANGE;ts=open('7dev/touchscreeii/0raw,O_RDONLY);/ 翻开触摸屏if(ts<0)fprintf(stden;HCan not open touch screennM);exit(l);set_non_blockmg(ts);iiiitialQ;fiaineAiTaybuffer_open(); drawBlock();wlule(l)read(ts,&ts_event
29、,sizeof(TS_EVENT);/piiiitf(Hiuzaiiiia %d,di,ts_event.pressure);if(ts_event.pressure> 0&&flag = 0)/priiitf(nup.color:x:%d,y:%cl'ii,ts_event.xjs_event.y);if (ts_event.x < 3115 && ts_event.v < 1500 && ts_event.x >2785 && ts_event.y >1100) /up tiansfomiQ; viewQ; else if (ts_event.x < 3115 && ts_event.y < 1000 && ts_event.x >2785 && ts_event.y >600) /downdownQ;viewQ;delrow();viewQ; else if (ts_event.x < 2770 && ts_event.y < 1000 && ts_event.x >2440 &&am
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 外包运输车辆合同范本
- 国际买卖合同范本模板
- 国际海运代理合同范本
- 国产电脑销售合同范本
- 增加植物合同补充协议
- 外贸出口购货合同范本
- 块煤买卖合同协议范本
- 商铺招商办签合同范本
- 售后设备回收合同范本
- 团购名额转让合同范本
- 2025年兰州市中考物理试题卷(含答案解析)
- 安徽省水环境综合治理工程计价定额2025
- 糖尿病护理教学
- 生态补偿机制在江苏太湖流域生态保护中的应用与成效报告
- 新版《药品召回管理办法》质量管理培训课件
- 新生儿鼻饲护理
- 2025至2030中国航空货运行业运行分析有效策略与实施路径评估报告
- TCCTAS 195-2025 民航客票销售搜索服务数据接口规范 第1部分:国内运价搜索
- 股权投资项目可行性研究报告
- 抗衰老植物干细胞技术行业跨境出海项目商业计划书
- CJ/T 94-2005饮用净水水质标准
评论
0/150
提交评论