单片机系统综合课程设计模拟射击游戏

上传人:仙*** 文档编号:79396983 上传时间:2022-04-23 格式:DOC 页数:28 大小:293KB
收藏 版权申诉 举报 下载
单片机系统综合课程设计模拟射击游戏_第1页
第1页 / 共28页
单片机系统综合课程设计模拟射击游戏_第2页
第2页 / 共28页
单片机系统综合课程设计模拟射击游戏_第3页
第3页 / 共28页
资源描述:

《单片机系统综合课程设计模拟射击游戏》由会员分享,可在线阅读,更多相关《单片机系统综合课程设计模拟射击游戏(28页珍藏版)》请在装配图网上搜索。

1、 沈阳航空航天大学课 程 设 计 报 告课程设计名称:单片机系统综合课程设计课程设计题目: 模拟射击游戏院(系):计算机学院专 业: 计算机科学与技术班 级: 24010101学 号: 2012040101028姓 名: 指导教师: 说明:结论(优秀、良好、中等、及格、不及格)作为相关教环节考核必要依据;格式不符合要求;数据不实,不予通过。报告和电子数据必须作为实验现象重复的关键依据。沈阳航空航天大学课程设计报告 学术诚信声明 本人声明:所呈交的报告(含电子版及数据文件)是我个人在导师指导下独立进行设计工作及取得的研究结果。尽我所知,除了文中特别加以标注或致谢中所罗列的内容以外,报告中不包含其

2、他人己经发表或撰写过的研究结果,也不包含其它教育机构使用过的材料。与我一同工作的同学对本研究所做的任何贡献均己在报告中做了明确的说明并表示了谢意。报告资料及实验数据若有不实之处,本人愿意接受本教学环节“不及格”和“重修或重做”的评分结论并承担相关一切后果。 本人签名: 日期: 2015 年 7 月 10 日沈阳航空航天大学课程设计任务书课程设计名称单片机系统综合课程设计专业计算机科学与技术学生姓名王圣和班级24010101学号2012040101028题目名称模拟射击游戏起止日期2015年6月29日起至2015年7月10日止课设内容和要求:了解射击游戏的原理,模拟一个射击游戏。具体内容如下:

3、1游戏至少分简单、中等、复杂三种级别,预先设计三种级别中猎物每次出现的数量(最多四个)、方向、移动的速度、停留的时间等; 2可以自选游戏级别,游戏开始时猎物出来,即单色灯依次亮灭。此时,如果游戏者的按键和小灯的位置相同,即代表打中,计分牌加1分(单色灯的位置右分别为0到7);3 键盘上设置暂停键、结束键、开始键等,并在游戏进行过程中显示得分数.二、课程设计要求1独立完成课程设计任务;2通过老师当场验收;3交出完整的课程设计报告。参考资料:1 张毅刚,刘杰. MCS-51单片机原理及应用M. 哈尔滨:哈尔滨工业大学出版社,20082 高 锋. 单片微型计算机原理与接口技术M. 北京:科学出版社,

4、20073 胡汉才. 单片机原理及其接口技术M. 北京:清华大学出版社,2004教研室审核意见: 教研室主任签字:指导教师(签名)年月日学 生(签名)年月日课程设计总结:通过两周的课程设计,让我感受最深的就是学习是一种乐趣。从拿到任务书起,充分利用网络及图书馆等资源,查询资料,了解单片机的编程原理以及实验箱的原理。在之前专业课理论知识的基础上,我们又从模糊到熟悉逐渐了解了什么是单片机编程。在实现的过程中发现我发现自己的理论知识的不足,同时所学的知识掌握不牢固,就是通过这次课程设计,不仅拓宽了我的知识面,还巩固和夯实了所学的理论知识,同时纠正了一些知识点上的错误认识和理解。其次,有一些问题,当我

