营销型网站建设的认识,国内知名的网站建设公司有哪些,wordpress 免费企业主题,建筑人才网官网96877基于51单片机俄罗斯方块游戏
#xff08;仿真#xff0b;程序#xff09; 功能介绍 具体功能#xff1a;
1.用LCD12864显示游戏界面#xff1b;
2.用四个按键控制游戏#xff08;左、右移、下移、翻转#xff09;#xff1b;
3.游戏规则和平时玩的俄罗斯方块一样仿真程序 功能介绍 具体功能
1.用LCD12864显示游戏界面
2.用四个按键控制游戏左、右移、下移、翻转
3.游戏规则和平时玩的俄罗斯方块一样
演示视频 基于51单片机俄罗斯方块游戏 添加图片注释不超过 140 字可选
程序
#include AT89X51.H
/***公众号木子单片机****/
#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 P1_0
#define KEYDOWN P1_7
#define KEYRIGH P1_6
#define KEYROTATION P1_1unsigned char gkey0xff,keystate0,t0ms10,t0ms0,downtimegap0;
unsigned char miao0,fen0;
unsigned char downok;
bit keyflag,timeupdate,fashionupdate;
unsigned char idata cubeMap[MAXHANG][2];
typedef struct{unsigned char code * box;unsigned char cube : 4;unsigned char state : 4;char row;char column;} block;
block this;
unsigned int score0;
unsigned char speed1;
unsigned char code bittable[8]{1,2,4,8,0x10,0x20,0x40,0x80};
unsigned char 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
};
unsigned char 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
//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,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-19 0x3E,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,0x12,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(unsigned char cmd)
{bit ea;eaEA;EA0;EN0;RW0;RS0;LCDcmd;EN1;EN1;EN0;EAea;
}
//-------------------------------------------------------------------------------
void lcdWriteByte(unsigned char ch)
{EN0;RS1;RW0;LCDch;EN1;EN1;EN0;
}
//--------------------------------------------------------------------------------
void lcdSetPage(unsigned char page)
{page 0x7;page 0xb8;lcdCmd(page);
}
//--------------------------------------------------------------------------------
void lcdSetColumn(unsigned char column)
{column 0x3f;column 0x40;lcdCmd(column);
}
//--------------------------------------------------------------------------------
//character fron5*8
void lcdPlayChar(unsigned char index,unsigned char page,unsigned char colume)
{unsigned char i,temp;unsigned int p;p5*index;for(icolume;icolume5;i){if(i64){CS11;CS20;tempi;}else{CS10;CS21;tempi-64;}lcdSetPage(page);lcdSetColumn(temp);lcdWriteByte(asii[p]);}
}
//---------------------------------------------------------------------------------
//rectangle(3,0,50,60)
void rectangle(void)
{unsigned char i,page;CS11;CS20;lcdSetPage(0); lcdSetColumn(2); EN0;RS1;RW0;LCD0xff;EN1;EN1;EN0;for(i3;i51;i){EN0;RS1;RW0;LCD0x1;EN1;EN1;EN0; }EN0;RS1;RW0;LCD0xff;EN1;EN1;EN0;
//---------------------------
for(page1;page7;page){ lcdSetPage(page); lcdSetColumn(2); EN0;RS1;RW0;LCD0xff;EN1;EN1;EN0;for(i3;i51;i){EN0;RS1;RW0;LCD0x0;EN1;EN1;EN0; }EN0;RS1;RW0;LCD0xff;EN1;EN1;EN0;}
//---------------------------lcdSetPage(7); lcdSetColumn(2); EN0;RS1;RW0;LCD0x1f;EN1;EN1;EN0;for(i3;i51;i){EN0;RS1;RW0;LCD0x10;EN1;EN1;EN0; }EN0;RS1;RW0;LCD0x1f;EN1;EN1;EN0;
}
//--------------------------------------------------------------------
//x:列y行页 3*3
void lcdPutPix(unsigned char x, unsigned char y,unsigned char flag)
{unsigned char i,dat,bitmask,nextbit;bit bflag,pflag,ea;xx*MAXPIX;yy*MAXPIX;bflag0;pflag0;iy%8;if(i0)bitmask0x7;else if(i1)bitmask0xe;else if(i2)bitmask0x1c;else if(i3)bitmask0x38;else if(i4)bitmask0x70;else if(i5)bitmask0xe0;else if(i6){bflag1;bitmask0xc0;nextbit1;}else if(i7){bflag1;bitmask0x80;nextbit3;}if(x62){CS11;CS20; }else if(x63){x-64;CS10;CS21;}elsepflag1;lcdSetPage(y/8);for(ix;ixMAXPIX;i){if(pflag){if(i62 || i63){CS11;CS20;lcdSetPage(y/8);}else if(pflag i64){CS10;CS21;lcdSetPage(y/8);}} lcdSetColumn(i); eaEA;EA0;EN0;LCD0xff;RS1;RW1; EN1; EN0;EN1; datLCD;EN0;if(flag1)dat|bitmask;elsedat~bitmask;lcdSetColumn(i); EN0;RW0;RS1;LCDdat;EN1;EN1;EN0;EAea;}if(bflag){lcdSetPage(y/81);for(ix;ixMAXPIX;i){if(pflag){if(i62 || i63){CS11;CS20;lcdSetPage(y/81);}else if(pflag i64){CS10;CS21;lcdSetPage(y/81);}} lcdSetColumn(i); eaEA;EA0;EN0;LCD0xff;RS1;RW1; EN1; EN0;EN1; datLCD;EN0;if(flag1)dat|nextbit;elsedat~nextbit;lcdSetColumn(i); EN0;RW0;RS1;LCDdat;EN1;EN1;EN0;EAea; }}
}
//------------------------------------------------------------------
void lcdClear(void)
{unsigned char i,page;CS11;CS20;for(page0;page8;page){lcdSetPage(page);lcdSetColumn(0);for(i0;i64;i)lcdWriteByte(0);}CS10;CS21;for(page0;page8;page){lcdSetPage(page);lcdSetColumn(0);for(i0;i64;i)lcdWriteByte(0);}
}
//-----------------------------------------------------------------
#define STAR 53
#define WIDE 6
void lcdIni(void)
{lcdCmd(0x3f);lcdCmd(0xc0);lcdClear();rectangle();
//NEXTlcdPlayChar(11,0,STAR);lcdPlayChar(12,0,STAR1*WIDE);lcdPlayChar(13,0,STAR2*WIDE);lcdPlayChar(14,0,STAR3*WIDE);
//SPEEDlcdPlayChar(15,3,STAR);lcdPlayChar(16,3,STAR1*WIDE);lcdPlayChar(17,3,STAR2*WIDE);lcdPlayChar(17,3,STAR3*WIDE);lcdPlayChar(18,3,STAR4*WIDE);
//01lcdPlayChar(0,4,STAR2*WIDE);lcdPlayChar(1,4,STAR3*WIDE);//SCORElcdPlayChar(15,5,STAR);lcdPlayChar(19,5,STAR1*WIDE);lcdPlayChar(20,5,STAR2*WIDE);lcdPlayChar(21,5,STAR3*WIDE);lcdPlayChar(12,5,STAR4*WIDE);lcdPlayChar(0,6,STAR1*WIDE);lcdPlayChar(0,6,STAR2*WIDE);lcdPlayChar(0,6,STAR3*WIDE);lcdPlayChar(0,6,STAR4*WIDE);
//TIMElcdPlayChar(0,7,STAR);lcdPlayChar(0,7,STAR1*WIDE);lcdPlayChar(10,7,STAR2*WIDE);lcdPlayChar(0,7,STAR3*WIDE);lcdPlayChar(0,7,STAR4*WIDE);
}
//-----------------------------------------------------------------
void showScoreSpeed(void)
{unsigned char num[5];char i;unsigned int temp;tempscore;for(i0;i5;i){num[i]temp%10;temptemp/10;}for(i4;i0;i--){if(num[i]0)num[i]22;elsebreak;}for(i4;i-1;i--)lcdPlayChar(num[i],6,STAR(4-i)*WIDE);lcdPlayChar(speed/10,4,STAR2*WIDE);lcdPlayChar(speed%10,4,STAR3*WIDE);
}
//-------------------------------------------------------------------
void timeServer(void)
{if(timeupdate){timeupdate0;lcdPlayChar(fen/10,7,STAR);lcdPlayChar(fen%10,7,STAR1*WIDE);lcdPlayChar(10,7,STAR2*WIDE);lcdPlayChar(miao/10,7,STAR3*WIDE);lcdPlayChar(miao%10,7,STAR4*WIDE); }if(fashionupdate){fashionupdate0;lcdPlayChar(22,7,STAR2*WIDE);}
}
//
void t0isr(void) interrupt 1
{unsigned char key;TH0(65536-10000)/256;TL0(65536-10000)%256;downtimegap;t0mst0ms%100;if(t0ms0){timeupdate1;miaomiao%60;if(miao0)fenfen%60;}if(t0ms50)fashionupdate1;
//----------------------------key0xff;KEYLEFT1;KEYRIGH1;KEYROTATION1;KEYDOWN1;if(!KEYLEFT)key0;if(!KEYRIGH)key1;if(!KEYROTATION)key2;if(!KEYDOWN)key3;switch(keystate){case 0: if(key!gkey){gkeykey;keystate1;}break;case 1: if(keygkey){t0ms10;keystate2;if(key!0xff)keyflag1;}elsekeystate0;break;case 2: if(keygkey){if(t0ms1PUSHON)t0ms1;}else{keystate0;keyflag0;gkey0xff;}break;}}
//
void showNextCube(unsigned char code * p,unsigned char x,unsigned char y)
{unsigned char i,j,temp;for(i0;i4;i){ temp1;for(j0;j4;j){if(p[i] temp)lcdPutPix(xj,yi,1); elselcdPutPix(xj,yi,0); temp1;}}
}
//------------------------------------------------------------------
void createCube(void)
{static unsigned char next;this.cubenext;nextTL0%7;this.row0;this.column6;this.state0;this.boxcube16*this.cube;showNextCube(cube16*next,19,3);
}
//------------------------------------------------------------------
void showCubeMap(void)
{unsigned char hang,lie,temp; for(hangMAXHANG-1;hang0;hang--){if(cubeMap[hang][0]0 cubeMap[hang][1]0)break;for(lie0;lie(MAXLIE/8);lie){temp8*lie;if(cubeMap[hang][lie]0x01)lcdPutPix(temp1,hang,1);if(cubeMap[hang][lie]0x02)lcdPutPix(temp2,hang,1);if(cubeMap[hang][lie]0x04)lcdPutPix(temp3,hang,1);if(cubeMap[hang][lie]0x08)lcdPutPix(temp4,hang,1);if(cubeMap[hang][lie]0x10)lcdPutPix(temp5,hang,1);if(cubeMap[hang][lie]0x20)lcdPutPix(temp6,hang,1);if(cubeMap[hang][lie]0x40)lcdPutPix(temp7,hang,1);if(cubeMap[hang][lie]0x80)lcdPutPix(temp8,hang,1);}}
}
//-------------------------------------------------------------------
void writeCubeToMap(void)
{unsigned char row,column,temp;unsigned char hang,lie;for(row0;row4;row){temp1;for(column0;column4;column){if(this.box[row] temp){hangthis.rowrow;liethis.columncolumn;cubeMap[hang][lie/8] |bittable[lie%8];lcdPutPix(lie1,hang,1); }temp1;}}
}
//-------------------------------------------------------------------
void clearCubeFromMap(void)
{unsigned char row,column,temp;unsigned char hang,lie;for(row0;row4;row){temp1;for(column0;column4;column){if(this.box[row] temp){hangthis.rowrow;liethis.columncolumn;cubeMap[hang][lie/8] ~bittable[lie%8];lcdPutPix(lie1,hang,0); }temp1;}}
}
//-------------------------------------------------------------------
unsigned char checkBorder(void)
{if(this.box[3]!0 this.row(MAXHANG-4)) return 1;else if(this.box[2]!0 this.row(MAXHANG-3))return 1;else if(this.box[1]!0 this.row(MAXHANG-2))return 1;else if(this.box[0]!0 this.row(MAXHANG-1))return 1;
//---------------------if((this.box[0] 0x01) || (this.box[1] 0x01) || (this.box[2] 0x01) ||(this.box[3] 0x01) ) {if(this.column0)return 1;} else if((this.box[0] 0x02) || (this.box[1] 0x02) || (this.box[2] 0x02) ||(this.box[3] 0x02) ) {if(this.column-1)return 1;}else if((this.box[0] 0x04) || (this.box[1] 0x04) || (this.box[2] 0x04) ||(this.box[3] 0x04) ) {if(this.column-2)return 1;}else if((this.box[0] 0x08) || (this.box[1] 0x08) || (this.box[2] 0x08) ||(this.box[3] 0x08) ) {if(this.column-3)return 1;}
//---------------------if((this.box[0] 0x08) || (this.box[1] 0x08) || (this.box[2] 0x08) ||(this.box[3] 0x08) ) {if(this.column(MAXLIE-4))return 1;} else if((this.box[0] 0x04) || (this.box[1] 0x04) || (this.box[2] 0x04) ||(this.box[3] 0x04) ){if(this.column(MAXLIE-3))return 1;}else if((this.box[0] 0x02) || (this.box[1] 0x02) || (this.box[2] 0x02) ||(this.box[3] 0x02) ) {if(this.column(MAXLIE-2))return 1;}else if((this.box[0] 0x08) || (this.box[1] 0x08) || (this.box[2] 0x08) ||(this.box[3] 0x08) ) {if(this.column(MAXLIE-1))return 1;}
//--------------------return 0;
}
//------------------------------------------------------------------
unsigned char checkClask(void)
{unsigned char row,column,temp;unsigned char hang,lie;for(row0;row4;row){temp1;for(column0;column4;column){if(this.box[row] temp){hangthis.rowrow;liethis.columncolumn;if(cubeMap[hang][lie/8] bittable[lie%8])return 1;}temp1;}}return 0;
}
//-------------------------------------------------------------------
void checkMap(void)
{unsigned char i,j,delete;bit full;full0;delete0;for(iMAXHANG-1;i0;i--){if(cubeMap[i][0]0 cubeMap[i][1]0)break;if(cubeMap[i][0]0xff cubeMap[i][1]0xff){delete;full1;for(ji;j0;j--){cubeMap[j][0]cubeMap[j-1][0];cubeMap[j][1]cubeMap[j-1][1];}i;cubeMap[0][0]0;cubeMap[0][1]0;}}if(full){if(delete1)score;else if(delete2)score4;else if(delete3)score9;else if(delete4)score16;rectangle();showCubeMap();if(score50)speed1;else if(score100)speed2;else if(score500)speed3;else if(score1000)speed4;else if(score5000)speed5;else if(score10000)speed6;else if(score20000)speed7;else if(score30000)speed8;else if(score40000)speed9;else if(score50000)speed10;else if(score60000)speed11;else speed12; showScoreSpeed();}
}
//-------------------------------------------------------------------
void moveLeft(void)
{clearCubeFromMap();this.column--;if(checkBorder() || checkClask())this.column;writeCubeToMap();
}
//-------------------------------------------------------------------
void moveRigh(void)
{clearCubeFromMap();this.column;if(checkBorder() || checkClask())this.column--;writeCubeToMap();
}
//-------------------------------------------------------------------
void moveDown(void)
{clearCubeFromMap();this.row;if(checkBorder() || checkClask()){this.row--;downok1;}elsedownok0;writeCubeToMap();if(downok)checkMap();
}
//------------------------------------------------------------------
void cubeRotation(void)
{unsigned char temp;tempthis.state;clearCubeFromMap();this.statethis.state%4;this.boxcube16*this.cube4*this.state;if(checkBorder() || checkClask()){this.statetemp;this.boxcube16*this.cube4*this.state;}writeCubeToMap();
}
/硬件设计
使用元器件
单片机AT89C52
注意单片机是通用的无论51还是52、无论stc还是at都一样引脚功能都一样。程序也是一样的。 添加图片注释不超过 140 字可选 设计资料
01仿真图
本设计使用proteus7.8和proteus8.9两个版本设计具体如图 添加图片注释不超过 140 字可选 02程序
本设计使用软件keil5版本编程设计具体如图 添加图片注释不超过 140 字可选 03设计资料 资料获取请关注同名公众号全部资料包括仿真源文件 、程序等。具体内容如下全网最全! 可以关注下方公众号
点赞分享一起学习成长。