贪吃蛇嵌入式系统课程设计报告doc.docx

上传人:b****5 文档编号:5686116 上传时间:2022-12-31 格式:DOCX 页数:5 大小:19.88KB
下载 相关 举报
贪吃蛇嵌入式系统课程设计报告doc.docx_第1页
第1页 / 共5页
贪吃蛇嵌入式系统课程设计报告doc.docx_第2页
第2页 / 共5页
贪吃蛇嵌入式系统课程设计报告doc.docx_第3页
第3页 / 共5页
贪吃蛇嵌入式系统课程设计报告doc.docx_第4页
第4页 / 共5页
贪吃蛇嵌入式系统课程设计报告doc.docx_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

贪吃蛇嵌入式系统课程设计报告doc.docx

《贪吃蛇嵌入式系统课程设计报告doc.docx》由会员分享,可在线阅读,更多相关《贪吃蛇嵌入式系统课程设计报告doc.docx(5页珍藏版)》请在冰豆网上搜索。

贪吃蛇嵌入式系统课程设计报告doc.docx

贪吃蛇嵌入式系统课程设计报告doc

贪吃蛇嵌入式系统课程设计报告

嵌入式系统课程设计报告姓名学号题目分组情况组长组员任务分配概述1.1.内容简介有一款经典的小游戏叫“贪食蛇”,又名贪吃蛇。

就是一条小蛇,不停地在屏幕上游走,吃各个方向出现的蛋,越吃越长。

只要蛇头碰到屏幕四周,或者碰到自己的身子,小蛇就立即毙命。

本课程设计的内容就是使用我们学习过的嵌入式系统的知识,在UP-NETARM3000嵌入式开发硬件平台上和uc/os-ii的软件开发框架下,实现的键盘,触摸屏,LCD等硬件功能的统一的完整系统。

1.2.功能描述1.可以通过嵌入式设备的键盘和触摸屏同时控制游戏流程,键盘中起作用的是方向键2,4,6,8;同时方向键也是贪吃蛇移动的开始键。

在触摸屏中可以进行的菜单操作,包括难度设置,暂停游戏和帮助信息。

2.贪吃蛇是由绿色连续的若干方形组成,程序中随机地出现一些“食物”(用红色的矩形表示),贪吃蛇通过吃“食物”增加自身的长度并增加相应的分值。

同时,程序再随机产生一个“食物”。

3.贪吃蛇撞到矩形边界,或者自己身体的一部分,游戏即告结束。

4.为了增加难度,每个“食物”都有一个计数器,贪吃蛇每走一步,计数器都会增加1,当计数器达到上限时,食物会变成石头,贪吃蛇撞到石头上,游戏也会结束。

5.贪吃蛇每吃掉一个“食物”,分值会相应增加,增加的幅度与从“食物”产生到被吃掉的时间间隔有关,时间间隔约小,分值增加越多。

所以PLAYER必须尽快把食物吃掉,越早得分越高。

否则它会变成石头,石头越多难度越大。

2.系统总体设计2.1.系统硬件设计因为条件有限,系统采用北京博创兴业科技有限公司生产UP-NETARM3000嵌入式开发平台。

UP-NETARM3000嵌入式开发平台是一个完整的开发系统,硬件完整(包括ARM7TDMI结构芯片S3C44B0X,工作频率60MHz;显示320240象素、256色LCD,带四线电阻式触摸屏;键盘17键数字小键盘等),安装比较简单,完全可以实现本课题。

硬件布局见图2-1-1图2-1-12.2.系统软件设计--多任务uc/os-II是实时多任务的嵌入式操作系统,它的内核是抢占式的实时内核,可以管理多达64个任务,高优先级的任务总是被先执行(如果该任务不是处在等待或挂起状态),其中保留8个任务给系统任务。

本系统软件使用多任务编程技术,总体有5个任务来实现,其中有几个系统附加任务,我们并没有用uc/os-II的初始化函数OSAddTask_Init创建,这样我们可以更好的了解uc/os-II的多任务调度。

系统软件的总体结构如图2-2-1图2-2-1各任务介绍1.键盘任务,负责监听用户在键盘上的动作,以消息方式发送给主任务,主任务对用户的键盘操作做出相应的响应。

2.触摸屏任务,负责监听用户在触摸屏上的动作,以消息方式发送给主任务,主任务对用户的触摸屏操作做出相应的响应。

3.游戏主任务,负责等待接受键盘扫描任务和触摸屏扫描任务发送来的消息,决定贪吃蛇的下一步走向以及整个游戏的状态(是否结束,是否暂停等等)。

4.贪吃蛇移动任务,用于实现贪吃蛇的不断移动,它受到主任务的控制。

5.LCD刷新任务,负责LCD图形界面的更新。

3.原理概述键盘扫描原理zlg7289A是一片具有串行接口的,可同时驱动8位共阴式数码管(或64只独立LED)的智能显示驱动芯片,该芯片同时还可连接多达64键的键盘矩阵,单片即可完成LED显示﹑键盘接口的全部功能。

zlg7289A内部含有译码器,可直接接受BCD码或16进制码,并同时具有2种译码方式。

此外,还具有多种控制指令,如消隐﹑闪烁﹑左移﹑右移﹑段寻址等。

键盘在本课题中的作用是,贪吃蛇的方向控制,具体讲是使用键盘的2,4,6,8键作为方向键。

LCD控制原理S3C44B0X中具有内置的LCD控制器,它具有将显示缓存(在系统存储器中)中的LCD图象数据传输到外部LCD驱动电路的逻辑功能。

可支持灰度LCD和彩色LCD。

在灰度LCD上,使用基于时间的抖动算法(time-basedditheringalgorithm)和FRCFrameRateControl方法,可以支持单色、4级灰度和16级灰度模式的灰度LCD。

这使我们的软件界面丰富多彩,便于区别蛇,食物,石头等。

触摸屏控制原理本系统触摸屏的控制是使用的FM7843芯片。

FM7843是4线电阻触摸屏转换接口芯片。

它是一款具有同步串行接口的12位取样模数转换器。

在125kHz吞吐速率和2.7V电压下的功耗为750μW,而在关闭模式下的功耗仅为0.5μW。

因此,ADS7843以其低功耗和高速率等特性,被广泛应用在采用电池供电的小型手持设备上。

触摸屏在本课题中用于菜单,点触式的菜单,包括难度设置,暂停,帮助等菜单项。

本课题未使用嵌入式开发平台上的所有硬件,如串口,电机,音频,以太网等,所以在此不再赘述。

4.系统软件实现4.1.数据结构设计一个好的程序必须有一个好的数据结构。

对于嵌入式程序的开发也是一样。

在本程序中一个非常重要的问题就是如何表示贪吃蛇,因为好的表示,贪吃蛇的行为(移动,吃食物,碰壁等)才容易处理。

另一个重要的问题就是性能众所周知,嵌入式设备对性能是非常敏感的,于是如何优化贪吃蛇的表示,从而保证资源的最大化利用也是一个重要的问题。

本软件的主要数据结构二维数组。

如图4-1-1。

图4-1-1这是一个8X8的二维整形数组GRID[8][8],为了方便说明,矩阵中每一个点的取值有上,下,左,右,食物,石头,空白七种取值,那么这个矩阵的具体赋值如下{012345670{空白,空白,空白,空白,空白,空白,空白,空白},1{空白,右,下,空白,空白,空白,空白,空白},2{空白,空白,下,空白,右,右,空白,空白},3{空白,空白,下,空白,上,空白,空白,空白},4{空白,空白,右,右,上,空白,空白,空白},5{空白,空白,空白,空白,空白,空白,空白,空白},6{空白,空白,空白,食物,空白,空白,石头,空白},7{空白,空白,空白,空白,空白,空白,空白,空白}}1.贪吃蛇的表示取值为上下左右的点为贪吃蛇的身体部分,其下标表示点位置,其取值表示点的方向,这样就可以记录蛇的形状,同时用两个坐标对表示蛇的头尾,即头下标(2,5),尾下标(1,1)。

2.贪吃蛇的移动如果GRID[2][6]空白,需要GRID[1][1]空白,GRID[2][6]GRID[2][5]右,同时修改头下标为(2,6),尾下标为(1,2)。

如果GRID[2][6]食物,只需要GRID[2][6]GRID[2][5]右,同时头下标(2,6)。

如果GRID[2][6]石头,游戏结束。

移动一步后的矩阵如下(以第一种情况为例,其他同理){012345670{空白,空白,空白,空白,空白,空白,空白,空白},1{空白,空白,下,空白,空白,空白,空白,空白},2{空白,空白,下,空白,右,右,右,空白},3{空白,空白,下,空白,上,空白,空白,空白},4{空白,空白,右,右,上,空白,空白,空白},5{空白,空白,空白,空白,空白,空白,空白,空白},6{空白,空白,空白,食物,空白,空白,石头,空白},7{空白,空白,空白,空白,空白,空白,空白,空白}}3.计分上述中,上下左右空白食物石头分别对应一个整数的值(或一个范围)。

食物刚产生时有一个初值假设为11,石头对应的整数值为31,取值在11-30范围内的都是食物,贪吃蛇每移动一步,食物的值增加1,当增大到31时,食物就变成了石头,这样31-1120步内食物未被吃到就会变成石头。

