51单片机的俄罗斯方块.doc_第1页
51单片机的俄罗斯方块.doc_第2页
51单片机的俄罗斯方块.doc_第3页
51单片机的俄罗斯方块.doc_第4页
51单片机的俄罗斯方块.doc_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

C语言程序#include #define uchar unsigned char #define uint unsigned int#define DOWNTIME 30#define MAXHANG 20#define MAXLIE 16#define MAXPIX 3#define PUSHON 50#define LCD P2#define EN P3_0#define RW P3_1#define RS P3_2#define CS1 P3_3#define CS2 P3_4#define KEYLEFT P3_5#define KEYDOWN P3_6#define KEYRIGH P3_7#define KEYROTATION P1_0uchar gkey=0xff,keystate=0,t0ms1=0,t0ms=0,downtimegap=0;uchar miao=0,fen=0;uchar downok;bit keyflag,timeupdate,fashionupdate;uchar idata cubeMapMAXHANG2;typedef struct uchar code * box; uchar cube : 4; uchar state : 4; char row; char column; block;block this;uint score=0;uchar speed=1;uchar code bittable8=1,2,4,8,0x10,0x20,0x40,0x80;uchar code cube=/* */0,4,0xe,0, 0,2,6,2, 0,7,2,0, 4,6,4,0,/* */0,8,0xe,0, 0,4,4,0xc, 0,0,0xe,2, 0,6,4,4,/* */0,0xe,8,0, 0,4,4,6, 0,1,7,0, 6,2,2,0,/* */0,0xc,6,0, 0,2,6,4, 0,6,3,0, 2,6,4,0,/* */0,6,0xc,0, 0,4,6,2, 0,3,6,0, 4,6,2,0,/* */0,0xf,0,0, 4,4,4,4, 0,0,0xf,0, 2,2,2,2,/* */0,6,6,0, 0,6,6,0, 0,6,6,0, 0,6,6,0; uchar code asii= 0x3E,0x51,0x49,0x45,0x3E, / -0- 0x00,0x42,0x7F,0x40,0x00, / -1- 0x62,0x51,0x49,0x49,0x46, / -2- 0x21,0x41,0x49,0x4D,0x33, / -3- 0x18,0x14,0x12,0x7F,0x10, / -4- 0x27,0x45,0x45,0x45,0x39, / -5- 0x3C,0x4A,0x49,0x49,0x31, / -6- 0x01,0x71,0x09,0x05,0x03, / -7- 0x36,0x49,0x49,0x49,0x36, / -8- 0x46,0x49,0x49,0x29,0x1E, / -9- 0x00,0x36,0x36,0x00,0x00, / -:-10/next 0x7F,0x04,0x08,0x10,0x7F, / -N-11 0x7F,0x49,0x49,0x49,0x41, / -E-12 0x63,0x14,0x08,0x14,0x63, / -X-13 0x01,0x01,0x7F,0x01,0x01, / -T-14/speed 0x26,0x49,0x49,0x49,0x32, / -S-15 0x7F,0x09,0x09,0x09,0x06, / -P-16 0x7F,0x49,0x49,0x49,0x41, / -E-17 0x7F,0x41,0x41,0x41,0x3E, / -D-18/score 0x3E,0x41,0x41,0x41,0x22, / -C-19 0x3E,0x41,0x41,0x41,0x3E, / -O-20 0x7F,0x09,0x19,0x29,0x46, / -R-21 0x00,0x00,0x00,0x00,0x00, / - -22/GAME OVER 0x3E,0x41,0x51,0x51,0x72, / -G-23 0x7C,0x12,0x11,0x12,0x7C, / -A-24 0x7F,0x02,0x0C,0x02,0x7F, / -M-25 0x1F,0x20,0x40,0x20,0x1F, / -V-26/TIME/ 0x00,0x41,0x7F,0x41,0x00 / -I-27;/void lcdCmd(uchar cmd) bit ea; ea=EA; EA=0; EN=0; RW=0; RS=0; LCD=cmd; EN=1; EN=1; EN=0; EA=ea;/-void lcdWriteByte(uchar ch) EN=0; RS=1; RW=0; LCD=ch; EN=1; EN=1; EN=0;/-void lcdSetPage(uchar page) page &=0x7; page +=0xb8; lcdCmd(page);/-void lcdSetColumn(uchar column) column &=0x3f; column +=0x40; lcdCmd(column);/-/character fron=5*8void lcdPlayChar(uchar index,uchar page,uchar colume) uchar i,temp; uint p; p=5*index; for(i=colume;icolume+5;i+) if(i64) CS1=1; CS2=0; temp=i; else CS1=0; CS2=1; temp=i-64; lcdSetPage(page);lcdSetColumn(temp);lcdWriteByte(asiip+); /-/rectangle(3,0,50,60)void rectangle(void) uchar i,page; CS1=1; CS2=0; lcdSetPage(0); lcdSetColumn(2); EN=0; RS=1; RW=0; LCD=0xff; EN=1; EN=1; EN=0; for(i=3;i51;i+) EN=0; RS=1; RW=0; LCD=0x1; EN=1; EN=1; EN=0; EN=0; RS=1; RW=0; LCD=0xff; EN=1; EN=1; EN=0;/-for(page=1;page7;page+) lcdSetPage(page); lcdSetColumn(2); EN=0; RS=1; RW=0; LCD=0xff; EN=1; EN=1; EN=0; for(i=3;i51;i+) EN=0; RS=1; RW=0; LCD=0x0; EN=1; EN=1; EN=0; EN=0; RS=1; RW=0; LCD=0xff; EN=1; EN=1; EN=0; /- lcdSetPage(7); lcdSetColumn(2); EN=0; RS=1; RW=0; LCD=0x1f; EN=1; EN=1; EN=0; for(i=3;i51;i+) EN=0; RS=1; RW=0; LCD=0x10; EN=1; EN=1; EN=0; EN=0; RS=1; RW=0; LCD=0x1f; EN=1; EN=1; EN=0;/-/x:列;y行,页 3*3void lcdPutPix(uchar x, uchar y,uchar flag) uchar i,dat,bitmask,nextbit; bit bflag,pflag,ea; x=x*MAXPIX; y=y*MAXPIX; bflag=0; pflag=0; i=y%8; if(i=0) bitmask=0x7; else if(i=1) bitmask=0xe; else if(i=2) bitmask=0x1c; else if(i=3) bitmask=0x38; else if(i=4) bitmask=0x70; else if(i=5) bitmask=0xe0; else if(i=6) bflag=1; bitmask=0xc0; nextbit=1; else if(i=7) bflag=1; bitmask=0x80; nextbit=3; if(x63) x-=64; CS1=0; CS2=1; else pflag=1; lcdSetPage(y/8); for(i=x;ix+MAXPIX;i+) if(pflag) if(i=62 | i=63) CS1=1; CS2=0; lcdSetPage(y/8); else if(pflag & i=64) CS1=0; CS2=1; lcdSetPage(y/8); lcdSetColumn(i); ea=EA; EA=0; EN=0; LCD=0xff; RS=1; RW=1; EN=1; EN=0; EN=1; dat=LCD; EN=0; if(flag=1) dat|=bitmask; else dat&=bitmask; lcdSetColumn(i); EN=0; RW=0; RS=1; LCD=dat; EN=1; EN=1; EN=0; EA=ea; if(bflag) lcdSetPage(y/8+1); for(i=x;ix+MAXPIX;i+) if(pflag) if(i=62 | i=63) CS1=1; CS2=0; lcdSetPage(y/8+1); else if(pflag & i=64) CS1=0; CS2=1; lcdSetPage(y/8+1); lcdSetColumn(i); ea=EA; EA=0; EN=0; LCD=0xff; RS=1; RW=1; EN=1; EN=0; EN=1; dat=LCD; EN=0; if(flag=1) dat|=nextbit; else dat&=nextbit; lcdSetColumn(i); EN=0; RW=0; RS=1; LCD=dat; EN=1; EN=1; EN=0; EA=ea; /-void lcdClear(void) uchar i,page; CS1=1; CS2=0; for(page=0;page8;page+) lcdSetPage(page); lcdSetColumn(0); for(i=0;i64;i+) lcdWriteByte(0); CS1=0; CS2=1; for(page=0;page8;page+) lcdSetPage(page); lcdSetColumn(0); for(i=0;i64;i+) lcdWriteByte(0); /-#define STAR 53#define WIDE 6void lcdIni(void) lcdCmd(0x3f); lcdCmd(0xc0); lcdClear(); rectangle();/NEXT lcdPlayChar(11,0,STAR); lcdPlayChar(12,0,STAR+1*WIDE); lcdPlayChar(13,0,STAR+2*WIDE); lcdPlayChar(14,0,STAR+3*WIDE);/SPEED lcdPlayChar(15,3,STAR); lcdPlayChar(16,3,STAR+1*WIDE); lcdPlayChar(17,3,STAR+2*WIDE); lcdPlayChar(17,3,STAR+3*WIDE); lcdPlayChar(18,3,STAR+4*WIDE);/01 lcdPlayChar(0,4,STAR+2*WIDE); lcdPlayChar(1,4,STAR+3*WIDE); /SCORE lcdPlayChar(15,5,STAR); lcdPlayChar(19,5,STAR+1*WIDE); lcdPlayChar(20,5,STAR+2*WIDE); lcdPlayChar(21,5,STAR+3*WIDE); lcdPlayChar(12,5,STAR+4*WIDE); lcdPlayChar(0,6,STAR+1*WIDE); lcdPlayChar(0,6,STAR+2*WIDE); lcdPlayChar(0,6,STAR+3*WIDE); lcdPlayChar(0,6,STAR+4*WIDE);/TIME lcdPlayChar(0,7,STAR); lcdPlayChar(0,7,STAR+1*WIDE); lcdPlayChar(10,7,STAR+2*WIDE); lcdPlayChar(0,7,STAR+3*WIDE); lcdPlayChar(0,7,STAR+4*WIDE);/-void showScoreSpeed(void) uchar num5; char i; uint temp; temp=score; for(i=0;i0;i-) if(numi=0) numi=22; else break; for(i=4;i-1;i-) lcdPlayChar(numi,6,STAR+(4-i)*WIDE); lcdPlayChar(speed/10,4,STAR+2*WIDE); lcdPlayChar(speed%10,4,STAR+3*WIDE);/-void timeServer(void) if(timeupdate) timeupdate=0; lcdPlayChar(fen/10,7,STAR); lcdPlayChar(fen%10,7,STAR+1*WIDE); lcdPlayChar(10,7,STAR+2*WIDE); lcdPlayChar(miao/10,7,STAR+3*WIDE); lcdPlayChar(miao%10,7,STAR+4*WIDE); if(fashionupdate) fashionupdate=0; lcdPlayChar(22,7,STAR+2*WIDE); /=void t0isr(void) interrupt 1 uchar key; TH0=(65536-10000)/256; TL0=(65536-10000)%256; downtimegap+; t0ms=+t0ms%100; if(t0ms=0) timeupdate=1; miao=+miao%60; if(miao=0) fen=+fen%60; if(t0ms=50) fashionupdate=1;/- key=0xff; KEYLEFT=1; KEYRIGH=1; KEYROTATION=1; KEYDOWN=1; if(!KEYLEFT) key=0; if(!KEYRIGH) key=1; if(!KEYROTATION) key=2; if(!KEYDOWN) key=3; switch(keystate) case 0: if(key!=gkey) gkey=key; keystate=1; break; case 1: if(key=gkey) t0ms1=0; keystate=2; if(key!=0xff) keyflag=1; else keystate=0; break; case 2: if(key=gkey) if(t0ms1PUSHON) t0ms1+; else keystate=0; keyflag=0; gkey=0xff; break; /=void showNextCube(uchar code * p,uchar x,uchar y) uchar i,j,temp; for(i=0;i4;i+) temp=1; for(j=0;j4;j+) if(pi & temp) lcdPutPix(x+j,y+i,1); else lcdPutPix(x+j,y+i,0); temp0;hang-) if(cubeMaphang0=0 & cubeMaphang1=0) break; for(lie=0;lie(MAXLIE/8);lie+) temp=8*lie; if(cubeMaphanglie&0x01) lcdPutPix(temp+1,hang,1); if(cubeMaphanglie&0x02) lcdPutPix(temp+2,hang,1); if(cubeMaphanglie&0x04) lcdPutPix(temp+3,hang,1); if(cubeMaphanglie&0x08) lcdPutPix(temp+4,hang,1); if(cubeMaphanglie&0x10) lcdPutPix(temp+5,hang,1); if(cubeMaphanglie&0x20) lcdPutPix(temp+6,hang,1); if(cubeMaphanglie&0x40) lcdPutPix(temp+7,hang,1); if(cubeMaphanglie&0x80) lcdPutPix(temp+8,hang,1); /-void writeCubeToMap(void) uchar row,column,temp; uchar hang,lie; for(row=0;row4;row+) temp=1; for(column=0;column4;column+) if(this.boxrow & temp) hang=this.row+row; lie=this.column+column; cubeMaphanglie/8 |=bittablelie%8; lcdPutPix(lie+1,hang,1); temp=1; /-void clearCubeFromMap(void) uchar row,column,temp; uchar hang,lie; for(row=0;row4;row+) temp=1; for(column=0;column4;column+) if(this.boxrow & temp) hang=this.row+row; lie=this.column+column; cubeMaphanglie/8 &=bittablelie%8; lcdPutPix(lie+1,hang,0); temp(MAXHANG-4) return 1; else if(this.box2!=0 & this.row(MAXHANG-3) return 1; else if(this.box1!=0 & this.row(MAXHANG-2) return 1; else if(this.box0!=0 & this.row(MAXHANG-1) return 1;/- if(this.box0 & 0x01) | (this.box1 & 0x01) | (this.box2 & 0x01) |(this.box3 & 0x01) ) if(this.column0) return 1; else if(this.box0 & 0x02) | (this.box1 & 0x02) | (this.box2 & 0x02) |(this.box3 & 0x02) ) if(this.column-1) return 1; else if(this.box0 & 0x04) | (this.box1 & 0x04) | (this.box2 & 0x04) |(this.box3 & 0x04) ) if(this.column-2) return 1; else if(this.box0 & 0x08) | (this.box1 & 0x08) | (this.box2 & 0x08) |(this.box3 & 0x08) ) if(this.column(MAXLIE-4) return 1; else if(this.box0 & 0x04) | (this.box1 & 0x04) | (this.box2 & 0x04) |(this.box3 & 0x04) ) if(this.column(MAXLIE-3) return 1; else if(this.box0 & 0x02) | (this.box1 & 0x02) | (this.box2 & 0x02) |(this.box3 & 0x02) ) if(this.column(MAXLIE-2) return 1; else if(this.box0 & 0x08) | (this.box1 & 0x08) | (this.box2 & 0x08) |(this.box3 & 0x08) ) if(this.column(MAXLIE-1) return 1; /- return 0;/-uchar checkClask(void) uchar row,column,temp; uchar hang,lie; for(row=0;row4;row+) temp=1; for(column=0;column4;column+) if(this.boxrow & temp) hang=this.row+row;lie=this.column+column; if(cubeMaphanglie/8 & bittablelie%8) return 1; temp0;i-) if(cubeMapi0=0 & cubeMapi1=0) break; if(cubeMapi0=0xff & cubeMapi1=0xff) delete+; full=1; for(j=i;j0;j-) cubeMapj0=cubeMapj-10; cubeMapj1=cubeMapj-11; i+; cubeMap00=0; cubeMap01=0; if(full) if(delete=1) score+;else if(delete=2) score+=4;else if(delete=3) score+=9;else if(delete=4) score+=16;rectangle();showCubeMap(); if(score50) speed=1;else if(score100) speed=2;else if(score500) speed=3;else if(score1000) speed=4;else if(score5000) speed=5;else if(score10000) speed=6;else if(score20000) speed=7;else if(score30000) speed=8;else if(score40000) speed=9;else if(score50000) speed=10;else if(score60000) speed=11;else speed=12; showScoreSpeed(); /-void moveLeft(void) clearCubeFromMap(); this.column-; if(checkBorder() | checkClask() this.column+; writeCubeToMap();/-void moveRigh(void) clearCubeFromMap(); this.column+; if(checkBor

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论