赵志欣 赵震 罗登月 洪升
摘 要: 针对高校嵌入式课程的本科教学,设计并开发一款基于ARM9的打地鼠游戏,并具体介绍此游戏的设计实现过程。通过整个过程让读者了解掌握基于ARM9嵌入式系统的一般游戏的设计流程及硬件环境。实验平台以ARM9微处理器S3C2410A硬件平台为控制核心,并扩展LCD触摸屏模块,利用ADS开发工具对其开发并调试。通过设计实践,提出一种创新型的教学方式,可以激发读者学习的兴趣,培养创新思维。
关键词: ARM9; 打地鼠游戏; ADS开发工具; S3C2410A; LCD; 嵌入式教学
中图分类号: TN99?34; TP311 文献标识码: A 文章编号: 1004?373X(2018)20?0122?05
Abstract: A whac?a?mole game based on the ARM9 is designed and developed for undergraduate teaching of embedded courses in colleges and universities. The design implementation process of the game is introduced detailly so that readers can learn and understand the design process and hardware environment of general games based on the ARM9 embedded system. In the experimental platform, the ARM9 microprocessor S3C2410A is taken as the control core of the hardware platform, and the LCD touch screen module is extended, which is developed and debugged by using the ADS development tool. An innovative teaching method is proposed by means of the design practice, which can stimulate readers′ learning interest and cultivate their innovative thinking.
Keywords: ARM9; whac?a?mole game; ADS development tool; S3C2410A; LCD; embedded teaching
随着嵌入式系统在消费电子领域的发展,消费者对嵌入式系统的游戏娱乐功能也越来越关注。对于嵌入式系统而言,在硬件方面,ARM微处理器体系结构被认为是较成熟的32位嵌入式RISC微处理器结构[1],市场占有率较高。ADS[2]是ARM公司的集成开发软件;ADS的编译器调试器较SDT都有了非常大的改观,ADS 1.2提供完整的Windows界面開发环境。C编译器效率极高,支持C以及C++[3],使工程师可以很方便地使用C语言进行开发;提供软件模拟仿真功能,使没有Emulators的学习者也能够熟悉ARM的指令系统。配合FFT?ICE使用,ADS 1.2提供强大的实时调试跟踪功能,片内运行情况尽在掌握。但ADS 1.2需要硬件支持才能发挥强大功能,目前支持的硬件调试器有Multi?ICE以及兼容Multi?ICE的调试工具,如FFT?ICE。
打地鼠游戏是一款实用性小游戏,娱乐性很强,现在网络上也出现了许多关于打地鼠游戏的设计[4?5]。本文在ARM9微处理器S3C2410A开发板和ADS开发工具下设计并实现了打地鼠游戏。
打地鼠游戏整体由开始说明部分、游戏主部分、游戏进阶部分组成。首先运行进入游戏的开始说明部分来介绍游戏的规则;接着进入游戏的主要部分,在游戏的主要部分界面上随机出现2只动物(动物的种类为老鼠、野兔或者青蛙),其中打中1次老鼠得1分,打中1次野兔得2分,打中1次青蛙减1分;游戏主界面循环出现15次动物后进入游戏的进阶部分界面来选择是否提升难度,玩家可以自主选择提升游戏难度、降低难度或者等待。整个游戏设计的流程图如图1所示。
图1中:游戏开始动画中的游戏说明部分向用户介绍游戏的玩法和注意事项;游戏的核心部分是游戏功能实现,程序的具体操作在此部分实现;游戏进阶部分是给玩家选择下一轮游戏的难度,同时还会有等待时间给玩家休息。
打地鼠游戏设计需要使用到控制芯片的内部定时器[6];可以提供控制外部的LCD触摸屏蜂鸣器的端口及驱动;并且需要极高的工作频率等条件。S3C2410A处理器集成了常用的接口,提供了丰富的内部设备,包含8通道10位ADC和触摸屏接口以及内部PLL倍频器,其时钟频率可以通过内部倍频最高达到266 MHz。同时内部拥有5个独立的定时器并且提供1通道LCD专用DMA与触摸屏所需要的两路ADC通道,保障了系统的二次开发。因此使用S3C2410A处理器[7?8]满足游戏设计的条件,同时还需要LCD及触摸屏、串行接口及蜂鸣器。嵌入式设备处理速度快,而且采用高速闪存进行存储,因此系统的整体处理速度得到保障。硬件结构如图2所示。
2.1 S3C2410最小系统设计
最小系统是保证一款芯片正常工作的最简外围硬件电路,包括电源电路、晶振电路与复位电路。为了便于芯片程序下载,通常将FLASH擦写电路也设计到最小系统之中,本设计中擦写接口为JTAG电路[9]。
2.1.1 电源电路
S3C2410A最小系统工作电压为3.3 V,由于LM117具有短路保护功能的扩展及温度可调节线性稳压器,因此最小系统由外接的USB接口的5 V电源通过LM117?3.3芯片转化为3.3 V(见图3)。电源电路中增加了滤波电容,使芯片工作更加稳定。
2.1.2 复位电路
S3C2410A为低电平复位,因此电路连接如图4所示,电源通过开关、下拉电阻接地组成复位电路,当开关按下时,输入信号为低电平。
2.1.3 JTAG电路
JTAG(Joint Test Action Group)接口用于实现程序的下载与调试,包含4根控制数据线,分别为TMS(模式选择),TCK(时钟),TDO(数据输出),TDI(数据输入),4个引脚依次连接芯片如图5所示。
2.2 S3C2410A与蜂鸣器接口电路
S3C2410A处理器通过控制PNP三极管的导通与关断来使蜂鸣器发声,通过导通关断的时间不同来产生不同的音调,用来指示不同的情况,例如得分鸣高音减分鸣低音等。其电路图如图6所示。
2.3 S3C2410与LCD触摸屏接口电路
2.3.1 S3C2410与LCD液晶屏的连接
本节设计采用LCD触摸屏来人机交互,选用的显示模块是夏普液晶模组LQ080V3DG01(TFT?LCD模块)。LQ080V3DG01由彩色TFT?LCD面板、驱动电路、控制电路、供电电路及背光单元组成。支持最大分辨率为640×480的图形和文字显示,数据输入格式为18 bit,绿色、红色及蓝色均为6 bit,提供的颜色共有26万多种。
其电路图如图7所示。
2.3.2 S3C2410与触摸屏的连接
触摸屏采用四线式电阻式屏,S3C2410A 的AIN[7]和AIN[5]用于连接触摸屏的模拟信号输入。触摸屏接口电路一般由触摸屏、4个外部晶体管和一个外部电压源组成,如图8所示。触摸屏接口的控制和选择信号(nYPON,YMON,nXPON和XMON) 连接切换X坐标和Y坐标转换的外部晶体管。模拟输入引脚(AIN[7],AIN[5])则连接到触摸屏引脚。触摸屏控制接口包括一个外部晶体管控制逻辑和具有中断产生逻辑的ADC接口逻辑。
2.4 系统软件设计
打地鼠游戏设计的软件部分[10]主要由同时在不同地点出现多只动物,出现不同种类的动物,判断是否击打中及提升击打难度等模块组成。
2.5 程序主流程图
打地鼠游戏设计的主程序工作流程如图9所示。
步骤1:定义一些全局变量。数组a[2],b[2]随机选择动物出现的位置;pic用于区分当前所展示的不同界面,以及在触摸中断中判断当前的触摸位置是什么功能;Num用于记录动物出现的次数,满15次一轮;c用于判断此时应该出现几只动物;d[2]用于判断此时刻出现哪一只动物。
步骤2:LCD及触摸屏ADC等驱动初始化。
步骤3:显示开机界面,等待触摸中断使标志位Flag置0,跳出While死循环。
步骤4:跳出While循环后配置定时器后进入While死循环,等待定时器及触摸屏判断Num来确定当前状态。
2.6 程序的定时器中断流程图
打地鼠游戏设计的定时器中断的工作流程如图10所示。
定时器的计数器减到零时,触发进入定时器中断。首先在定时器中断中判断Num的大小,当出现动物的次数等于15次时进入界面3,判断选择是否提升难度或者继续当前难度(通过触摸中断来选择);当选择完后在触摸中断中将Num置为17,然后跳转到界面2的同时将Num置0,开始新的一轮记录动物次数;c通过获取2以内的随机数来选择当前要出现动物的数量,a[],b[]通过获取3以内的随机数来确定在哪个位置显示,d[]通过或者3以内的随机数来选择要显示的动物种类,接着用for循环来在确定的位置画出d[]选择的动物。
总的来说,定时器的主要功能是通过获取随机数函数rand()来选择动物种类地方等;接着在触摸中断中通过判断触摸点的坐标与d[],a[],b[]的大小比较来确定是否击中,这部分是本游戏设计的核心。
2.7 程序的触摸屏中断流程图
打地鼠游戏设计的触摸屏中断的工作流程如图11所示。
当游戏启动后停留在开始说明界面,首先判断Pic的值,然后判断操作者触摸位置与开始界面的“开始新游戏”按钮位置的坐标是否匹配,如果匹配则清除标志位Flag同时蜂鸣器鸣笛,接着配置定时器0进入界面2(游戏主界面),同时Pic置为2。
进入界面2(游戏主界面)后,定时器会根据设定的时间定时地刷新屏幕随机出现动物。操作者触摸屏幕,将触摸位置的坐标与a[],b[],d[]相比较,如果d[]等于0则打中老鼠,则记录分数增加1分;如果d[]等于1,则打中野兔,记录分数增加2分;如果d[]等于2,則打中青蛙,记录分数减1分;蜂鸣器分别根据频率不同发出不同的音量。击中后将a[],b[]的值置4来防止一只动物被点击多次,记录多次分数。
当动物出现的次数达到15次即Num的值为16,Pic的值为3,进入界面3(进阶界面)后,触摸位置的坐标与界面3上的“提升难度”按钮和“再次挑战”按钮相比较来判断是否减少定时器的每次计时时间;接着通过配置定时器的寄存器来改变计时时间,同时将Num置为17,等到下次进入定时器后会将界面切换至界面2重新开始游戏;如果无触摸则在界面3(进阶界面)长时间等待。
游戏设计通过编译器调试无误之后,将其下载至S3C2410A处理器上,其部分效果图如图12~图14所示。
图12为开始游戏界面。通过触摸屏为用户提供了人机交互界面,介绍了游戏规则并且让用户选择此时是否开始游戏或者退出游戏。
图13为游戏中运行界面。通过触摸屏为用户提供了人机交互界面,用户通过击打动物所在的位置来完成游戏、获取分数。图13a)是青蛙与兔子在一个界面上可以分别击打;图13b)与图13d)是青蛙与地鼠同框且图13d)是地鼠在时间周期到或者被击打消退的过程;图13c)是两只地鼠同框;
图14为游戏结束进阶界面。通过触摸屏为用户提供了人机交互界面,用户选择“提升难度”来增快动物出现的频率或者“再次挑战”来降低游戏难度。
本文基于ARM9嵌入式微控制器进行游戏设计,能够在游戏运行过程中进行游戏难度修改,并且能够通过多组随机函数产生多个击中后有不同效果的目标。由此增加游戏乐趣同时增加了游戏难度的可选择。以后的设计中可以在美化界面、多人机对战、分数排行榜等方面加以改善。本游戏可以为开发者提供指引,使开发者能够系统地制作,在程序设计过程当中熟练程度不断得到提升,具有借鉴与教学参考意义。
参考文献
[1] 徐英慧,马忠梅,王磊,等.ARM9嵌入式系统设计:基于S3C2410与Linux[M].北京:北京航空航天大学出版社,2007.
XU Yinghui, MA Zhongmei, WANG Lei, et al. ARM9 embedded system design based on S3C2410 and Linux [M]. Beijing: Beihang University Press, 2007.
[2] 李哲英,骆丽,刘元盛.ARM核嵌入式系统的开发平台ADS[J].半导体技术,2002,27(2):13?16.
LI Zheying, LUO Li, LIU Yuansheng. The development platform ADS based on ARM core embedded system [J]. Semiconductor technology, 2002, 27(2): 13?16.
[3] BARR M. C/C++嵌入式系统编程[M].北京:中国电力出版社,2001.
BARR M. C/C++ programming for embedded systems [M]. Beijing: China Electric Power Press, 2001.
[4] 李倩.基于PLD的打地鼠游戏的设计与实现[J].中国现代教育装备,2015(7):121?123.
LI Qian. Design and implementation of whac?a?mole game based on PLD [J]. China modern educational equipment, 2015(7): 121?123.
[5] 毋玉芝,段向东.基于Authorware的打地鼠游戏设计[J].科技信息,2008(4):79.
WU Yuzhi, DUAN Xiangdong. Design of whac?a?mole game based on Authorware [J]. Science & technology information, 2008(4): 79.
[6] 吴明晖.基于ARM的嵌入式系统开发与应用[M].北京:人民邮电出版社,2004.
WU Minghui. Development and application of embedded systems based on ARM [M]. Beijing: Posts & Telecom Press, 2004.
[7] 马义德,汤书森,张北斗,等.嵌入式系统课程群建设与创新型人才培养[J].高等理科教育,2008(2):23?25.
MA Yide, TANG Shusen, ZHANG Beidou, et al. Embedded system course group construction and innovative talent cultivation [J]. Higher education of sciences, 2008(2): 23?25.
[8] 俸皓.嵌入式系统教学体系改革的讨论[J].科技信息,2007(30):157.
FENG Hao. Discussion on teaching system reform of embedded system [J]. Science & technology information, 2007(30): 157.
(上接第126頁)
[9] 杨雪,罗贤全,马俊涛.基于嵌入式Linux的测试系统软件实现研究[J].现代电子技术,2008,31(6):117?119.
YANG Xue, LUO Xianquan, MA Juntao. Research on realization of test system software based on embedded Linux [J]. Modern electronics technique, 2008, 31(6): 117?119.
[10] 张舸,林世勇.基于嵌入式系统的游戏程序设计[J].现代电子技术,2009,32(6):86?90.
ZHANG Ge, LIN Shiyong. Gobang design based on embedded system [J]. Modern electronics technique, 2009, 32(6): 86?90.
[11] 熊光泽,古幼鹏,桑楠.嵌入式应用软件设计方法学研究综述[J].计算机应用,2004,24(4):1?4.
XIONG Guangze, GU Youpeng, SANG Nan. Overviews on design methodologies for embedded software [J]. Journal of computer applications, 2004, 24(4): 1?4.