51单片机12864大液晶屏俄罗斯方块游戏 ROTEUS 教程

51单片机12864大液晶屏俄罗斯方块游戏 ROTEUS 教程

首页休闲益智新俄罗斯方块更新时间:2024-07-31

51单片机12864大液晶屏 显示任意字符(计算器)

ROTEUS 和51单片机教程(仿真文件 源代码)

参考源代码:

//*************************************************************************************************

//*************************************************************************************************

//**<程序名>:俄罗斯方块游戏 **

//**<版本说明>:此版是第一版,在LCD1608第4版基础上改进而来,目前只可以绘制游戏区域的边框。 **

//**<完成时间>:2007年8月28日 **

//**<作者>:从零开始单片机 **

**

//*************************************************************************************************

//*************************************************************************************************

//*************************************************************************************************

//* *

//* ******************************头文件及宏定义************************** *

//* *

//*************************************************************************************************

#include "includes.h"

#define TIME1H 0x3C

#define TIME1L 0xB0 //定时器1溢出时间:50ms

#define SCANPORT P1

//*************************************************************************************************

//* *

//* ******************************全局变量************************************ *

//* *

//*************************************************************************************************

//unsigned char code uca_TEST[]={0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xF0,0xF0,0xF0,0xF0};

//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<防抖动标志>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

bit b_KeyShock=0; //键盘防抖动标志位。

//当按键中断产生时,首先判断此位。

//0--执行键盘扫描及键码处理程序;1--不执行。

bit b_KillShock=0; //防抖标志清除位:0--不清除;1--清除。

unsigned char uc_KillCount=0; //抖动标志清除计数,使用定时器1。

//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<键盘扫描开启标志>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

bit b_KeyScan=0; //0--不扫描;

//1--扫描。

//*************************************************************************************************

//* *

//* ********************************主函数****************************** *

//* *

//*************************************************************************************************

/*********************** main ************************/

void main(void)

{

vLCDInitialize();

vShowOneChin(0,0,uca_QING);

vShowOneChin(2,0,uca_SHU);

vShowOneChin(4,0,uca_RU);

vShowOneChin(6,0,uca_MAOHAO);

vShowGraph(2,60,32,4,uca_Pig);

vShowFrame();

SCANPORT=0x0F;

//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<外部中断0,用于开启键盘扫描及键码处理标志>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

IT0=1; // 中断方式:下降沿。

EX0=1; // 开启外部中断。

//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<定时器1,用于防抖动标志清除 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

TH1=TIME1H;

TL1=TIME1L;

TR1=1; //开启定时器1

ET1=1; //开定时器1中断

EA=1;

while(1)

{

if(b_KeyScan==1) //如果有按键按下,则进行按键扫描和键码处理。

{

b_KeyScan=0;

vKeyProcess(ucKeyScan());

}

}

}

//*************************************************************************************************

//* *

//* ******************************外部中断0,用于开启键盘扫描及键码处理****************** *

//* *

//*************************************************************************************************

void vINT0(void) interrupt 0

{

if(b_KeyShock==0)

{

b_KeyScan=1; //开启键盘扫描标志。

b_KeyShock=1; //设置防抖动标志。

}

else b_KeyShock=0; //如果有抖动则不执行键扫描,恢复防抖动标志。

//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<设置防抖动清除标志位 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

if(b_KeyShock==1)

b_KillShock=1; //如果防抖动标志位开启则开启防抖动标志清除位,

//300ms后清除防抖动标志。

}

//*************************************************************************************************

//* *

//* ****************定时器1中断,用于计时功能和防抖动标志清除*************************** *

//* *

//*************************************************************************************************

void vTimer1(void) interrupt 3

{

//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<防抖动标志清除>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

if(b_KillShock==1)

{

if(uc_KillCount==5) //当防抖动标志位为1时,计时300ms后清除抖动标志位。

{

b_KeyShock=0;

b_KillShock=0;

uc_KillCount=0;

}

else uc_KillCount ;

}

//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<恢复定时器1溢出时间>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

TH1=TIME1H;

TL1=TIME1L;

}

最后,如果有什么意见或者建议欢迎您留言给我,让我们共同学习一起进步,

如果需要 完整代码或设计文件,请在下方留言或者私信我,看到后会第一时间回复。

谢谢大家!

如果喜欢我的文章请评论转发加关注哦。

查看全文
大家还看了
也许喜欢
更多游戏

Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved