硬件设计

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

STC89C52单片机最小系统说明:
STC89C52单片机最小系统电路由复位电路、时钟电路和电源电路。拥有这三部分电路后,单片机即可正常工作。单片机最小系统原理图如下图所示。

仿真图1:

仿真图2:

#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);}}
}

.

链接:https://pan.baidu.com/s/1LxWsCtqk7Zfdf0o53T1cYw
提取码:qrdk

.

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

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

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

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

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

  3. 基于stm32单片机俄罗斯方块小游戏Proteus仿真

     资料编号:150​​​​​​​ 视频讲解: 150-基于stm32单片机俄罗斯方块小游戏Proteus仿真(源码+仿真+全套资料) 功能介绍: 通过stm32单片机作为主控,在LCD点阵屏上做出俄罗 ...

  4. 【011】基于51单片机的低频信号发生proteus仿真与实物设计

    ​一.资料内容 (1).基于51单片机的低频信号发生proteus仿真设计一份: (2).基于51单片机的低频信号发生proteus仿真设计keli源代码一份: (3).基于51单片机的低频信号发生A ...

  5. 基于51单片机的LCD1602电子钟闹钟proteus仿真设计

    本设计是基于51单片机的LCD1602电子钟闹钟proteus仿真设计 源码+仿真+原理图+器件清单 仿真软件版本:proteus 7.8 程序编译器:keil 4/keil 5 编程语言:C语言 编 ...

  6. 【004】基于51单片机的音乐播放器proteus仿真设计

    一.压缩包资料内容(私信获取) (1).基于51单片机的音乐播放器proteus仿真设计一份: (2).基于51单片机的音乐播放器proteus仿真设计keli源代码一份: (3).基于51单片机的音 ...

  7. 【006】基于51单片机的简易电子计算器Proteus仿真设计

    一.压缩包资料内容(私信获取) (1).基于51单片机的简易电子计算器proteus仿真设计一份: (2).基于51单片机的简易电子计算器proteus仿真设计keli源代码一份: (3).基于51单 ...

  8. 基于51单片机的火灾检测设计(仿真+程序+原理图+论文报告)

    本设计: 基于51单片机的火灾检测设计(仿真+程序+原理图+论文报告) Proteus仿真版本:proteus7.8 原理图:Altium Designer 程序编译器:keil 4 编程语言:C语言 ...

  9. 基于51单片机的八路电压表采集Proteus仿真(源码+仿真+原理图+全套资料)

    资料编号:110 程序语言:C语言 仿真软件:Proteus8.9版本 功能讲解如下: 利用单片机及其外围器件(A/D转换器等)实现一款简易电压表,实现以下功能: 1   电压表能够进行8路模拟电压测 ...

最新文章

  1. Delphi Qjson
  2. 又有一本图书在台湾出版了
  3. 详解操作系统中虚拟内存与物理内存的关系
  4. iOS开发之--改变系统导航的颜色,字体,还有返回样式的自定义
  5. HQL中左连接,右连接、内连接
  6. SAP自学指南:案例公司的管理难题
  7. Linux经典书籍推荐-转
  8. 【NOI2002】银河英雄传说
  9. Spring中都用到了哪些设计模式
  10. 怎么利用计算机公式计算完成比例,excel表格数据计算所占比例公式的使用教程...
  11. python for循环经典案例
  12. Python实现 ---【简易】12306爬虫
  13. 什么是软件质量管理的底层逻辑?
  14. PowerShell设置环境变量
  15. 励志c语言编码的开始,基础打开VS操作指南
  16. 学习周刊-2021年第19周
  17. 步进电机基础(4.2)-步进电机的技术要点之磁性材料、绝缘材料与线圈、轴承、减速器
  18. 2022年3月15日黑马第三天
  19. Python | 图片转文字
  20. 最后一公里极速配送(三)

热门文章

  1. SUMO(零)—— 地图文件转化
  2. VISSIM4.30安装
  3. 拍拍贷业务数据探索分析-基于R语言
  4. 调用tensorflow2中的tf.keras.applications.VGG16并进行微调
  5. c语言十进制展开式形式,十六进制与运算 十六进制与十进制相互转化的公式
  6. 选择检测机构,有CNAS认证没CNAS认证区别
  7. 中文版PyCharm改为英文版PyCharm
  8. Java数据类型转换02--强制类型转换
  9. JS中使用正则表达式提取数字
  10. linux安装apue库 (UNIX环境高级编程)