5、们一个人面对的时候可能怎么都想不明白,可是当我们跟其他人一起探讨时,好多时候,问题都迎刃而解,可见团队合作的重要性,而且我们要养成谨慎,认真,踏实,有耐心,坚持的作风,尤其是要亲自动手去做,没有付出是不会有回报的。回顾这两周的课设,我学会了单片机编程的一些功能的使用,但只是一小部分而已,我此后将继续研究这么一个强大的工具。对于仿真软件的使用,非常有成就感,极大的激发了我们对新鲜事物学习的兴趣,从而以积极的心态去面对这次课程设计。最后,非常感谢老师的细心指导,让我能开阔我的思路,让我对问题有更深刻的认识,锻炼了我的解决问题的能力,对我以后无论是学习还是其他方面的能力都有了很大的提高。目 录1 总

6、体设计方案11.1 设计需求11.2 设计环境11.3 设计原理11.3.1 设计思路21.3.2 键盘扫描原理22 详细设计方案32.1 硬件及软件使用32.2 软件的设计32.1.1 主程序设计32.1.2 L1程序设计32.1.3 L2、L3程序设计52.1.4 键盘程序设计73 结果测试及分析83.1 结果测试83.2 结果分析9参考文献10附 录(关键部分程序清单)11 23 沈阳航空航天大学课程设计报告 1 总体设计方案1.1 设计需求 通过了解射击游戏的原理,利用LAB8000实验箱上的MSC51单片机系统、键盘、数码管和LED 灯模拟射击游戏的运行过程。用点亮的LED彩灯表示猎

7、物的当前位置,键盘数字键07对应8个LED灯用来表示射击猎物的位置,数码管显示当前的游戏当前分数。要求设计游戏能按以下工作方式运行: (1)游戏至少分为简单、中等和复杂三个级别,预先设计三种级别中猎物 每次出现的数量(最多四个)、方向、移动的速度、停留的时间等; (2)可以自选游戏的级别,游戏开始时猎物出来,即单色灯有序地依次亮灭。此时,如果游戏者的按键和小灯的位置相同,即代表打中,记分牌加1分; (3)键盘上设置暂停键、结束键、开始键、并在游戏进行过程中显示得分。1.2 设计环境本次课程设计所采用芯片,系统设计所需硬件都已集成于LAB8000实验箱上。LAB8000实验箱一款紧凑、快速调试数

8、字电路设计强有力的便携式逻辑分析仪;实验箱包括MSC-51、80C196、8088/86、ARM、PIC57五种MCU;键盘、LCD、数码管,LED等外部设备,以及各种传感器;高速的USB2.0接口、高端的FPGA、强大的ARM处理器等组成的嵌入式系统全方位智能控制;高速、高效、高性能,帮你轻松搞定问题。先使用软件使用Keil uVision3,并用 80C51单片机的C语言进行编程,然后在试验箱上进行实验。1.3 设计原理采用键盘扫描技术,实现矩阵键盘的扫描、延时去抖和对键盘输入数据的自动识别;通过MCS-51单片机的I/O接口实现对8个LED灯亮灭的循环控制;通过MCS-51单片机自身的定

9、时器进行数码管的定时刷新显示;通过软件编程,实现对射击游戏的具体运行过程的控制。1.3.1 设计思路 (1)通过MCS-51单片机点亮的LED灯表示猎物的位置,键盘数字键07对应8个LED灯用来表示射击猎物的位置,A表示游戏开始,B表示游戏暂停,C表示游戏结束。 (2)用MCS-51的P1口保存当前猎物的位置值,按照设定的速度不断变化,在设定的停留时间将其转换成LED灯的亮灭显示。 (3)通过键盘读出键值,比较两位置值是否相等,如果相等这表示射击击中猎物同时加1分,否则不击中,继续等待新的键入判断。 (4)在游戏的过程中可以通过按功能键实现游戏的开始、暂停、结束。1.3.2 键盘扫描原理 键盘

