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

发布者:HeavenlyMelody最新更新时间:2022-01-13 来源: eefocus关键字: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_KillShock1)

{

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

{

b_KeyShock=0;

b_KillShock=0;

uc_KillCount=0;

}

else uc_KillCount++;

}

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

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

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

TH1=TIME1H;

TL1=TIME1L;

}

关键字:51单片机  俄罗斯方块 引用地址:51单片机12864大液晶屏俄罗斯方块

上一篇:51单片机实验1——数码管显示串行口接收的字符的ASCII码
下一篇:单片机四线步进电机驱动

推荐阅读最新更新时间:2024-11-18 10:34

51单片机PWM直流电机PID控制转速源程序
AT89C51单片机PWM直流电机转速PID控制源程序,重点介绍利用MCS-51系列单片机控制PWM信号从而实现对直流电机转速进行控制的方法。设计中采用了专门的芯片组成了PWM信号的发生系统并且对PWM信号的原理、产生方法以及如何通过软件编程对PWM信号占空比进行调节从而控制其输入信号波形等均作了详细的阐述。另外本系统中使用了红外对管对直流电机的转速进行测量,经过整形电路后将测量值送到单片机,并且最终作为反馈值输入到单片机进行PID运算从而实现了对直流电机速度的控制。在软件方面,文章中详细介绍了PID运算程序初始化程序等的编写思路和具体的程序实现。 1 单片机最小系统:单片机最小系统由51单片机,晶振电路,复位电路,电源组成。
[单片机]
51单片机8X8点阵屏显示
显示一个爱心 #include reg52.h #include intrins.h sbit DIO = P3^4;//串行数据口 sbit S_CLK = P3^5;//移位寄存器时钟 sbit R_CLK = P3^6;//输出锁存器时钟 unsigned char code table ={0xFF,0xEF,0xD7,0xBB,0x7D,0x6D,0x93,0xFF}; //♥ void send(unsigned char dat) { unsigned char i; S_CLK = 0; R_CLK = 0; for(i=0; i 8; i++) { if(da
[单片机]
51单片机之IO口扩展
我们都知道通信从大的方面有两种:串行和并行。串行的最大优点是占用总线少,但是传输速率低;并行恰恰相反,占用总线多,传输速率高。市面上有很多这样的芯片,有串入并出的(通俗讲就是 一个一个进,最后一块出来),有并入串出的(相对前者而言)。具体用哪种类型要根据我们得实际情况。比如利用单片机显示数码管单纯的显示一个数码管如果仅仅是为了显示 那么动用单片机一个端口(如P0或P1/P2/P3)那没有什么,当然这里我说的数码管是8段的(如果利用BCD类型 16进制数码管那么只需四个即可)就拿51类型的单片机来说,总共32个I/O口,一般如果不是做太大的工程是完全够用的,但有些时候你会恨单片机怎么不多长几条“腿”,怎么省还是不够用。这个时候就需要
[单片机]
<font color='red'>51</font><font color='red'>单片机</font>之IO口扩展
从零开始51单片机教程 —— 29 单片机音乐程序设计
利用单片机音乐程序设计 利用单片机(或单板机)奏乐大概是无线电爱好者感兴趣的问题之一。本文从单片机的基本发间实验出发,谈谈音乐程序的设计原理,并给出具体实例,以供参考。 单片机的基本发音实验 我们知道,声音的频谱范围约在几十到几千赫兹,若能利用程序来控制单处机某个口线的“高”电平或低电平,则在该口线上就能产生一定频率的矩形波,接上喇叭就能发出一定频率的声音,若再利用延时程序控制“高”“低”电平的持续时间,就能改变输出频率,从而改变音调。 例如,要产生200HZ的音频信号,按图1接入喇叭(若属临时实验,也可将喇叭直接接在P1口线上),实验程序为: 其中子程序DEL为延时子程序,当R3为1时,延时时间约为20us,R3中存
[单片机]
从零开始<font color='red'>51</font><font color='red'>单片机</font>教程 —— 29 <font color='red'>单片机</font>音乐程序设计
51单片机程序——按键控制数码管程序0-999递增
#include reg52.h #define DataPort P0 //定义数据端口 程序中遇到DataPort 则用P0 替换 #define CtrlPort P1 //定义控制端口 #define uint unsigned int unsigned char code DuanMa ={0xc0,0xf9,0xa4,0xb0, 0x99,0x92,0x82,0xf8,0x80,0x90};// 显示段码值0~9 unsigned char code WeiMa ={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//分别对应相
[单片机]
51单片机实验——输出占空比为1:3的矩形波
1.实验题目: 设单片机的时钟为12MHz,请利用定时器T2编出使P4.6引脚输出周期为3s的矩形波程序,要求占空比系数为1:3,观察灯LED10的变化。(在一个周期内,高电平所占的时间叫占空。) 2.KEIL代码 #include reg51.h sbit LED=P1^6; void main() { TMOD &=0X0F; TMOD |=0x01;//选择定时器T0的工作模式1 TH0 = (65536 - 50000)/256;//高四位初值 TL0 = (65536 - 50000)%256;//低四位初值,每隔50ms溢出 EA = 1; //开总中断 ET0 = 1; TR0
[单片机]
单片机如何使用?51单片机C语言编程实例有哪些?
单片机如何使用,我们要知道单片机在哪里使用? 单片机是很多电子产品的核心器件,它具有一定的逻辑判断和事件处理能力的芯片。 可以对单片机编程不同的程序,从而实现不同的功能。 一、如何使用单片机? 首先我们需要掌握单片机的 编程语言 ,目前大多数的单片机 都支持C语言编程 ,个别低端单片机还需要汇编语言。 所以单片机开发,我们C语言编程基础就可以满足90%的需求了,对于汇编语言,我们可以针对性的,在使用的时候,突击学习掌握就OK了。 对于入门阶段的学生, 单片机的C语言知识需要学习到什么程度? 学习一些基础的语法就可以满足我们实现一些功能比较简单的程序开发了,例如流水灯,交通路灯等。 高级语法不需要刻意去学习,在初级学习没有意义
[单片机]
基于51单片机的超声波倒车雷达系统的设计
0 引言 超声波是一种在弹性介质中的机械震荡,由于其指向性强、能量消耗缓慢、传播距离较远等到优点,经常用于测量距离。本文设计的倒车雷达系统就是利用超声波的上述特性做到对倒车距离实时和高精度的检测,同时,此系统成本低、设计简单、精度和稳定性好,有望得到广泛的应用,从而减少交通事故的发生。 1 超声波测距原理 超声波测距原理是利用超声波从发射到接收过程中传播的时间来计算出传播距离。本文的倒车雷达系统采用反射接收回波方式。设l为测量距离,t为往返时间差,超声波的传播速度为c,则有t=2l/c,而声波在空气中传输速率为 。式中T为环境温度;cO为绝对温度时的速度,是常数。从上述两式可以推出 ,故利用超声波测量的距离与时间和环
[单片机]
基于<font color='red'>51</font><font color='red'>单片机</font>的超声波倒车雷达系统的设计
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved