数字竞赛抢答器.docx

上传人:b****6 文档编号:6289610 上传时间:2023-01-05 格式:DOCX 页数:24 大小:121.28KB
下载 相关 举报
数字竞赛抢答器.docx_第1页
第1页 / 共24页
数字竞赛抢答器.docx_第2页
第2页 / 共24页
数字竞赛抢答器.docx_第3页
第3页 / 共24页
数字竞赛抢答器.docx_第4页
第4页 / 共24页
数字竞赛抢答器.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

数字竞赛抢答器.docx

《数字竞赛抢答器.docx》由会员分享,可在线阅读,更多相关《数字竞赛抢答器.docx(24页珍藏版)》请在冰豆网上搜索。

数字竞赛抢答器.docx

数字竞赛抢答器

 

长沙学院

 

课程设计说明书

 

题目数字竞赛抢答器的设计

系(部)电子与通信工程系

专业电气工程及其自动化

班级一班

姓名卢玉芳

学号2009042124

指导教师瞿瞾谢明华

起止日期2011-12-19至1-1

 

EDA技术课程设计任务书

系(部):

电子与通信工程系专业:

电气工程及其自动化指导教师:

谢明华

课题名称

数字竞赛抢答器的设计

设计内容及要求

(1)课题内容:

1、设计一个可容纳3组参赛的数字式抢答器,每组设一个按钮,供抢答使用。

2、抢答器具有第一信号鉴别和锁存功能,使除第一抢答者外的按钮不起作用。

3、设置一个主持人“复位”按钮。

4、主持人复位后,开始抢答,第一信号鉴别锁存电路得到信号后,有指示灯显示抢答组别,扬声器发出1秒的音响。

5、设置一个计分电路,每组开始预置10分,由主持人记分,答对一次加1分,答错一次减1分。

要求进行按键防抖动设计。

(2)主要任务:

完成该系统的硬件和软件的设计,并制作出实物装置,调试好后并能实际运用(指导教师提供制作所需的器件),最后就课程设计本身提交一篇课程设计说明书。

设计工作量

1、VHDL语言程序设计;

2、波形仿真;

3、在实验装置上进行硬件测试,并进行演示;

4、提交一份完整的课程设计说明书,包括设计原理、程序设计、程序分析、仿真分析、硬件测试、调试过程,参考文献、设计总结等。

进度安排

起止日期(或时间量)

设计内容(或预期目标)

备注

第1天

课题介绍,答疑,收集材料

第2天

设计方案论证

第3天

进一步讨论方案,对设计方案进行必要的修正,方案确定后开始进行VHDL语言程序设计

第4天

设计VHDL语言程序

第5~9天

在实验装置上进行硬件测试,对VHDL语言程序进行必要的修正,并进行演示

教研室

意见

 

年月日

系(部)主管领导意见

 

年月日

长沙学院课程设计鉴定表

 

姓名

卢玉芳

学号

2009042124

专业

电气工程及其自动化

班级

一班

设计题目

数字竞赛抢答器

指导教师

谢明华

指导教师意见:

 

评定等级:

教师签名:

日期:

答辩小组意见:

 

评定等级:

     答辩小组长签名:

     日期:

    

教研室意见:

 

教研室主任签名:

日期:

 

系(部)意见:

 

系主任签名:

        日期:

     

说明

课程设计成绩分“优秀”、“良好”、“及格”、“不及格”四类;

一.总体设计思想………………………………5

二.设计步骤和调试过程……………………………5

1.抢答器鉴别锁存模块…………………………5

2.抢答器计分模块………………………………6

3.蜂鸣模块………………………………………9

4.译码模块………………………………………9

5.动态扫描模块…………………………………10

6.总体模块………………………………………11

7.各引脚分配………………………………16

三.仿真及仿真结果分析……………………17

四、结论及心得体会…………………………18

五、参考文献…………………………………19

 

一、总体设计思想

1.基本要求:

1)、设计一个可容纳3组参赛的数字式抢答器,每组设一个按钮,供抢答使用。

2)、抢答器具有第一信号鉴别和锁存功能,使除第一抢答者外的按钮不起作用。

3)、设置一个主持人“复位”按钮。

4)、主持人复位后,开始抢答,第一信号鉴别锁存电路得到信号后,有指示灯显示抢答组别,扬声器发出1秒的音响。

5)、设置一个计分电路,每组开始预置10分,由主持人记分,答对一次加1分,答错一次减1分。

要求进行按键防抖动设计。

2.基本原理

本设计为三路智能抢答器,所以这种抢答器要求有三路不同组别的抢答输入信号,并能识别最先抢答的信号,直观地通过数显和蜂鸣等方式显示出组别;同时该系统还应有复位、分数置位功能。

