51单片机游戏(俄罗斯方块)

想要更多项目私wo!!!

一、电路设计

此电路由AT89C51最小系统、12864显示模块和独立按键组成。
可实现类似俄罗斯方块的游戏。

二、运行效果

三、部分代码

/*想要更多项目私wo!!!*/
#include <REGX52.H>
#include"pic.c"
#include <intrins.h>
#define LCD_DATA P2
#define button_delay 150  //按键延时
#define button_acceleration 65  //按键加速度阈值
#define GAME_LOCATION 30
sbit button_a = P3^4;   //变形
sbit button_b = P3^5;  //开始
sbit up = P3^2;       //暂停开始
sbit down = P3^0;
sbit left = P3^1;
sbit right = P3^3;
sbit speaker=P3^6; sbit LCD_RS=P1^0;
sbit LCD_RW=P1^1;
sbit LCD_E=P1^2;
sbit LCD_CS2=P1^4;     //右屏选择(左右屏有时候相反)
sbit LCD_CS1=P1^3;     //左屏选择
sbit LCD_RST=P3^7;unsigned int up_reg=button_delay;       //按键up累加器
unsigned int down_reg=button_delay;     //按键down累加器
unsigned int left_reg=button_delay;     //按键left累加器
unsigned int right_reg=button_delay;    //按键right累加器
unsigned int button_a_reg=button_delay; //按键button_a累加器
unsigned int button_b_reg=button_delay; //按键button_b累加器
unsigned int right_acceleration=0;     //按键right加速度寄存器
unsigned int left_acceleration=0;      //按键left加速度寄存器unsigned int idata Box_Ram[19];//定义游戏点阵缓存10*16
unsigned char box_down_reg;//定义方块下落累加寄存器
unsigned char time0_reg;//定义定时器0累加寄存器
unsigned char next_mode;//定义下一个方块的类型
unsigned char next_shape;//定义下一个方块的形状
unsigned int destroy_row_num=0;//定义所消的行数
unsigned char speed_num=0;//定义游戏速度等级
unsigned char level_num;//定义游戏难度等级
bit game_over_flag;//游戏结束标志位置0表示游戏未结束
bit pause_game_flag;//游戏暂停标志位置0表示游戏未暂停struct
{unsigned char mode;//类型unsigned char shape;//形状unsigned char x;//x坐标unsigned char y;//y坐标unsigned int box;//定义方块缓存
}s_box; //定义方块结构体
//LCD检测忙状态函数
void LCD_check_busy()
{unsigned char temp;LCD_RS=0;LCD_RW=1;do{LCD_DATA=0xff;LCD_E=1;temp=LCD_DATA;LCD_E=0;}while((temp&0x80)==0x80);
}
//写指令代码(cs为0选左屏,cs为1选右屏)
void LCD_W_code(unsigned char tpcode,bit cs)
{LCD_RS=0;LCD_RW=0;LCD_CS2=~cs;LCD_CS1=cs;LCD_DATA=tpcode;LCD_E=1;_nop_();LCD_E=0;
}
//写显示数据(cs为0选左屏,cs为1选右屏)
void LCD_W_data(unsigned char tpdata,bit cs)
{LCD_check_busy();LCD_RS=1;LCD_RW=0;LCD_CS2=~cs;LCD_CS1=cs; LCD_DATA=tpdata;LCD_E=1;  _nop_();LCD_E=0;
}//LCD初始化函数
void LCD_initialize()
{LCD_RST=0;_nop_();_nop_();LCD_RST=1;LCD_W_code(0x3f,0);      //开显示设置 LCD_W_code(0xc0,0);     //设置显示起始行为第一行   LCD_W_code(0xb8,0);     //页面地址设置    LCD_W_code(0x40,0);     //列地址设为0LCD_W_code(0x3f,1);LCD_W_code(0xc0,1);  LCD_W_code(0xb8,1);LCD_W_code(0x40,1);
}
//LCD清屏函数
void LCD_clear()
{unsigned char i,j;for(j=0;j<8;j++){LCD_W_code(0xb8+j,0);LCD_W_code(0x40,0);LCD_W_code(0xb8+j,1);LCD_W_code(0x40,1);for(i=0;i<64;i++){    LCD_W_data(0x00,0); LCD_W_data(0x00,1);}}
}
//LCD显示字符串函数(word表示要显示的字符串,//length表示要显示的字符串宽度,//x表示首字符所在行数,//y表示首字符所在列数)
void LCD_display_word(unsigned char word[],unsigned int length,unsigned char x,unsigned char y)
{unsigned char i;for(i=0;i<length;i++){LCD_W_code(0xb8+x,0);LCD_W_code(0xb8+x,1);if(y+i<64){LCD_W_code(0x40+y+i,0);   LCD_W_data(word[i],0);}else{LCD_W_code(y+i,1); LCD_W_data(word[i],1);}}
}
//LCD画全屏函数
void LCD_full_draw(unsigned char word[])
{unsigned char i,j;for(i=0;i<8;i++){LCD_W_code(0xb8+i,0);LCD_W_code(0x40,0); for(j=0;j<64;j++){LCD_W_data(word[i*128+j],0);}LCD_W_code(0xb8+i,1);LCD_W_code(0x40,1); for(j=0;j<64;j++){LCD_W_data(word[i*128+64+j],1);}          }
}
//LCD显示一个字节函数(//x表示x坐标,//y表示y坐标,//tpdata表示要显示的数据)
void LCD_display_byte(unsigned char x,unsigned char y,unsigned char tpdata)
{if(x<64){LCD_W_code(0xb8+y,0);LCD_W_code(0x40+x,0);LCD_W_data(tpdata,0);  }else{LCD_W_code(0xb8+y,1);LCD_W_code(x,1);LCD_W_data(tpdata,1);   }
} void LCD_draw(unsigned char word[])
{unsigned char i,j;for(i=0;i<8;i++){LCD_W_code(0xb8+i,1);LCD_W_code(0x40+20,1);for(j=0;j<44;j++){LCD_W_data(word[i*44+j],1);}}
}
//基本界面显示函数
void display_basic()
{unsigned char i;for(i=0;i<8;i++){LCD_display_byte(GAME_LOCATION,i,0xff);LCD_display_byte(GAME_LOCATION+41,i,0xff);}
}
//刷新游戏区域函数
void refurbish_display()
{unsigned char i,j,tpdata;for(i=0;i<8;i++){for(j=0;j<10;j++){tpdata=0x00;if(  (Box_Ram[2*i]>>(12-j))&0x0001==1  ){tpdata=0x0f;}if(  (Box_Ram[2*i+1]>>(12-j))&0x0001==1  ){tpdata|=0xf0;}LCD_display_byte(GAME_LOCATION+1+j*4,i,tpdata);LCD_display_byte(GAME_LOCATION+2+j*4,i,0xbb&tpdata);LCD_display_byte(GAME_LOCATION+3+j*4,i,0xdd&tpdata);LCD_display_byte(GAME_LOCATION+4+j*4,i,tpdata);}}
}