10、扫描程序采用逐列扫描的方式进行,具体算法如下:(1)判断键盘是否闭合:通过扫描键盘的行地址的KEY0KEY3进行扫描若全为,则键盘上无闭合键;若不全为,则有键处于闭合状态。(2)消除键的机械抖动:判别键盘闭合后,延迟一段时间后再判别键盘的状态,若仍有键闭合,则认为键盘上处于一个稳定的闭合期,否则为键盘的抖动,不进行读值处理。(3)获取闭合的键号:对键盘的列线进行逐列扫描,依次输入0XFB, 0XF7, 0XEF, 0XDF,即只有一列为低电平,其余各列为高电平。然后,读取键盘的行值,若该行有键按下则该行为低电平,其余为高电平,从左往右03列,从下往上03行。因此,闭合的键号为:N=行号+列号*

11、4。 (4)使CPU对键的一次闭合仅作一次处理,利用等待闭合键释放后再做处理的方法。沈阳航空航天大学课程设计报告 2 详细设计方案2.1 硬件及软件使用本设计中用到的硬件有LAB8000实验箱上的小键盘、八段数码管,以及8个LED灯。将试验箱上CS0口与KEYLEDCS口相连而单片机的P1.0P1.7分别与LED灯的L0L7相连;通过Keil uVision3软件进行程序的编写8051C语言程序,并通过其进行与试验箱互联,进行程序的运行与调试工作,详细电路图见图2.1所示。2.2 软件的设计 软件的设计分为主程序设计、游戏等级程序设计、及键盘程序设计3部分组成。2.1.1 主程序设计主程序入口

12、循环检测键盘是否有键入,没有按键则等待按键键入,表示还没有选择游戏等级,不能开始游戏。游戏者需要先选择1、2、3三个游戏等级,然后键入A可以开始相应等级的游戏。,选择不同的等级将分别用L1、L2、L3程序来处理。在游戏的过程中可以同按B键进行暂停,通过按C键退出相应的游戏等级并通过选择进入下一个游戏等级,流程图如2.1所示。2.1.2 游戏等级1(L1)程序设计 L1程序是游戏的第1等级。主要实现对一个猎物的控制。P1端口连接8个LED灯,由于LED灯低高平有效,通过P1端口送出8位二进制数,即可以实现对8个LED灯亮灭的控制。用P1保存要通过LED灯显示的猎物的位置值,通过查表及定时器方式来

13、实现猎物的数量(最多四个)、方向、移动的速度、停留的时间等,通过不断的查询是否有键盘输入的值与P1口当前的值是否相同来判别是否打中猎物。如果打中则等分加一,否者不得分,程序的流程图如图2.2所示。 图2.1 电路原理图 开始等待按键输入游戏等级否输入1、2、3是否等待按键输入开始 输入A L3程序L2程序 L1程序否等待按键输入输出得分输入C 结束 图2.2主程序流程图2.1.3 游戏等级2、3(L2、L3)程序设计 L2程序是游戏的第2等级。主要实现对多个猎物的控制和对猎物移动方向的控制。用P1保存要通过LED灯显示的猎物的位置值,通过查表及定时器方式来实现猎物的数量、方向、移动的速度、停留

14、的时间等,通过不断的查询是否有键盘输入的值与P1口当前的值是否相同来判别是否打中猎物。如果打中则等分加一。 L3与L2结构基本相同,不同在于查表的值不同,L3用通过查表实现同时出现了四个猎物。通过对猎物出现的的时间的控制来实现了对猎物的移动速度的控制。 开始 输出当前猎物的位置到P1口 等待键盘的输入是 得分加一判断输入是否与P1相等输入C判断是否输入B、C 结束输入B等待键盘的输入输入C 判断输入A、C输入A 图2.3 L1程序流程图2.1.4 键盘程序设计 键盘扫描程序采用逐列扫描的方式进行,通过两次判断是否有键按下来消除机械抖动。依次向8002地址中输入BUFFER4 = 0XFB, 0

