/*******************************************************
* 文件名称:Block.c
* 单 片 机:STC89C52RC
* 简 述:屏幕显示子程序
* 说 明:所有H,S坐标对应于10*20的方格范围内,H对应10,S对应20,右上角为(0,0)
* 作 者:刘琦
*******************************************************/
#include"12864b.h"
#include"Tetris.h"
#define ORIGINAL_POINT_X 8//起点的X坐标
#define ORIGINAL_POINT_Y 2//起点的Y坐标
#define ORIGINAL_POINT_X_YL 2//预览方块的起点X坐标
#define ORIGINAL_POINT_Y_YL 6//预览方块的起点Y坐标
#define BLOCK_SIZE 6//方块的规格
#define BLOCK_SIZE_YL 2//预览方块的规格
/*******************************************************
* 函 数 名:void DrawBlock( unsigned char X, unsigned char Y, unsigned char Color )
* 功能描述:画6×6的方块
* 函数说明:在制定位置画一个6×6的方块,用于BlockS1等
* 输入参数:unsigned char X, unsigned char Y, unsigned char Color
* X为列,Y为行,COLOR为不显示、显示或者翻转(0、1、2)
* 返 回 值:无
*******************************************************/
void DrawBlock( unsigned char X, unsigned char Y, unsigned char Color )
{
unsigned char i=0;
for(i=0;i<6;i++)
{
DrawLineX(X,X+5,Y+i,Color);
}
}
/*******************************************************
* 函 数 名:void DrawBlockSmall( unsigned char X, unsigned char Y, unsigned char Color )
* 功能描述:画2×2的方块
* 函数说明:在制定位置画一个2×2的方块,用于SmallBlock
* 输入参数:unsigned char X, unsigned char Y, unsigned char Color
* X为列,Y为行,COLOR为不显示、显示或者翻转(0、1、2)
* 返 回 值:无
*******************************************************/
void DrawBlockSmall( unsigned char X, unsigned char Y, unsigned char Color )
{
unsigned char i=0;
for(i=0;i<2;i++)
{
DrawLineX(X,X+1,Y+i,Color);
}
}
/*******************************************************
* 函 数 名:void DrawBlockMap( unsigned char H, unsigned char S, unsigned char Color )
* 功能描述:根据Map坐标,画6×6的方块
* 函数说明:在制定位置画一个6×6的方块,用于ChangeMap
* 输入参数:unsigned char H, unsigned char S, unsigned char Color
* H为列,S为行,COLOR为不显示、显示或者翻转(0、1、2)
* 返 回 值:无
*******************************************************/
void DrawBlockMap( unsigned char H, unsigned char S, unsigned char Color )
{
unsigned char i=0;
unsigned char X=0,Y=0;
X=ORIGINAL_POINT_X+S*BLOCK_SIZE;
Y=ORIGINAL_POINT_Y+H*BLOCK_SIZE;
for(i=0;i<6;i++)
{
DrawLineX(X,X+5,Y+i,Color);
}
}
/*******************************************************
* 函 数 名:ChangeSmallBlock(unsigned char color)
* 功能描述:创建或删除方块预览
* 函数说明:
* 输入参数:color,0删除,1创建
* 返 回 值:无
*******************************************************/
void ChangeSmallBlock(unsigned char color)
{
switch(ucBlockNext)
{
case 0: //S
DrawBlockSmall(ORIGINAL_POINT_X_YL,ORIGINAL_POINT_Y_YL,color);
DrawBlockSmall(ORIGINAL_POINT_X_YL,ORIGINAL_POINT_Y_YL-BLOCK_SIZE_YL,color);
DrawBlockSmall(ORIGINAL_POINT_X_YL+BLOCK_SIZE_YL,ORIGINAL_POINT_Y_YL,color);
DrawBlockSmall(ORIGINAL_POINT_X_YL+BLOCK_SIZE_YL,ORIGINAL_POINT_Y_YL+BLOCK_SIZE_YL,color);
break;
case 1: //Z
DrawBlockSmall(ORIGINAL_POINT_X_YL,ORIGINAL_POINT_Y_YL,color);
DrawBlockSmall(ORIGINAL_POINT_X_YL,ORIGINAL_POINT_Y_YL+BLOCK_SIZE_YL,color);
DrawBlockSmall(ORIGINAL_POINT_X_YL+BLOCK_SIZE_YL,ORIGINAL_POINT_Y_YL,color);
DrawBlockSmall(ORIGINAL_POINT_X_YL+BLOCK_SIZE_YL,ORIGINAL_POINT_Y_YL-BLOCK_SIZE_YL,color);
break;
case 2: //L
DrawBlockSmall(ORIGINAL_POINT_X_YL,ORIGINAL_POINT_Y_YL,color);
DrawBlockSmall(ORIGINAL_POINT_X_YL,ORIGINAL_POINT_Y_YL+BLOCK_SIZE_YL,color);
DrawBlockSmall(ORIGINAL_POINT_X_YL,ORIGINAL_POINT_Y_YL-BLOCK_SIZE_YL,color);
DrawBlockSmall(ORIGINAL_POINT_X_YL-BLOCK_SIZE_YL,ORIGINAL_POINT_Y_YL-BLOCK_SIZE_YL,color);
break;
case 3: //J
DrawBlockSmall(ORIGINAL_POINT_X_YL,ORIGINAL_POINT_Y_YL,color);
DrawBlockSmall(ORIGINAL_POINT_X_YL,ORIGINAL_POINT_Y_YL-BLOCK_SIZE_YL,color);
DrawBlockSmall(ORIGINAL_POINT_X_YL,ORIGINAL_POINT_Y_YL+BLOCK_SIZE_YL,color);
DrawBlockSmall(ORIGINAL_POINT_X_YL-BLOCK_SIZE_YL,ORIGINAL_POINT_Y_YL+BLOCK_SIZE_YL,color);
break;
case 4: //I
DrawBlockSmall(ORIGINAL_POINT_X_YL,ORIGINAL_POINT_Y_YL,color);
DrawBlockSmall(ORIGINAL_POINT_X_YL,ORIGINAL_POINT_Y_YL+BLOCK_SIZE_YL,color);
DrawBlockSmall(ORIGINAL_POINT_X_YL,ORIGINAL_POINT_Y_YL-BLOCK_SIZE_YL,color);
DrawBlockSmall(ORIGINAL_POINT_X_YL,ORIGINAL_POINT_Y_YL-BLOCK_SIZE_YL,color);
break;
case 5: //O
DrawBlockSmall(ORIGINAL_POINT_X_YL,ORIGINAL_POINT_Y_YL,color);
DrawBlockSmall(ORIGINAL_POINT_X_YL,ORIGINAL_POINT_Y_YL-BLOCK_SIZE_YL,color);
DrawBlockSmall(ORIGINAL_POINT_X_YL+BLOCK_SIZE_YL,ORIGINAL_POINT_Y_YL,color);
DrawBlockSmall(ORIGINAL_POINT_X_YL+BLOCK_SIZE_YL,ORIGINAL_POINT_Y_YL-BLOCK_SIZE_YL,color);
break;
case 6: //T
DrawBlockSmall(ORIGINAL_POINT_X_YL,ORIGINAL_POINT_Y_YL,color);
DrawBlockSmall(ORIGINAL_POINT_X_YL,ORIGINAL_POINT_Y_YL+BLOCK_SIZE_YL,color);
DrawBlockSmall(ORIGINAL_POINT_X_YL,ORIGINAL_POINT_Y_YL-BLOCK_SIZE_YL,color);
DrawBlockSmall(ORIGINAL_POINT_X_YL+BLOCK_SIZE_YL,ORIGINAL_POINT_Y_YL,color);
break;
}
}
/*******************************************************
* 函 数 名:BuildS1(unsigned char H, unsigned char S, unsigned char color)
* 功能描述:创建或删除S型方块
* 函数说明:第一形态
* 输入参数:H横;S竖;color,0删除,1创建
* 返 回 值:无
*******************************************************/
void BlockS1(unsigned char H, unsigned char S, unsigned char color)
{
DrawBlock(ORIGINAL_POINT_X+S*BLOCK_SIZE,ORIGINAL_POINT_Y+H*BLOCK_SIZE,color);//画出旋转点
DrawBlock(ORIGINAL_POINT_X+S*BLOCK_SIZE,ORIGINAL_POINT_Y+(H-1)*BLOCK_SIZE,color);
DrawBlock(ORIGINAL_POINT_X+(S+1)*BLOCK_SIZE,ORIGINAL_POINT_Y+H*BLOCK_SIZE,color);
DrawBlock(ORIGINAL_POINT_X+(S+1)*BLOCK_SIZE,ORIGINAL_POINT_Y+(H+1)*BLOCK_SIZE,color);
}
/*******************************************************
* 函 数 名:BuildS2(unsigned char H, unsigned char S ,unsigned char color)
* 功能描述:创建或删除S型方块
* 函数说明:第二形态
* 输入参数:H横;S竖;color,0删除,1创建
* 返 回 值:无
*******************************************************/
void BlockS2(unsigned char H, unsigned char S, unsigned char color)
{
DrawBlock(ORIGINAL_POINT_X+S*BLOCK_SIZE,ORIGINAL_POINT_Y+H*BLOCK_SIZE,color);//画出旋转点
DrawBlock(ORIGINAL_POINT_X+(S-1)*BLOCK_SIZE,ORIGINAL_POINT_Y+H*BLOCK_SIZE,color);
DrawBlock(ORIGINAL_POINT_X+S*BLOCK_SIZE,ORIGINAL_POINT_Y+(H-1)*BLOCK_SIZE,color);
DrawBlock(ORIGINAL_POINT_X+(S+1)*BLOCK_SIZE,ORIGINAL_POINT_Y+(H-1)*BLOCK_SIZE,color);
}
/*******************************************************
* 函 数 名:BuildZ1(unsigned char H, unsigned char S ,unsigned char color)
* 功能描述:创建或删除Z型方块
* 函数说明:第一形态
* 输入参数:H横;S竖;color,0删除,1创建
* 返 回 值:无
*******************************************************/
void BlockZ1(unsigned char H, unsigned char S, unsigned char color)
{
DrawBlock(ORIGINAL_POINT_X+S*BLOCK_SIZE,ORIGINAL_POINT_Y+H*BLOCK_SIZE,color);//画出旋转点
DrawBlock(ORIGINAL_POINT_X+S*BLOCK_SIZE,ORIGINAL_POINT_Y+(H+1)*BLOCK_SIZE,color);
DrawBlock(ORIGINAL_POINT_X+(S+1)*BLOCK_SIZE,ORIGINAL_POINT_Y+H*BLOCK_SIZE,color);
DrawBlock(ORIGINAL_POINT_X+(S+1)*BLOCK_SIZE,ORIGINAL_POINT_Y+(H-1)*BLOCK_SIZE,color);
}
/*******************************************************
* 函 数 名:BuildZ2(unsigned char H, unsigned char S ,unsigned char color)
* 功能描述:创建或删除Z型方块
* 函数说明:第二形态
* 输入参数:H横;S竖;color,0删除,1创建
* 返 回 值:无
*******************************************************/
void BlockZ2(unsigned char H, unsigned char S, unsigned char color)
{
DrawBlock(ORIGINAL_POINT_X+S*BLOCK_SIZE,ORIGINAL_POINT_Y+H*BLOCK_SIZE,color);//画出旋转点
DrawBlock(ORIGINAL_POINT_X+S*BLOCK_SIZE,ORIGINAL_POINT_Y+(H-1)*BLOCK_SIZE,color);
DrawB
没有合适的资源?快使用搜索试试~ 我知道了~
STC12C5A60S2单片机+LCD12864俄罗斯方块源码程序实例源码KEIL C51工程文件.zip

共48个文件
obj:10个
lst:10个
h:8个

1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 20 浏览量
2024-06-01
02:19:10
上传
评论
收藏 151KB ZIP 举报
温馨提示
STC12C5A60S2单片机+LCD12864俄罗斯方块源码程序实例源码KEIL C51工程文件: * 简 述:使用LCD12864显示的俄罗斯方块程序 * 功 能:计分,下一个方块预览,欢迎结束界面,长按连续左右移,暂停(按键Left+Turn) * 作 者:刘琦 * 完成日期:2015年4月21日 * IO口设定:按键 sbit key_sr_left=P3^7; sbit key_sr_turn=P3^6; sbit key_sr_right=P3^5; sbit key_sr_down=P3^4; LCD12864 sbit RS_Port=P1^0; sbit RW_Port=P1^1; sbit E_Port=P2^5; sbit PSB_Port=P1^2; sbit RST_Port=P1^4; 数码管锁存器 sbit dula=P2^6; sbit wela=P2^7;
资源推荐
资源详情
资源评论





收起资源包目录

















































共 48 条
- 1
资源评论

- #完美解决问题
- #运行顺畅
- #内容详尽
- #全网独家
- #注释完整

GJZGRB
- 粉丝: 2999
- 资源: 7733

下载权益

C知道特权

VIP文章

课程特权

开通VIP
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- MATLAB环境下基于随机减量技术(RDT)的结构阻尼比识别方法及其工程应用
- 盾构管片精细化建模与多环装配的ABAQUS Python自动化实现
- 西门子S7-200 Smart与台达DT330温控器485通讯程序开发及应用
- 西门子S7-200 SMART与台达DT330温控器485通讯及昆仑通态触摸屏控制方案
- Java开发环境搭建教程.zip
- Java开发调试技巧及Eclipse快捷键使用方法.zip
- 汽车动力学中Dugoff轮胎模型的MATLAB与CarSim联合仿真验证
- Xilinx FPGA千兆以太网与DDR4内存读写测试:基于KCU105/KC705平台的LWIP通信及DDR4读写工程代码
- 永磁同步电机PMSM 5-7次谐波注入降低转矩脉动的技术实现与优化
- 20220319-1.pdf
- ### 2023中国互联网广告数据报告解读:行业发展、技术创新与政策规范、行业发展概况
- 1744098103558.jpg
- mmexport1744069632758.mp4
- IMG20230618151019.jpg
- 纯电动汽车Simulink仿真模型建模详细步骤及应用
- 基于Simulink的四永磁同步电机偏差耦合同步控制仿真建模与优化
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制