假设在第11步吃掉了食物,那么吃掉前食物的值增加到111122,那么你的得分会加上31-229分。

在第16步吃掉食物,那么吃掉食物前,食物的值增加到111627,那么你的得分会加上31-274分。

4.2.主任务设计负责游戏初始化,等待键盘扫描任务和触摸屏扫描任务发送来的消息,决定贪吃蛇的下一步走向以及整个游戏的状态(是否结束,是否暂停等等)。

流程图如图4-2-1。

图4-2-14.3.键盘任务设计负责监听用户在键盘上的动作,以消息方式发送给主任务,主任务对用户的键盘操作做出相应的响应。

键盘任务本是系统附加任务,在这里我们自己实现,具体原理就是使用查询方式,调用系统函数GetKey,并以获得的参数创建消息结构,然后使用SendMessage将消息发送出去。

源码如下voidKey_Scan_Taskvoid*Id{U32key;POSTMSGpMsg;for;;{keyGetKey0;///无限期等待键盘按下pMsgOSCreateMessageOSM_KEY,keyifpMsgSendMessagepMsg;}}4.4.触摸屏任务设计负责监听用户在触摸屏上的动作,以消息方式发送给主任务,主任务对用户的触摸屏操作做出相应的响应。

原理同键盘任务。

4.5.贪吃蛇移动任务设计负责贪吃蛇的不断移动,是一个无限循环。

其循环体的执行,受主任务的控制,具体讲就是多任务的同步。

因为主任务的优先级比此任务高,主任务主要负责系统消息的处理,如果没有系统消息,主任务就会在挂起状态,所以贪吃蛇移动任务就会执行。

我们定义了一个信号量Game_Run_Sem,任务先执行OSSemPend函数,等待这个信号量,如果这个信号量有效(主任务释放),那么执行移动一步的操作。

移动一步的操作在数据结构的设计中有详细讲解。

具体参考源程序snakeMoving函数voidsnakeMoving//贪吃蛇移动一步的函数{intx,y;getnexthX,hY,//获得贪吃蛇头的下一个点坐标ifgrid[fX][fY]STONE//如果食物变成了石头,则产生新的食物{drawdotfX,fY,BLACK;//绘制黑色石头genFood;//产生新的食物}ifx18|y12//坐标在矩阵中越界了,即蛇撞到墙壁了stateGAMEOVER;elseifgrid[x][y]EMPTY//前方是空白处{grid[x][y]grid[hX][hY];hXx;hYy;drawdothX,hY,GREEN;drawdottX,tY,YELLOW;getnexttX,tY,grid[tX][tY]EMPTY;tXx;tYy;}elseifgrid[x][y]FOODgrid[x][y]grid[hX][hY];hXx;hYy;drawdothX,hY,GREEN;genFood;}else//蛇撞到身体或者石头了stateGAMEOVER;}4.6.LCD刷新任务设计负责刷新LCD显示。

在其他任务向显示缓冲区绘制图形后,会OSTimeDly一段时间,这时系统后台会通过邮箱通知此任务执行LCD_Fresh函数进行LCD显示刷新。

源码如下voidLCD_Fresh_Taskvoid*Id{INT8Uerr;for;;{OSMBoxPendLCD_Fresh_MBox,0,///等待系统后台刷新通知LCD_Fresh;OSTimeDly250;}}5.结论这次对贪吃蛇的开发可以说是第一次开发一个完整的嵌入式应用程序。

通过这次完整的开发过程,对嵌入式开发有了更深入的认识。

嵌入式软件开发与硬件的关系比常规的软件开发密切的多。

在编程的过程中曾经因为一些硬件上的问题而耽误了不少时间。

在嵌入式平台上开发应用程序,首先需要针对自己操作的嵌入式硬件平台做充分的了解,否则在开发的过程中肯定会处处碰壁。

谈到程序错误,在嵌入式开发中不得不谈的就是程序的调试。

嵌入式开发中的调试工作是一个痛苦的过程。

由于我们缺少必要的模拟设备,每次更新一些细节都要重新上载到嵌入式设备中进行调试,这是非常需要耐心的。

同时,由于嵌入式软件开发上缺乏强有力的集成开发环境的支持,也给调试工作带来了很大的不便。

总之,嵌入式设备上的软件开发需要加倍的耐心和良好的心态。

最后不得不提,在这次开发中,我们清楚地认识到,数据结构作为计算机科学的一门专业基础课对程序设计是多么重要。

上这门课时学习了许多复杂的数据结构,却很少找到实际应用的地方。

但本次开发贪吃蛇的游戏,我们参考大量程序,总结了他们的优点与缺点,应用我们学过的数据结构知识,设计了自己程序的数据结构。

我想这对我们以后从事IT事业有着深远的意义。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1