51单片机游戏(俄罗斯方块)相关推荐

  1. 51单片机系列(三)51 单片机游戏设计 —— 双人对战小游戏(石头剪刀布)

    本博客51单片机实训系列,旨在记录本人在大学上单片机技术这门课时所做的课程实训内容,并与大家分享基于51单片的课程作业,如果作业中的某些细节和代码能给大家一点启发那就更好了,希望大家能用51单片机做出 ...

  2. 基于51单片机的俄罗斯方块小游戏

    目录 开发环境 设计文档 之后将完善的内容 用到的各个驱动函数 源文件 开发环境 16 × 16 点阵 6 位数码管 4 × 4 矩阵按键 设计文档 点阵 点阵被竖着对称着的分为两个区域,其中左屏用来 ...

  3. 基于51单片机的俄罗斯方块小游戏proteus仿真LCD12864原理图程序设计

    硬件设计 原理图1: 1.基于89C52单片机为系统的MCU 2.LCD12864作为系统的显示液晶 3.系统具备6个功能按键可操控 4.采用DC接口直接给系统供电5V 5.留有下载接口 STC89C ...

  4. 51单片机+LCD12864液晶显示的俄罗斯方块游戏,Proteus仿真、AD原理图、代码、论文等

    设计要求 (1)利用51单片机,设计一款俄罗斯方块游戏,完成硬件电路的开发和程序的编写调试: (2)采用LCD12864液晶作为游戏运行界面: (3)利用按键输入灵活控制方块的移动与变形: (4)能够 ...

  5. 51单片机Proteus仿真

    这里分享一些关于51单片机的Proteus仿真.部分仿真来源于网络整理.有需要可以看看. 51单片机Proteus仿真入门实验:https://mp.weixin.qq.com/s/6kgAWSqeY ...

  6. 51单片机俄罗斯方块游戏+Proteus在线模拟仿真

    51单片机俄罗斯方块游戏+Proteus在线模拟仿真 Proteus在线模拟仿真 主程序代码 //--------------------------------------------------- ...

  7. 51单片机点阵屏实现俄罗斯方块

    文章目录 前言 一.关于点阵屏 二.俄罗斯方块代码部分 1.main主函数 2.按键扫描 3.方块生成 4.方块显示 5.方块下降 6.固定的方块显示 7.方块的左右移动 8.键值的判断与执行 9.方 ...

  8. 打地鼠java代码流程图_51单片机 普中51 打地鼠游戏 仿真 程序 流程图

    51单片机 普中51 打地鼠游戏 仿真 程序 流程图 51单片机 普中51 打地鼠游戏 仿真 程序 流程图 普中51-单核-A3&A4开发板原理图 用到数码管.LED.矩阵按键 描述: (1) ...

  9. 基于51单片机和OLED屏幕的贪吃蛇游戏

    本文章在于利用51单片机和OLED屏幕实现一个简易的贪吃蛇游戏 所用的51单片机为普中51系列,OLED屏幕属中景园电子,具体实物均可以在某宝购买 OLED模块: 关于OLED模块的相关函数及其.h和 ...

  10. 基于51单片机推箱子小游戏Proteus仿真

    资料编号:118   下面是相关功能视频演示: 118-基于51单片机推箱子小游戏Proteus仿真(源码+仿真+全套资料) 功能讲解: 采用51单片机作为控制CPU,使用独立按键来控制前后左右,使用 ...