抢答过程:

主持人按下系统复位键(RST),系统进入抢答状态,计分模块输出初始信号给数码显示模块并显示出初始值10。

当某参赛组抢先将抢答键按下时,系统将其余两路路抢答信号封锁,同时蜂鸣器发出声音提示,该组对应的指示灯显示信号,从而显示出该抢答成功组,并一直保持到下一轮主持人将系统清零为止。

主持人对抢答结果进行确认,随后,开始回答问题。

根据答题的正误来确定加分或减分,并通过数码显示模块将成绩显示出来。

主持人按下复位键,即RST为高电平有效状态,清除前一次的抢答组别,又可开始新的一轮的抢答。

此抢答器的设计中采用自顶向下的设计思路,运用VHDL硬件描述语言对各个模块进行层次化、系统化的描述,并用多个进程联系起来。

二、设计步骤和调试过程

模块设计和相应模块程序

将该任务分成几个模块进行设计,分别为:

抢答器鉴别锁存模块、抢答器计分模块、蜂鸣模块、译码模块、动态扫描模块,最后是撰写顶层文件。

抢答器鉴别锁存模块:

抢答器鉴别模块在这个模块中主要实现抢答过程中的抢答功能,并且能实现当有一路抢答按键按下时,该路抢答信号将其余过滤抢答封锁的功能。

其中有三个抢答信号A1,B1,C1;抢答状态显示信号states;系统复位信号en。

VHDL源程序

1.抢答器鉴别锁存模块

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYQDJBIS

PORT(en:

INSTD_LOGIC;

A,B,C:

INSTD_LOGIC;--3个组

A1,B1,C1:

OUTSTD_LOGIC;

STATES:

OUTSTD_LOGIC_VECTOR(2DOWNTO0));

ENDENTITYQDJB;

ARCHITECTUREARTOFQDJBIS

signala_1,b_1,c_1:

std_logic;

BEGIN

PROCESS(CLR,A,B,C)IS

BEGIN

IFen='1'THENSTATES<="0000";a_1<='0';b_1<='0';c_1<='0';--清零

elsifa_1='1'orb_1='1'orc_1='1'thennull;--锁存

elsifa='1'thena_1<='1';states<="001";

elsifb='1'thenb_1<='1';states<="010";

elsifc='1'thenc_1<='1';states<="100";

endif;

a1<=a_1;b1<=b_1;c1<=c_1;

ENDPROCESS;

ENDARCHITECTUREART;

2.抢答器计分模块:

在这个模块中主要实现抢答过程中的加减情况,首先将分数显示复位,即均为10,主持人根据选手答题情况,若选手回答正确则进行加分,即按定加分按钮为ADD;若选手回答错误则进行减分,即按定减分按钮为SUB,选择端为CHOS,用来判定系统是进行加分还是进行减分;输出到计分显示模块的信号为AA,BB,CC。

由于存在按键抖动情况,程序设置了一个JIFEN键,在JIFEN为高电平时,在进行加减分的按键,按键抖动基本平稳,但仍然还存在少许;

VHDL源程序

P_A:

PROCESS(ADD,CHOS)IS

VARIABLEPOINTS_A2:

STD_LOGIC_VECTOR(3DOWNTO0):

="0001";

VARIABLEPOINTS_A1:

STD_LOGIC_VECTOR(3DOWNTO0):

="0000";

VARIABLEPOINTS_B2:

STD_LOGIC_VECTOR(3DOWNTO0):

="0001";

VARIABLEPOINTS_B1:

STD_LOGIC_VECTOR(3DOWNTO0):

="0000";

VARIABLEPOINTS_C2:

STD_LOGIC_VECTOR(3DOWNTO0):

="0001";

VARIABLEPOINTS_C1:

STD_LOGIC_VECTOR(3DOWNTO0):

="0000";

BEGIN

