四路抢答器实训报告
一. 任务要求
抢答器是为智力竞赛参赛者答题时进行抢答而设计的一种优于判决器电路,竞赛者可以分为若干组,抢答时各组对主持人提出的问题要在最短时间内做出判断,并按下强大按键回答问题。当第一个人按下按键以后,则在显示器上显示改组的号码,同时电路将其它的各组按键封锁,使其不起作用。回答完问题后,由主持人将所有按键恢复,重新开始下一轮抢答。本次任务所设计的四路抢答器应具备如下基本功能:
(1) 有4路抢答;
(2) 数字显示抢答组别;
(3) 由主持人复位后方可抢答;
(4) 声音提示已有人抢答;
有兴趣,有能力的同学可根据具体情况对抢答器进行功能改进。
二. 设计内容
(1)原理分析
本次设计基本是采用常用集成电路制作,有触发器,编码器,显示器,音响电路组成可供4人抢答,并用7段数码显示抢答者的组别号码,而且有声音提示已有人回答,有人抢答后还能自动闭锁其他各路的输入,使其他组的开关失去作用。数显抢答器的组成框图如图4—31所示。
1
当电源闭合后,先由主持人按复位按钮开关So,直接置零端有效,各触发器输出Q=O,Q非 =1,74LS20四输入端与非门输入全为高电平,其输出6脚为低电平,4511的第4脚为低电平即消隐输入,因此,数码管不显示任何数字。此时,三极管截止,蜂鸣器不响,74LS20的8脚输出高电平,为抢答器做好准备。
抢答器开始后,假使第1组最先按下按钮开关S1,则Q=1,Q非=0,74LS20第一个与非门输出高电平,经第二个与非门反相后为低电平,并送回触发器按钮开关,此时若干其他开关再按下,直接置“1”端SD=0,不能触发器置高电平,所以其他触发器输出都为Q=0,Q非=1。74LS74输入端I1非=0为有效电平,I2非~I9非输入全为高,其输出为‘1’的反码,经反相器后在4511的DCBA端输入“0001”,显示数字为“1”,当S2最先按下时,4511的DCBA为“0010”,显示数字“2”,当S3最先按下时,4511的DCBA为“0011”显示数字为“3”,当S4最先按下时,4511的DCBA为“0100”,显示数字为“4”。有人抢答时,74LS20的6脚输出的高电平使三极管导通,蜂鸣器发出声音,告知已有人抢答。
2
从上述分析可知,本抢答器有闭锁功能,当有人抢答后其他人在按开关将不起作用,本抢答器可供4个组别进行抢答,如需要更多的组别,需增加D触发器的个数,并修改编码电路。
(2)电路调试
首先按抢答器功能进行操作,若电路满足要求,说明电路没有故障。若某些功能不能实现,就要设法查找并排除故障。排除故障可按信息流程的正向(有输入到输出)查找,也按信息流程逆向(有输出到输入)查找。
三. 总结
我的四路抢答器的制作过程确实不是那么顺利,这就验证了一句话叫想的好未必做得好,所有的事情没有付出就没有回报。通过这次实验让我从中获益很多经验。比如在实验前要先通过查阅集成电路手册,确认电路中集成电路的引脚排列,熟悉各管脚的功能。检测所用的集成电路,确认完好。在焊接的过程中又发现自己把插座的引脚焊接错了,又不停的拆啊,连续三次焊错,三次重接,当我发现自己心静下来时,发现焊接的成功率明显上升。经过了一个晚上的加工焊接结束,下面就调试了,结果只显示一个4,我有耐心的用电流表,一点一点的排查,好久终于发现是4013的引脚焊接的接在一起了。此时的我是多么有成功感,感觉自己还是可以的。虽然当时遇到困难时我很来火为什么人家的四路抢答器做得那么顺利,我的四路抢答器就这么不给力。后来我慢慢想我遇到的这么多的故障告诉我无论什么事不能太急于求成。做事情需要带着激情带着耐心来做,但是我们不能 3
只是有激情,却忘记了要耐心,耐心与激情我们必不可少的做事原则,
拥有激情与耐心,拥有成功的心态。我想通过这次的焊接四路抢答器
过后我的耐心得到很好的磨练对我的以后工作就业有很大的帮助。
电子工程学院
电信101班
4 王圣亮 10136106 20xx年4月24日
第二篇:四路抢答器报告(最终版)
设 计 报 告
课程名称 EDA技术实用教程
任课教师 黄慧
设计题目 数字式竞赛抢答器
班 级 12自动化卓越班
姓名学号 李思聪 1205032033
郭一鸣 1205031020
孔德利 1205031026
日 期 2014年11月11日
一、设计目的
1、学习使用实验箱中数码管显示、按键控制。
2、熟悉抢答器的工作原理。
3、了解数字系统设计,调试及故障排除方法。
二、设计要求
1、四组参赛者进行抢答,当抢答组按下抢答按钮时,抢答器能准确的判断
出抢答者。
2、抢答器可以容纳4组参赛者同时抢答,每组设置1个按钮供抢答者使用。设置抢答使能信号,当此信号有效时,若参赛者按下抢答开关,则抢答器能判断出第一抢答者并指示该组抢答成功,其他组参赛者的抢答开关不起作用,若提前抢答则对相应的参赛者发出警报。
3、系统具有清零功能。当清零信号有效时,抢答器对前一轮抢答的第一抢答者判断结果进行清零,恢复为初始状态。
4、数字式竞赛抢答器电路还具有计分功能。如果抢答成功的参赛者满足得分条件则增加相应的分数,答错不扣分。
三、电路的总体方案及工作原理
1、总体方案
(1)方案一
系统由三个主要模块组成,分别为第一判别电路、计分电路、显示电路。其中第一判断电路主要完成最快抢答者的判断功能;计分电路则存储每组的分数,显示电路则显示抢答者的状态和各组的分数。因此数字竞赛抢答器的输入信号包括复位信号CLR、抢答器使能信号EN、4级参赛者抢答按钮A\B\C\D及加分信号ADD,输出信号包括4组参赛者的状态显示LEDx(x表示参赛者编号)及其对应的得分SCOREx、抢答器抢答成功的组别显示等。
(2)方案二
抢答电路选用优先编码器 74LS148 和锁存器 74LS297 来完成。该电路主要完成两个功能:一是分辨出选手按键的先后,并锁存优先抢答者的编号,同时译码显示电路显示编号(显示电路采用七段数字数码显示管);二是禁止其他选手按键,其按键操作无效。
定时电路原理及设计:该部分主要由555定时器秒脉冲产生电路、十进制同步加减计数器74LS192减法计数电路、74LS48译码电路和1个7段数码管即相关电路组成。
方案二需要复杂的硬件电路,而方案一硬件简单,程序设计也不复杂易于实现所有功能,所以我们选择方案一。
2、抢答器工作流程
如果参赛者在抢答器使能信号EN有效前提下按下抢答按钮,报警信号FALSE[3..0]的对应位输出高电平,以示警告;当EN信号有效时,抢答器开始工作,将报警信号FALSE清零,A、B、C、D四个抢答者谁先按下抢答按钮,则抢答成功,对应的显示灯LEDx亮起,并通过显示电路模块显示其参赛编号FIRST
[6..0];抢答成功的选手进入答题阶段,如回答正确,则加分信号ADD有效,计分模块给相应的参赛组加分,每个参赛组得分的个位、十位、百位分别通过SCOREx[6..0]显示。
如果复位信号CLR有效,使得抢答器在下一轮抢答前,其抢答成功的组别判断恢复为初始状态,以便重新开始新的一轮抢答。复位信号在不改变竞赛者的现有得分。
四、单元电路设计
1. 抢答鉴别单元
在抢答鉴别电路设计中,A、B、C、D四组抢答,RST为复位端,将输出信号复位或停止警报声。抢答信号A,B,C,D输入电路中后,通过判断是哪个信号最先为‘1’得出抢答成功的组别1,2,4或8组,将组别号输出到相应端A1,B1,C1,D1,等待输出到计分和显示单元。同时有提前抢答的情况下发出警报警告的功能。
2. 计分单元
图中RST端为复位端,将计分起始分数设为0。CHOS[3..0]端功能是锁存已抢答成功的组别序号,当接加分按钮ADD后,将给CHOS[3..0]所存的组别加分。每按一次加1分。
3. 计时单元
本系统中的计时器电路既有抢答计时功能,又有回答计时功能,功能比较齐全。其中初始值的预置功能是将时间的两位数(单位为秒)分解成两个数分别进行预置,默认时间为20秒倒计时。TA、TB端分别预置两位数值, start端为高电平后开始计时,stop端为高电平后停止计时,CLK接时钟信号,操作简洁。
4. 显示电路
COUTA[6..0]、 COUTA[6..0]端输出显示在数码管
五、整体电路及仿真波形
1.抢答鉴别模块仿真波形图
2.计分模块仿真波形图
3.计时器仿真波形图
4.整体仿真图
5. 顶层设计总体电路图
六、硬件测试及说明
由于是在实验箱上进行设计的,我们省去了焊接电路、连接电路等很多工作,所以我们要做的主要是程序的编写和测试。一开始是调试程序,花了大量的时间去编写并改错,老师要求我们底层用程序设计,顶层用电路图设计,我们就开始封装程序等工作。程序没问题之后就要结合试验箱锁定引脚,由于引脚较多,稍不留神在硬件调试的时候就会出现问题,一开始程序下到试验箱中怎么也没反应,经过程序的修改和引脚的重新设定等工作,终于达到了想要的结果。最后我们想加个蜂鸣器报警,可是蜂鸣器的响声很小,怎么也解决不了,最后通过向老师请教知道原来是我们把蜂鸣器的频率设置大了,频率是越小蜂鸣器声音越大。
七、项目总结
通过这次课程设计我们认识到了自己知识掌握的程度,发现基础薄弱,但通过此次课程设计加深了对相关知识的理解,对相关器件的使用有了更深一步的认识。
这次设计的难度比我们平时训练的难度要大,没有完全理解这个程序的结构,在软硬件电路的调试过程中也遇到了很多困难,一开始我们很躁,想很快把实验结果调试出来,最后却一无所获。我认识到当遇到困难时,更需要静下来慢慢去分析,一步一步来做,当我们把每一步都做好了,一切自然是水到渠成的。让我欣慰的是我们组员之间合作分工比较好,锻炼了专业知识的能力,也增进了我们相互之间的感情。
八、课程总结
本学期对《EDA技术实用教程》的学习为我的专业知识学习打开了一个全新的窗口——微电子技术领域。对EDA技术,我更是有了全新的认识。 微电子技术的进步主要表现在大规模集成电路加工技术即半导体工艺技术的发展上,使得表征半导体工艺水平的线宽已经达到了纳米级。所以,集成电路设计正在不断地向超大规模、极低功耗和超高速的方向发展。
VHDL在现在的EDA设计中使用最多,也拥有几乎所有主流EDA工具的支持。VHDL作为一个规范语言和建模语言,不仅可以作为系统模拟的建模工具,而且可以作为电路系统的设计工具,可以利用软件工具将VHDL源码自动地转化为文本方式表达的基本逻辑元件连接图,即网表文件。这种方法显然对于电路自动设计是一个极大的推进。它具有很强的电路描述和建模能力,能从多个层次对数字系统进行建模和描述,从而大大简化了硬件设计任务,提高了设计效率和可靠性。EDA技术良好的可移植性与可测试性,将所有设计环节纳入统一的自顶向下的设计方案中。它不但在整个设计流程上充分利用计算机的自动设计能力、在各个设计层次上利用计算机完成不同内容的仿真模拟,而且在系统板设计结束后仍可利用计算机对硬件系统进行完整的测试。
书中通过大量的图示对PLD硬件特性与编程技术进行了形象的讲解,不仅融合了之前学习的关于电路设计的知识还将EDA的技术加入其中。对VHDL语言的详尽讲解更是让我深刻理解了VHDL语言的编程原理。由于本门课程是一门硬件学习课程,所以实验必不可少。通过课程最后实验,我体会一些VHDL语言相对于其他编程语言的特点。
相对于其它计算机语言的学习,如C 或汇编语言,VHDL 具有明显的特点。这不仅仅是由于VHDL 作为一种硬件描述语言的学习需要了解较多的数字逻辑方面的硬件电路知识,包括目标芯片基本结构方面的知识更重要的是由于VHDL 描述的对象始终是客观的电路系统。由于电路系统内部的子系统乃至部分元器件的工作状态和工作方式可以是相互独立、互不相关的,也可以是互为因果的。这表明,在任一时刻,电路系统可以有许多相关和不相关的事件同时并行发生。例如可以在多个独立的模块中同时入行不同方式的数据交换和控制信号传输,这种并行工作方式是任何一种基于CPU 的软件程序语言所无法描绘和实现的。传统的软件编程语言只能根据CPU 的工作方式,以排队式指令的形式来对特定的事件和信息进行控制或接收。在CPU 工作的任一时间段内只能完成一种操作。因此,任何复杂的程序在一个单CPU 的计算机中的运行,永远是单向和一维的。因而程序设计者也几乎只需以一维的思维模式就可以编程和工作了。
VHDL 虽然也含有类似于软件编程语言的顺序描述语句结构,但其工作方式是完全不同的。软件语言的语句是根据CPU 的顺序控制信号,按时钟节拍对应的指令周期节拍逐条运行的,每运行一条指令都有确定的执行周期。但VHDL 则不同,从表面上观,VHDL 的顺序语句与软件语句有相同的行为描述方式,但在标准的仿真执行中有很大的区别。VHDL 的语言描述只是综合器赖以构成硬件结构的一种依据,但进程语句结构中的顺序语句的执行方式决非是按时钟节拍运行的。实际情况是其中的每一条语句的执行时间几乎是0 (但该语句的运行时间却不一定为0),即1000 条顺序语句与10 条顺序语句的执行时间是相同的。在此,语句的运行和执行具有不同的概念(在软件语言中,它们的概念是相同),的执行是指启动一条语句,允许它运行一次,而运行就是指该语句完成其设定的功能。
通过EDA的课堂教学与实验,我认识到理论要与实际结合,培养动手动脑能力的重要性,做事情要抱着一丝不苟的态度,这样才能做好事情。同时也入一步了解到EDA的强大之处,硬件电路的优秀的地方,对硬件方面更感兴趣了。 这门课程的学习,为我以后的专业知识的学习打下了良好的基础。
九、实验参考文献
【1】 潘松,黄继业《EDA实用教程》 高等教育出版社 2002
【2】 吕思忠《数子电路实验与课程设计》哈尔滨工业大学出版社
【3】 卢杰,赖毅《VHDL与数字电路设计》北京科学出版社 2001
【4】《EDA与VHDL》清华大学出版社
附录
计分器程序
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY JFQ IS
PORT(RST: IN STD_LOGIC;
ADD: IN STD_LOGIC;
CHOS:IN STD_LOGIC_VECTOR(3 DOWNTO 0);
FA,FB: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
FC,FD: OUT STD_LOGIC_VECTOR(3 DOWNTO 0));
END ENTITY JFQ;
ARCHITECTURE ART OF JFQ IS
BEGIN
PROCESS(RST,ADD,CHOS)
VARIABLE POINTS_A: STD_LOGIC_VECTOR(3 DOWNTO 0);
VARIABLE POINTS_B: STD_LOGIC_VECTOR(3 DOWNTO 0);
VARIABLE POINTS_C: STD_LOGIC_VECTOR(3 DOWNTO 0);
VARIABLE POINTS_D: STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN
IF (ADD'EVENT AND ADD='1')THEN
IF RST='1' THEN
POINTS_A:="0000";
POINTS_B:="0000";
POINTS_C:="0000";
POINTS_D:="0000";
ELSIF CHOS="0001" THEN
IF POINTS_A="1001" THEN
POINTS_A:="0000";
ELSE
POINTS_A:=POINTS_A+'1';
END IF;
ELSIF CHOS="0010" THEN
IF POINTS_B="1001" THEN
POINTS_B:="0000";
ELSE
POINTS_B:=POINTS_B+'1';
END IF;
ELSIF CHOS="0100" THEN
IF POINTS_C="1001" THEN
POINTS_C:="0000";
ELSE
POINTS_C:=POINTS_C+'1';
END IF;
ELSIF CHOS="1000" THEN
IF POINTS_D="1001" THEN
POINTS_D:="0000";
ELSE
POINTS_D:=POINTS_D+'1';
END IF;
END IF;
END IF;
FA<=POINTS_A;
FB<=POINTS_B;
FC<=POINTS_C;
FD<=POINTS_D;
END PROCESS;
END ART;
计时器程序
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity JSQ is
port(clk1,rst,start,stop:in std_logic;
ta,tb:buffer std_logic_vector(3 downto 0));
end JSQ;
architecture one of JSQ is
signal co:std_logic;
begin
p1:process(clk1,rst,start,stop,ta)
begin
if rst='1' or stop='1' then
ta<="0000";
elsif clk1'event and clk1='1' then
co<='0';
if start='1' then
if ta="0000" then
ta<="1001";co<='1';
else ta<=ta-1;
end if;
end if;
end if;
end process p1;
p2:process(co,rst,start,stop,tb)
begin
if rst='1' or stop='1' then
tb<="0010";
elsif co'event and co='1' then
if start='1' then
if tb="0000" then tb<="0011";
else tb<=tb-1;
end if;
end if;
end if;
end process p2;
end one ;
抢答判断程序
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY QDJB IS
PORT(CLR: IN STD_LOGIC;
A,B,C,D: IN STD_LOGIC;
A1,B1,C1,D1: OUT STD_LOGIC;
STATES: OUT STD_LOGIC_VECTOR(3 DOWNTO 0));
END ENTITY QDJB;
ARCHITECTURE ART OF QDJB IS
CONSTANT W1:STD_LOGIC_VECTOR:="0001";
CONSTANT W2:STD_LOGIC_VECTOR:="0010";
CONSTANT W3:STD_LOGIC_VECTOR:="0100";
CONSTANT W4:STD_LOGIC_VECTOR:="1000";
BEGIN
PROCESS(CLR,A,B,C)
BEGIN
IF CLR='1'THEN STATES <="0000";
ELSIF(A='1' AND B='0' AND C='0' AND D='0')THEN
A1<='1';B1<='0';C1<='0'; D1<='0';STATES<=W1;
ELSIF(A='0' AND B='1' AND C='0' AND D='0')THEN
A1<='0';B1<='1';C1<='0'; D1<='0';STATES<=W2;
ELSIF(A='0' AND B='0' AND C='1' AND D='0')THEN
A1<='0';B1<='0';C1<='1'; D1<='0';STATES<=W3;
ELSIF(A='0' AND B='0' AND C='0' AND D='1')THEN
A1<='0';B1<='0';C1<='0'; D1<='1';STATES<=W4;
END IF;
END PROCESS;
END ART;
显示电路程序
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY YMQ IS
PORT(AIN4: IN STD_LOGIC_VECTOR(3 DOWNTO 0);
COUTA:OUT STD_LOGIC_VECTOR(6 DOWNTO 0);
COUTB:OUT STD_LOGIC_VECTOR(6 DOWNTO 0));
END YMQ;
ARCHITECTURE ART OF YMQ IS
BEGIN
PROCESS(AIN4)
VARIABLE DOUTA: STD_LOGIC_VECTOR(6 DOWNTO 0);
BEGIN
CASE AIN4 IS
WHEN"0000"=>DOUTA:="0111111";
WHEN"0001"=>DOUTA:="0000110";
WHEN"0010"=>DOUTA:="1011011";
WHEN"0011"=>DOUTA:="1001111";
WHEN"0100"=>DOUTA:="1100110";
WHEN"0101"=>DOUTA:="1101101";
WHEN"0110"=>DOUTA:="1111101";
WHEN"0111"=>DOUTA:="0000111";
WHEN"1000"=>DOUTA:="1111111";
WHEN"1001"=>DOUTA:="1101111";
WHEN OTHERS=>DOUTA:="0000000";
END CASE;
COUTA<=DOUTA; COUTB<=DOUTA;
END PROCESS;
END ART;