单片机打地鼠游戏设计论文

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

单片机与嵌入式系统作品设计报告

专业:电子信息科学与技术

学生姓名:xxxxxxxxxxxxxxxxxxxxxxx 学

号:201108051010,21,24 指导教师:

杨宝亮

完成日期:2013 年12 月28 日

目录

1设计任务和性能指标 (3)

1.1 设计任务............................................................................错误!未定义书签。2设计方案.. (3)

2.1任务分析 (3)

2.2方案设计 (3)

3系统软件设计 (5)

3.1LED 的随机闪亮系统 (5)

3.2按键比较系统 (5)

3.3数码管显示系统 (5)

3.4LED 灯与按键比较设图 (5)

3.5定时器0 及中断响应 (6)

4仿真及性能分析 (6)

4.1仿真结果图 (6)

4.2仿真结果与分析 (6)

5 心得体会 (7)

参考文献........................................................................................................................9 附录1 程序清单 (9)

1 设计任务

1.1 设计任务

利用单片机完成打地鼠的程序设计

1. 基本要求

(1)将LED灯的随机状态表示出来

(2)将按键赋予对应的数值

(3)做出LED灯亮后的延时

(4)能够自己输入生命值和随机次数并在数码管上显示

(5)当随机LED灯亮后,按键赋予的值与之比对正确后加一分错误建生减值

(6)当生命值为零时程序停止并显示分数

2 设计方案

2.1 任务分析

模拟打地鼠就是使用单片机来控制一些LED 、按键和数码管,模拟真实打

地鼠场景,分数和生命值显示时间等。

2.2 方案设计

1.硬件方案

根据设计的要求可知,系统的硬件原理框图如图 5.2 所示。

图 5.2 系统的硬件原理框图

单片机可选用AT89C51,它与8051 系列单片机全兼容,但其内部带有4KB 的FLASH ROM,设计时无需外接程序存储器,为设计和调试带来极大的方便。南北向和东西向各采用2 个数码管计时,同时需要对该方向的指示灯的点亮时间进行倒计时。键盘系统可以根据系统的需要设置不同的键的个数,可以选择线式键盘或矩阵式键盘,若单片机的IO 口不够用时,可以考虑扩展8255 或8155 满足系统的要求。

2. 软件方案

根据设计要求,程序框图如图 5.3 所示。软件可由汇编语言完成,也可由

C 语言完成。软件设计可以分为以下几个功能模块:主程序:初始设置LED

显示及键盘判断和数码管显示。

计时程序模块:延时程序显示程序模块:完成16 个发光二极管和 4

个LED 数码管的显示驱动。

键盘扫描程序模块:根据随机LED 灯的显示判断按键的按下。

主程序流程图

3 系统软件设计

3.1:LED 的随机闪亮系统,通过LED 随机亮灭来模拟地鼠的随机状态。通过随机函数选取随机数,导入单片机让LED 灯能够随机闪亮。

3.2:按键比较系统,通过先给按键赋予初值,然后通过LED 的亮灯的序号与之比对是否是对应的LED 得分按键

3.3:数码管显示系统,比较过后通过数码管来显示的分值与生命值。通过先打开位数开关,然后倒入显示的数来表示生命值与分值

3.4:LED 灯与按键比较设计流程图

3.5:定时器0 及中断响应

4.仿真与性能分析4.1 仿真结果图

5.2 仿真结果

当通过数码管赋予生命值与随机次数后(第一个数码管为生命值,后三位为次数),LED灯开始随机闪亮。当按下开始对应的键后,数码管后三位开始显示分数。当生命值(英译:Health Point )为零时或者随机次数为零时结束并显示最后得分。

开始

赋予生命初值3 与随机次数10

过程

结果

5 心得体会

这次单片机课程设计历时三个星期的时间,在这三个星期里我们体验了从设计、画板、编程到调试的整个过程,让我们小小的体验了一次工程师的感觉。

计划好设计方案后就开始画电路图,画好就开始进一步的确认。确认电路图无误后就开始依照设计流程图设计学出对应的程序,其中最大的问题就是随机函数的调用不知道如何去写,于是我们开始上网查找资料,几次试验后终于写出了随机函数成功的让了LED 灯随机的亮了起来,接下来的按键对比与数码管的显示就比较好了,几次调试后也能后很好的工作。然后将几个板块最合在一起,修修改改后让他完美的结合在一起。

这三周的时间说轻松也不轻松,说紧张却稍带着愉快的气氛,整个过程应该是充实的,时而惊喜,时而烦闷特别是最后调试阶段有一块调通了都会让我们高兴不已,当卡在某处时也确实是让人抓狂。总之通过这次课设,我们不但复习了过去所学,并且学到了一些新东西。更重要的是通过这一次切身实践,才使我们真正将理论与实际结合起来,并且遇到了很多实实在在的需要我们亲自解决的问题。通过解决这些问题,我们处理实际问题的能力有了很大提高,积累了我们的实践经验,以便为以后打下牢固的基础。而这些才是我们作为一名工科学生最宝贵的财富。

参考文献

百度随机函数的调用

附录 1 程序清单

#include

#include

#include #define

uchar unsigned char uchar

code led[]={

0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,

0x0f,0x1f,0x2f,0x3f,0x4f,0x5f,0x6f,0x7f,0xff};

uchar code table[]={

0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

uchar code num[]={ 0xe0,0xd0,0xb0,0x70}; int

n=0,m=20,a,b,c,d,k,score,j; int button=16;

void DelayTime_10ms(unsigned int DelayValue)

{ unsigned int a,b;

for(a=0;a

for(b=0;b<1827;b++);

} void

l ightseg()

{

int i,j;

for(i=0;i<25;i++)

for(j=0;j<1;j++)

{

P2=num[3];P0=table[a];DelayTime_10ms(1);P2=0xff;

P2=num[2];P0=table[b];DelayTime_10ms(1);P2=0xff;

P2=num[1];P0=table[c];DelayTime_10ms(1);P2=0xff;

P2=num[0];P0=table[d];DelayTime_10ms(1);P2=0xff;

} } void

l ightseg_0()

{

P2=num[3];P0=table[a];DelayTime_10ms(1);P2=0xff;

P2=num[2];P0=table[b];DelayTime_10ms(1);P2=0xff;

P2=num[1];P0=table[c];DelayTime_10ms(1);P2=0xff;

P2=num[0];P0=table[d];DelayTime_10ms(1);P2=0xff;

} void

butt()

{ int i=1; unsigned char

Temp=0; while(i)

{

lightseg_0();

P3=0xfe;

相关文档
最新文档