课程设计数字式八路抢答器报告.docx
- 文档编号:10509647
- 上传时间:2023-02-17
- 格式:DOCX
- 页数:30
- 大小:585.14KB
课程设计数字式八路抢答器报告.docx
《课程设计数字式八路抢答器报告.docx》由会员分享,可在线阅读,更多相关《课程设计数字式八路抢答器报告.docx(30页珍藏版)》请在冰豆网上搜索。
课程设计数字式八路抢答器报告
数字电子技术课程设计
课题数字式八路抢答器
学院电气与信息工程学院
班级电自1107班
学号20110701707
姓名李良涛
摘要
当今的社会竞争日益激烈,选拔人才,评选优胜,知识竞赛之类的活动愈加频繁,那么也就必然离不开抢答器。
而现在的抢答器有着数字化,智能化的方向发展,这就必然提高了抢答器的成本。
鉴于现在小规模的知识竞赛越来越多,操作简单,经济实用的小型抢答器必将大有市场。
本课程设计设计的八路数字式抢答器由抢答鉴别模块、抢答计时模块、计分模块、译码显示模块组成。
基于FPGA,经过程序设计、调试、仿真、下载和软硬件联合调试等工作,实现了抢答功能。
本方案具有的优点是:
随着EDA技术的高速发展,电子系统的设计技术和工具发生了深刻的变化,大规模可编程逻辑器件CPLD/FPGA的出现,给设计人员带来了诸多方便。
利用它进行产品开发,不仅修改方便、开发周期短、仿真方便、可靠性高,而且具有完全的知识产权。
不足之处是:
成本比基于基本IC器件开发的多路智力抢答器高,要有较高的软件开发平台,并要求初学者能熟练掌握开发平台的使用。
一、设计实现的功能
1.基本功能
1>八路智力抢答器,同时供8个选手参赛,编号分别为1到8。
每位选手用一个答题按钮和LED灯,选手按下时其灯亮。
2>给主持人一个控制开关,实现系统的清零和抢答的开始。
3>具有数据锁存和显示功能。
抢答开始后,如果有选手按下了抢答按钮,其编号立即锁存并显示在LCD液晶显示屏上。
此外,禁止其他选手再次抢答。
选手的编号一直保存直到主持人清除。
2.扩展功能
1>具有定时抢答功能。
当抢答开始后。
定时器开始倒计时,并显示在LCD上。
2>具有计分功能,初始每位选手10分,以后按选手答题情况可以加分和减分,并将每位选手的得分在LCD上显示。
二、设计原理框图
八路智能抢答器系统可分为三个大的功能模块,抢答鉴别模块,计时模块和译码显示模块。
它们之间的控制关系如图1所示:
当主持人设置答题时间后,启动开始抢答按键时,抢答鉴别模块进入工作状态,选手可以进行抢答,有选手抢答,则抢答鉴别模块锁存该选手的号码,其他选手抢答无效,同时,译码显示选手编号,当定时器时间减少到0秒时,表示抢答时间到,选手抢答无效。
抢答选手的号码和抢答时间的倒计时分别通过译码电路显示在数码管上。
若有选手选中,则选中后开始答题,剩余答题时间译码显示,规定时间内答完题,主持人按键决定是否加分或减分。
三、系统实现原理
基于VHDL语言实现
本方案主要使用VHDL语言编写程序,来实现系统的功能。
利用AltiumDesigner6.0软件来实现程序设计和仿真,最后下载到FPGA芯片中,完成系统的功能要求。
1.基本原理
本系统共由抢答鉴别模块(qdjb.vhdl)、计时模块(jishi.vhdl)、计分模块(jifen.vhdl)和LCD译码显示模块等四个主要部分组成。
抢答过程:
主持人按下系统复位键(RST),系统进入抢答状态,计时模块和计分模块输出初始信号给数码显示模块并显示出初始值。
当某参赛组抢先将抢答键按下时,系统将其余七路抢答信号封锁,组别显示模块送出信号给数码显示模块,从而显示出该抢答成功组别号,并一直保持到下一轮主持人将系统清零为止。
随后,计时模块送出倒计时计数允许信号,开始回答问题,计时显示器则从初始值开始以计时,在规定的时间内根据答题的正误来确定加分或减分,并通过数码显示模块将成绩显示出来。
计时至0时,停止计时,以中止未回答完问题。
若参赛者在规定时间内回答完为题,主持人可给出倒计时计数停止信号。
主持人按下复位键,即RST为高电平有效状态,清除前一次的抢答组别,又可开始新的一轮的抢答。
2.子模块的设计思想和实现
1)抢答鉴别模块
抢答鉴别模块用来准确直观地判断八组抢答者谁最先按下按钮,并为显示端送出信号,通过LCD显示使观众能够清楚地知道是哪一组抢答成功,是整个系统的核心部分。
同时组别显示端为下一模块输入信号,以方便主持人为该组抢答成功者进行加减分的操作。
抢答鉴别模块的元件图如下图所示:
1>抢答鉴别模块VHDL程序
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYLOCKIS
PORT(CLK,start:
INSTD_LOGIC;
S0,S1,S2,S3,S4,S5,S6,S7:
INSTD_LOGIC;
ZB:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
STOP:
OUTSTD_LOGIC;
LED:
OUTSTD_LOGIC_VECTOR(7DOWNTO0);
BAOJING:
OUTSTD_LOGIC);
ENDLOCK;
ARCHITECTUREONEOFLOCKIS
SIGNALG:
STD_LOGIC_VECTOR(7DOWNTO0);
BEGIN
PROCESS(start,CLK,S0,S1,S2,S3,S4,S5,S6,S7)
BEGIN
IFstart='1'THENG<="00000000";LED<="00000000";STOP<='0';BAOJING<='0';
ELSIFCLK'EVENTANDCLK='1'THEN
IF(S7='1')ANDNOT(G(0)='1'ORG
(1)='1'ORG
(2)='1'ORG(3)='1'ORG(4)='1'ORG(5)='1'
ORG(6)='1')THEN
G(7)<='1';LED(7)<='1';BAOJING<='1';
ELSIF(S6='1')ANDNOT(G(0)='1'ORG
(1)='1'ORG
(2)='1'ORG(3)='1'ORG(4)='1'ORG(5)='1'
ORG(7)='1')THEN
G(6)<='1';LED(6)<='1';BAOJING<='1';
ELSIF(S5='1')ANDNOT(G(0)='1'ORG
(1)='1'ORG
(2)='1'ORG(3)='1'ORG(4)='1'ORG(6)='1'
ORG(7)='1')THEN
G(5)<='1';LED(5)<='1';BAOJING<='1';
ELSIF(S4='1')ANDNOT(G(0)='1'ORG
(1)='1'ORG
(2)='1'ORG(3)='1'ORG(5)='1'ORG(6)='1'
ORG(7)='1')THEN
G(4)<='1';LED(4)<='1';BAOJING<='1';
ELSIF(S3='1')ANDNOT(G(0)='1'ORG
(1)='1'ORG
(2)='1'ORG(4)='1'ORG(5)='1'ORG(6)='1'
ORG(7)='1')THEN
G(3)<='1';LED(3)<='1';BAOJING<='1';
ELSIF(S2='1')ANDNOT(G(0)='1'ORG
(1)='1'ORG(3)='1'ORG(4)='1'ORG(5)='1'ORG(6)='1'
ORG(7)='1')THEN
G
(2)<='1';LED
(2)<='1';BAOJING<='1';
ELSIF(S1='1')ANDNOT(G(0)='1'ORG
(2)='1'ORG(3)='1'ORG(4)='1'ORG(5)='1'ORG(6)='1'
ORG(7)='1')THEN
G
(1)<='1';LED
(1)<='1';BAOJING<='1';
ELSIF(S0='1')ANDNOT(G
(1)='1'ORG
(2)='1'ORG(3)='1'ORG(4)='1'ORG(5)='1'ORG(6)='1'
ORG(7)='1')THEN
G(0)<='1';LED(0)<='1';BAOJING<='1';
ENDIF;
STOP<=G(0)ORG
(1)ORG
(2)ORG(3)ORG(4)ORG(5)ORG(6)ORG(7);
ENDIF;
CASEGIS
WHEN"00000001"=>ZB<="0001";
WHEN"00000010"=>ZB<="0010";
WHEN"00000100"=>ZB<="0011";
WHEN"00001000"=>ZB<="0100";
WHEN"00010000"=>ZB<="0101";
WHEN"00100000"=>ZB<="0110";
WHEN"01000000"=>ZB<="0111";
WHEN"10000000"=>ZB<="1000";
WHENOTHERS=>ZB<="0000";
ENDCASE;
ENDPROCESS;
ENDARCHITECTUREONE;
2>抢答鉴别模块Altium仿真
元件图:
VHDTST文件:
STIMULUS0:
process
begin
CLEAR<='0';
WARN<='0';
WAITFOR1NS;
CLEAR<='1';
S0<='1';S1<='0';S2<='0';S3<='0';S4<='0';S5<='0';S6<='0';S7<='0';
WAITFOR1NS;
WARN<='1';
WAITFOR1NS;
CLEAR<='0';
WARN<='0';
WAITFOR1NS;
CLEAR<='1';
S0<='0';S1<='1';S2<='0';S3<='0';S4<='0';S5<='0';S6<='0';S7<='0';
WAITFOR1NS;
WARN<='1';
WAITFOR1NS;
CLEAR<='0';
WARN<='0';
WAITFOR1NS;
CLEAR<='1';
S0<='0';S1<='0';S2<='1';S3<='0';S4<='0';S5<='0';S6<='0';S7<='0';
WAITFOR1NS;
WARN<='1';
WAITFOR1NS;
CLEAR<='0';
WARN<='0';
WAITFOR1NS;
CLEAR<='1';
S0<='0';S1<='0';S2<='0';S3<='1';S4<='0';S5<='0';S6<='0';S7<='0';
WAITFOR1NS;
WARN<='1';
WAITFOR1NS;
CLEAR<='0';
WARN<='0';
WAITFOR1NS;
CLEAR<='1';
S0<='0';S1<='0';S2<='0';S3<='0';S4<='1';S5<='0';S6<='0';S7<='0';
WAITFOR1NS;
WARN<='1';
WAITFOR1NS;
CLEAR<='0';
WARN<='0';
WAITFOR1NS;
CLEAR<='1';
S0<='0';S1<='0';S2<='0';S3<='0';S4<='0';S5<='1';S6<='0';S7<='0';
WAITFOR1NS;
WARN<='1';
WAITFOR1NS;
CLEAR<='0';
WARN<='0';
WAITFOR1NS;
CLEAR<='1';
S0<='0';S1<='0';S2<='0';S3<='0';S4<='0';S5<='0';S6<='1';S7<='0';
WAITFOR1NS;
WARN<='1';
WAITFOR1NS;
CLEAR<='0';
WARN<='0';
WAITFOR1NS;
CLEAR<='1';
S0<='0';S1<='0';S2<='0';S3<='0';S4<='0';S5<='0';S6<='0';S7<='1';
WAITFOR1NS;
WARN<='1';
WAITFOR1NS;
endprocess;
仿真波形图:
2)计时模块
当抢答鉴别模块成功判别出最先按下抢答按钮的参赛组后,在成功鉴别出哪组最先抢答后,由锁存器输出的计时使能信号使能,进入计时状态。
计时模块:
30秒倒计时。
计时模块开始工作从预置初始值开始以秒计时,计时至0秒时停止,以中止答题。
时间通过LCD显示。
元件图如下:
VHDL程序:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityJISHIis
port(CP,CLEAR:
INSTD_LOGIC;
STOP:
INSTD_LOGIC;
TM:
OUTSTD_LOGIC_VECTOR(7DOWNTO0);
BAOJING:
OUTSTD_LOGIC);
endJISHI;
architectureAofJISHIIS
SIGNALYH,YL:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
PROCESS(CP,CLEAR)
BEGIN
IF(CLEAR='1')THEN
YH<="0011";YL<="0000";BAOJING<='0';
ELSIF(CP='1'ANDCP'EVENT)THEN
IFSTOP='0'THEN
IF(YL="0000")THEN
YL<="1001";
IF(YH="0000"ANDYL="0000")THEN
YH<="0000";YL<="0000";BAOJING<='1';
ELSE
YH<=YH-1;
ENDIF;
ELSE
YL<=YL-1;
ENDIF;
ENDIF;
ENDIF;
ENDPROCESS;
PROCESS(YH,YL)
BEGIN
TM<=YH&YL;
ENDPROCESS;
ENDARCHITECTUREA;
3)计分模块
计分模块的运行方式是按照十进制进行加减,即当时钟出现上升沿时就进行加一或者减一的操作。
记分模块为哪组进行记分取决于鉴别模块的输入信号ZB,当ZB=0001时表示S0组最先抢答,则在此模块中为F组记分,当G=0010时表示F1组最先抢答,则在此模块中为F1组记分等等。
以S0组为例来说明此模块的设计,当复位信号CLEAR=1时,系统复位且F组的分值显示初始值,为10分。
当CLEAR=0时,如果该组选手答题正确,则主持人按下加分键,即R=1,此时对该组进行加分操作;如果该组选手答题错误,则主持人按下减分键,即W=1,此时对该组进行减分操作。
元件图如下:
VHDL程序:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityJIFENis
port(CLEAR,clock:
INSTD_LOGIC;
R:
INSTD_LOGIC;
W:
INSTD_LOGIC;
ZB:
INSTD_LOGIC_VECTOR(3DOWNTO0);
F0,F1,F2,F3,F4,F5,F6,F7:
OUTSTD_LOGIC_VECTOR(7DOWNTO0));
ENDJIFEN;
ARCHITECTUREONEOFJIFENIS
SIGNALK0,K1,K2,K3,K4,K5,K6,K7:
STD_LOGIC_VECTOR(7DOWNTO0);
BEGIN
PROCESS(W,R,CLEAR,ZB)
BEGIN
IF(CLEAR='1')THEN
K0<="00010000";K1<="00010000";K2<="00010000";K3<="00010000";K4<="00010000";K5<="00010000";K6<="00010000";
K7<="00010000";
elsIFclock'EVENTANDclock='1'THEN
ifr='1'then
CASEZBIS
WHEN"0001"=>IF(k0(3DOWNTO0)="1001")THEN
k0(3DOWNTO0)<="0000";k0(7DOWNTO4)<=k0(7DOWNTO4)+1;
ELSE
k0(3DOWNTO0)<=k0(3DOWNTO0)+1;
ENDIF;
WHEN"0010"=>IF(k1(3DOWNTO0)="1001")THEN
k1(3DOWNTO0)<="0000";k1(7DOWNTO4)<=k1(7DOWNTO4)+1;
ELSE
k1(3DOWNTO0)<=k1(3DOWNTO0)+1;
ENDIF;
WHEN"0011"=>IF(k2(3DOWNTO0)="1001")THEN
k2(3DOWNTO0)<="0000";k0(7DOWNTO4)<=k2(7DOWNTO4)+1;
ELSE
k2(3DOWNTO0)<=k2(3DOWNTO0)+1;
ENDIF;
WHEN"0100"=>IF(k3(3DOWNTO0)="1001")THEN
k3(3DOWNTO0)<="0000";k3(7DOWNTO4)<=k3(7DOWNTO4)+1;
ELSE
k3(3DOWNTO0)<=k3(3DOWNTO0)+1;
ENDIF;
WHEN"0101"=>IF(k4(3DOWNTO0)="1001")THEN
k4(3DOWNTO0)<="0000";k4(7DOWNTO4)<=k4(7DOWNTO4)+1;
ELSE
k4(3DOWNTO0)<=k4(3DOWNTO0)+1;
ENDIF;
WHEN"0110"=>IF(k5(3DOWNTO0)="1001")THEN
k5(3DOWNTO0)<="0000";k5(7DOWNTO4)<=k5(7DOWNTO4)+1;
ELSE
k5(3DOWNTO0)<=k5(3DOWNTO0)+1;
ENDIF;
WHEN"0111"=>IF(k6(3DOWNTO0)="1001")THEN
k6(3DOWNTO0)<="0000";k6(7DOWNTO4)<=k6(7DOWNTO4)+1;
ELSE
k6(3DOWNTO0)<=k6(3DOWNTO0)+1;
ENDIF;
WHEN"1000"=>IF(k7(3DOWNTO0)="1001")THEN
k7(3DOWNTO0)<="0000";k7(7DOWNTO4)<=k7(7DOWNTO4)+1;
ELSE
k7(3DOWNTO0)<=k7(3DOWNTO0)+1;
ENDIF;
WHENOTHERS=>null;
endcase;
elseifw='1'then
CASEZBIS
WHEN"0001"=>IF(k0(3DOWNTO0)="0000")THEN
k0(3DOWNTO0)<="1001";k0(7DOWNTO4)<=k0(7DOWNTO4)-1;
ELSE
k0(3DOWNTO0)<=k0(3DOWNTO0)-1;
ENDIF;
WHEN"0010"=>IF(k1(3DOWNTO0)="0000")THEN
k1(3DOWNTO0)<="1001";k1(7DOWNTO4)<=k1(7DOWNTO4)-1;
ELSE
k1(3DOWNTO0)<=k1(3DOWNTO0)-1;
ENDIF;
WHEN"0011"=>IF(k2(3DOWNTO0)="0000")THEN
k2(3DOWNTO0)<="1001";k2(7DOWNTO4)<=k2(7DOWNTO4)-1;
ELSE
k2(3DOWNTO0)<=k2(3DOWNTO0)-1;
ENDIF;
WHEN"0100"=>IF(k3(3DOWNTO0)="0000")THEN
k3(3DOWNTO0)<="1001";k3(7DOWNTO4)<=k3(7DOWNTO4)-1;
ELSE
k3(3DOWNTO0)<=k3(3DOWNTO0)-1;
ENDIF;
WHEN"0101"=>IF(k4(3DOWNTO0)="0000")THEN
k4(3DOWNTO0)<="1001";k4(7DOWNTO4)<=k4(7DOWNTO4)-1;
ELSE
k4(3DOWNTO0)<=k4(3DOWNTO0)-1;
ENDIF;
WHEN"0110"=>IF(k5(3DOWNTO0)="0000")THEN
k5(3DOWNTO0)<="1001";k5(7DOWNTO4)<=k5(7DOWNTO4)-1;
ELSE
k5(3DOWNTO0)<=k5(3DOWNTO0)-1;
ENDIF;
WHEN"0111"=>IF(k6(3DOWNTO0)="0000")THEN
k6(3DOWNTO0)<="1001";k6(7DOWNTO4)<=k6(7DOWNTO4)-1;
ELSE
k6(3DOWNTO0)<=k6(3DOWNTO0)-1;
ENDIF;
WHEN"1000"=>IF(k7(3DOWNTO0)="0000")THEN
k7(3DOWNTO0)<="1001";k7(7DOWNTO4)<=k7(7DOWNTO4)-1;
ELSE
k7(3DOWNTO0)<=k7(3DOWNTO0)-1;
ENDIF;
WHENOTHERS=>null;
endcase;
ENDIF;
ENDIF;
ENDIF;
ENDPROCESS;
F0<=K0;
F1<=K1;
F2<=K2;
F3<=K3;
F4<=K4;
F5<=K5;
F6<=K6;
F7<=K7;
ENDARCH
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计 数字式 八路 抢答 报告