课程设计《数字式智力抢答器》
更新时间:2024-04-06 08:18:01 阅读量: 综合文库 文档下载
课程设计
《数字式智力抢答器》
系统设计要求:
设计一个智力抢答器,可以判断第一抢答者,并具备计分功能。
抢答器有4路抢答按钮。设置抢答器使能信号,当此信号有效时,若参赛者按下抢答开关,则抢答器能判断出第一抢答者并指示该组抢答成功,其他参赛者的抢答开关不起作用。若提前抢答,则对相应的参赛者发出警报。
系统具有清零功能。当清零信号有效时,抢答器对前一轮抢答的第一抢答者判断结果进行清零,恢复为初始状态。
数字式智力抢答器还具有计分功能。如果抢答成功的参赛者满足得分条件,则增加相应分数,答错不扣分。
一、系统方案设计
根据系统设计要求,系统主要由三个主要的电路模块组成,分别为第一抢答判断电路、计分电路、显示电路。其中第一抢答判断电路主要完成最快抢答者的判断功能;计分电路存储每组竞赛者的分数;显示电路显示抢答器的状态和各组的分数。
因此,数字竞赛抢答器的输入信号包括:
复位信号CLR、抢答器使能信号EN、四组抢答按钮A/B/C/D、加分信号ADD;
输出信号:
四组抢答状态的显示LEDx;对应的得分SCOREx;抢答器抢答成功的组别显示、报警信号FALSE。
二、单元电路设计
1、第一抢答判断电路
第一抢答判断电路模块具有第一抢答信号的鉴别和锁存功能。 (1)当复位CLR信号有效(高电平)时,电路清零。
(2)当使能信号EN为低电平时,如果有人抢答,则提前抢答报警信号FALSE[3..0]
的对应位输出高电平,以示警告。 (3)当EN为高电平时,抢答开始。
首先将报警信号FALSE[3..0]清零,然后根据四组竞赛者的抢答情况选择最先抢答
的信号,显示抢答状态显示信号LEDA—LEDD。(即LEDA—LEDD对应输出高电平)。抢答成功者的组别编号由信号Q[3..0]输出,并锁存抢答器此时的状态,直到CLR信号有效为止。
(4)在每一轮新的抢答之前,都要使用复位信号CLR,清除上一轮抢答留下的痕迹,使电路恢复初始状态。 qd
第一抢答电路VHDL程序 library ieee;
use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all;
clrenABCDLEDALEDBLEDCLEDDFALSE[3..0]Q[3..0]inst2
entity qd is
port(clr,en:in std_logic; A,B,C,D:in std_logic;
LEDA,LEDB,LEDC,LEDD:out std_logic;--抢答成功指示灯 FALSE:out std_logic_vector(3 downto 0);--提前抢答报警 Q: out std_logic_vector(3 downto 0)); --抢答成功组显示 End qd;
Architecture behave of qd is
Signal temp: std_logic_vector(3 downto 0); Signal TAG : std_logic; --设置锁存标志位 Begin
Temp<=A&B&C&D;
PROCESS(clr,EN,A,B,C,D) BEGIN
IF clr=’1’ then -- 电路清零 Q<=”0000”; LEDA<=’0’; LEDB<=’0’; LEDC<=’0’; LEDD<=’0’;
FALSE<=”0000”; TMG<=’0’;
ELSIF (EN=’0’) THEN -- 提前抢答报警 IF A=’1’ THEN --A提前抢答报警 FALSE(3)<=’1’; END IF;
IF B=’1’ THEN FALSE(2)<=’1’; END IF;
IF C=’1’ THEN FALSE(1)<=’1’; END IF;
IF D=’1’ THEN FALSE(0)<=’0’; END IF;
ELSE –抢答开始
FALSE<=”0000”;
IF TAG=’0’ THEN -- 尚未有抢答成功者 IF TEMP=”1000” THEN LEDA<=’1’;
LEDB<=”0”;
ELSIF TEMP=”0100” THEN LEDA<=’0’; LEDB<=”1”; LEDC<=”0”;
LEDD<=’0’;
Q<=”0100”; --显示B抢答成功 TAG<=’1’; --锁存此状态
ELSIF TEMP=”0010” THEN LEDA<=’0’;
LEDB<=”0”; LEDC<=”1”; LEDD<=’0’;
Q<=”0010”; --显示A抢答成功 TAG<=’1’; --锁存此状态 LEDC<=”0”; LEDD<=’0’;
Q<=”1000”; --显示A抢答成功 TAG<=’1’; --锁存此状态
ELSIF TEMP=”0001” THEN LEDA<=’0’; LEDB<=”0”;
LEDC<=”0”; LEDD<=’1’;
Q<=”0001”; --显示A抢答成功 TAG<=’1’; --锁存此状态
END IF; END IF; END IF; END PROCESS; END behave;
2、计分电路
计分电路在参赛者抢答成功后,根据比赛情况进行比较分数的调整。该模块包括加分选择信号ADD、组别选择信号CHOS[3..0],其中加分选择信号ADD高电平有效,有效时对CHOS[3..0]选择的参赛组进行加分;组别选择信号CHOS[3..0]就是第一抢答电路模块的输出信号Q[3..0]. 输出信号分别对应四组参赛组的得分,以百分制表示。每组分数在比赛开始时预设100分,每答对一题加10分,答错不扣分。得分的个位、十位、百位用4位的逻辑矢量表示,使之方便与显示电路级联,从而输出比赛得分。 计分电路VHDL程序
--files:counter.vhd --date:2011/05/23 --designer: zj CHEN --Quartus ii 7.2 --
--description:计分电路 library ieee;
use ieee.std_logic_1164.all;
counterADDCHOS[3..0]A2[3..0]A1[3..0]A0[3..0]B2[3..0]B1[3..0]B0[3..0]C2[3..0]C1[3..0]C0[3..0]D2[3..0]D1[3..0]use ieee.std_logic_unsigned.all;
D0[3..0]
entity counter is
inst port(ADD: in std_logic; --加分信号--
CHOS:IN STD_LOGIC_VECTOR(3 DOWNTO 0);--参赛组选择信号
A2,A1,A0:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);--各组加分信号 B2,B1,B0:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); C2,C1,C0:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); D2,D1,D0:OUT STD_LOGIC_VECTOR(3 DOWNTO 0) ); end counter;
architecture behav of counter is begin
process(ADD,CHOS)--
variable POINTS_A2:STD_LOGIC_VECTOR(3 DOWNTO 0);--定义变量 variable POINTS_A1:STD_LOGIC_VECTOR(3 DOWNTO 0); variable POINTS_B2:STD_LOGIC_VECTOR(3 DOWNTO 0); variable POINTS_B1:STD_LOGIC_VECTOR(3 DOWNTO 0); variable POINTS_C2:STD_LOGIC_VECTOR(3 DOWNTO 0); variable POINTS_C1:STD_LOGIC_VECTOR(3 DOWNTO 0); variable POINTS_D2:STD_LOGIC_VECTOR(3 DOWNTO 0); variable POINTS_D1:STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN
if (ADD'EVENT AND ADD='1') THEN --加分信号上升沿有效 if (chos=\ --A组答对,加10分 if points_a1=\ points_a1:=\
if points_a2=\ points_a2:=\ else
points_a2:=points_a2+'1'; end if; else
points_a1:=points_a1+1;
end if;
elsif (chos=\ --B组答对,加10分 if points_b1=\ points_b1:=\ if points_b2=\ points_b2:=\ else
points_b2:=points_b2+1; end if; else
points_b1:=points_b1+1; end if;
elsif (chos=\ --C组答对,加10分 if points_c1=\ points_c1:=\ if points_c2=\ points_c2:=\ else
points_c2:=points_c2+1; end if;
else
points_c1:=points_c1+1;
end if;
elsif (chos=\ --D组答对,加10分 if points_d1=\ points_d1:=\ if points_d2=\ points_d2:=\ else
points_d2:=points_d2+1; end if; else
points_d1:=points_d1+1;
end if; end if; end if;
--将各组得分赋给输出信号 A2<=POINTS_A2; A1<=POINTS_A1; A0<=\
B2<=POINTS_B2; B1<=POINTS_B1; B0<=\
C2<=POINTS_C2; C1<=POINTS_C1; C0<=\
D2<=POINTS_D2; D1<=POINTS_D1; D0<=\
END PROCESS;
end behav; 3、显示电路
显示电路是一个简单的LED共阴极显示模块的译码器。 其中DIN[3..0]为输入信号;DOUT[6..0]为输出信号。 显示电路的VHDL程序 library ieee;
use ieee.std_logic_1164.all;
entity disp is
port(din:in std_logic_vector(3 downto 0); dout:out std_logic_vector(6 downto 0)); end disp;
architecture behav of disp is begin process(din)
begin
case din is --共阴极译码器 when \ when \
dispdin[3..0]dout[6..0]inst1
when \ when \ when \ when \ when \ when \ when \ when \ when others =>dout<=\ end case; end process;
end behav;
4、顶层模块设计
OUTPUTLEDAOUTPUTLEDBLEDCLEDDOUTPUTOUTPUTdispdin[3..0]dout[6..0]OUTPUTFIRST[6..0]ADDINPUTVCCinst1counterclrenINPUTVCCINPUTVCCqdclrenALEDALEDBLEDCLEDDFALSE[3..0]Q[3..0]ADDCHOS[3..0]A2[3..0]A1[3..0]A0[3..0]B2[3..0]B1[3..0]B0[3..0]C2[3..0]C1[3..0]C0[3..0]D2[3..0]D1[3..0]D0[3..0]OUTPUTOUTPUTOUTPUTOUTPUTOUTPUTOUTPUTOUTPUTOUTPUTOUTPUTOUTPUTOUTPUTOUTPUTA2[3..0]A1[3..0]A0[3..0]B2[3..0]B1[3..0]B0[3..0]C2[3..0]C1[3..0]C0[3..0]D2[3..0]D1[3..0]D0[3..0]AINPUTVCCBCDBCDINPUTVCCINPUTVCCINPUTVCCinst2instOUTPUTFALSE[3..0]
--files:qd.vhd --date:2011/05/22 --designer: zj CHEN --Quartus ii 7.2
--
--description:第一抢答判断电路 library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity qd is
port(clr: in std_logic; --复位信号
en : in std_logic; --抢答使能信号
A,B,C,D:in std_logic;--抢答按钮
LEDA,LEDB,LEDC,LEDD:out std_logic; -- 抢答成功指示灯 FALSE:out std_logic_vector(3 downto 0);--提前抢答报警 Q : out std_logic_vector(3 downto 0));--抢答成功组显示 end qd;
architecture rtl of qd is
signal temp:std_logic_vector(3 downto 0); signal TAG:std_logic;--设置锁存标志位 begin
temp<= A&B&C&D;
process(clr,en,A,B,C,D,temp) begin
if (clr='0') then --电路清零 Q<=\ FALSE<=\
LEDA<='0'; LEDB<='0'; LEDC<='0'; LEDD<='0';
TAG<='0';
ELSIF ( en='0') then --提前抢答报警 if A='1' THEN
FALSE(3)<='1'; end if;
if B='1' THEN FALSE(2)<='1'; end if;
if C='1' THEN FALSE(1)<='1'; end if;
if D='1' THEN FALSE(0)<='1';
end if;
ELSE --抢答开始 FALSE<=\
if TAG='0' THEN --尚未有抢答成功者出现 IF temp=\抢答成功 LEDA<='1'; LEDB<='0'; LEDC<='0'; LEDD<='0';
Q<=\
TAG<='1'; --锁存此状态 elsif temp=\ LEDA<='0'; LEDB<='1'; LEDC<='0'; LEDD<='0'; Q<=\ TAG<='1';
elsif temp=\ LEDA<='0'; LEDB<='0'; LEDC<='1'; LEDD<='0'; Q<=\ TAG<='1';
elsif temp=\ LEDA<='0'; LEDB<='0'; LEDC<='0'; LEDD<='1'; Q<=\ TAG<='1'; end if; end if; end if; end process; end rtl;
--files:counter.vhd --date:2011/05/23 --designer: zj CHEN --Quartus ii 7.2 --
--description:计分电路 library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity counter is
port(ADD: in std_logic; --加分信号--
CHOS:IN STD_LOGIC_VECTOR(3 DOWNTO 0);--参赛组选择信号 A2,A1,A0:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);--各组加分信号 B2,B1,B0:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); C2,C1,C0:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); D2,D1,D0:OUT STD_LOGIC_VECTOR(3 DOWNTO 0) ); end counter;
architecture behav of counter is begin
process(ADD,CHOS)--
variable POINTS_A2:STD_LOGIC_VECTOR(3 DOWNTO 0);--定义变量 variable POINTS_A1:STD_LOGIC_VECTOR(3 DOWNTO 0); variable POINTS_B2:STD_LOGIC_VECTOR(3 DOWNTO 0); variable POINTS_B1:STD_LOGIC_VECTOR(3 DOWNTO 0); variable POINTS_C2:STD_LOGIC_VECTOR(3 DOWNTO 0); variable POINTS_C1:STD_LOGIC_VECTOR(3 DOWNTO 0); variable POINTS_D2:STD_LOGIC_VECTOR(3 DOWNTO 0); variable POINTS_D1:STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN
if (ADD'EVENT AND ADD='1') THEN --加分信号上升沿有效 if (chos=\ --A组答对,加10分 if points_a1=\ points_a1:=\
if points_a2=\ points_a2:=\ else
points_a2:=points_a2+'1'; end if; else
points_a1:=points_a1+1; end if;
elsif (chos=\ --B组答对,加10分 if points_b1=\ points_b1:=\ if points_b2=\ points_b2:=\ else
points_b2:=points_b2+1;
end if;
else
points_b1:=points_b1+1; end if;
elsif (chos=\ --C组答对,加10分 if points_c1=\ points_c1:=\ if points_c2=\ points_c2:=\ else
points_c2:=points_c2+1; end if;
else
points_c1:=points_c1+1;
end if;
elsif (chos=\ --D组答对,加10分 if points_d1=\ points_d1:=\ if points_d2=\ points_d2:=\ else
points_d2:=points_d2+1; end if; else
points_d1:=points_d1+1; end if; end if; end if;
--将各组得分赋给输出信号 A2<=POINTS_A2; A1<=POINTS_A1; A0<=\
B2<=POINTS_B2; B1<=POINTS_B1; B0<=\
C2<=POINTS_C2; C1<=POINTS_C1; C0<=\
D2<=POINTS_D2; D1<=POINTS_D1; D0<=\
END PROCESS; end behav; --files:disp.vhd --date:2011/05/23 --designer: zj CHEN --Quartus ii 7.2 --显示模块
--description:显示电路
library ieee;
use ieee.std_logic_1164.all;
entity disp is
port(din:in std_logic_vector(3 downto 0); dout:out std_logic_vector(6 downto 0)); end disp;
architecture behav of disp is begin
process(din)
begin
case din is --共阴极译码器 when \ when \ when \ when \ when \ when \ when \ when \ when \ when \ when others =>dout<=\ end case; end process; end behav;
--顶层模块:4路智力竞赛抢答器
library ieee;
use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all;
entity qdq is
port( clr,en:in std_logic;--复位信号,抢答使能信号 A,B,C,D: IN STD_LOGIC;--抢答按钮 ADD:IN STD_LOGIC; --计分信号
LEDA,LEDB,LEDC,LEDD:OUT STD_LOGIC;
FALSE:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);--报警信号
FIRST:OUT STD_LOGIC_VECTOR(6 DOWNTO 0);--
SCOREA2,SCOREA1,SCOREA0:OUT STD_LOGIC_VECTOR(6 DOWNTO 0); SCOREB2,SCOREB1,SCOREB0:OUT STD_LOGIC_VECTOR(6 DOWNTO 0); SCOREC2,SCOREC1,SCOREC0:OUT STD_LOGIC_VECTOR(6 DOWNTO 0); SCORED2,SCORED1,SCORED0:OUT STD_LOGIC_VECTOR(6 DOWNTO 0) ); end qdq;
architecture struc of qdq is --定义元件
component qd is --第一抢答判断电路 port(clr: in std_logic; --复位信号
en : in std_logic; --抢答使能信号
A,B,C,D:in std_logic;--抢答按钮
LEDA,LEDB,LEDC,LEDD:out std_logic; -- 抢答成功指示灯 FALSE:out std_logic_vector(3 downto 0);--提前抢答报警 Q : out std_logic_vector(3 downto 0));--抢答成功组显示 end component qd;
component counter is --计分电路
port(ADD: in std_logic; --加分信号--
CHOS:IN STD_LOGIC_VECTOR(3 DOWNTO 0);--参赛组选择信号 A2,A1,A0:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);--各组加分信号 B2,B1,B0:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); C2,C1,C0:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); D2,D1,D0:OUT STD_LOGIC_VECTOR(3 DOWNTO 0) );
end component counter;
component disp is --显示电路
port(din:in std_logic_vector(3 downto 0); dout:out std_logic_vector(6 downto 0) );
end component disp; --定义信号
signal qtemp:STD_LOGIC_VECTOR(3 DOWNTO 0);--组别显示,计分组别显示 signal AA2,AA1,AA0: STD_LOGIC_VECTOR(3 DOWNTO 0);--百分制输入信号 SIGNAL bb2,bb1,bb0: STD_LOGIC_VECTOR(3 DOWNTO 0); signal cc2,cc1,cc0: STD_LOGIC_VECTOR(3 DOWNTO 0); signal dd2,dd1,dd0: STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN
--元件例化
u1:qd port map(clr=>clr,en=>en,
a=>a,b=>b,c=>c,d=>d, leda=>leda, ledb=>ledb, ledc=>ledc, ledd=>ledd,
q=>qtemp,false=>false);
u2:counter port map(add=>add,CHOS=>qtemp,
A2=>AA2,A1=>AA1,A0=>AA0, B2=>BB2,B1=>BB1,B0=>BB0, C2=>CC2,C1=>CC1,C0=>CC0, D2=>DD2,D1=>DD1,D0=>DD0);
U3:disp port map (din=>qtemp,DOUT=>FIRST);
u4:disp port map (din=>aa2,dout=>scorea2);--计分显示,百分制 u5:disp port map (din=>aa1,dout=>scorea1); u6:disp port map (din=>aa0,dout=>scorea0);
u7:disp port map (din=>bb2,dout=>scoreb2); u8:disp port map (din=>bb1,dout=>scoreb1); u9:disp port map (din=>bb0,dout=>scoreb0);
u10:disp port map (din=>cc2,dout=>scorec2); u11:disp port map (din=>cc1,dout=>scorec1); u12:disp port map (din=>cc0,dout=>scorec0);
u13:disp port map (din=>dd2,dout=>scored2); u14:disp port map (din=>dd1,dout=>scored1); u15:disp port map (din=>dd0,dout=>scored0); end struc;
counter:u2qd:u1ABCDclrenABCDclrenLEDALEDBLEDCLEDDFALSE[3..0]Q[3..0]ADDCHOS[3..0]A2[3..0]A1[3..0]A0[3..0]B2[3..0]B1[3..0]B0[3..0]C2[3..0]C1[3..0]C0[3..0]din[3..0]din[3..0]disp:u15SCORED0[6..0]dout[6..0]disp:u14SCORED1[6..0]dout[6..0]ADDD2[3..0]D1[3..0]D0[3..0]disp:u13SCORED2[6..0]din[3..0]dout[6..0]disp:u12SCOREC0[6..0]din[3..0]dout[6..0]disp:u11SCOREC1[6..0]din[3..0]dout[6..0]disp:u10SCOREC2[6..0]din[3..0]dout[6..0]disp:u9SCOREB0[6..0]din[3..0]dout[6..0]disp:u8SCOREB1[6..0]din[3..0]dout[6..0]disp:u7SCOREB2[6..0]din[3..0]dout[6..0]disp:u6SCOREA0[6..0]din[3..0]dout[6..0]disp:u5SCOREA1[6..0]din[3..0]dout[6..0]disp:u4SCOREA2[6..0]din[3..0]dout[6..0]disp:U3FIRST[6..0]din[3..0]dout[6..0]FALSE[3..0]LEDDLEDCLEDBLEDA
正在阅读:
课程设计《数字式智力抢答器》04-06
数据交换共享整合系统平台建设方案07-04
2018年山西大学化学化工学院836无机化学(不含配位化学)考研基础五套测试题04-28
园林绿化养护应急预案01-26
小学毕业了作文06-15
义务教育实验版山东美术出版社三年级下册《品德与社会》全册教案05-15
闭合电路欧姆定律(公开课)05-24
尊重作文500字02-05
核酸学案 新人教版必修104-06
水电安装工程施工合同-包工包料(常用版)11-05
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 抢答器
- 数字式
- 智力
- 课程
- 设计
- 固定资产管理办法
- 22、挤压工艺规程 - 图文
- 阳光假日脚手架专项施工方案
- 0.1molL氢氧化钠标准溶液的标定
- 操作系统期末复习题及答案1
- 科文学院09z网络数据结构期末复习资料--简答题
- 小学五年级下册科学教学计划及教案带表格全册
- 2017年初级会计职称考试 - 初级会计实务-模拟考试题库真题卷十
- 宋才发:道路交通事故责任认定及赔偿探讨
- 网络安全课程设计
- 运筹学课后习题答案 - - 北邮出版社
- 人机工程学复习题(1—6章)
- 浅说让初中语文课堂鲜活的途径和方法
- 201x部编版新人教版二年级语文上册教学工作总结3
- 热控外围设备点检标准
- 中国联通服务集统一编码规范 - V1.2 - (20140425)
- 盐城“五条岭”烈士陵园概略
- 第二单元自主学习任务单
- 川交发〔2013〕87号- 四川省交通运输厅
- 2018年法考民法模拟试题及答案解析