IF(ADD'EVENTANDADD='1')THEN

IFJIFEN=’1’THEN

IFCHOS="001"THEN

IFPOINTS_A1="1001"THEN

POINTS_A1:

="0000";

IFPOINTS_A2="1001"THEN

POINTS_A2:

="0000";

ELSE

POINTS_A2:

=POINTS_A2+1;

ENDIF;

ELSE

POINTS_A1:

=POINTS_A1+1;

ENDIF;

ENDIF;

IFJIFEN=’1’THEN

IFCHOS="010"THEN

IFPOINTS_B1="1001"THEN

POINTS_B1:

="0000";

IFPOINTS_B2="1001"THEN

POINTS_B2:

="0000";

ELSE

POINTS_B2:

=POINTS_B2+1;

ENDIF;

ELSE

POINTS_B1:

=POINTS_B1+1;

ENDIF;

ENDIF;

IFJIFEN=’1’THEN

IFCHOS="100"THEN

IFPOINTS_C1="1001"THEN

POINTS_C1:

="0000";

IFPOINTS_C2="1001"THEN

POINTS_C2:

="0000";

ELSE

POINTS_C2:

=POINTS_C2+1;

ENDIF;

ELSE

POINTS_C1:

=POINTS_C1+1;

ENDIF;

ENDIF;

endif;

AA2<=POINTS_A2;AA1<=POINTS_A1;

BB2<=POINTS_B2;BB1<=POINTS_B1;

CC2<=POINTS_C2;CC1<=POINTS_C1;

ENDPROCESSP_A;

P_B:

PROCESS(SUB,CHOS)IS

VARIABLEPOINTS_D2:

STD_LOGIC_VECTOR(3DOWNTO0):

="0001";

VARIABLEPOINTS_D1:

STD_LOGIC_VECTOR(3DOWNTO0):

="0000";

VARIABLEPOINTS_E2:

STD_LOGIC_VECTOR(3DOWNTO0):

="0001";

VARIABLEPOINTS_E1:

STD_LOGIC_VECTOR(3DOWNTO0):

="0000";

VARIABLEPOINTS_F2:

STD_LOGIC_VECTOR(3DOWNTO0):

="0001";

VARIABLEPOINTS_F1:

STD_LOGIC_VECTOR(3DOWNTO0):

="0000";

BEGIN

IF(SUB'EVENTANDSUB='1')THEN

IFJIFEN=’1’THEN

IFCHOS="001"THEN

IFPOINTS_D1="0000"THEN

POINTS_D1:

="1001";

IFPOINTS_D2="0000"THEN

POINTS_D2:

="1001";

ELSE

POINTS_D2:

=POINTS_D2-1;

ENDIF;

ELSE

POINTS_D1:

=POINTS_D1-1;

ENDIF;

ENDIF;

IFJIFEN=’1’THEN

IFCHOS="010"THEN

IFPOINTS_E1="0000"THEN

POINTS_E1:

="1001";

IFPOINTS_E2="0000"THEN

POINTS_E2:

="1001";

ELSE

POINTS_E2:

=POINTS_E2-1;

ENDIF;

ELSE

POINTS_E1:

=POINTS_E1-1;

ENDIF;

ENDIF;

IFJIFEN=’1’THEN

IFCHOS="100"THEN

IFPOINTS_F1="0000"THEN

POINTS_F1:

="1001";

IFPOINTS_F2="0000"THEN

POINTS_F2:

="1001";

ELSE

POINTS_F2:

=POINTS_F2-1;

ENDIF;

ELSE

POINTS_F1:

=POINTS_F1-1;

ENDIF;

ENDIF;

ENDIF;

DD2<=POINTS_D2;DD1<=POINTS_D1;

EE2<=POINTS_E2;EE1<=POINTS_E1;

FF2<=POINTS_F2;FF1<=POINTS_F1;

ENDPROCESSP_B;

ENDARCHITECTUREART;

3.蜂鸣模块:

在这个模块中主要实现抢答过程中的蜂鸣功能,当抢答者按下抢答键时,除了指示灯显示意外,同时蜂鸣器蜂鸣1秒。

此模块就是运用分频信号来控制蜂鸣器,已达到蜂鸣一秒的实验效果。

当抢答结束时,蜂鸣器停止发声。

process(clk,op)--fengming

begin

ifclk'eventandclk='1'then

ifop=25000000then

op<=0;

clk2<=notclk2;

elseop<=op+1;

endif;

endif;

endprocess;

process(clk0)

begin

ifclk0'eventandclk0='1'then

ifp=5then

p<=0;

elsep<=p+1;

endif;

endif;

endprocess;

4.译码模块:

在这个模块中主要实现抢答过程中将BCD码转换成7段现实数码管的功能。

VHDL源程序

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYYMQIS

PORT(AIN4:

INSTD_LOGIC_VECTOR(3DOWNTO0);

DOUT7:

OUTSTD_LOGIC_VECTOR(6DOWNTO0));

ENDYMQ;

ARCHITECTUREARTOFYMQIS

BEGIN

PROCESS(AIN4)

BEGIN

CASEAIN4IS

WHEN"0000"=>DOUT7<="1111110";--0

WHEN"0001"=>DOUT7<="0110000";--1

WHEN"0010"=>DOUT7<="1101101";--2

WHEN"0011"=>DOUT7<="1111001";--3

WHEN"0100"=>DOUT7<="0110011";--4

WHEN"0101"=>DOUT7<="1011011";--5

WHEN"0110"=>DOUT7<="1011111";--6

WHEN"0111"=>DOUT7<="1110000";--7

WHEN"1000"=>DOUT7<="1111111";--8

WHEN"1001"=>DOUT7<="1111011";--9

WHENOTHERS=>DOUT7<="0000000";

ENDCASE;

ENDPROCESS;

ENDARCHITECTUREART;

波形显示如下:

5.动态扫描模块:

动态显示是将所有显示数据的BCD码按照一定的顺序和变化频率送到公用数据总线上,在通过一个公用的显示译码器译码后,接到数码管的驱动端。

这里是将A,B,C三位选手的回答成绩,即分数显示在数码管上。

硬件测试时,第一二个数码管显示的是A组抢答所得的分数;第三四个数码管显示的是B组抢答所得的分数;第五六个数码管显示的是C组抢答所得的分数。

第七八个数码管灭,不运用到试验中。

VHDL源程序

begin---saomiaoxianshi

process(clk)

begin

ifclk'eventandclk='1'then

ifcnter=25000000thencnter<=0;

elsecnter<=cnter+1;

endif;

endif;

endprocess;

process(newclk)

begin

ifcnter=25000000THENnewclk<='1';

elsenewclk<='0';

endif;

ifnewclk'eventandnewclk='1'then

IFcdi<7thencdi<=cdi+'1';

elsecdi<=(others=>'0');

endif;

endif;

endprocess;

process(cdi)

begin

casecdiis

when"000"=>led_selout<="00000001";

when"001"=>led_selout<="00000010";

when"010"=>led_selout<="00000100";

when"011"=>led_selout<="00001000";

when"100"=>led_selout<="00010000";

when"101"=>led_selout<="00100000";

when"110"=>led_selout<="01000000";

when"111"=>led_selout<="10000000";

endcase;

endprocess;

process(p)

begin

casepis

When"0000"=>led7s<="1000000";

When"0001"=>led7s<="1111001";

When"0010"=>led7s<="0100100";

When"0011"=>led7s<="0110000";

When"0100"=>led7s<="0011001";

When"0101"=>led7s<="0010010";

When"0110"=>led7s<="0000010";

When"0111"=>led7s<="1111000";

When"1000"=>led7s<="0000000";

When"1001"=>led7s<="0010000";

whenothers=>null;

endcase;

endprocess;

6.采用自顶向下的设计思路,运用VHDL硬件描述语言对各个模块进行层次化、系统化的描述,并用多个进程联系起来。

综合以上模块,数字竞赛抢答器的总程序如下所示:

本程序以一个总的源体文件自顶向下,将上面的模块以进程的方式有顺序的插入,得到以下结果。

libraryieee;

useieee.std_logic_1164.all;

entityqiangdaqiis

port(clk:

instd_logic;

rst,en:

instd_logic;

JIFEN:

instd_logic;

A,B,C:

instd_logic;

SUB,ADD:

instd_logic;

CHOS:

instd_logic_vector(2downto0);

ring:

outstd_logic;

led_selout:

outstd_logic_vector(7downto0);

led7s:

outstd_logic_vector(6downto0));

endentityqiangdaqi;

architectureartofqiangdaqiis

signalnum:

integerrange0to50000000;

signala_1,b_1,c_1:

std_logic;

signalqq:

integerrange25000000to0;

signalCdi:

std_logic_vector(2downto0);

signalcnter:

integerrange0to25000000;

signalnewclk:

std_logic;

signalop:

integerrange25000000downto0;

signalp:

integerrange5downto0;

signalclk0,clk1,clk2:

std_logic;

signalen:

std_logic;

signalA1,B1,C1:

std_logic_vector(2downto0);

 

process(clk,ft)----fenpin;

begin

ifclk'eventandclk='1'then

ifft<25000000then

ft<='0';

else

ft<='1';

endif;

endif;

endprocess;

end;

process(rst,states)----jianbiesuocun;

begin

ifrst='1'thenstates<="0000";a_1<='0';b_1<='0';c_1<='0';--清零

elsifa_1='1'orb_1='1'orc_1='1'thennull;--锁存

elsifa='1'thena_1<='1';states<="001";

elsifb='1'thenb_1<='1';states<="010";

elsifc='1'thenc_1<='1';states<="100";

endif;

a1<=a_1;b1<=b_1;c1<=c_1;

endprocess;

endarchitectureart;

PROCESS(CHOS,ADD,SUB)----jifen;

BEGIN

P_A:

PROCESS(

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1