嵌入式系统设计课程设计基于μCOSII的贪吃蛇游戏嵌入式系统实现方案设计_第1页
嵌入式系统设计课程设计基于μCOSII的贪吃蛇游戏嵌入式系统实现方案设计_第2页
嵌入式系统设计课程设计基于μCOSII的贪吃蛇游戏嵌入式系统实现方案设计_第3页
嵌入式系统设计课程设计基于μCOSII的贪吃蛇游戏嵌入式系统实现方案设计_第4页
嵌入式系统设计课程设计基于μCOSII的贪吃蛇游戏嵌入式系统实现方案设计_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 计算机科学与技术学院 嵌入式系统设计课程设计设计题目: 基于c/os-ii的贪吃蛇游戏 嵌入式系统实现方案设计 专业班级: 计算机科学学院2008级(2)班 组 员: 指导教师: 设计时间: 2011/7/42011/7/8 设计地点: 明理楼b319 基于c/os-ii的贪食蛇游戏设计c/os-ii实时操作系统简介c/os-是一种免费公开源代码、结构小巧、具有可剥夺实时内核的实时操作系统。 c/os-ii 的前身是c/os,最早出自于1992 年美国嵌入式系统专家jean j.labrosse 在嵌入式系统编程杂志的5 月和6 月刊上刊登的文章连载,并把c/os 的源码发布在该杂志的b b

2、 s 上。c/os 和c/os-ii 是专门为计算机的嵌入式应用设计的, 绝大部分代码是用c语言编写的。cpu 硬件相关部分是用汇编语言编写的、总量约200行的汇编语言部分被压缩到最低限度,为的是便于移植到任何一种其它的cpu 上。用户只要有标准的ansi 的c交叉编译器,有汇编器、连接器等软件工具,就可以将c/os-ii嵌人到开发的产品中。c/os-ii 具有执行效率高、占用空间小、实时性能优良和可扩展性强等特点, 最小内核可编译至 2kb 。c/os-ii 已经移植到了几乎所有知名的cpu 上。严格地说c/os-ii只是一个实时操作系统内核,它仅仅包含了任务调度,任务管理,时间管理,内存管

3、理和任务间的通信和同步等基本功能。没有提供输入输出管理,文件系统,网络等额外的服务。但由于c/os-ii良好的可扩展性和源码开放,这些非必须的功能完全可以由用户自己根据需要分别实现。一、方案论证方案一如图1.1所示,采用at89c52和1602液晶显示。at89c52芯片是一款非常常用的芯片,具有32个io口及多个定时器中断,添加外部ram后能够实现ucos-ii的移植。这里at89c52作为主控芯片,实现多任务操作。如1602不断刷新显示字符串,流水灯同时产生不同的变化。1602液晶2k*8 ram流水灯at89c52图1.1系统框图方案二如图4.2所示,采用msp430和ks0108的12

4、864液晶显示。msp430 系列是一个 16 位的、具有精简指令集的、超低功耗的混合型单片机。ks0108是不带中文字库的128*64大液晶。由这两个作为主要芯片,8个并行按键能实现基于ucos-ii的贪食蛇游戏设计。12864液晶8个并行按键msp430图4.2系统框图方案三如图所示,采用stc89c58rd+和st7920的12864液晶显示c58rd+有32k flash, 256 bytes的片内ram, 1k 的xram。在资源方面完全满足ucos的移植,12864液晶采用带中文字库的st7920芯片。键盘由4*4矩阵键盘组成。12864液晶发光二极管stc89c58rd+4*4矩

5、阵键盘图1.3系统框图方案对比1、 复杂度从硬件来看最复杂的应该是方案一,需要扩展外部ram存储器。而且占用了一排通用io口,造成了资源的浪费。从软件来看最复杂的应该是方案二,msp430虽然性能优越,但编程较为复杂,需要掌握更多的汇编指令。2、 实用性显然第三种方案更为实用,需要的东西均为模块化设计,只需改动程序便可实现多种功能。而方案二msp430资源丰富,应该用于更为复杂的程序设计,在这里就有些大材小用了。3、 性价比价格而言方案三与方案二基本差不多,主要是方案三采用国产的stc芯片价格更为实惠。而方案二价格芯片价格较高,不适合做小游戏的开发。综上所述,本课程设计采用方案三。二、硬件系统

6、设计1、单片机最小系统图2.1 stc89c58rd+最小系统2、12864液晶电路液晶接口说明1、 vss 电源地2、 vdd电源正极3、 nc悬空4、 rs数据/命令选择端5、 rw读/写控制信号6、 e使能信号7-14datai/o15、psb串行/并行数据选择16、nc空脚17、/rst复位端18、vout接10k到地19、bla背光正极20、blk背光负极图2.2 12864液晶接口电路3、矩阵键盘采用4*4矩阵键盘图2.3矩阵键盘4、 led闪烁电路图2.4 led闪烁电路5、整体电路见附录一6、元器件清单名称数量at89c58rd+1块12864液晶模块1块电路基板1块按键17个

