一、实验目的
- 学习ARMSIM#环境下虚拟开发板的控制。
- 编写简单程序调用软件中断服务程序实现虚拟OLED显示器的键盘控制。
二、实验要求
编写程序SNAKE.s实现以下功能。
- 基本行为:在16×40的EmbestBoard显示器上显示可变长度的字母序列蛇,在没有按键的时候,蛇保持向当前方向前进。蛇的构成字母可自选。
- 蛇的死亡:触碰到边界时,游戏结束。
- 控制:使用蓝色键盘的四个键表示Up、Down、Left和Right键,表示蛇要改变的方向。为简化问题,允许蛇穿过自身。
- 生长:在蛇安全的显示了若干周期后,蛇的长度增加1。
- 在以上基础上可增加功能,可以向真实“贪吃蛇”游戏靠拢。
三、补充功能说明
1.区分游戏难度的关卡通关功能
起始局为第0局(ROUND 0),用移动的次数代表时间,每经过40次移动,还未触碰边界失败的,可以进入第1局游戏。第1局游戏的边界范围设置将小于第0局,同样第2局也比第1局边界范围缩小,这样达到游戏难度区分的目的。当3局游戏均通过后,显示通关。局数和游戏时间均可在屏幕上实时显示,如下图分别为第一、二、三局的界面:
2.完善了显示和页面切换
使得整个系统更像一个真实的“贪吃蛇”游戏,观感更好,包括游戏欢迎界面、进入下一局界面、游戏失败界面和游戏成功界面,如下图为游戏欢迎界面:
四、程序运行流程图
五、子程序调用图
六、完整实验源码
.text
.arm @ 声明32位ARM指令
.equ SWI_CheckBlue, 0x203 @ check press Blue button
.equ BLUE_KEY_0.0, 0x01 @ button(0.0) Up
.equ BLUE_KEY_0.1, 0x02 @ button(0.1) Down
.equ BLUE_KEY_1.0, 0x10 @ button(1.0) Left
.equ BLUE_KEY_1.1, 0x20 @ button(1.1) Right
.equ snake,'S'
.equ space,' '
.equ range,'~'
swi 0x206 @ Clear the LCD screen
@draw a welcome message to the lcd screen on line#7, column#10
mov r0,#7 @ column number
mov r1,#10 @ row number
ldr r2,=Welcome @ pointer to string
swi 0x204 @ draw to the LCD screen
swi 0x206 @ Cle