美文网首页
我做过的硬件项目: 拳皇快打游戏机

我做过的硬件项目: 拳皇快打游戏机

作者: 月牙眼的楼下小黑 | 来源:发表于2018-11-21 12:05 被阅读38次

早上在那台快要报废的笔记本里找资料,翻到了大二大三时做过的两个硬件项目。 像见到了多年未见的老朋友一样,很亲切,虽然完全看不懂做的是啥傻逼玩意儿了, 尤其是这个,满满的中二气息,不信可以看看第二节的设计内容,羞耻感爆棚。

这个游戏机应该是大二数电课设做的,我骨子里比较不羁,总想着要跟别人不一样,所以自己设计了一个题目。电路设计十分复杂, 实验器材又比较老旧,所以撘了很多次,最后一天验收时才成功了,因为态度认真,又是自己设计的课题,老师很欣赏,嘻嘻。


作 者: 月牙眼的楼下小黑
联 系: zhanglf_tmac (Wechat)
声 明: 欢迎转载本文中的图片或文字,请说明出处


1. 设计题目

从老师推荐的题目中,深受拔河游戏机 启发,想到小时候风靡一时的拳皇快打游戏,萌生利用 isp 器件设计一款“ crashfighter ”游戏机的想法,游戏面板设计如下:

2. 设计内容

  • 1). “战局显示”部分可以记录胜负,按“战局复零键”可初始化 0:0.

  • 2). 按“再来一局”键可以重新进行一局游戏,此时应该做到:

    a. 蜂鸣器响起,倒计时 3 秒,两方“战力值”(同后文提到的血气值,体力值)显示部分初始化 20.
    b. “战力指示灯”部分亮起三盏灯。
    c. 在这 3 秒内,玩家操作无效,战力值不变,战力指示灯不变。

  • 3)玩家操作按单脉冲开关模拟出拳,以己方为例,若己方出拳比对方块,自己血气值提升1,对方下降1;

  • 4).当己方战力值提升到 30,也即“满血”“满气”状态,会触发大招“定魂术”,会有如下效果:

    a.第四盏(从左往右数)指示灯亮,即“大招指示灯”,将维持 9 秒。
    b.在这 9 秒内,对方攻击无效,毫无还手之力,此谓“定魂”。
    c. 在这 9 秒内,己方出拳四次,对方减血四点,而自己体力值仅仅下降一点。

  • 5).在对方减血过程中,战力值< 20 时,第三盏灯灭;战力值小于 10 时,第二盏灯灭;战力值下降到 0 后,第一盏灯也灭。宣告本局结束,战局显示为 1:0,且此时玩家的操作无效,战力值显示不变。按“再来一局”键可以开始新的一局游戏。

3. 设计思路

采用自顶向下的设计思路,基于上述各设计内容,顶层模块设计如下:

一共有六大自定义模块:

  • CLK : 产生秒脉冲以及喇叭源信号

  • ATTACK: 产生双方计数脉冲,控制双方可逆计数器的加减

  • 定时模块: 分为 3 秒倒计时和大招 9 秒定时

  • LT_SHOW 模块:控制战力指示灯的显示

3. 1 CLK模块:

设计过程:输入试验箱提供的 100k hz 的脉冲源,利用 5 个十分频器可得到秒脉冲,由前两级分频器可得到 1k 赫兹的喇叭脉冲源,此处输出与秒脉冲的输出处理不同,是由于考虑到分频后脉冲占空比变大,若以此作为喇叭输入源,喇叭声音很小,故改用 jk 翻转触发器输出,以提高输出脉冲占空比,喇叭声音会有很大的提升。

仿真:

3.2 ATTACK模块

设计过程:采用脉冲开关来模拟出拳,利用基本 rs 触发器输出两路互补控制信号,分别控制两个可逆计数器的加减。由于触发大招时,lock1lock 中必有一个从 0 变为 1,将 lock1lock2 信号输入或门,当或门输出为 1 时,此时必定已经触发大招,将两个可逆计数器加减控制信号锁为19 秒),即两个计数器都工作在减法计数状态。将脉冲开关产生的计数脉冲进过过一次 4 分频,将得到的新脉冲和原来的脉冲一起输入数据选择器,将两个 lock1 , lock2 作为数据选择器的地址信号,根据地地址信号来决定可逆计数器此采用哪一路的计数脉冲。.