15、XF7, 0XEF, 0XDF;,然后读取键盘的行值,若该行有键按下则该行为低电平,其余为高电平,从左往右03列,从下往上03行。因此,闭合的键号为:N=行号+列号*4,流程图如图2.3所示。 开始 依次向8002中输入BUFFERJ TEMP = 0X01;J=0;I=0; J4否是 I4J+ I+否 key&temp key&temp是否是 return (i+j*4); 结束 图2.4 键盘程序流程图 沈阳航空航天大学课程设计报告 3 结果测试及分析3.1 结果测试程序编译连接完成之后,对课程设计要求的各项内容进行测试,按射击游戏控制系统连线图连接好电路以后,把程序编译下载到机器中运行。

16、运行的的测试案例如表3.1所示。 表3.1 测试表操作LED显示 得分 备注11111111 按1键11111111选择游戏等级1按A键11111111 00开始游戏00010000 0000000010 00按3键00001000 01打中按3键00010000 01没打中按7键10000000 02打中00001000 02按B键00001000 02暂停00001000 02暂停00001000 02暂停按A键00100000 02开始按C键00000000 00退出按2键00000000 00选择游戏等级2按A键00000000 00开始游戏10000100 00按7键10001000

17、 01打中按B键01001000 01暂停01001000 01按A键10010000 0111000000 01按C键00000000 00退出按3键00000000 00选择游戏等级3按A键00000000 00开始01101010 00按4键01011010 01打中按B键11010010 01暂停11010010 01按A键11001010 01按C键00000000 00退出经过多次循环测试,程序可实现如下功能:(1) 通过选择游戏等级,进入不同的等级游戏。(2) 在猎物移动过程中,游戏者可以射击猎物,如果击中分数加1分,否则不得 分。(3)在游戏过程中,可以随时暂停游戏,结束暂停,

18、结束游戏。3.2 结果分析按照课程设计的要求,游戏的各项功能基本得以实现。由于LAB8000实验箱对于芯片的集成度较高,外部的连线相对较少。在读入按键键值时,可能是键盘硬件的原因,某些情况下键盘响应时间不可忽略。由于键盘采用查询方式会造成延时,对于这种程序上设计的缺陷,本应该将判断键值的程序用中断实现,可以消除这种时间的不同步,但是考虑处理器执行指令速度较快上述情况发生的概率很小,并没有改变程序的设计思路。沈阳航空航天大学课程设计报告 参考文献1 张毅刚,刘杰. MSC-51单片机原理与应用M. 哈尔滨:哈尔滨工业大学出版社,20082 高峰. 单片微型计算机原理与接口技术M. 北京:科学出版

19、社,20073 胡汉才.单片机原理及其接口技术M. 北京:清华大学出版社,20044 郭天祥.新概念51单片机C语言教程M.北京:电子工业出版社,2009.5 张迎新单片机初级教程单片机基础M北京航空航天出版社,20066 江世明,黄同成单片机原理及应用M中国铁道出版社,2010沈阳航空航天大学课程设计报告附 录(关键部分程序清单)#include #include #define uchar unsigned char#define uint unsigned int xdata uchar key _at_ 0x8001; xdata uchar led _at_ 0x8002;xdata

20、 uchar dat _at_ 0x8004;uchar code keytable16=0x0d,0x0c,0x0b,0x0a,0x0e,0x03,0x06,0x09,0x0f,0x02,0x05,0x08,0x00,0x01,0x04,0x07;/键盘值表uchar code LEDtable16=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;/七段显示码uchar code Ltable18=0x80,0x02,0x08,0x10,0x40,0x01,0x04;/L1 表uc

21、har code Ltable28=0x81,0x12,0x48,0x14,0x42,0x21,0x44;/L2 表uchar code Ltable38=0x33,0x87,0x72,0x8e,0x35,0x59,0xc5;、/L3表uint Leds2;uchar num=0;uchar scores=0;uint k2;uchar k,k1=0;uchar i,j,temp;uchar t;uchar k4;uint f2=0;uchar Buffer4 = 0xfb, 0xf7, 0xef, 0xdf;/存放键盘的列值void delay(uint p)、/延时1ms int i,j;

