基于51单片机的俄罗斯方块游戏课设.docx
- 文档编号:25928698
- 上传时间:2023-06-16
- 格式:DOCX
- 页数:58
- 大小:254.65KB
基于51单片机的俄罗斯方块游戏课设.docx
《基于51单片机的俄罗斯方块游戏课设.docx》由会员分享,可在线阅读,更多相关《基于51单片机的俄罗斯方块游戏课设.docx(58页珍藏版)》请在冰豆网上搜索。
基于51单片机的俄罗斯方块游戏课设
基于51单片机实现的俄罗斯方块游戏
整体设计方案5
2.1系统的核心部分单片机5
2.1.1单片机的选择5
2.1.2AT89S52引脚功能描述7
2.1.3晶振特性9
2.2液晶显示模块10
2.2.1液晶显示控制驱动器HD61202的特点10
2.2.2液晶显示控制驱动器HD61202的引脚功能10
2.2.3液晶显示控制驱动器HD61202的指令系统11
2.2.4HD61202的软件设计12
2.2.5JM12864J的电路结构特点15
2.2.6JM12864J的应用16
2.2.7键盘电路17
3系统程序的设计18
3.1俄罗斯方块驱动流程图18
3.2俄罗斯方块所有绘图工作流程图19
3.3俄罗斯方块中按下键的流程图20
3.4俄罗斯方块所有绘图工作流程图21
附录1:
C语言程序30
附录2:
电路原理图59
整体设计方案
1.1系统的核心部分单片机
1.1.1单片机的选择
单片机微型计算机是微型计算机的一个重要分支,也是颇具生命力的机种。
单片机微型计算机简称单片机,特别适用于控制领域,故又称为微控制器。
通常,单片机由单块集成电路芯片构成,内部包含有计算机的基本功能部件:
中央处理器、存储器和I/O接口电路等。
因此,单片机只需要和适当的软件及外部设备相结合,便可成为一个单片机控制系统。
单片机经过3代的发展,正朝着多功能、高性能、低电压、低功耗、低价格、大存储容量、强I/O功能及较好的结构兼容性方向发展。
其发展趋势不外乎以下几个方面:
1.多功能
单片机中尽可能地把所需要的存储器和I/O口都集成在一块芯片上,使得单片机可以实现更多的功能。
比如A/D、PWM、PCA(可编程计数器阵列)、WDT(监视定时器---看家狗)、高速I/O口及计数器的捕获/比较逻辑等。
有的单片机针对某一个应用领域,集成了相关的控制设备,以减少应用系统的芯片数量。
例如,有的芯片以51内核为核心,集成了USB控制器、SMARTCARD接口、MP3解码器、CAN或者I*I*C总线控制器等,LED、LCD或VFD显示驱动器也开始集成在8位单片机中。
2.高效率和高性能
为了提高执行速度和执行效率,单片机开始使用RISC、流水线和DSP的设计技术,使单片机的性能有了明显的提高,表现为:
单片机的时钟频率得到提高;同样频率的单片机运行效率也有了很大的提升;由于集成度的提高,单片机的寻址能力、片内ROM(FLASH)和RAM的容量都突破了以往的数量和限制。
由于系统资源和系统复杂程度的增加,开始使用高级语言(如C语言)来开发单片机的程序。
使用高级语言可以降低开发难度,缩短开发周期,增强软件的可读性和可移植性,便于改进和扩充功能。
3.低电压和低功耗
单片机的嵌入式应用决定了低电压和低功耗的特性十分重要。
由于CMOS等工艺的大量采用,很多单片机可以在更低的电压下工作(1.2V或0.9V),功耗已经降低到uA级。
这些特性使得单片机系统可以在更小电源的支持下工作更长的时间。
4.低价格
单片机应用面广,使用数量大,带来的直接好处就是成本的降低。
目前世界各大公司为了提高竞争力,在提高单片机性能的同时,十分注意降低其产品的价格。
在此,我们采用型号为AT89S52的单片机。
因为:
AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。
使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。
片上Flash允许程序存储器在系统可编程,亦适于常规编程器。
在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
与MCS-51单片机产品兼容、8K字节在系统可编程Flash存储器、1000次擦写周期、全静态操作:
0Hz~33MH、三级加密程序存储器、32个可编程I/O口线、三个16位定时器/计数器八个中断源、全双工UART串行通道、低功耗空闲和掉电模式、掉电后中断可唤醒、看门狗定时器、双数据指针、掉电标识符。
AT89S52具有以下标准功能:
8K字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。
另外,AT89S52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。
空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。
掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
AT89S52单片机有PDIP、PLCC、TQFP三种封装方式,在此我选用DPIP也就是双列直插封装的单片机此种封装有如下特点:
1.适合PCB的穿孔安装;
2.易于对PCB布线;
3.操作方便;
1.1.2AT89S52引脚功能描述
AT89S52单片机的管脚说明如图2-1所示:
图2-1DIP封装AT89S52单片机引脚结构图
1.VCC:
电源。
2.GND:
接地端。
3.P0口(P0.0~P0.7):
P0口是一个8位漏极开路的双向I/O口。
作为输出口,每位能驱动8个TTL逻辑电平。
对P0端口写“1”时,引脚用作高阻抗输入。
当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。
在这种模式下,P0具有内部上拉电阻。
在Flash编程时,P0口也用来接收指令字节;在程序校验时,输出指令字节。
程序校验时,需要外部上拉电阻。
4.P1口(P1.0~P1.7):
P1口是一个具有内部上拉电阻的8位双向I/O口,P1输出缓冲器能驱动4个TTL逻辑电平。
对P1端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。
作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。
此外,P1.0和P1.2分别作定时器/计数器2的外部计数输入(P1.0/T2)和时器/计数器2的触发输入(P1.1/T2EX),具体如表2-1所示:
在Flash编程和校验时,P1口接收低8位地址字节。
表2-1P1口第二功能
引脚号
第二功能
P1.0
T2(定时器/计数器T2的外部计数输入),时钟输出
P1.1
T2EX(定时器/计数器T2的捕捉/重载触发信号和方向控制)
P1.5
MOSI(在系统编程用)
P1.6
MISO(在系统编程用)
P1.7
SCK(在系统编程用)
5.P2口(P2.0~P2.7):
P2口是一个具有内部上拉电阻的8位双向I/O口,P2输出缓冲器能驱动4个TTL逻辑电平。
对P2端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。
作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。
在访问外部程序存储器或用16位地址读取外部数据存储器(例如执行MOVX@DPTR)时,P2口送出高八位地址。
在这种应用中,P2口使用很强的内部上拉发送1。
在使用8位地址(如MOVX@RI)访问外部数据存储器时,P2口输出P2锁存器的内容。
在flash编程和校验时,P2口也接收高8位地址字节和一些控制信号。
6.P3口(P3.0~P3.7):
P3口是一个具有内部上拉电阻的8位双向I/O口,P2输出缓冲器能驱动4个TTL逻辑电平。
对P3端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。
作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。
P3口亦作为AT89S52第二功能使用,如表2-2所示:
表2-2P3口第二功能
引脚号
第二功能
P3.0
RXD(串行输入)
P3.1
TXD(串行输出)
P3.2
I
(外部中断0)
P3.3
I
(外部中断0)
P3.4
T0(定时器0外部输入)
P3.5
T1(定时器1外部输入)
P3.6
(外部数据存储器写选通)
P3.7
(外部数据存储器写选通)
在flash编程和校验时,P3口也接收一些控制信号。
RST:
复位输入。
晶振工作时,RST脚持续2个机器周期高电平将使单片机复位。
看门狗计时完成后,RST脚输出96个晶振周期的高电平。
特殊寄存器AUXR(地址8EH)上的DISRTO位可以使此功能无效。
DISRTO默认状态下,复位高电平有效。
ALE/
:
地址锁存控制信号(ALE)是访问外部程序存储器时,锁存低8位地址的输出脉冲。
在flash编程时,此引脚(PROG)也用作编程输入脉冲。
在一般情况下,ALE以晶振六分之一的固定频率输出脉冲,可用来作为外部定时器或时钟使用。
然而,特别强调,在每次访问外部数据存储器时,ALE脉冲将会跳过。
如果需要,通过将地址为8EH的SFR的第0位置“1”,ALE操作将无效。
这一位置“1”,ALE仅在执行MOVX或MOVC指令时有效。
否则,ALE将被微弱拉高。
这个ALE使能标志位(地址为8EH的SFR的第0位)的设置对微控制器处于外部执行模式下无效。
:
外部程序存储器选通信号(PSEN)是外部程序存储器选通信号。
当AT89S52从外部程序存储器执行外部代码时,PSEN在每个机器周期被激活两次,而在访问外部数据存储器时,PSEN将不被激活。
A/VPP:
访问外部程序存储器控制信号。
为使能从0000H到FFFFH的外部程序存储器读取指令,EA必须接GND。
为了执行内部程序指令,EA应该接VCC。
在flash编程期间,EA也接收12伏VPP电压。
XTAL1:
振荡器反相放大器和内部时钟发生电路的输入端。
XTAL2:
振荡器反相放大器的输出端。
1.1.3晶振特性
AT89S52单片机有一个用于构成内部振荡器的反相放大器,XTAL1和XTAL2分别是放大器的输入、输出端。
石英晶体和陶瓷谐振器都可以用来一起构成自激振荡器。
从外部时钟源驱动器件的话,XTAL2可以不接,而从XTAL1接入,如图2-2所示:
图2-2内部振荡电路连接图
1.2液晶显示模块
显示器部分是由HD61202液晶显示控制驱动器和JM12864J液晶显示器组成的,下面我们对其分别进行介绍。
1.2.1液晶显示控制驱动器HD61202的特点
HD61202液晶显示控制驱动器是一种带有驱动输出的图形液晶显示控制器,它可直接与8位微处理器相连,它可与HD61203配合对液晶屏进行行、列驱动。
HD61202是一种带有列驱动输出的液晶显示控制器,它可与行驱动器HD61203配合使用,组成液晶显示驱动控制系统。
1.内藏64×64=4096位显示RAM,RAM中每位数据对应LCD屏上一个点的亮、暗状态;
2.HD61202是列驱动器,具有64路列驱动输出;
3.HD61202读、写操作时序与68系列微处理器相符,因此它可直接与68系列微处理器接口相连;
4.HD61202的占空比为1/32~1/64。
1.2.2液晶显示控制驱动器HD61202的引脚功能
引脚CS1,CS2,CS3为芯片的片选端;引脚E为读写使能信号,它是在下降沿时数据被锁存入HD61202的;在E高电平期间,数据被读出;R/W为读写选择信号,当它为一时为读选通,为零时为写选通;DB0-DB7为数据总线RST为复位信号复位信号有效时,关闭液晶显示,使显示起始行为0,RST可跟MCU相连,由MCU控制;也可直接接VDD,使之不起作用。
HD61202的引脚功能如下表2-3所示:
表2-3HD61202的引脚功能
引脚符号
状态
引脚名称
功能
CS1,CS2,CS3
输入
芯片片选端
CS1和CS2低电平选通,CS3高电平选通。
E
输入
读写使能信号
在E下降沿,数据被锁存(写)入HD61202;在E高电平期间,数据被读出
R/W
输入
读写选择信号
R/W=1为读选通,R/W=0为写选通
RS
输入
数据、指令选择信号
RS=1为数据操作
RS=0为写指令或读状态
DB0-DB7
三态
数据总线
RST
输入
复位信号
复位信号有效时,关闭液晶显示,使显示起始行为0,RST可跟MCU相连,由MCU控制;也可直接接VDD,使之不起作用。
1.2.3液晶显示控制驱动器HD61202的指令系统
HD61202的指令系统比较简单,总共只有七种。
现分别介绍如下:
1.显示开/关指令
R/WRS
DB7DB6DB5DB4DB3DB2DB1DB0
00
00111111/0
当DBO=1时,LCD显示RAM中的内容;DBO=0时,关闭显示。
2.显示起始行(ROW)设置指令
该指令设置了对应液晶屏最上一行的显示RAM的行号,有规律的改变显示起始行,可以使LCD实现显示滚屏的效果。
R/WRS
DB7DB6DB5DB4DB3DB2DB1DB0
00
11显示起始行(0-63)
3.页(PAGE)置指令
R/WRS
DB7DB6DB5DB4DB3DB2DB1DB0
00
1
0
1
1
1
页号(0-7)
显示RAM共64行,分8页,每页8行。
4.列地址(YAddress)设置指令
R/WRS
DB7DB6DB5DB4DB3DB2DB1DB0
00
01显示列地址(0-63)
设置了页地址和列地址,就唯一确定了显示RAM中的一个单元,这样MCU就可以用读、写指令读出该单元中的内容或向该单元写进一个字节数据。
5.读状态指令
R/WRS
DB7DB6DB5DB4DB3DB2DB1DB0
10
BUSY0ON/OFFREST0000
该指令用来查询HD61202的状态,各参量含义如下:
BUSY:
1-内部在工作0-正常状态
ON/OFF:
1-显示关闭0-显示打开
REST:
1-复位状态0-正常状态
在BUSY和REST状态时,除读状态指令外,其它指令均不对HD61202产生作用。
在对HD61202操作之前要查询BUSY状态,以确定是否可以对HD61202进行操作。
6.写数据指令
R/WRS
DB7DB6DB5DB4DB3DB2DB1DB0
01
写数据
读、写数据指令每执行完一次读、写操作,列地址就自动增一,必须注意的是,进行读操作之前,必须有一次空读操作,紧接着再读才会读出所要读的单元中的数据。
7.读数据指令
R/WRS
DB7DB6DB5DB4DB3DB2DB1DB0
11
读显示数据
1.2.4HD61202的软件设计
液晶控制器HD61202一共有七条指令,从作用上可分为两类,显示状态设置指令和数据读/写操作指令。
详见指令系统可查看图形液晶显示器产品有关手册。
显示起始行设置中L5~L0为显示起始行的地址,取值在0-3FH(1-64行)范围内。
页面地址设置中P2-P0为选择的页面地址,取值范围为0-7H,代表1-8页。
列地址设置中C5-C0为Y地址计数器的内容,取值在0-3FH(1-64行)范围内。
显示器上128点×64点,每8点为一字节数据,都对应着显示数据RAM(在HD61202芯片内),一点对应一个bit,计算机写入或读出显示存储器的数据代表显示屏上某一点列上的垂直8点行的数据。
D0代表最上一行的点数据,D1为第二行的点数据,……D7为第八行的点数据。
该bit=1时该点则显示黑点出来,该bit=0时该点则消失。
另外LCD指令中有-条displayON/OFF指令,displayON时显示RAM数据对应显示的画面;displayOFF则画面消失,RAM中显示数据仍存在。
点阵字模文件的建立:
由于MGLS12864液晶显示器没有内部字符发生器,所以在屏幕上显示的任何字符、汉字等须自己建立点阵字模库,然后均按图形方式进行显示。
由于HD61202显示存储器的特性,不能将计算机内的汉字库和其它字模库提出直接使用,需要将其旋转90度后再写入。
点阵字模库建立包括以下几个方面:
1.建立8×16点阵常用字符、数字、符号字模库。
可选用计算机BIOS中ASCII的8×16字模库,所有字符按照ASCII值从小到大升序排列。
asm{MOVax,1130h/*AH=11h—功能调用。
装入字库至软字库*/
movbh,6/*AL=30h取点阵信息*/
int10h/*BH=6取ROM8X16点阵指针(VGA)*/
movax,es/*出口:
ES:
BP指向字库指针*/
movascii_es,ax
movax,bp
movascii_bp,ax};
ascii_offset=ascii_bp+16*asciicode;
for(j=0;j<16;j++)buf[j]=peekb(ascii_es,ascii_offset+j);/*读16字节点阵数据*/
for(m=0;m<16;m++)/*点阵数据转换成LCD格式数据*/
{if(m<8){beginbyte=7;shiftn="7";}
else{beginbyte="15";shiftn="15";}
for(j=0;j<8;j++)
ascii8x16[m]=(ascii8x16[m]+(buf[beginbyte-j]>>(shiftn-m))&0x01)<<1;
}
也可选用UCDOS的ASC16文件做字模库。
ASC16文件的字符为8×16点阵。
所有字符按照ASCII值从小到大升序排列。
计算字符首地址的公式:
字符首地址=字符的ASCII码值×16加字模库首地址。
2.建立所用到的16×16点阵字模库。
汉字字符可选用UCDOS的HZK16文件做字模库。
HZK16文件的字符为16×16点阵。
所有字符按照区位码从小到大升序排列。
计算汉字字符首地址的公式如下:
汉字首地址=((区码-1)×94+位码-1)×32。
作者用C语言编写的读取UCDOS点阵字库字模程序,完成字模读取。
数据重新排列,并按MCS-51汇编程序的要求写成相应格式的文本文件。
p=((quma-1)*94+weima-1)*32;
cclibfile="fopen"("HZK16","rb");
fseek(cclibfile,(long)p,SEEK_SET);
fread(buf,sizeof(unsignedchar),32,cclibfile);/*读32字节点阵数据*/
for(m=0;m<32;m++){/*点阵数据转换成LCD格式数据*/
if(m<8){beginbyte="14";shiftn="7";}
elseif(m>=8&&m<16){beginbyte="15";shiftn="15";}
elseif(m>=16&&m<24){beginbyte="30";shiftn="23";}
else{beginbyte="31";shiftn="31";}
for(j=0;j<8;j++)
hzk16x16[m]=(hzk16x16[m]+(buf[beginbyte-2*j]>>(shiftn-m))&0x01)<<1;
}
3.常用图形(如产品商标等)的点阵图形的建立。
对已有的图形可采用扫描仪进行扫描,然后用图形处理软件进行处理,再将BMP格式文件转换成MCS-51的汇编文件的格式。
以上所有的字模数据都存放在单片机W78E58的程序存储器中,如用到的汉字、图形较多,可选用较大容量的程序存储器。
通用子程序:
通用子程序分左半屏、右半屏写指令代码子程序和写显示数据子程序。
液晶显示驱动器HD16202内部有个忙标志寄存器,当BF=1时,表示内部操作正在运行,不能接受外部数据或指令。
下面子程序中设指令代码寄存器为COMM,数据寄存器为DATA。
3.右半屏写指令子程序WR_CMD2和右半屏写数据子程序WR_DATA2的编制同左半屏子程序相同,只是对应口地址不同。
1.2.5JM12864J的电路结构特点
JM12864J是使用HD61202及其兼容控制驱动器作为列驱动器,同时使用HD61203作为行驱动器的液晶模块。
由于HD6120不与MPU发生联系,只要提供电源就能产生行驱动信号和各种同步信号,比较简单,因此这里就不作介绍了。
下面主要介绍一下JM12864J的逻辑电路图。
JM12864J共有两片HD61202及其兼容控制驱动器和一片HD61203,如图2-3所示:
图2-3JM12864J的逻辑电路图
在JM12864J中,两片HD61202的ADC均接高电平,RST也接高电平,这样在使用JM12864J时就不必再考虑这两个引脚的作用。
跟HD61202
(1)的
相连;
跟HD61202
(2)的CS1相连,因此
、
选通组合信号为
,
=01选通
(1),
,
=10选通
(2)。
对于JM12864J,只要供给VDD、VSS和V0即可,HD61202和HD61203所需的电源将由模块内部电路在VDD和V0、VSS的作用下产生。
1.2.6JM12864J的应用
以下内容为以单片机89S52为例机的接口电路,控制电路为直接访问方式的接口电路。
电路原理图如图2-4所示:
图2-4AT89S52与液晶的接口电路
由图2-5可以看出:
VSS接地;数字电源VDD接+5V;数据、指令选择信号RS接单片机P3.2口;读写选择信号R/W接单片机P3.1口;DB0~DB7分别接单片机的P2.0~P2.7口;芯片1、芯片2的片选分别接单片机的P3.4、P3.3口;复位端RST、背光正电源LEDA接+5V;液晶驱动电压VEE、背光负电源LEDK接地。
键盘电路
键盘电路本设计共采用按键3个,分别与单片机的P1.0、P3.5、P3.6、P3.7口相连,分别对应旋转、左移、下、右移。
系统程序的设计
1.3俄罗斯方块驱动流程图
俄罗斯方块所有绘图工作流程图
1.4俄罗斯方块中按下键的流程图
1.5俄罗斯方块所有绘图工作流程图
图4-1Protues仿真
系统性能测试与功能说明
焊接完成后,将电源接通,游戏画面出现后,分别按下左、右、下、旋转等按钮,均能正常在屏幕上做出反应。
当方块堆满一行时,方块正确消除,并将分数累计在屏幕右侧,同时消除多行方块时,分数有额外奖励。
达到一定分数时,方块下落速度加快,难度提高。
当屏幕中方块有触及顶端的时候,游戏结束。
附录1:
C语言程序
#include
#defineucharunsignedchar
#defineuintunsignedint
#defineDOWNTIME30
#defineMAXHANG20
#defineMAXLIE16
#defineMAXPIX3
#definePUSHON50
#defineLCDP2
#defineENP3_0
#defineRWP3_1
#defineRS
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 51 单片机 俄罗斯方块 游戏