嵌入式ARM的贪吃蛇游戏解析.docx
《嵌入式ARM的贪吃蛇游戏解析.docx》由会员分享,可在线阅读,更多相关《嵌入式ARM的贪吃蛇游戏解析.docx(21页珍藏版)》请在冰豆网上搜索。
嵌入式ARM的贪吃蛇游戏解析
成绩评定表
学生姓名
王超
班级学号
1003020330
专业
测控
课程设计题目
基于ARM的贪吃蛇游戏设计
评
语
组长签字:
成绩
日期
20年月日
课程设计任务书
学院
信息科学与工程学院
专业
测控
学生姓名
王超
班级学号
1003020330
课程设计题目
基于ARM的贪吃蛇游戏设计
实践教学要求与任务:
要求:
1、设计电路,选择器件。
2、利用Protel画原理图。
3、软件编程、调试。
4、焊接硬件电路,并调试。
任务:
1、设计基于ARM的贪吃蛇游戏
2、通过按键能进行调整及在电子屏上显示
工作计划与进度安排:
1、查找资料。
(2天)
2、设计电路、画电路图。
(2天)
3、软件编程与调试。
(2天)
4、系统调试。
(2天)
5、撰写报告。
(2天)
指导教师:
201年月日
专业负责人:
201年月日
学院教学副院长:
201年月日
摘要
在电脑极大普及的今天,游戏是我们日常生活的重要娱乐方式。
随着科技的快速发展,时间的流逝,至从观太阳、摆钟到现在电子钟,人类不断研究,不断创新纪录。
随便计算机技术的发展,游戏行业越来越得到人们的关注,特别是在年轻人行列。
现行的游戏一般是基于个人计算机的,像贪吃蛇这类小游戏在高档掌上电脑或高档电子消费品,但基于小型掌上低端游戏机在市场上却几乎没有。
本文以飞利浦公司的LPC2124芯片板为平台,在讨论ARM体系结构和游戏开发的同时,设计并实现了贪吃蛇游戏机的软件仿真。
综上所述此类贪吃蛇游戏机具有使用方便,绿色安全,低功耗、成本低廉等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。
关键词:
ARM;低功耗;游戏;贪吃蛇;LPC2124
Abstract
Inthegreatpopularityofcomputerstoday,gamesareimportantformsofentertainmentinourdailylives,Withtherapiddevelopmentofscienceandtechnology,thepassageoftime,fromconcepttothesun,theelectronicclockpendulumclocktonow,humanconstantresearch,innovationrecord.Notthedevelopmentofcomputertechnology,gamesindustryhasbeengrowingconcern,especiallyamongyoungpeople.Thecurrentgameingeneralisbasedonthepersonalcomputer,suchasSnakegameinthehigh-endhigh-endPocketPCorconsumerelectronics,butbasedonsmall-scalelow-endhandheldgameinthemarketisvirtuallynon-existent.
Inthispaper,PhilipsLPC2124chipboardasaplatform,indiscussingtheARMarchitectureandgamedevelopment,designandrealizationoftheSnakegamesimulationsoftware.
TosumupsuchaSnakegamewitheasy-to-use,greensafe,low-power,lowcostandmanyotheradvantages,inlinewiththeelectronicinstrumentationofthedevelopmenttrendofthemarketprospectsarebroad.
Keywords:
ARM;Lowpowerconsumption;Game;Greedysnake;LPC2124
引言
基于ARM芯片的产品凭借其强大的功能、低廉的价格和体积小等优点,在许多领域得到了广泛的应用。
而当前在游戏开发中,ARM并没有充分显示出它的这些特点。
而彩色液晶显示器具有功耗低、显示信息量大、显示效果逼真等特点。
所以若用彩色液晶显示器为游戏提供界面一会受到欢迎。
液晶显示屏LCD作为一种功耗低、体积小、无辐射的显示器件,近几年被广泛应用于各式各样的嵌入式电子产品中,LCD可分为段位式、字符式和点阵式三种,其中,段位式LCD和字符式LCD只能用于字符和数字的简单显示,不能满足图形曲线和汉字显示的要求,而点阵式LCD不仅可以显示字符、数字,还可以显示各种图形、曲线及汉字,并且可以实现屏幕上下左右滚动动画功能,分区开窗口、反转、闪烁等功能,用途十分广泛,为了简化液晶显示电路的设计和应用,生产厂家通常将液晶显示单元、显示控制器,显示内存和显示驱动电路等装配在一起,做成液晶显示模块LCDModule(LCM)。
目前,基于ARM芯片的产品遍布人类生活空间,在移动娱乐工具上应用广泛,特别在手机游戏制作方面越来越收人们的欢迎。
1ARM概述
ARM(AdvancedRISCMachines),既可以认为是一个公司的名字,也可以认为是对一类微处理器的通称,还可以认为是一种技术的名字。
1991年ARM公司成立于英国剑桥,主要出售芯片设计技术的授权。
目前,采用ARM技术知识产权(IP)核的微处理器,即我们通常所说的ARM微处理器,已遍及工业控制、消费类电子产品、通信系统、网络系统、无线系统等各类产品市场,基于ARM技术的微处理器应用约占据了32位RISC微处理器75%以上的市场份额,ARM技术正在逐步渗入到我们生活的各个方面。
ARM公司是专门从事基于RISC技术芯片设计开发的公司,作为知识产权供应商,本身不直接从事芯片生产,靠转让设计许可由合作公司生产各具特色的芯片,世界各大半导体生产商从ARM公司购买其设计的ARM微处理器核,根据各自不同的应用领域,加入适当的外围电路,从而形成自己的ARM微处理器芯片进入市场。
目前,全世界有几十家大的半导体公司都使用ARM公司的授权,因此既使得ARM技术获得更多的第三方工具、制造、软件的支持,又使整个系统成本降低,使产品更容易进入市场被消费者所接受,更具有竞争力。
ARM公司出售芯片技术授权给半导体公司,ARM核因为具有高性能、低成本、低功耗的特点而被广采用。
这样在全球范围内围绕着ARM技术形成了从一个芯片设计、生产、销售,工具软件设计与开发,系统软件开发以及应用软件开发的庞大产业链。
说ARM代表着以ARM为核心的软硬件开发技术也不为过。
2ARM的开发环境
2.1Keil介绍
uVision3集成开发环境(uVision3IDE)是一个窗口化的软件开发平台,它集成了功能强大的编辑器、工程管理器以及各种编译工具(包括C编译器、宏编译器、链接/装载器和十六进制文件转换器)。
uVision3包括以下功能组件,能加速嵌入式应用程序的开发过程:
(1)功能强大的源代码编辑器;
(2)可根据开发工具配置的设备数据库;
(3)用于创建和维护工程的工程管理器;
(4)集汇编、编译和链接过程于一体的编译工具;
(5)用于设置开发工具配置的对话框;
(6)真正集成高速CPU及片上外设模拟器的源码级调试器;
(7)高级GDI接口;可用于目标硬件的软件调试和KEILULINK仿真器的连接;
(8)用于下载应用程序到FLASHROM中的FLASH编程器;
(9)完善的开发工具手册、设备数据手册和用户向导。
uVision3IDE使用简单、功能强大,是设计者完成设计任务的重要保证。
uVision3IDE还提供了大量的例程及相关信息,有助于开发人员快速开发嵌入式应用程序。
2.2ADS介绍
ADS集成开发环境是ARM公司推出的ARM核微控制器集成开发工具,英文全称为ARMDeveloperSuite,成熟版本为ADS1.2。
ADS1.2支持ARM10之前的所有ARM系列微控制器,支持软件调试及JTAG硬件仿真调试,支持汇编、C、C++源程序,具有编译效率高、系统库功能强等特点,可以在Windows98、WindowsXP、Windows2000以及RedHatLinux上运行。
这里将简单介绍使用ADS1.2建立工程,编译连接设置,调试操作等等。
最后还介绍了基于LPC2200系列ARM7微控制器的工程模板的使用,EasyJTAG仿真器的安装与使用。
ADS1.2由6个部分组成,如表2.1所示。
表2.1ADS1.2组成表
名称
描述
使用方式
代码生产工具
ARM汇编去,ARM的C、C++编译器,Thumb的C、C++编译器,ARM连接器
由CodeWarriorIDE调用
集成开发环境
CodeWarriorIDE
工程管理,编译连接
调试器
AXD,ADW/ADU,armsd
仿真调试
指令模拟器
ARMulator
由AXD调用
ARM开发包
一些底层的例程,实用程序(如fromELF)
一些实用程序由CodeWarriorIDE调用
ARM应用库
C、C++函数库等
用户程序使用
3系统的硬件设计
3.1电路设计框图
系统以LPC2124ARM芯片作为核心控制器件,外围只有液晶显示和键盘操作,且均为串行通信器件,使得系统线路简单可靠性高。
系统结构框图3.1所示。
ARM
LPC212主控
键盘输入
液晶显示
图3.1系统结构框图
3.2系统硬件概述
本电路由ARM芯片LPC2124为控制核心,具有在线编程功能,低功耗,能在3V超低压工作;液晶显示部份由LM2124液晶显示器作为显示,因其具有很多优点,被广泛使用;按键部分我们使用矩阵键盘,因其使用方便,且便于记住,所以我们使用矩阵键盘而不是用独立键盘。
3.3系统主要硬件
3..1LPC2124
LPC2124是基于一个支持实时仿真和跟踪的16/32位ARM7TDMI-STMCPU的微控制器,并带有128/256k字节(kB)嵌入的高速Flash存储器。
128位宽度的存储器接口和独特的加速结构使32位代码能够在最大时钟速率下运行。
对代码规模有严格控制的应用可使用16位Thumb模式将代码规模降低超过30%,而性能的损失却很小。
由于LPC2124较小的64脚封装、极低的功耗、多个32位定时器、4路10位ADC以及多达9个外部中断使它们特别适用于工业控制、医疗系统、访问控制和POS机。
在64脚的封装中,最多可使用46个GPIO。
由于内置了宽范围的串行通信接口,它们也非常适合于通信网关、协议转换器、嵌入式软modern以及其它各种类型的应用。
LPC2124是64管脚封装的,其封装图如图3.3所示。
图3.3LPC2124封装图
LPC2124里面最重要的组成部分是寄存器,其部分寄存器功能如表3-1所示。
表3.1管脚连接映射
名称
描述
访问
复位值
地址
PINSEL0
管脚选择寄存器0
读/写
0x00000000
0xE002C000
PINSEL1
管脚选择寄存器
读/写
0x15400000
0xE002C004
PINSEL2
管脚选择寄存器
读/写
见表63和64
0xE002C014
其管脚功能选择寄存器如表3-2和表3-3所示。
表3.2PINSEL0管脚选择功能
PINSEL0
管脚名称
00
01
10
11
复位值
1:
0
P0.0
GPIOP0.0
TXD(UART0)
PWM1
保留
00
3:
2
P0.1
GPIOP0.1
RXD(UART0)
PWM3
EINT0
00
5:
4
P0.2
GPIOP0.1
SCL(
C)
捕获0.0(TIMER0)
保留
00
7:
6
P0.3
GPIOP0.3
SDA(
C)
匹配0.0(TIMER0)
EINT1
00
9:
8
P0.4
GPIOP0.4
SCK(SPI0)
捕获0.1(TIMER0)
保留
00
11:
10
P0.5
GPIOP0.5
MIS0(SPI0)
匹配0.1(TIMER0)
保留
00
13:
12
P0.6
GPIOP0.6
MOSI(SPI0)
捕获0.2(TIMER0)
保留
00
15:
14
P0.7
GPIOP0.7
SSEL(SPI0)
PWM2
EINT2
00
17:
16
P0.8
GPIOP0.8
TXD(UART1)
PWM4
保留
00
19:
18
P0.9
GPIOP0.9
RXD(UART1)
PWM8
保留
00
21:
20
P1.0
GPIOP1.0
RTS(UART1)
捕获1.0(TIMER1)
保留
00
23:
22
P1.1
GPIOP1.1
CTS(UART1)
捕获1.1(TIMER1)
保留
00
25:
24
P1.2
GPIOP1.2
DSR(UART1)
匹配1.0(TIMER1)
保留
00
27:
26
P1.3
GPIOP1.3
DTR(UART1)
匹配1.1(TIMER1)
保留
00
29:
28
P1.4
GPIOP1.4
CD(UART1)
EINT1
保留
00
31:
30
P1.5
GPIOP1.5
RI(UART1)
EINT2
保留
00
表3.3PINSEL1管脚选择功能
PINSEL1
管脚名称
00
01
10
11
复位值
1:
0
P0.16
GPIOP0.16
EINT0
PWM1
捕获0.2(TIMER0)
00
3:
2
P0.17
GPIOP0.17
捕获1.2(TIMER1)
PWM3
匹配1.2(TIMER1)
00
5:
4
P0.18
GPIOP0.18
捕获1.3(TIMER1)
捕获0.0(TIMER0)
匹配1.3(TIMER1)
00
7:
6
P0.19
GPIOP0.19
匹配1.2(TIMER1)
匹配0.0(TIMER0)
匹配1.3(TIMER1)
00
9:
8
P0.20
GPIOP0.20
匹配1.3(TIMER1)
捕获0.1(TIMER0)
EINT3
00
11:
10
P0.21
GPIOP0.21
PWM5
保留
捕获1.3(TIMER1)
00
13:
12
P0.22
GPIOP0.22
保留
捕获0.0(TIMER0)
匹配0.0(TIMER0)
00
15:
14
P0.23
GPIOP0.23
保留
保留
保留
00
17:
16
P0.24
GPIOP0.24
保留
保留
保留
00
19:
18
P0.25
GPIOP0.25
保留
保留
保留
00
21:
20
P1.26
保留
00
23:
22
P1.27
GPIOP1.27
AIN0(A/D转换器)
捕获0.1(TIMER0)
匹配0.1(TIMER0)
01
25:
24
P1.28
GPIOP1.28
AIN1(A/D转换器)
匹配0.2(TIMER0)
匹配0.2(TIMER0)
01
27:
26
P1.29
GPIOP1.29
AIN2(A/D转换器)
匹配0.3(TIMER0)
匹配0.3(TIMER0)
01
29:
28
P1.30
GPIOP1.30
AIN3(A/D转换器)
EINT3
捕获0.0(TIMER0)
01
31:
30
P1.31
保留
00
3.3.2LP3228显示屏
采用LM3228液晶显示,其拥有微功耗无电磁辐射,寿命长,价格低,接口方便等一系列显著特点,被广泛应用于各种仪器仪表,测量显示装置,计算机显示终端等方面。
它是以点阵为单位组成的液晶显示器,内部CMOS驱动,由日本东芝公司T6963C控制集成电路,印制电路板和金属支持框架所组成。
LM3228液晶可以用来显示字母,数字,汉字等,因此可以用LM3228液晶形象的模拟出贪吃蛇的形状和它运动的情况。
LM3228的硬件结构图如图3.3所示。
图3.3LM3228的硬件结构图
3.3.3用户操作接口
用户操作接口采用的是4×4矩阵键盘,用户可以通过操纵键盘控制贪吃蛇的游动方向,控制方向如表3-4所示:
表3.4贪吃蛇方向控制
8
贪吃蛇向上运动
2
贪吃蛇向下运动
4
贪吃蛇向左运动
6
贪吃蛇向右运动
5
暂停/继续游戏
矩阵键盘原理图如图3.5所示:
图3.5矩阵键盘原理图
矩阵键盘的工作原理如下:
(1)先读取键盘的状态,得到按键的特征编码。
先从P1口的高四位输出低电平,低四位输出高电平,从P1口的低四位读取键盘状态。
再从P1口的低四位输出低电平,高四位输出高电平,从P1口的高四位读取键盘状态。
将两次读取结果组合起来就可以得到当前按键的特征编码。
使用上述方法我们得到16个键的特征编码。
(2)根据按键的特征编码,查表得到按键的顺序编码。
将16个键的特征编码按顺序排成一张表,然后用当前读得的特征编码来查表,当表中有该特征编码时,它的位置就是对应的顺序编码。
(3)根据特征编码与顺序编码的对应关系就可以确定所按下的是哪一个键。
4软件仿真
ProteusISIS是英国Labcenter公司开发的电路分析与实物仿真软件。
它运行于Windows操作系统上,可以仿真、分析(SPICE)各种模拟器件和集成电路,该软件的特点是:
①实现了单片机仿真和SPICE电路仿真相结合。
具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统的仿真、RS232动态仿真、I2C调试器、SPI调试器、键盘和LCD系统仿真的功能;有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。
②支持主流单片机系统的仿真。
目前支持的单片机类型有:
68000系列、8051系列、AVR系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列以及各种外围芯片。
③提供软件调试功能。
在硬件仿真系统中具有全速、单步、设置断点等调试功能,同时可以观察各个变量、寄存器等的当前状态,因此在该软件仿真系统中,也必须具有这些功能;同时支持第三方的软件编译和调试环境,如KeilC51uVision2等软件。
④具有强大的原理图绘制功能。
该软件是一款集单片机和SPICE分析于一身的仿真软件,功能极其强大。
本次实中设计的贪吃蛇电路,电路核心是LPC2124,P0端接液晶显示屏,P1端接的是控制按键,具体仿真电路图请见附录一。
5系统的软件设计与实现
5.1游戏说明
游戏目标是控制贪吃蛇吃掉画面中的目标豆,每吃掉一个目标豆就会加分,但同时贪吃蛇的尾巴会相应地长上一截,吃得越多,尾巴越长。
游戏中,贪吃蛇碰上了自己的身体游戏即结束。
分数增加到一定后,贪吃蛇移动的速度增加,从而逐步增加游戏的难度。
5.2游戏结构设计
游戏主要分为A、B、C三个模块。
A模块主要用于控制游戏的开始、暂停与结束,这些方法与其他程序相同。
B模块主要用于完成游戏的主要功能,包括了蛇体控制,目标豆的摆放,游戏控制,屏幕绘制等。
C模块主要用于完成蛇体在屏幕上的定位。
5.3游戏具体设计
5.3.1矩阵键盘按键扫描子程序
用户设计行列键盘接口,一般常采用3种方法读取键值。
分别为:
中断式,扫描法和反转法。
(1)中断式:
在键盘按下时产生一个外部中断通知CPU,并由中断处理程序通过不同的地址读取数据线上的状态,判断哪个按键被按下。
(2)扫描法:
对键盘上的某一行送低电平,其他行为高电平,然后读取列值。
若列值中有一位是低,则表明该行与低电平对应列的键被按下;否则,扫描下一行。
(3)反转法:
先将所有行扫描线输出低电平,读列值。
若列值有一位是底,则表明有键按下,读列值;然后所有列扫描线输出低电平,再读行值。
根据读到的值组合就可以查表得到键值。
在本次实训中我们采用的是反转法,其硬件连接请见图3.5。
关键代码如下所示,具体可见源代码。
uint8Keyboard_Scan(void)
{
uint8keycode=0xff;
uint8row;
uint8col;
for(col=0;col{
Column_Clear(col);
for(row=0;row{
if(Row_Status(row)==0)
{
keycode=row*KEYBOARD_ROW+col;
}
}
Column_Set(col);
}
returnkeycode;
}
5.3.2矩阵键盘处理子程序
主要是对键盘扫描子程序返回的键值进行处理,为了程序化模块化,处理返回的键值时调用了各个键的处理函数,这里就不给出具体的处理函数了,具体可见源代码。
voidKey_Process(uint8num)//num为键盘扫描子程序返回的键值
{
switch(num){
case1:
up();break;//向上
case4:
left();break;//向左
case5:
pause();break;//暂停
case6:
right();break;//向右
case9:
down();break;//向下
default:
move();break;//默认为自动移动
}
}
5.3.3LCD显示子程序
这部分的处理是在文件LOADBIT.C中完成。
子程序的功能为显示单色图形及汉字显示。
实现的流程是先将图形转换为对应的点阵数组,然后即可调用LM3228的设备驱动程序中的函数输出驱动。
本次实训中采用LM3228的显示屏,图形液晶模块驱动程序要考虑它的操制器,要参考它的DataSheet来设计,这部分程序具体可见源代码。
5.3.4主程序流程
主程序 在main.c中,它的程序流程如图5.3所示。
图5.3主程序流
6程序测试
6.1仿真测试
由于ARM芯片管脚比较多,而且很多元器件都是贴片元件,做成电路板比较困难,由于资源等客观限制,所以在这里只进行仿真测试。
测试将粗略检测贪吃蛇游戏的5项基本功能:
向上,向下,向左,向右和暂停功能