硬件课程设计报告(5)

2025-08-07

{

unsigned char * box; unsigned char cube; unsigned char state; signed char row; signed char column;

}block

这是方块的数据结构的定义,它又记录方块的形状的数组box,方块形状的编号cube,方块的旋转方向state,以及方块形状数组第0行,第0列在整个游戏位图中的行数row和列数column组成。

2、unsigned char cubeMap[MAXROW][2]

这是游戏的位图,整个游戏界面就保存在这个味图中。游戏界面为20行10列。因此MAXROW被定义为20,同时表示一行的两个字节值用到了第一字节和第二字节的高2位。 3、unsigned char cube[]

这是保存游戏每一个方块形状位图的数组。每一个方块的形状位图由连续四个字节的低四位组成。每一个方块具有4个方向,同一个方块的四个方向的位图被连续保存。因此只要给出方块编号cube,再给出方块的旋转方向state,就可以通过4*cube+state找出该方块的形状位图。

4、unsigned char asii[]

这是保存游戏中显示的英文字母和数字的位图。每一个英文字母或数字由连续的5个字节组成位图、

5、unsigned char downok = 0; unsigned int score=0; unsigned char speed=1;

unsigned long downtime = 100;

unsigned char next;

这是5个全局变量。Downok表示着方块在下落过程中触底,无法继续下落。Score表示当前游戏的得分,speed表示当前游戏速度。Downtime表示方块隔100个时钟中断,即1秒钟就会强制一格。Next表示下一个方块的形状编号。

6、void Put_Double_Pixel(unsigned char x, unsigned char y) 因为在游戏中,每一个方块的每一个小格用两行两列的点阵来表示,因此这个函数的作用就是在游戏界面相对位置的第x行,第y列显示一个方格。

7、void Clear_Double_Pixel(unsigned char x, unsigned char y)

这个函数和上一个函数作用相似,只是它的作用是消除一个方格。 8、void showChar(unsigned char num, unsigned char x, unsigned char y)

将ascii数组中保存的字符位图显示在屏幕第x行,第y列开始的位置上。 9、void Game_Init()

该函数先打印游戏界面的边框,然后显示next,speed,score。 10、void Show_Speed_Score()

这个函数会将当前的得分和速度显示在屏幕上。

11、void createCube(unsigned char num)

当downok被置1时,调用这个函数来重新创建一个方块。 12、void showCubeMap(void)

当消掉行时,调用这个函数来在屏幕上刷新位图中的内容。

21

13、void writeCubeToMap(void)

每当向左,向右,向下移动方块或旋转方块后,最后都通过该函数将移动后的方块显示在屏幕上,及写入位图中。

14、void clearCubeFromMap(void)

每当向左,向右,向下移动方块或旋转方块前,最后都通过该函数将移动后的方块在屏幕上清除,及在位图中清除。

15、unsigned char checkBorder(void)

检测当前的方块是否碰到边框。如果碰到左边框,就不能向左移动,如果碰到右边框,就不能向右移动。如果触底,就触发downok。 16、unsigned char checkClask(void) 检测当前的方块是否碰到其他方块.

17、void checkMap(void)

检测位图中是否有被填满的行,如果有就消掉该行,并且加响应的分,并根据当前分数调整速度。

18、void moveRight(void) void moveLeft(void)

void moveDown(void) void cubeRotation(void) 这四个函数分别表示向左,向右,向下移动方块及旋转方块。在这些函数中,先移动方块,再检测是否碰到边框或者碰到其他方块。若没碰到,就退出函数。若碰到了,就返回原来的位置。对于moveDown。若在该函数中检测到了碰到边框或碰到其他方块,就会置位downok标识。

19、void game(void)

该函数的流程就如一开始给出的程序流程图。

22

4.10 按键检测

本课设中利用定时器中断检测按键。在定时器中断函数,添加了一个有限状态机,可以判别短按键和长按键。当发生短按键时,置位短按键标志spress_flag,并给出键值key。当发生长按键时,置位长按键标志位lpress_flag。并给出按键值key。这样做使得按键检测非常灵敏,并且可以利用长短按键的组合产生各种功能,节省按键数量。

5. 系统测试 游戏功能的测试

游戏功能可以正常初始化,方块可以正常下落,左移右移及旋转。可以正常的清楚被填满的行。当方块触顶时,会游戏结束而退出游戏。 下面给出游戏过程中的截图:

23

6. 心得体会

从确定课设题目开始,我们组就在老师的催促下开始做实验,当时心里有点不以为然,觉得没有必要那么早开始,后来真正实践的时候,问题不断的时候,才知道,要做一个像样的东西出来是多么不容易,庆幸当初没有拖到最后才开始做。

实验过程中,从搜集资料到选定器件,都是非常考验信息搜索能力的。最困难的是,在测试的时候,bug不断,都是要

7. 参考文献

【1】MSP430x1xx User Guide 【2】12864液晶屏中文资料 【3】FAT32文件系统详解

【4】SD卡在单片机上的应用

【5】基于MSP430单片机的菜单式MP3的实现

24


硬件课程设计报告(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:老虎岗一中九年级第二次月考物理试卷

相关阅读
本类排行
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 7

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xuecool-com QQ:370150219