3.3 LT_SHOW模块

设计过程:战力指示灯的显示跟并行模数转换器的设计思路十分类似,一开始我效仿着利用 88 位数据比较器设计的,结果可想而知,大大地超出了资源。后来转换思路,只要关注高两位和低四位的信号高低电平变换即可,设计电路如上图,大大简化了电路.

仿真

3.4 定时模块

设计思路:因为刚刚做完电子钟的项目,并且利用延时触发器实现了其中的整点报时,喇叭鸣叫十秒的功能,一开始我也是沿用这种利用多个 D 触发器进行定时的思路,但是行不通,原因是在这种定时方案里,被延时的信号的输入必须跟秒脉冲沿同步。而我这里的两个被延时的信号 regame,kill 的输入一般情况下是不可能与计时脉冲沿同步的。冥思极久,口中喃喃念着“ 5,4,3,2,1........”突然灵光乍现,我刚刚念叨着的不就是一个减法计数器嘛!遂设计电路如上。

TIMER3 仿真

TIMER9 仿真

4. 验收演示

  • 1.开启电源,按“再来一局”键,喇叭鸣叫三秒,三秒内双方操作无效,战力值显示 20:20,战力指示灯有三盏灯亮

    验收情况:符合预期效果

  • 2 .为便于演示,一方按键明显快于另一方,己方加一,对方减1,对方战力值小于 20 时,灭一盏灯,小于 10 ,再灭一盏灯。

    验收情况:符合预期效果

  • 3. 当己方战力值达到 30 时,第四盏灯亮并维持九秒,此时对方攻击无效,不会改变战力值和战力指示灯的显示,自己攻击四次,血气值下降一点,对方下降四点。九秒过后,对方攻击解锁,攻击有效。

    验收情况:符合预期效果

  • 4. 对方战力值下降到零后,战力指示灯全灭,此时双方的操作都被锁定,战力值和战力指示灯不再改变,除非再按一次“再来一局”键。战局显示为 1:0

    验收情况:符合预期效果;基本符合预期效果,除了战局显示不正常,将战局显示部分的计数器的计数脉冲用一个测试灯接出来,发现一 局结束后确实是有一个计数脉冲到来的,但是数器就是无法计数,思考了两天都无法解决。这应该是本次课程设计中的 美 中不足之处吧。

5. 后记

我于今日(7,17)再次来到实验室,精挑细选了一块好板,重新连线,战局计数功能实现!(后附演示视频), 果然如王老师所言,原先实验板的芯片引脚功能有问题。

6. 感想收获

如何较好地利用原理图输入的方法进行数字电路设计,个人愚见总结如下:

  • 1.对基本组合逻辑模块,时序逻辑模块的功能及用途要了然于胸,这是进行数字电路设计的基础。巧妇难为无米之炊,熟知典型的功能模块,设计思路才显得有保障,有效率。

  • 2. 应充分利用“自顶向下”设计优点和层次化的设计概念。进行顶层模块设计时,注重各模块之间的联系、反馈,自定义模块设计可以比拟于 C++ 中的面向对象的思想,可先注重其行为,忽略内部的实现,而且先设计模块的 IO 口,可以起到事倍功半的效果。

  • 3. 可以看到,仅仅利用原理图设计数字电路,对于较简单的数字电路,还是能体其现直观、方便的优点的,但是,对于复杂的数字电路系统,其局限性不可避免,排线布线变得十分繁杂,电路的修改也将变得非常不方便,模块之间参数的通信也十分困难,并且这样的设计电路势必变得难以阅读。所以,数字电路的设计手段不可能仅仅局限于原理图输入这种方法,它应该有更高级,更抽象的设计方法,也就是我们即将学习的硬件描述语言。

  • 4.多与身边的同学交流,吸取其较好的设计思路,遇到问题若一时不能解决,要主动向老师寻求帮助,节省时间且能学到更多知识以及对问题的看法。
    历时两个星期的数字电路课程设计令我获益匪浅,是学以致用的绝佳途径。在这里感谢王老师,杨老师的悉心指导,感谢同学们对我的帮助。

相关文章

网友评论

      本文标题:我做过的硬件项目: 拳皇快打游戏机

      本文链接:https://www.haomeiwen.com/subject/kdbqqqtx.html