当前位置:首页 > 工业控制 > 电路设计项目集锦
[导读]在本次演示中,我们将拆解这个电路,并解释其各个部分的工作原理。但首先,让我们先介绍一下Logisim。它是一款能够帮助我们创建数字逻辑并模拟其运行过程的应用程序。我之前已在教程《使用Logisim进行逻辑设计》中详细讲解过Logisim。你可以在这里找到Logisim应用程序,它是免费的!

上方视频仅展示了该游戏的输入和输出,所有游戏逻辑都被封装在子电路中。实际的游戏电路如下所示:

在本次演示中,我们将拆解这个电路,并解释其各个部分的工作原理。但首先,让我们先介绍一下Logisim。它是一款能够帮助我们创建数字逻辑并模拟其运行过程的应用程序。我之前已在教程《使用Logisim进行逻辑设计》中详细讲解过Logisim。你可以在这里找到Logisim应用程序,它是免费的!

这款游戏本可以使用微控制器来实现,其中涉及的逻辑也会简单得多。但有趣的是,仅用标准的数字逻辑元件,我们能完成多少令人惊叹的功能。

分析电路

LED矩阵

让我们从上图中的电路部分开始。黑色方框是Logisim自带的LED矩阵,尺寸为15×15个正方形LED灯。在其右侧有15个输入端口,分别对应每一行的LED。每个输入端口宽15位,用于表示该行每个LED的开启或关闭状态。最下面一行是用户来回移动的位置,稍后我们会详细说明。最上面一行则是目标的生成位置,这一点我们也会很快谈到。

如图所示,中间的13行由一个15位宽的16级移位寄存器控制。当在最左侧寄存器的任意一个15位中输入逻辑“1”,该信号就会进入移位寄存器的输入端,并在屏幕底部第二行的一个位置显示为亮起的LED灯。我们的时钟设置为每秒128个脉冲,并连接到该移位寄存器,因此亮起的LED灯会从屏幕底部迅速向上移动。

操纵杆

在上图中,我们看到的是操纵杆以及它如何使玩家在LED矩阵的最下一行来回移动。操纵杆输出两个4位数,分别表示水平位置和垂直位置,范围为1至15。其中,上方的数字显示水平位置,下方的数字显示垂直位置。稍后我们将讨论垂直定位的问题,但在此我们可以看到水平位置是如何被处理的。为了使操纵杆在LED矩阵的底行上持续跟踪,我们需要将这些数字通过解码器进行转换,将其转化为15个独立比特中的一个。但我们还需要反转顺序,并将输出向左移动一位,以得到一个在0到14之间的输出值,使其与LED显示屏上的摇杆运动方向一致。

在右下角,你可以看到我们从摇杆获取水平数值,对其进行取反操作,然后减去1。这类似于我们在经过解码器后对数字所做的处理,但此时仍保持为4位数。稍后你会看到,这个数字被用来将我们的小球朝正确的列发射到目标位置。

弹射装置

上述电路的这一部分才是真正控制弹射装置的。它可能是整个电路中最难解释的部分。我们先从中间的两个4位与门开始。上方的与门检测到摇杆完全向下拉时,会将D触发翻转器设置为左侧状态。下方的与门则类似地检测到摇杆松开并回到中心位置。最左边的第三个与门同时检测到这两个事件快速连续发生,其输出变为高电平,表示已发射一次射击。这会导致两件事发生。首先,用户弹弓的位置被锁入最右侧的寄存器中;其次,左侧的移位器会接收到一个“一”或“高”信号。其移动的位数由左侧寄存器刚刚锁入的数字决定,从而在移位寄存器的正确位置注入一个“一”,以反映弹弓的发射位置。

设定目标和难度等级

在上方可以看到控制目标移动的电路部分。顶部的ROM用于存储目标的位置信息,使目标以重复的模式移动、消失并重新出现。该模式变化由一个计数器控制,该计数器设置ROM中的地址。这个计数器的时钟来自另一个计数器,它将主时钟除以32、64或128,其中128用于简单模式下缓慢调整目标位置,而32则用于困难模式下非常快速的变化。一个多路复用器选择向ROM发送哪个时钟信号。底部的与门仅在难度计数器达到3时重置其值,使其循环为0、1、2。

得分

在上方是处理得分的电路部分。可以看到ROM的输出被传输到显示屏的上一行。同时,最左侧的移位寄存器驱动着显示屏的第二行。与门对这两个15位信号进行逻辑与运算。只要其中一个位变为高电平,就会触发目标命中信号。门后位寻址器的输出在与门输出中任意一位为高电平时会变为高电平,其输出信号将进入命中计数器。类似地,另一个电路用于检测第二行中无命中情况的球体,这会被记录为一次未命中。最后,这两个小型子电路将二进制得分转换为两位BCD码,并驱动十六进制数码显示。

最终思考

从数字逻辑设计的角度来看,这个项目既有趣又富有挑战性。我们本可以做更多改进,例如增加难度等级或使用更大的LED矩阵等,以提升整体体验。

目前我们设置的三个难度级别差异明显:简单难度过于容易,而困难难度则需要记忆存储在ROM中的目标移动模式才能实现(因为模式仅前8次重复)。Logisim 能让你轻松创建非常复杂或昂贵的组件,这些组件在实际硬件中可能并不实用。例如,那个16级、15位的移位寄存器实际上需要30个集成电路——每个都是8级、1位的移位寄存器!

尽管如此,这仍是一个很好的演示,展示了仅用标准逻辑元件和没有CPU的情况下所能实现的功能!

本文编译自hackster.io

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
关闭