最新文章

  1. 任天堂遭史上最严重黑客攻击:完整源代码、设计文档及技术演示泄露
  2. 用java异常完成丢色子功能,java自动投掷骰子设计报告(含源码)
  3. html css 表格自动高度,HTML/CSS - 具有固定高度的容器中表格单元格的高度不一致...
  4. spring AoP学习 -----AoP织入器ProxyFactory剖析
  5. repeater填充html,使用动态绑定到对象列表的ASP.NET Repeater创建HtmlTable
  6. hackgame汇总
  7. 360 屏蔽ajax,怎么在easy ui做全局Ajax拦截啊?
  8. 数据中心节能制冷---冷却塔帮忙
  9. ECCV 2020 论文大盘点-3D人体姿态估计篇
  10. 在C++中,你真的会用new吗?
  11. c语言disp是什么意思及用法,disp(disp是什么功能)
  12. 第十二章 非对称加密算法-RSA
  13. Linux多线程工作笔记0001---多线程知识介绍
  14. 搜索算法-搜索的优化
  15. 北京发布人工智能产业政策,该如何高效关注行业动态、把握新机遇?
  16. halcon算子翻译——cooc_feature_image
  17. 地图可视化绘制 | R-tanaka/metR包 绘制3D阴影效果地图
  18. 高德纳:盖茨亲自为他的书做推广
  19. 瑞芯微RK3328_Demo(1)原理图参考
  20. C语言取模运算符的妙用

热门文章

  1. 计算机无纸化考试合卷答题笔记卡,高级会计师无纸化考试攻略都在这 第一次考也不用慌...
  2. 常见距离算法-欧氏距离、杰卡德距离、余弦距离
  3. CentOS 无法连接网络解决办法
  4. 第三章课后习题重点内容
  5. 几种不同的方式用Python连接数据库
  6. 【修改电脑版微信提示音】
  7. oracle基础|什么是数据库操作语言|什么是DDL、DML、DCL
  8. Vulcan studio
  9. 【Java小游戏】两小时制作大鱼吃小鱼小游戏项目
  10. 详细写出拆卸计算机的步骤和过程,CPU风扇(INTEL)的详细拆卸和安装方法_计算机软件和应用程序_IT / computer_special...