单片机
返回首页

51单片机12864大液晶屏俄罗斯方块

2021-12-27 来源:eefocus

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

参考源代码:

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

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

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

//<版本说明>:此版是第一版,在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_KillShock1)

{

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

{

b_KeyShock=0;

b_KillShock=0;

uc_KillCount=0;

}

else uc_KillCount++;

}

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

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

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

TH1=TIME1H;

TL1=TIME1L;

}

进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

最新器件
精选电路图
  • 离子检测器电路分析

  • 非常简单的150W功放电路图

  • 如何使用LED驱动器LM3915制作振动计

  • 分享一个电网倾角计电路

  • 使用NE555和磁簧开关的橱柜照明电路

  • 电谐波图形均衡器示意图

    相关电子头条文章