7、40脚单片机底座1个排针20脚1个导线若干表 2.1 元器件清单三、软件设计1、程序框图依据硬件系统设计,软件系统设计主要包括:task2判断按键方向刷新蛇体12864初始化是否撞墙开机画面游戏初始化吃到食物按任意键开始游戏加100分游戏开始游戏结束分数大于1400图3.1贪食蛇任务框图开始task1中断初始化led1=0任务初始化led1=led1任务调度创建任务任务开始图3.2 ucos系统框图图3.3 任务一框图1、 程序清单见附录三2、 内核裁剪未裁剪前:program size: data=40.1 xdata=1744 code=8561裁剪内容:修改os_cpu.h文件:#def

8、ine cpu_max_stk_size0xf8改为0x28修改os_cfg.h文件:#define os_max_tasks 10 改为4#define os_lowest_prio 10 改为4裁剪后:program size: data=40.1 xdata=1021 code=8573四、系统调试1、 软件调试根据程序框图,写出对应的程序,在keilc中进行调试编译,生成.hex文件。在proteus中画出电路图,并装载上述生成的.hex文件,仿真观察结果,根据结果再对程序进行修改,调试,直到满意为止。图4.1仿真电路图2、硬件调试2.1、检查元器件 在焊接之前应先检查各元器件的好坏。

9、按键: 按键有四个引脚,分为两对,每对之间是导通的,对角线上是断开的,按下按键时导通,则用万用表的二极管档逐一检查好坏。2.2、排列元器件由于本次课程设计采用的是万用板,元器件在电路上的排列要自己排列分布好,以为焊接减少不必要的麻烦。2.3、焊接 在分布好元器件的格局后,开始焊接,先焊接单片机底座、排母、其它元器件。焊接完元器件后即元器件分布在万用板上已定型。然后根据电路图,用导线连接各引脚。在用导线连接时应注意,导线焊接在元器件引脚上时剥皮部分长度要适中。每焊完一个元器件都应该检查是否有错。2.4、调试按照电路图焊接完毕后,检查电路完毕后。单片机和液晶先不装上去,接上电源,用万用表测试单片机

10、和液晶的电源引脚,看其值是否正常,不正常检查电路调试直至正常。以避免烧坏元器件。完成以上步骤后,接上电源装上单片机和液晶,看是否实现功能。如果出错,检查电路,调试,直至出现正确结果。五、心得体会本次课程设计与前几次的课程设计大有不同,第一次使用到了操作系统ucos。这个操作系统虽然很小只有几k不到,但功能依然很强大。ucos_ii是开源免费的操作系统,而且流行使用已有快20年了,是一个学习资源丰富的操作系统。此次ucos课程设计,学到的东西也很丰富,也很复杂。就操作系统本身而言,移植就必须面临裁剪内核,只有对内核有一定的了解才可能深入的去裁剪一些不需要的模块,好在ucos_ii的移植性非常好,

11、移植需要的代码一般情况下也就是三个主要的c程序,而需要的修改的部分也显得较为简单。只需要修改一些数值,如#define os_mem_en 0将0设置为1则表示启用该模块,为0则不使用该模块。另外对于cpu堆栈空间的设定也是如此。在实现多任务运行时,也有很多方面需要考虑到。例如多任务的管理,毕竟cpu只有一个,怎样才能实现同时运行?就需要了解每个任务的优先级的设定,该任务的运行时间,延时的分配。这些都要先了解该操作系统才能进行的。而在移植贪食蛇游戏就面临了12864芯片不同的情况。已有的贪食蛇游戏是针对不带字库的12864编写的,而我的手上的12864却是带中文字库的。首先在引脚连接方面就出现

12、了不少情况,与一般的1602引脚接法不一样,vo可以悬空,但vout脚必须接10k电阻到地,否则液晶无法显示。另外修改程序也花了很长一段时间,不过正是花费时间去考虑这些程序时才让我了解到一个大程序编写规则的重要性。如果将每一个模块都像硬件设计那样分开模块,那么移植的时候只需要针对不同的芯片相应的改动程序即可。所以在以后的编写程序中,规范化,模块化将是编程的重点。六、参考文献1 jean j labrosse嵌入式实时操作系统c/os-iim.邵贝贝译北京:北京航空航天大学出版社,20032 任哲.嵌入式实时操作系统c/os-ii原理及应用m北京:北京航空航天大学出版社,20033 沈睿. c/

