恒美微站
首页
关于我们
建站服务
主题模板
案例展示
资讯中心
联系我们
投弹游戏机数电课设:计数器、触发器与比较器实现完整数字系统
首页
资讯中心
/
投弹游戏机数电课设:计数器、触发器与比较器实现完整数字系统
投弹游戏机数电课设:计数器、触发器与比较器实现完整数字系统
发布时间:2026/9/6 20:08:16
简介一份面向数字电子技术课程设计的完整投弹游戏机设计文档适合高校电子、自动化等专业学生参考尤其适用于课程设计选题为“投弹游戏机”的读者。文档以任务书、鉴定表、目录、前言和正文章节的形式完整呈现了基于555定时器、CD4017计数器和CD4001门电路的投弹游戏机设计全过程涵盖系统整体设计、方案选择、系统组成及工作原理、仿真与调试、结果分析等模块并对LED顺序点亮、移动速度可变、投中后发出1000Hz庆贺声等核心功能给出了明确实现思路。资源包仅含1个doc文档大小206KB内容结构清晰覆盖设计原理、Multisim仿真分析、制作调试过程与设计总结便于读者快速掌握从电路原理到系统实现的完整脉络。该文档已有205人学习下载适合需要完成数电课程设计任务或理解数字逻辑电路实际应用的人群使用。 数电课程设计题目里投弹游戏机属于看着像玩具、实际上最考基本功的那一类。任务描述通常就一句话设计一个能模拟投弹命中目标的数字逻辑游戏。但真动手以后你会发现这句话背后藏着一整套完整的小型数字系统——要用计数器制造一个会来回跑的目标要用比较逻辑判断炸弹和目标是否撞在一起还要用触发器管住整个游戏的开始、飞行和结束。说穿了它考评的就是你把现实规则翻译成组合逻辑和时序逻辑的能力这也是数电课设最有价值的地方。这篇文章把我做这个题目时的完整思路、芯片选型、关键电路和踩坑记录都整理出来照着做能出实物也足够应付答辩时老师的连环追问。1. 先把投弹游戏翻译成数字电路的四种信号1.1 游戏规则定稿与信号映射我做的版本规则如下你可以根据自己的想法增减难度8个LED排成一行编号0到7绿色灯是目标红色灯是炸弹。目标灯在LED上来回移动速度快慢由时钟决定。玩家按一次投弹键红色炸弹灯从0号位出发向右逐格飞行。炸弹飞行的途中如果某一刻和目标灯出现在同一格判定命中屏幕分数加1。炸弹飞到7号位还没命中判定落空扣一条命。初始3条命扣完游戏结束。把规则翻译成电路信号本质就是四件事。目标位置是一个随时间变化的数范围0到7所以用计数器输出三位二进制数。炸弹位置是另一个从0往7增长的数也用计数器。两个位置相等就是两个三位二进制数相同交给组合逻辑比较。能不能投弹则取决于炸弹是不是正在飞行这是一个只有两种状态的状态信号用触发器锁存。课程设计答辩时老师最爱问的第一个问题通常是你拿计数器、触发器、比较器这些器件怎么对应游戏里这些元素上面这套映射就是标准答题框架。1.2 系统模块划分与器件选型总览整个系统可以切成几个清晰的模块我给出一份直接能用的器件清单模块推荐芯片作用时钟源NE555产生基础方波信号目标移动74LS191可逆计数器让目标在0~7之间来回目标显示74LS1383-8译码器驱动目标LED炸弹移动74LS1614位二进制计数器复用低3位炸弹显示74LS1383-8译码器驱动炸弹LED投弹状态74LS74D触发器锁存飞行中/空闲状态命中比较74LS854位比较器判断两个位置是否相等计分与生命74LS192 × 2可逆计数器分别做加分和减命数码管驱动74LS47 × 2BCD码转七段码驱动共阳数码管辅助逻辑门74LS08、74LS32、74LS04、74LS266组合逻辑配合这里要特别说明为什么用74LS系列而不是CMOS的74HC系列。74LS是TTL逻辑驱动能力对LED和面包板都友好价格便宜实验室库存最常见课程设计的焊接和调试资料也基本都以它为例。唯一要注意的是TTL输入悬空时会呈现高电平这在后文调试章节会专门说。2. 会来回跑的目标可逆计数器如何制造移动光点2.1 为什么选计数器加译码器而不是移位寄存器很多初学者第一反应是用移位寄存器做流水灯让那个1在灯排上跑来跑去。这个思路不是不行但有一个致命问题移位寄存器输出的是一堆并行的位置信号你要判断炸弹和目标是不是同一格还得把这些位置信号重新编码成二进制数才能比较多绕一步。计数器方案就聪明得多。计数器天然输出二进制数目标在哪一格直接编码在QA、QB、QC三根线上。后续命中判定拿这三根线和炸弹的三根线直接做比较干净利落。显示端用一片74LS138把二进制编码展开成8个独立位置信号LED自然就亮起来了。所以计数器加译码器是这个题目里面最顺手的结构。2.2 用74LS191实现目标来回折返如果只是让目标从0循环到7再跳回0用74LS161就够了但游戏体验很差目标没有任何预判难度。我建议用74LS191可逆计数器让目标在0到7之间来回折返动作更自然玩家也必须看准目标运动方向再出手。74LS191的方向控制端是U/D低电平加计数高电平减计数。所以核心问题是在什么条件下切换方向答案写在位置边界上当计数器的值等于0时下一步必须加计数当值等于7时下一步必须减计数。位置0的判断用或非门组合QA、QB、QC全为0时输出1位置7用三输入与门三个位全为1时输出1。这两个信号控制一个D触发器记录当前方向触发器的输出直接接到191的U/D端。有人会问直接让U/D由0和7的组合逻辑驱动不是更省吗不行因为如果既不在0也不在7方向要保持上一个状态必须用触发器锁存。这里有个细节坑容易踩方向切换必须用组合逻辑立刻生效不能等下个时钟沿再变。如果方向信号晚一个周期才翻转计数器走到0之后又加回1看起来就像在边界卡了一下。解决办法是让0/7检测电路直接进入方向触发器的D端或异步置位复位端一旦边界条件成立就立刻换向。2.3 目标显示的译码与LED接法计数器输出的三位二进制数送入74LS138的A、B、C输入端138会把对应的输出脚拉低。很多同学第一次接LED时习惯把LED阳极接输出脚结果发现灯不亮或者全亮原因就是没搞清138的输出极性。74LS138的输出是低电平有效也就是说选中的那一脚输出低电平其他脚高电平。所以LED必须这样接LED阳极接VCC经过一个330欧姆限流电阻阴极接译码器对应输出脚。低电平从LED阴极灌入构成通路灯亮。反过来的接法只有某些特殊的驱动芯片才适用。目标移动的时钟频率我建议从1Hz到5Hz可调用NE555配合可调电阻实现。太慢像死机太快玩家根本反应不过来调到一个看着想打又容易打偏的节奏最合适。3. 投弹时机怎么控制消抖、状态锁存与使能端3.1 按键消抖的三个方案与取舍机械按键按下和松开的时候触点会来回弹跳十几毫秒。如果不做处理你按一次投弹键系统可能判定成按了三次甚至更多炸弹乱飞分数乱跳。这个问题在纯仿真里永远不会暴露一到实物焊接阶段就原形毕露。我试过三种消抖方案第一种是RC低通消抖按键输出接一个100纳法到1微法的电容到地再加一个上拉电阻信号经过施密特触发器整形后送入后级。优点是电路简单缺点是效果取决于按键弹跳时间遇到劣质按键容易消不干净。第二种是D触发器单脉冲方案。按键信号作为D触发器的时钟或者异步置位端触发后Q输出正好是一个时钟周期宽的脉冲。这个方案比较数字答辩时讲原理也清晰。第三种是用NE555搭单稳态电路按键触发后输出一个固定宽度比如50毫秒的低电平脉冲。这个方案对抖动完全不敏感因为单稳态的暂稳时间远远大于抖动时间按键抖动全被淹没在脉冲宽度里了。我的建议课程设计追求稳妥直接上NE555单稳态。它在实物调试时最省心而且老师问起来你可以把单稳态触发器原理讲一遍属于标准的数电考点。3.2 用D触发器锁存飞行中状态投弹之后炸弹需要从0飞到7这个过程必须锁定不能允许玩家再按键发射第二发否则两个炸弹同时在屏幕上跑逻辑就乱了。这里用一片74LS74里的一个D触发器做状态锁存。我把这个状态信号命名为FLYFLY1表示炸弹正在飞行FLY0表示空闲可以投弹。按键消抖后产生的投弹指令作为触发器的置位信号把FLY置为1。FLY1就把炸弹计数器的计数使能打开等命中或落空之后产生一个清零信号把FLY复位回0。注意一个细节玩家的投弹指令只有在FLY0时才能生效。如果飞行途中按键又被按下不能响应。这个互斥逻辑用一片74LS08与门就能实现——按键脉冲和FLY取反相与只有空闲状态下的按键才有效。3.3 使能端代替门控时钟炸弹计数器的正确接法炸弹计数器要实现在飞行中才计数空闲时停止这个要求初学者最容易想到的做法是用一个与门把时钟和FLY信号门控起来让高频时钟在FLY1时才送给计数器。这个方案我强烈不建议。门控时钟的最大问题是毛刺。FLY信号翻转的瞬间与门输出可能产生一个窄脉冲计数器多计一个数炸弹位置就跳了一格后续所有逻辑全乱。TTL电平翻转时本来就存在竞争冒险用门控时钟等于自己给自己埋雷。正确做法是用74LS161的计数使能端。161的ENP和ENT两个使能端都为高时每个时钟上升沿计数一次任一个为低则保持。把FLY接到ENT上ENP固定接高电平CLK始终接主时钟。这样时钟一路走到计数器只是计数器是否响应由使能端决定干净利落完全避开毛刺问题。炸弹计数器还有一个异步清零端CLR低电平有效。每次开始新一轮投弹前需要先把炸弹位置清零确保炸弹从0号位出发。这个清零信号和FLY置位信号在时序上的配合我建议让按键消抖后的启动脉冲同时完成两件事一边把炸弹计数器CLR拉低清零一边把FLY置1下一个时钟上升沿到来时计数器就从0开始正常走了。4. 命中判定逻辑两个位置数相等的瞬间如何捕捉4.1 位置相等的两种检测电路目标计数器输出三位炸弹计数器也输出三位命中判定的本质就是判断两个三位二进制数是否相等。两种做法都可行。第一种用74LS85四位比较器。把目标的三根线接A组炸弹的三根线接B组级联输入中的I(AB)接高电平。AB输出端就是我们要的命中信号。这个方案芯片集成度高电路简洁而且74LS85比较器本身就是数电课里的标准器件答辩时好解释。第二种用门电路搭同或比较。三个同或门分别比较QA、QB、QC输出再接到三输入与门——注意同或门较少也可以用异或门加反相器替代。如果三个位全部相等与门输出高电平命中信号产生。这个方案用到的门更多但更能体现你对组合逻辑的基本功如果学校要求必须用基本门电路实现核心逻辑选这个方案。我个人推荐74LS85做主判定是因为后续的扩展性更好。比如你想增加炸弹距离目标一格以内算擦边这种玩法用比较器的AB、AB输出就很容易实现。4.2 命中与落空信号的逻辑表达式这里要把逻辑写清楚不然实现时会乱。FLY 1 表示炸弹飞行中。命中信号HIT应该同时满足三个条件HIT (A[2:0] B[2:0]) 且 FLY 1 且 炸弹还没飞出界实际上只要前两个条件成立炸弹和目标在同一格必然算命中。落空信号MISS的条件是MISS (B[2:0] 7) 且 FLY 1 且 HIT 0也就是说炸弹飞到7号位那一格如果目标恰好也在7号位那应该按命中处理而不是落空。所以MISS必须用HIT取反来限制这个优先级顺序要在电路里体现出来。炸弹到达7号位的检测直接利用炸弹那一片74LS138的Y7输出即可不需要额外接门电路。Y7是低电平有效所以MISS再用一个与非门和FLY相与。同时炸弹飞行中如果HIT产生了这个信号要立刻完成三件事让计分计数器加1、把FLY清零停止炸弹、把炸弹计数器清零复位。三件事都可以由HIT信号同时驱动这就是数字系统并行性的优势。命中信号送往74LS192的加计数端时要注意极性和脉宽。74LS192在CP上升沿计数HIT信号宽度等于一个炸弹时钟周期对8Hz左右的时钟来说有100多毫秒完全满足触发要求。实物调试中如果你用的是更高频的时钟就要保证脉宽不低于192的最小要求否则可能出现打中了但不加分的怪现象。5. 计分、扣命与重新开局可逆计数器实现游戏管理5.1 分数计数与数码管译码驱动计分部分我用了74LS192可逆计数器。把HIT信号接到192的加计数时钟端UPDOWN端接高电平禁用减计数于是每命中一次分数加1。QA到QD的输出接到74LS47译码器74LS47再驱动一位共阳数码管显示0到9的分数。这个方案看起来简单实际很容易在74LS47的引脚处理上翻车。74LS47有三个辅助控制引脚LT、RBI、BI/RBO。很多同学这几个引脚悬空结果数码管一直显示一个奇怪的字符或者某段常亮不灭。正确接法是LT接高电平让芯片处于正常译码状态RBI接高电平不消隐无效零BI/RBO也接高电平。三个控制脚全部接VCC普通应用永远没错。分数只到9有一个尴尬问题就是命中第10次时计数器溢出回0玩家会觉得是自己机器坏了。如果实验要求不严你可以说这是九局制更稳妥的做法是用两片74LS192级联显示0到99但这会增加不少连线建议先保证基础功能再考虑。5.2 三条命的扣减、耗尽判定与重启逻辑扣命用另一片74LS192但工作在减计数模式。初始值预置为3每来一个MISS信号DOWN端减1。难点在于初始值3怎么装进去。74LS192有一个异步预置功能当LD端为低电平时D0到D3的数据会被直接装入计数器。所以开机时要产生一个短暂的低电平LD脉冲把D0D1D2D3设置成0011即3。这个脉冲可以用一个简单的上电复位电路实现一个10微法电容串联一个10千欧电阻接VCC中间节点经过施密特触发器整形后接LD端。上电瞬间电容充电节点电压从低到高正好形成一次LD低电平复位。生命值减到0的检测用一片74LS30八输入与非门接所有输出位当QA到QD全为0时输出高电平这就是游戏结束信号。游戏结束时可以把目标时钟关断让目标停下同时点亮一颗红色指示灯。重新开始逻辑我直接用一个复位按键。按下后同时做三件事清空分数计数器、把生命计数器预置回3、把FLY状态复位、把目标计数器清零。这个操作是所有异步复位信号的总闸用一个按键驱动多个与非门实现。重新开局这个功能在实物验收时几乎是必测项目一定要保证每次都能完整恢复到初始状态。6. 仿真、焊接与答辩实物调试中必须避开的坑6.1 仿真阶段容易自我欺骗的地方Multisim或者Proteus仿真能帮你验证逻辑正确性但也容易让你对实物盲目乐观。仿真里面按键永远不抖LED驱动能力永远是理想的TTL输入端悬空电平也完全符合教科书。结果就是仿真一遍过实物一接就废。我的建议是仿真阶段就要有意识地给自己制造困难。故意在按键输出那里加一个高频干扰源看看你的消抖电路扛不扛得住把LED限流电阻调成1欧姆看看74LS138会不会过热。这些极限测试才能暴露真实电路的隐患。另外仿真软件里74LS138的输入悬空会默认为高电平如果你的方向控制或使能信号某根线忘了接仿真可能还能跑实物就会表现出一堆诡异现象。所以仿真通过以后一定要逐根线检查是否每个输入引脚都有明确连接不要依赖悬空电平。6.2 实物焊接与电源布线经验实物调试最大的敌人是电源噪声。NE555产生的时钟信号属于模拟电路范畴和后面的数字逻辑共用一个电源时容易通过电源线互相干扰。我见过一个组的目标灯每隔几秒自己跳一格查了半天是NE555的地线和计数器地线在面包板上绕了一大圈地回路阻抗太高。解决办法是在电源入口处并接一个100微法电解电容和一个100纳法陶瓷电容做去耦同时保证每片IC的VCC和GND之间都就近放一个100纳法电容。面包板走线时尽量让时钟信号线远离按键信号线时钟线周围用地线包裹可以有效减少串扰。还有一个极其常见的问题74LS161的CLK输入如果不加整形从555出来的方波在长线传输后边沿会变缓计数器可能一个沿计两次。如果发现炸弹位置偶尔跳两格可以在时钟输出端串联一个100欧姆电阻再接计数器或者加一个施密特触发器反相器整形。6.3 答辩时的高频追问与扩展思路老师看实物演示之后通常会有几个固定问题。怎么让游戏变难或变简单答调整NE555的频率提高炸弹与目标的时钟频率比或者修改落空判定条件比如炸弹飞到3号位还没碰到目标就算失败。怎么加声音反馈答用NE555输出音频方波命中时接通蜂鸣器响一声用HIT信号控制一个三极管开关即可。分数能不能掉电保存这就是另一套存储逻辑了课程设计做到这个深度已经可以当课题加分项。我自己的经验是答辩高分的核心不是你功能有多花哨而是你对自己的每一个模块都能讲清楚为什么选这个器件为什么这样接。比如能说出不用门控时钟是因为毛刺、用使能端是因为同步这种话老师的印象分会明显不一样。最后再说一条操作层面的建议拿到题目先别急着连电路花半天时间把所有信号的名字定好在纸上画清楚信号流向图。这次做完你会发现投弹游戏机真正锻炼的不是谁焊得快而是谁能在混乱的连线里始终保持对每一个信号状态的清醒判断。这恰恰是数电课设最想教给你的东西。本文还有配套的精品资源点击获取