51单片机12864大液晶屏俄罗斯方块游戏 ROTEUS 教程
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;
}
最后,如果有什么意见或者建议欢迎您留言给我,让我们共同学习一起进步,
如果需要 完整代码或设计文件,请在下方留言或者私信我,看到后会第一时间回复。
谢谢大家!
如果喜欢我的文章请评论转发加关注哦。
单片机俄罗斯方块游戏机制作(万用板电路制作)
前期工作:
1.protues电脑仿真电路设计
电路组成部分:单片机最小系统、数码管模块、点阵模块、键盘模块。
数码管模块 :由两片74LS595芯片,分别负责数码管的段码和位码。
点阵模块:由1片74LS154芯片负责控制 两片8*8点阵的行,和1片595控制列。
键盘模块:就是5个按键,扫描识别。
附件 我做好的电路(含程序):单片机点阵游戏机 – 副本
2.源程序编写
程序可以自己写,无非就是控制595芯片,和利用154扫描 点阵的 行,可参考上附件里的源程序,可直接用PROTUES仿真运行。
后期制作:
准备材料:万用版(洞洞板)、细导线若干、8*8单色点阵两块、74LS595 * 3、74LS154 * 1 、单片机(51)、单片机最小系统的元器件
、电烙铁、焊锡丝等等。
材料准备齐全之后,就按照电路图焊接跳线即可。就自己DIY吧!
最后 背面我用轻木 简单的包装了下,怎么也有个壳子吧,像样的游戏机,哈哈!没有录制玩的视频…
相关问答
俄罗斯方块单片机 的工作原理?俄罗斯方块基本原理及规则就是,在液晶屏幕上方随机画出不同形式的方块,每个大方块由四个小正方形组成,一共有19种组合方式。方块在下移过程中可以通过键盘改变...
吉林大学物理学院怎么样?设有哪些专业? 申请方[回答]~接下来我为大家简单介绍一下我们吉林大学的物理学院开设的专业以及研究情况专业设置:物理学-本科、应用物理学-本科、光信息科学与技术-本科、核物...
在未来,杀人机器人会出现吗?可能取代人类文明吗?俄罗斯研发的Fedor不仅可以双枪齐发,还可以开车、焊接、灭火等,从事一系列高难度作业。而机器人是否拥有自主意识来进行复杂的判断,这在人工智能突飞猛进的今...
沈阳师范大学物理科学与技术学院怎么样?设有哪些专业? 申请方[回答]~接下来我为大家简单介绍一下我们沈阳师范大学的物理科学与技术学院开设的专业以及研究情况专业设置:物理学(师范)、应用物理学、电子信息工程学院...
你知道哪些计算机操作系统?unix系列hp-ux-aixsunoslinux系列ubuntu,centos,红帽子,suse,kali安卓系列安卓各个版本苹果系列苹果自成一派不过也是unix定制俄罗斯已经...
河南城建学院国际教育学院怎么样?设有哪些专业? 申请方[回答]亚林登大学的合作办学项目于2011年9月开始招收建筑工程技术,建筑工程管理,建筑设计技术三个专科专业的学生。2013年4月,学院与英国高地与...2013年...
兰州交通大学新能源与动力工程学院怎么样?设有哪些专业? 申请方[回答]~接下来我为大家简单介绍一下我们兰州交通大学的新能源与动力工程学院开设的专业以及研究情况专业设置:新能源科学与工程,能源与动力工程,电气工程...
想自学C语言,有什么好的方法和建议?个人认为C语言是编程里面比较好学的,它不像Java,有好几个框架,也不像Python对数学有很高的要求。C语言可以说是编程语言里面最基础的语言,学好C语言是非常重...
高等数学在生活中有真正的作用吗?还没进入大学,江湖上就有传言:大学有棵树,上面挂了很多人……上了大学之后,发现古人诚不欺我,真的有好多人挂在上边!不知有多少人对高数出现了阴影?又有...实际...
开封大学有多少个校区开封大学目录[隐藏]开封大学--机电工程学院开封大学--软件学院开封大学--土木建筑工程学院开封大学--管理科学学院开封大学--外国语学院专业简介开...