22、 for(i=0;ip;i+) for(j=0;j124;j+) ; uint getkey()/获取键值 uchar i,j,temp; uchar Buffer4 = 0xfb, 0xf7, 0xef, 0xdf; for(j=0; j4; j+) led = Bufferj;temp = 0x01; for(i=0; i4; i+)if(!(key&temp) while(key!=0x0f);delay(10);return (i+j*4);temp = 1; void Time0_Init() 定时器、/定时器初始化 TMOD=0x11; TH0=0x8C; TL0=0xb0; EA

23、=1; PT1=0; ET0=1; TR0=1; TH1=0x3C; TL1=0xb0; ET1=1; TR1=1;void timer() interrupt 1 /定时器0的计数程序 TH0=0x8c;TL0=0xb0;EA=0;num+;EA=1;void timer1() interrupt 3 /数码管显示程序 TH1=0x1c;TL1=0xb0;led=0x20; t=0x20; for(i=0;i=1; delay(26); void jianpan(uint k4) /键盘判断程序 int flag=0;uchar b;f2=0; if(k4=0x0c) scores=0; f

24、2=1; Leds0=scores/10; Leds1=scores%10; return; if(k4=0x0b) flag=1;TR0=1; if(k4=0x00) b=0x01; if(P1&b) scores+; Leds0=scores/10; Leds1=scores%10; if(k4=0x01) b=0x02; if(P1&b) scores+; Leds0=scores/10; Leds1=scores%10; if(k4=0x02) b=0x04; if(P1&b) scores+; Leds0=scores/10; Leds1=scores%10; if(k4=0x03)

25、 b=0x08; if(P1&b) scores+; Leds0=scores/10; Leds1=scores%10; if(k4=0x04) b=0x10; if(P1&b) scores+; Leds0=scores/10; Leds1=scores%10 ; if(k4=0x05) b=0x20; if(P1&b) scores+; Leds0=scores/10; Leds1=scores%10; if(k4=0x06) b=0x40; if(P1&b) scores+; Leds0=scores/10; Leds1=scores%10; if(k4=0x07) b=0x80; if

26、(P1&b) scores+; Leds0=scores/10; Leds1=scores%10; while(flag) k2=getkey(); k4=keytablek2;/TR0=0;if(k4=0x0a) flag=0; TR0=1; break;if(k4=0x0c)flag=0;return; void start() /L1开始程序 uchar s=0;Time0_Init();while(1) k2=getkey(); k4=keytablek2; jianpan(k4); if(num=20) num=0;s+;P1=Ltable1s%8; if(f2=1) return;

27、 void Lever1() /L1主程序 uchar k3;while(1) k2=getkey(); k3=keytablek2; if(k3=0x0a) start();return; else if(k3=0x0c) return; void start1()/L2开始程序 uchar s=0; Time0_Init();while(1) k2=getkey(); k4=keytablek2; if(num=20) num=0;s+;P1=Ltable2s%8; jianpan(k4); if(f2=1) return; void Lever2() /L2主程序 uchar k3;wh

28、ile(1) k2=getkey(); k3=keytablek2; if(k3=0x0a) start1();return; else if(k3=0x0c) return; void start2() /L3开始程序 uchar s=0; Time0_Init();while(1) k2=getkey(); k4=keytablek2; if(num=20) num=0;s+;P1=Ltable3s%8; jianpan(k4); if(f2=1) return; void Lever3() /L3主程序 uchar k3;while(1) k2=getkey(); k3=keytablek2; if(k3=0x0a) start2();return; else if(k3=0x0c) return; void main() while(1) k1= getkey(); k=keytablek1; if(k=0x01|k=0x02|k=0x03) 、/选择游戏级别 switch(k) case 0x01:Lever1();P1=0x00;break; case 0x02:Lever2();P1=0x00;break; case 0x03:Lever3();P1=0x00;break;

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!