51單片機(jī)的俄羅斯方塊_第1頁(yè)
51單片機(jī)的俄羅斯方塊_第2頁(yè)
51單片機(jī)的俄羅斯方塊_第3頁(yè)
51單片機(jī)的俄羅斯方塊_第4頁(yè)
51單片機(jī)的俄羅斯方塊_第5頁(yè)
已閱讀5頁(yè),還剩20頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、C語(yǔ)言程序#include <AT89X51.H>#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_

2、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 structuchar code * box;uchar cube : 4;uchar state : 4;char row;char column; block;block this;u

3、int 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,

4、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

5、, / -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 /next0x7F,0x04,0x08,0x10,0x7F, / -N-110x7F,0x49,0x49,0x49,0x41, / -E-120x63,0x14,0x08,0x14,0x63, / -X-130x01,0x01,0x7F,0x01,0x01, / -T-14/speed0x26,0x49,0x49,0x49

6、,0x32, / -S-150x7F,0x09,0x09,0x09,0x06, / -P-160x7F,0x49,0x49,0x49,0x41, / -E-170x7F,0x41,0x41,0x41,0x3E, / -D-18/score0x3E,0x41,0x41,0x41,0x22, / -C-190x3E,0x41,0x41,0x41,0x3E, / -O-200x7F,0x09,0x19,0x29,0x46, / -R-210x00,0x00,0x00,0x00,0x00, / - -22/GAME OVER0x3E,0x41,0x51,0x51,0x72, / -G-230x7C,0

7、x12,0x11,0x12,0x7C, / -A-240x7F,0x02,0x0C,0x02,0x7F, / -M-250x1F,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 lcdSetPag

8、e(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;i<colume+5;i+)if(i<64)CS1=1;CS2=0;temp=i;els

9、eCS1=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;i<51;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