13、os-在dsp2407 上若干移植问题的研究j.中国水运,2007,5(5):43-44.4 马忠梅编著.单片机的c语言应用程序设计m.北京:北京航空航天出版社,2oo3.5 徐灵伟,刘飞.基于c/os-的嵌入式中断实现与扩展c.北京:中国控制与决策学会,2007 :999-10026 ucos51移植心得,杨屹,巨龙公司系统集成开发部 七、附录附录一附录二实物反面实物正面附录三#include .uc_os_iiincludes.hos_stk xdata task1stackcpu_max_stk_size;os_stk xdata task2stackcpu_max_stk_size;s

14、bit led1=p30;void task1(void xdata * ppdata) reentrantppdata = ppdata;led1=0;while(1)led1=led1;ostimedlyhmsm(0, 0, 0, 500);void task2(void xdata * ppdata) reentrantppdata = ppdata;while(1)snake12864();ostimedlyhmsm(0, 0, 0, 50);void interruptinitial()/* set timer. 50ms, thtl = 3caf when cpu at 12mhz

15、 */tmod |= 0x11;th0 = 0x70;tl0 = 0x00;/* tr0 is set in osstart() */et0 = 1;main()interruptinitial(); osinit(); ostaskcreate(task1, (void xdata *)0, &task1stack0,2);ostaskcreate(task2, (void xdata *)0, &task2stack0,3); osstart();#include .drivergraphcode.h#include .driverlcddriver.h#define uint unsig

16、ned int#define uchar unsigned char#define up 0x14#define down 0x44#define left 0x28#define right 0x22#define quit 0x11uchar bdata snake_flag;sbit gameover=snake_flag3;sbit food=snake_flag2;uchar num=0;uchar temp;uchar idata snake_len;uchar xdata snake2562;uchar idata snake_food2;uintmarker;ucharno_c

17、ounter;void delayms(uint x)uint i;for(;x0;x-) for(i=0;i1500;i+);uchar getkey(void)uchar col_code,row_code;p2=0xf0;if(p2!=0xf0)delayms(5);if(p2!=0xf0)row_code=0xfe;while(row_code&0x10)p2=row_code;if(p2!=row_code)col_code=(p2&0xf0)|0x0f;return(row_code)|(col_code);elserow_code=(row_code1)|0x01;return(

18、0);bit compare(uchar x,uchar y)uchar counter;for (counter=0;counter63) i=1;if(j63) j=1;while(!compare_flag);drawpoint(i,j,1);snake_food0=i;snake_food1=j;food=1;void snake_init(void)marker=0; /分数初值no_counter=0; /吃到的食物snake_len=3; /蛇长度drawpoint(31,30,1); /画蛇,位置drawpoint(32,30,1);drawpoint(33,30,1);sna

19、ke00=33; /数组中的量snake10=32;snake20=31;snake01=30;snake11=30;snake21=30;snake_flag=0x10;drawrowline(0,0,63,1);/横线drawrowline(0,63,63,1);drawcollumline(0,0,63,1);/竖线drawcollumline(63,0,63,1);putstrxy(8,0,score);/右框显示的内容printf_number(8,1,0);putstrxy(8,2,按退出键);putstrxy(8,3,退出);void snake_refresh() /刷新蛇uc

20、har k;for(k=snake_len;k0;k-) snakek0=snakek-10; snakek1=snakek-11;void snake_run(void)uchar i;snake_refresh();switch(snake_flag4)case(0x08):if(snake01=1)gameover=1;elsesnake01-;break;case(0x04):if(snake01=62)gameover=1;elsesnake01+;break;case(0x02):if(snake00=1)gameover=1;elsesnake00-;break;case(0x0

21、1):if(snake00=62)gameover=1;else snake00+;break;default:break;for(i=(snake_len);i0;i-)if(snake00=snakei0)&(snake01=snakei1)gameover=1;break;if(!gameover)if(snake00=snake_food0)&(snake01=snake_food1)food=0;snake_len+;no_counter+;marker=no_counter*100;printf_number(8,1,marker);else drawpoint(snakesnak

22、e_len0,snakesnake_len1,0);drawpoint(snake00,snake01,1);if(no_counter14)gameover=1;void snake_game(void)uchar key_code;charlcdfill( ); /显示清屏putstrxy(4,0, );putstrxy(4,1,贪吃蛇);putstrxy(4,2,by余世安);putstrxy(2,3,按任意键开始);while(getkey()=0);charlcdfill( ); /显示清屏snake_init(); /初始化doif(!food) set_food();/设置食物key_code=getkey();/判断按键switch(key_code)case 0:break;case up:if(snake_flag&0xf0)=0x40)break;snake_flag=(snake_flag&0x0f)|0x80;break;case down:if(snake_flag&0xf0)=0x80

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论