现求51单片机88俄罗斯方块单机版

 上传我的文档
 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
正在努力加载中...
51单片机课程设计俄罗斯方块设计
下载积分:1000
内容提示:51单片机课程设计俄罗斯方块设计
文档格式:DOC|
浏览次数:0|
上传日期: 07:57:30|
文档星级:
该用户还上传了这些文档
51单片机课程设计俄罗斯方块设计
官方公共微信更多频道内容在这里查看
爱奇艺用户将能永久保存播放记录
过滤短视频
暂无长视频(电视剧、纪录片、动漫、综艺、电影)播放记录,
使用您的微博帐号登录,即刻尊享微博用户专属服务。
使用您的QQ帐号登录,即刻尊享QQ用户专属服务。
使用您的人人帐号登录,即刻尊享人人用户专属服务。
按住视频可进行拖动
把视频贴到Blog或BBS
当前浏览器仅支持手动复制代码
视频地址:
flash地址:
html代码:
通用代码:
通用代码可同时支持电脑和移动设备的分享播放
收藏成功,可进入查看所有收藏列表
方式1:用手机看
用爱奇艺APP或微信扫一扫,在手机上继续观看:
芯创电子51单片机开发板DIY活动——俄罗斯方块
方式2:一键下载至手机
限爱奇艺安卓6.0以上版本
使用微信扫一扫,扫描左侧二维码,下载爱奇艺移动APP
其他安装方式:手机浏览器输入短链接http://71.am/udn
下载安装包到本机:&&
设备搜寻中...
请确保您要连接的设备(仅限安卓)登录了同一爱奇艺账号 且安装并开启不低于V6.0以上版本的爱奇艺客户端
连接失败!
请确保您要连接的设备(仅限安卓)登录了同一爱奇艺账号 且安装并开启不低于V6.0以上版本的爱奇艺客户端
部安卓(Android)设备,请点击进行选择
请您在手机端下载爱奇艺移动APP(仅支持安卓客户端)
使用微信扫一扫,下载爱奇艺移动APP
其他安装方式:手机浏览器输入短链接http://71.am/udn
下载安装包到本机:&&
爱奇艺云推送
请您在手机端登录爱奇艺移动APP(仅支持安卓客户端)
使用微信扫一扫,下载爱奇艺移动APP
180秒后更新
打开爱奇艺移动APP,点击“我的-扫一扫”,扫描左侧二维码进行登录
没有安装爱奇艺视频最新客户端?
爸爸去哪儿2游戏 立即参与
芯创电子51单片机开发板DIY活动——俄罗斯方块
播放量数据:
你可能还想订阅他们:
{{#needAdBadge}} 广告{{/needAdBadge}}
&正在加载...
您使用浏览器不支持直接复制的功能,建议您使用Ctrl+C或右键全选进行地址复制
安装爱奇艺视频客户端,
马上开始为您下载本片
5秒后自动消失
&li data-elem="tabtitle" data-seq="{{seq}}"& &a href="javascript:void(0);"& &span>{{start}}-{{end}}&/span& &/a& &/li&
&li data-downloadSelect-elem="item" data-downloadSelect-selected="false" data-downloadSelect-tvid="{{tvid}}"& &a href="javascript:void(0);"&{{pd}}&/a&
选择您要下载的《
色情低俗内容
血腥暴力内容
广告或欺诈内容
侵犯了我的权力
还可以输入
您使用浏览器不支持直接复制的功能,建议您使用Ctrl+C或右键全选进行地址复制&&&&基于51单片机的俄罗斯方块
基于51单片机的俄罗斯方块
基于51单片机的俄罗斯方块,显示在12864上,矩阵键盘控制
若举报审核通过,可奖励20下载分
被举报人:
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:
VIP下载&&免积分60元/年(1200次)
您可能还需要
开发技术下载排行俄罗斯方块代码求求求大神精简到8k,已13.7k严重超了了了了_51单片机吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:34,063贴子:
俄罗斯方块代码求求求大神精简到8k,已13.7k严重超了了了了收藏
#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_1#define uchar unsigned char#define uint unsigned intuchar gkey=0xff,keystate=0,t0ms1=0,t0ms=0,downtimegap=0;uchar miao=0,fen=0;bit keyflag,timeupdate,uchar idata cubeMap[MAXHANG][2];typedef struct{
uchar code*
uchar cube:4;uchar state:4;}uchar speed=1;uchar code bittable[8]={1,2,4,8,0x10,0x20,0x40,0x80};//定义相应方块对应数据uchar code cube[]={
0,4,0xe,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,
6,2,2,0,0,0xe,6,0,
2,6,4,0,0,6,0xc,0,
4,6,2,0,0,0xf,0,0,
0,0,0xf,0,
2,2,2,2,0,6,6,0,
0,6,6,0};//ASCII码对应的是显示常数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//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//speed
0x26,0x49,0x49,0x49,0x32,
//-S-150x7F,0x09,0x09,0x09,0x06,
//-P-160x7F,0x49,0x49,0x49,0x41,
//-E-170x7E,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,0x12,0x11,0x12,0x7C,
//-A-240x7E,0x02,0x0C,0x02,0x7F,
//-M-250x1F,0x20,0x40,0x20,0x1F,
//-V-26};//T0中断服务子函数 void t0isr(void) interrupt 1{
TH0=()/256;
TL0=()%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=0KEYLEFT=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=keystate=1;}
case 1:if(key==gkey)
{t0ms1=0;keystate=2;if(key!=0xff) keyflag=1;} else keystate=0;
case 2:if(key==gkey)
{if(t0ms1&PUSHON) t0ms1++;}else{keystate=0;keyflag=0;gkey=0}}}//向AMPIPE 128*64写入命令void lcdCmd(uchar cmd){ bit ea,S=0;ea=EA;
EA=0;EN=0;RW=0;RS=0;LCD=EN=1;EN=1;EN=0;EA=}//向AMPIPE 128*64写入1B的数据void lcdWriteByte(uchar ch){ EN=0;RS=1;RW=0;LCD=EN=1;EN=1;EN=0;}//设置AMPIPE 128*64的内部页void lcdSetPage(uchar page){ page&=0x7;page+=0xb8;lcdCmd(page);}//设置LCD的显示列void lcdSetColumn(uchar column){ column&=0x3f;column+=0x40;lcdCmd(column);}//在LCD上显示一个5*8的字符void lcdPlayChar(uchar index,uchar page,uchar column){ uchar i,p=5*
for(i=i&column+5;i++)
{if(i&64){CS1=1;CS2=0;temp=i;}else{CS1=0;CS2=1;temp=i-64;} lcdSetPage(page); lcdSetColumn(temp); lcdWriteByte(asii[p++]);} }//显示长方形void rectangle(void){ uchar i,
CS1=1;CS2=0;lcdSetPage(0);lcdSetColumn(2);EN=0;RS=1;RW=0;LCD=0EN=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=0;RW=0;LCD=0EN=1;EN=1;EN=0;
for(page=1;page&7;page++)
{ lcdSetPage(page);lcdSetColumn(2);EN=0;RS=1;RW=0;LCD=0EN=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=0;RW=0;LCD=0EN=1;EN=1;EN=0;}
//再次设置页面和列信息
lcdSetPage(7);lcdSetColumn(2);
EN=0;RS=1;RW=0;LCD=0EN=1;EN=1;EN=0;
for(i=3;i&51;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;}//在LCD上显示一个点void lcdPutPix(uchar x,uchar y,uchar flag){ uchar i,dat,bitmask,
bit bflag,pflag,
x=x*MAXPIX;y=y*MAXPIX;bflag=0;pflag=0;i=y%8;
if(i==0) bitmask=0x7;
else if(i==1) bitmask=0
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=0xe0;nextbit=1;}
else if(i==7)
{ bflag=1;bitmask=0x80;nextbit=3;}
{CS1=1;CS2=0;}
else if(x&63)
{x-=64; CS1=0;CS2=1;}
lcdSetPage(y/8);
for(i=x;i&x+MAXPIX;i++)
{if(pflag)
{if(i==62||i==6)
{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=0RS=1;RW=1;EN=1;EN=0; if(flag==1)
dat|= else
dat&=~lcdSetColumn(i); EN=0;RW=0;RS=1;LCD=EN=1;EN=1;EN=0;EA=}
{lcdSetPage(y/8+1); for(i=x;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=0RS=1;RW=1;EN=1;EN=0;EN=1;dat=LCD;EN=0;if(flag==1) dat|=else
dat&=~lcdSetColumn(i);EN=0;RW=0;RS=1;LCD=EN=1;EN=1;EN=0;EA=}}}//清除函数(液晶驱动模块void lcdClear(void){ uchar i,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 WIDE 6void lcdIni(void){ lcdCmd(0x3f);lcdCmd(0xc0);lcdClear();rectangle();
lcdPlayChar(11,0,STAR);
lcdPlayChar(12,0,STAR+1*WIDE);
lcdPlayChar(13,0,STAR+2*WIDE);
lcdPlayChar(14,0,STAR+3*WIDE);
//显示速度
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);
//显示第一个行
lcdPlayChar(0,4,STAR+2*WIDE);
lcdPlayChar(1,4,STAR+3*WIDE);
//显示当前得分
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);
//显示当前时间
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 num[5];temp=
for(i=0;i&5;i++) {num[i]=temp%10;temp=temp/10;}
for(i=4;i&0;i--)
{if(num[i]==0) num[i]==22;}
for(i=4;i&-1;i--) lcdPlayChar(num[i],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 showNextCube(uchar code* p,uchar x,uchar y){ uchar i,j,
for(i=0;i&4;i++)
{temp=1;for(j=0;j&4;j++){if(p[i]&temp) lcdPutPix(x+j,y+i,1); else lcdPutPix(x+j,y+i,0); temp&&=1;}}}//产生一个方块void createCube(void){
this.cube=next=TL0%7;this.row=0;this.column=6;this.state=0;this.box=cube+16*this.
showNextCube(cube+16*next,19,3);}
//显示当前的方块图形 void showCubeMap(void) {uchar hang,lie,
for(hang=MAXHANG-1;hang&0;hang--)
{if(cubeMap[hang][0]==0&&cubeMap[hang][1]==0) for(lie=0;lie&(MAXLIE/8);lie++)
{temp=8*if(cubeMap[hang][lie]&0x01) lcdPutPix(temp+1,hang,1);if(cubeMap[hang][lie]&0x02) lcdPutPix(temp+2,hang,1);if(cubeMap[hang][lie]&0x04) lcdPutPix(temp+3,hang,1);if(cubeMap[hang][lie]&0x08) lcdPutPix(temp+4,hang,1);if(cubeMap[hang][lie]&0x10) lcdPutPix(temp+5,hang,1);if(cubeMap[hang][lie]&0x20) lcdPutPix(temp+6,hang,1);if(cubeMap[hang][lie]&0x40) lcdPutPix(temp+7,hang,1);if(cubeMap[hang][lie]&0x80) lcdPutPix(temp+8,hang,1);}}}//将当前方块加入当前的方块图形void writeCubeToMap(void)
{ uchar row,column,uchar hang,for(row=0;row&4;row++){temp=1;for(column=0;column&4;column++) {if(this.box[row]&temp) {hang=this.row+lie=this.column+cubeMap[hang][lie/8]|=bittable[lie%8];lcdPutPix(lie+1,hang,1);}
temp&&=1;}}}//从当前图形中清除这个方块void clearCubeFromMap(void){ uchar row,column,uchar hang,
for(row=0;row&4;row++)
{temp=1;for(column=0;column&4;column++){if(this.box[row]&temp) {hang=this.row+lie=this.column+cubeMap[hang][lie/8]&=~bittable[lie%8];lcdPutPix(lie+1,hang,0);}
temp&&=1;}}}//检查当前方块图形是否达到了边界,如果是则返回1,否则返回0uchar 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.column&0) 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;}
else 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;}//检查是否要清除uchar checkClask(void){ uchar row,column,uchar hang,
for(row=0;row&4;row++)
{temp=1;for(column=0;column&4;column++){if(this.box[row]&temp)
{hang=this.row+lie=this.column+
if(cubeMap[hang][lie/8]&bittable[lie%8]) return 1;}
temp&&=1;}}
return 0;}//检查当前的图形边缘void checkMap(void){ uchar i,j,full=0;delete=0;
for(i=MAXHANG-1;i&0;i--)
{ if(cubeMap[i][0]==0&&cubeMap[i][1]==0)if(cubeMap[i][0]==0xff&&cubeMap[i][1]==0xff) { delete++;full=1;for(j=i;j&0;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(delete==1) score++;else 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&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;else speed=12;showScoreSpeed();}}//控制游戏方块向左移动void moveLeft(void){ clearCubeFromMap();this.column--;
if(checkBorder()||checkClask()) this.column++;
writeCubeToMap();}//控制方块向右移动void moveRight(void){ clearCubeFromMap();this.column++;
if(checkBorder()||checkClask()) this.column--;
writeCubeToMap();}//向下快速移动方块的函数void moveDown(void){ clearCubeFromMap();this.row++;
if(checkBorder()||checkClask()) {this.row--;downok=1;}
else downok=0;writeCubeToMap();if(downok) checkMap();}//方块翻转函数void cubeRotation(void){temp=this.clearCubeFromMap();
this.state=++this.state%4;this.box=cube+16*this.cube+4*this.
if(checkBorder()||checkClask())
{ this.state=this.box=cube+16*this.cube+4*this.}
writeCubeToMap();}//主函数void main(void){ TMOD=0x1;TH0=()/256;TL0=()%256;
EA=1;ET0=1;TR0=1;lcdIni();
for(t0ms=0;t0ms&MAXHANG;t0ms++)
{ cubeMap[t0ms][0]=0;cubeMap[t0ms][1]=0;}
{createCube();}
if(checkClask())
{ rectangle(); #define SHOWSTAR 12 #define GAP 8 lcdPlayChar(23,2,SHOWSTAR); lcdPlayChar(24,2,SHOWSTAR+GAP); lcdPlayChar(25,2,SHOWSTAR+2*GAP); lcdPlayChar(12,2,SHOWSTAR+3*GAP); lcdPlayChar(20,4,SHOWSTAR); lcdPlayChar(26,4,SHOWSTAR+GAP); lcdPlayChar(12,4,SHOWSTAR+2*GAP); lcdPlayChar(21,4,SHOWSTAR+3*GAP); t0ms=0; while(t0ms&95);t0ms=0; while(t0ms&95); ((void(code*)(void))0x0000)();} while(1) { timeServer();if(keyflag) { keyflag=0;t0ms1=0;if(gkey==0) moveLeft();if(gkey==1) moveRigh();if(gkey==2) cubeRotation();if(gkey==3) moveDown();}if(gkey==0&&t0ms1==PUSHON) {t0ms1-=10;moveLeft();}if(gkey==1&&t0ms1==PUSHON) {t0ms1-=10;moveRigh();}if(gkey==3&&t0ms1==PUSHON) {t0ms1-=10;moveDown();}if(downtimegap&(DOWNTIME-speed)) {moveDown();downtimegap=0;}if(downok) {downok=0;}}}
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或求一个基于51单片机的俄罗斯方块的源代码~~_百度知道
求一个基于51单片机的俄罗斯方块的源代码~~
用8×8点阵实现,开机有蜂鸣器的响声,最好有加速下降功能~~
///search,我给你个地址://wenku,有源代码,你进去应该就能找到,如果对你有用就采纳我吧
为您推荐:
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁}

我要回帖

更多关于 俄罗斯方块单机版 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信