10、;EN=1;EN=0;/for(page=1;page<7;page+)lcdSetPage(page);lcdSetColumn(2);EN=0;RS=1;RW=0;LCD=0xff;EN=1;EN=1;EN=0;for(i=3;i<51;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;i<51;i+)(

11、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 行,頁(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;els

12、e 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(x<62)CS1=1;CS2=0;else if(x>63)x-=64;CS1=0;CS2=1;elsepflag=1;lcdSetPage(y/8);for(i=x;i<x+MAXPIX;i+)if(pflag)if(i=62 | i=63)CS1=1;CS

13、2=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;elsedat&=bitmask;lcdSetColumn(i);EN=O;RW=O;RS=1;LCD=dat;EN=1;EN=1;EN=O; EA=ea;) if(bflag)(lcdSetPage(y/8+1);for(i=x

14、;i<x+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;elsedat&=nextbit;lcdSetColumn(i);EN=0;RW=0;RS=1;LC

15、D=dat;EN=1;EN=1;EN=0;EA=ea;/void lcdClear(void)uchar i,page;CS1=1;CS2=0;for(page=0;page<8;page+)lcdSetPage(page);lcdSetColumn(0);for(i=0;i<64;i+)lcdWriteByte(0);CS1=0;CS2=1;for(page=0;page<8;page+)lcdSetPage(page);lcdSetColumn(0);for(i=0;i<64;i+)lcdWriteByte(0);/#define STAR 53#define WI

16、DE 6void lcdIni(void)lcdCmd(0x3f);lcdCmd(0xc0);lcdClear();rectangle();/NEXTlcdPlayChar(11,0,STAR);lcdPlayChar(12,0,STAR+1*WIDE);lcdPlayChar(13,0,STAR+2*WIDE);lcdPlayChar(14,0,STAR+3*WIDE);/SPEEDlcdPlayChar(15,3,STAR);lcdPlayChar(16,3,STAR+1*WIDE);lcdPlayChar(17,3,STAR+2*WIDE);lcdPlayChar(17,3,STAR+3

17、*WIDE);lcdPlayChar(18,3,STAR+4*WIDE);/01lcdPlayChar(0,4,STAR+2*WIDE);lcdPlayChar(1,4,STAR+3*WIDE);/SCORElcdPlayChar(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*W

18、IDE);lcdPlayChar(0,6,STAR+3*WIDE);lcdPlayChar(0,6,STAR+4*WIDE);/TIMElcdPlayChar(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;i<5;i+)(numi=temp

19、%10;temp=temp/10;)for(i=4;i>0;i-)(if(numi=0)numi=22;elsebreak;)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*

20、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)timeu

21、pdate=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;keysta

22、te=2;if(key!=0xff) keyflag=1;elsekeystate=0;break;case 2: if(key=gkey)if(t0ms1<PUSHON) 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;i<4;i+)(temp=1;for(j=0;j<4;j+)(if(pi & temp) lcdPutPix(x+j,y+i,1);e

23、lselcdPutPix(x+j,y+i,0);temp<<=1;)/void createCube(void)(static uchar next;this.cube=next;next=TL0%7;this.row=0;this.column=6;this.state=0;this.box=cube+16*this.cube;showNextCube(cube+16*next,19,3);)/ void showCubeMap(void)unsigned char hang,lie,temp;for(hang=MAXHANG-1;hang>0;hang-)if(cubeM

24、aphang0=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(cu

25、beMaphanglie&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;row<4;row+)temp=1;fo

26、r(column=0;column<4;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;row<4;row+)temp=1;for(column=0;column<4;column+)i

27、f(this.boxrow & temp)hang=this.row+row;lie=this.column+column;cubeMaphanglie/8 &=bittablelie%8;lcdPutPix(lie+1,hang,0);temp<<=1;/uchar checkBorder(void)if(this.box3!=0 && this.row>(MAXHANG-4) return 1;else if(this.box2!=0 && this.row>(MAXHANG-3) return 1;else if(t

28、his.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.column<0)return 1;else if(this.box0 & 0x02) | (this.box1 & 0x

29、02) | (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)|(th

30、is.box3 & 0x08) )if(this.column<-3)return 1;/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.

31、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

32、-1)return 1;/return 0;/uchar checkClask(void)uchar row,column,temp;uchar hang,lie;for(row=0;row<4;row+)temp=1;for(column=0;column<4;column+)if(this.boxrow & temp)hang=this.row+row;lie=this.column+column;if(cubeMaphanglie/8 & bittablelie%8) return 1; temp<<=1;return 0;/void checkM

33、ap(void)uchar i,j,delete;bit full;full=0;delete=0;for(i=MAXHANG-1;i>0;i-)if(cubeMapi0=0 && cubeMapi1=0) break;if(cubeMapi0=0xff && cubeMapi1=0xff)delete+;full=1;for(j=i;j>0;j-)cubeMapj0=cubeMapj-10;cubeMapj1=cubeMapj-11;i+;cubeMap00=0;cubeMap01=0; if(full) if(delete=1)score+;el

34、se if(delete=2) score+=4;else if(delete=3) score+=9;else if(delete=4) score+=16;rectangle();showCubeMap();if(score<50)speed=1;else if(score<100) speed=2;else if(score<500) speed=3;else if(score<1000) speed=4;else if(score<5000) speed=5;else if(score<10000) speed=6;else if(score<

35、20000) speed=7;else if(score<30000) speed=8;else if(score<40000) speed=9;else if(score<50000)speed=10;else if(score<60000)speed=11;elsespeed=12;showScoreSpeed();/void moveLeft(void)clearCubeFromMap();this.column-;if(checkBorder() | checkClask()this.column+;writeCubeToMap();/void moveRigh

36、(void)clearCubeFromMap();this.column+;if(checkBorder() | checkClask()this.column-;writeCubeToMap();/void moveDown(void)clearCubeFromMap();this.row+;if(checkBorder() | checkClask()this.row-;downok=1;elsedownok=0;writeCubeToMap();if(downok)checkMap();/ void cubeRotation(void)uchar temp;temp=this.state;clearCubeFromMap();this.state=+this.state%4;this.box=cube+16*this.cube+4*this.state;if(checkBorder() | checkClask()this.state=temp;this.box=cube+16*this.cube+4*this.state;writeCubeToMap();/void main(void)TMOD=0x1;TH0=(65536-10000)/256;TL0=(65536-10000)%256;EA=1;ET0=1;TR0=1;lcdIni();for(

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論