数字竞赛抢答器_第1页
数字竞赛抢答器_第2页
数字竞赛抢答器_第3页
数字竞赛抢答器_第4页
数字竞赛抢答器_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、长 沙 学 院课程设计说明书题目 数字竞赛抢答器的设计 系(部) 电子与通信工程系 专业 电气工程及其自动化 班级 一班 姓名 卢玉芳 学号 2009042124 指导教师 瞿瞾 谢明华 起止日期 2011-12-19至1-1 EDA技术课程设计任务书系(部):电子与通信工程系 专业:电气工程及其自动化 指导教师:谢明华课题名称数字竞赛抢答器的设计设计内容及要求(1)课题内容:1、设计一个可容纳3组参赛的数字式抢答器,每组设一个按钮,供抢答使用。2、抢答器具有第一信号鉴别和锁存功能,使除第一抢答者外的按钮不起作用。3、设置一个主持人“复位”按钮。4、主持人复位后,开始抢答,第一信号鉴别锁存电路

2、得到信号后,有指示灯显示抢答组别,扬声器发出1秒的音响。5、设置一个计分电路,每组开始预置10分,由主持人记分,答对一次加1分,答错一次减1分。要求进行按键防抖动设计。(2)主要任务:完成该系统的硬件和软件的设计,并制作出实物装置,调试好后并能实际运用(指导教师提供制作所需的器件),最后就课程设计本身提交一篇课程设计说明书。设计工作量1、VHDL语言程序设计;2、波形仿真;3、在实验装置上进行硬件测试,并进行演示;4、提交一份完整的课程设计说明书,包括设计原理、程序设计、程序分析、仿真分析、硬件测试、调试过程,参考文献、设计总结等。进度安排起止日期(或时间量)设计内容(或预期目标)备注第1天课

3、题介绍,答疑,收集材料第2天设计方案论证第3天进一步讨论方案, 对设计方案进行必要的修正,方案确定后开始进行VHDL语言程序设计第4天设计VHDL语言程序第59天在实验装置上进行硬件测试,对VHDL语言程序进行必要的修正,并进行演示教研室意见年 月 日系(部)主管领导意见年 月 日长沙学院课程设计鉴定表姓名卢玉芳学号2009042124专业电气工程及其自动化班级一班设计题目数字竞赛抢答器指导教师谢明华指导教师意见:评定等级: 教师签名: 日期: 答辩小组意见:评定等级:答辩小组长签名:日期:教研室意见:教研室主任签名: 日期: 系(部)意见:系主任签名:日期:说明课程设计成绩分“优秀”、“良好

4、”、“及格”、“不及格”四类;目 录一总体设计思想5二设计步骤和调试过程51.抢答器鉴别锁存模块52.抢答器计分模块63.蜂鸣模块94.译码模块95.动态扫描模块106.总体模块117.各引脚分配16三仿真及仿真结果分析17四、结论及心得体会18五、参考文献19一、总体设计思想1.基本要求: 1)、设计一个可容纳3组参赛的数字式抢答器,每组设一个按钮,供抢答使用。 2)、抢答器具有第一信号鉴别和锁存功能,使除第一抢答者外的按钮不起作用。 3)、设置一个主持人“复位”按钮。 4)、主持人复位后,开始抢答,第一信号鉴别锁存电路得到信号后,有指示灯显示抢答组别,扬声器 发出1秒的音响。 5)、设置一

5、个计分电路,每组开始预置10分,由主持人记分,答对一次加1分,答错一次减1分。要求进行按键防抖动设计。 2.基本原理 本设计为三路智能抢答器,所以这种抢答器要求有三路不同组别的抢答输入信号,并能识别最先抢答的信号,直观地通过数显和蜂鸣等方式显示出组别;同时该系统还应有复位、分数置位功能。 抢答过程:主持人按下系统复位键(RST),系统进入抢答状态,计分模块输出初始信号给数码显示模块并显示出初始值10。当某参赛组抢先将抢答键按下时,系统将其余两路路抢答信号封锁,同时蜂鸣器发出声音提示,该组对应的指示灯显示信号,从而显示出该抢答成功组,并一直保持到下一轮主持人将系统清零为止。主持人对抢答结果进行确

6、认,随后,开始回答问题。根据答题的正误来确定加分或减分,并通过数码显示模块将成绩显示出来。主持人按下复位键,即RST 为高电平有效状态,清除前一次的抢答组别,又可开始新的一轮的抢答。 此抢答器的设计中采用自顶向下的设计思路,运用VHDL 硬件描述语言对各个模块进行层次化、系统化的描述,并用多个进程联系起来。 二、设计步骤和调试过程模块设计和相应模块程序将该任务分成几个模块进行设计,分别为:抢答器鉴别锁存模块、抢答器计分模块、蜂鸣模块、译码模块、动态扫描模块,最后是撰写顶层文件。 抢答器鉴别锁存模块: 抢答器鉴别模块在这个模块中主要实现抢答过程中的抢答功能,并且能实现当有一路抢答按键按下时,该路

7、抢答信号将其余过滤抢答封锁的功能。其中有三个抢答信号 A1,B1,C1;抢答状态显示信号 states;系统复位信号 en。 VHDL 源程序1.抢答器鉴别锁存模块 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY QDJB IS PORT(en: IN STD_LOGIC; A, B, C: IN STD_LOGIC; -3个组 A1,B1,C1: OUT STD_LOGIC; STATES: OUT STD_LOGIC_VECTOR(2 DOWNTO 0); END ENTITY QDJB; ARCHITECTURE ART OF QDJB

8、 ISsignal a_1,b_1,c_1:std_logic; BEGIN PROCESS(CLR,A,B,C) IS BEGINIF en='1' THEN STATES<="0000"a_1<='0'b_1<='0'c_1<='0'-清零elsif a_1='1' or b_1='1' or c_1='1' then null; -锁存elsif a='1' then a_1<='1'states

9、<="001"elsif b='1' then b_1<='1'states<="010"elsif c='1' then c_1<='1'states<="100"end if;a1<=a_1;b1<=b_1;c1<=c_1;END PROCESS; END ARCHITECTURE ART;2.抢答器计分模块: 在这个模块中主要实现抢答过程中的加减情况,首先将分数显示复位,即均为10,主持人根据选手答题情况,若选手回答正

10、确则进行加分,即按定加分按钮为ADD;若选手回答错误则进行减分,即按定减分按钮为SUB,选择端为CHOS,用来判定系统是进行加分还是进行减分;输出到计分显示模块的信号为AA,BB,CC。由于存在按键抖动情况,程序设置了一个JIFEN键,在JIFEN为高电平时,在进行加减分的按键,按键抖动基本平稳,但仍然还存在少许;VHDL 源程序 P_A:PROCESS(ADD,CHOS) IS VARIABLE POINTS_A2: STD_LOGIC_VECTOR(3 DOWNTO 0):="0001" VARIABLE POINTS_A1: STD_LOGIC_VECTOR(3 DO

11、WNTO 0):="0000" VARIABLE POINTS_B2: STD_LOGIC_VECTOR(3 DOWNTO 0):="0001" VARIABLE POINTS_B1: STD_LOGIC_VECTOR(3 DOWNTO 0):="0000" VARIABLE POINTS_C2: STD_LOGIC_VECTOR(3 DOWNTO 0):="0001" VARIABLE POINTS_C1: STD_LOGIC_VECTOR(3 DOWNTO 0):="0000"BEGINIF

12、(ADD'EVENT AND ADD='1')THENIF JIFEN=1 THENIF CHOS="001"THEN IF POINTS_A1="1001" THEN POINTS_A1:="0000" IF POINTS_A2="1001" THEN POINTS_A2:="0000" ELSE POINTS_A2:=POINTS_A2+1; END IF; ELSE POINTS_A1:=POINTS_A1+1; END IF; END IF; IF JIFEN=1

13、 THEN IF CHOS="010" THEN IF POINTS_B1="1001" THEN POINTS_B1:="0000" IF POINTS_B2="1001" THEN POINTS_B2:="0000" ELSE POINTS_B2:=POINTS_B2+1; END IF; ELSE POINTS_B1:=POINTS_B1+1; END IF;END IF; IF JIFEN=1 THENIF CHOS="100" THEN IF POINTS_C1=&

14、quot;1001" THEN POINTS_C1:="0000" IF POINTS_C2="1001" THEN POINTS_C2:="0000" ELSE POINTS_C2:=POINTS_C2+1; END IF; ELSE POINTS_C1:=POINTS_C1+1; END IF;END IF;end if; AA2<=POINTS_A2; AA1<=POINTS_A1; BB2<=POINTS_B2; BB1<=POINTS_B1; CC2<=POINTS_C2; CC1&l

15、t;=POINTS_C1; END PROCESS P_A; P_B: PROCESS(SUB,CHOS) IS VARIABLE POINTS_D2: STD_LOGIC_VECTOR(3 DOWNTO 0):="0001" VARIABLE POINTS_D1: STD_LOGIC_VECTOR(3 DOWNTO 0):="0000" VARIABLE POINTS_E2: STD_LOGIC_VECTOR(3 DOWNTO 0):="0001" VARIABLE POINTS_E1: STD_LOGIC_VECTOR(3 DOW

16、NTO 0):="0000" VARIABLE POINTS_F2: STD_LOGIC_VECTOR(3 DOWNTO 0):="0001" VARIABLE POINTS_F1: STD_LOGIC_VECTOR(3 DOWNTO 0):="0000" BEGIN IF(SUB'EVENT AND SUB='1') THEN IF JIFEN=1 THENIF CHOS="001" THEN IF POINTS_D1="0000" THEN POINTS_D1:=&q

17、uot;1001" IF POINTS_D2="0000" THENPOINTS_D2:="1001" ELSEPOINTS_D2:=POINTS_D2-1; END IF; ELSE POINTS_D1:=POINTS_D1-1; END IF; END IF;IF JIFEN=1 THEN I F CHOS="010" THEN IF POINTS_E1="0000" THEN POINTS_E1:="1001" IF POINTS_E2="0000" THEN

18、POINTS_E2:="1001" ELSEPOINTS_E2:=POINTS_E2-1; END IF; ELSE POINTS_E1:=POINTS_E1-1; END IF; END IF;IF JIFEN=1 THENIF CHOS="100" THEN IF POINTS_F1="0000" THEN POINTS_F1:="1001" IF POINTS_F2="0000" THENPOINTS_F2:="1001" ELSEPOINTS_F2:=POINTS_F

19、2-1; END IF; ELSE POINTS_F1:=POINTS_F1-1; END IF; END IF; END IF; DD2<=POINTS_D2; DD1<=POINTS_D1; EE2<=POINTS_E2; EE1<=POINTS_E1; FF2<=POINTS_F2; FF1<=POINTS_F1; END PROCESS P_B;END ARCHITECTURE ART;3.蜂鸣模块: 在这个模块中主要实现抢答过程中的蜂鸣功能,当抢答者按下抢答键时,除了指示灯显示意外,同时蜂鸣器蜂鸣1秒。此模块就是运用分频信号来控制蜂鸣器,已达到蜂鸣

20、一秒的实验效果。当抢答结束时,蜂鸣器停止发声。process(clk,op) -fengmingbegin if clk'event and clk='1' then if op=25000000 then op<=0; clk2 <= not clk2; else op<=op+1; end if; end if;end process;process(clk0)begin if clk0'event and clk0='1' then if p=5 then p<=0; else p<=p+1; end if;

21、end if;end process;4.译码模块: 在这个模块中主要实现抢答过程中将 BCD 码转换成 7 段现实数码管的功能。 VHDL 源程序 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); DOUT7:OUT STD_LOGIC_VECTOR(6 DOWNTO 0); END YMQ; ARCHITECTURE ART OF YMQ IS BEGIN PROCESS(A

22、IN4) BEGIN CASE AIN4 IS WHEN "0000"=>DOUT7<="1111110" -0WHEN "0001"=>DOUT7<="0110000" -1 WHEN "0010"=>DOUT7<="1101101" -2WHEN "0011"=>DOUT7<="1111001" -3WHEN "0100"=>DOUT7<="0

23、110011" -4WHEN "0101"=>DOUT7<="1011011" -5WHEN "0110"=>DOUT7<="1011111" -6WHEN "0111"=>DOUT7<="1110000" -7WHEN "1000"=>DOUT7<="1111111" -8WHEN "1001"=>DOUT7<="1111011&quo

24、t; -9WHEN OTHERS=>DOUT7<="0000000" END CASE; END PROCESS; END ARCHITECTURE ART; 波形显示如下:5.动态扫描模块: 动态显示是将所有显示数据的BCD码按照一定的顺序和变化频率送到公用数据总线上,在通过一个公用的显示译码器译码后,接到数码管的驱动端。这里是将A,B,C三位选手的回答成绩,即分数显示在数码管上。 硬件测试时,第一二个数码管显示的是A组抢答所得的分数;第三四个数码管显示的是B组抢答所得的分数;第五六个数码管显示的是C组抢答所得的分数。第七八个数码管灭,不运用到试验中。VHDL

25、 源程序 begin -saomiaoxianshi process(clk) begin if clk'event and clk='1' then if cnter=25000000 then cnter<=0; else cnter<=cnter+1; end if ; end if; end process;process(newclk) begin if cnter=25000000 THEN newclk<='1' else newclk<='0' end if; if newclk'event

26、 and newclk='1' then IF cdi<7 then cdi<=cdi+'1' else cdi<=(others=>'0'); end if; end if ;end process; process(cdi) begin case cdi is when "000"=>led_selout<="00000001" when "001"=>led_selout<="00000010" when &quo

27、t;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

28、 "111"=>led_selout<="10000000" end case; end process;process(p) begin case p is When "0000"=>led7s<="1000000" When "0001"=>led7s<="1111001" When "0010"=>led7s<="0100100" When "0011"=>

29、led7s<="0110000"When "0100"=>led7s<="0011001" When "0101"=>led7s<="0010010"When "0110"=>led7s<="0000010"When "0111"=>led7s<="1111000"When "1000"=>led7s<="0000000&

30、quot; When "1001"=>led7s<="0010000" when others => null; end case;end process;6. 采用自顶向下的设计思路,运用VHDL 硬件描述语言对各个模块进行层次化、系统化的描述,并用多个进程联系起来。综合以上模块,数字竞赛抢答器的总程序如下所示:本程序以一个总的源体文件自顶向下,将上面的模块以进程的方式有顺序的插入,得到以下结果。library ieee; use ieee.std_logic_1164.all; entity qiangdaqi is port(cl

31、k:in std_logic; rst,en:in std_logic; JIFEN: in std_logic; A,B,C:in std_logic; SUB,ADD:in std_logic; CHOS: in std_logic_vector(2 downto 0); ring:out std_logic;led_selout: out std_logic_vector(7 downto 0);led7s: out std_logic_vector(6 downto 0) );end entity qiangdaqi;architecture art of qiangdaqi is s

32、ignal num:integer range 0 to 50000000; signal a_1,b_1,c_1:std_logic; signal qq: integer range 25000000 to 0; signal Cdi:std_logic_vector(2 downto 0); signal cnter:integer range 0 to 25000000; signal newclk: std_logic; signal op: integer range 25000000 downto 0; signal p: integer range 5 downto 0; si

33、gnal clk0,clk1,clk2: std_logic; signal en:std_logic; signal A1,B1,C1: std_logic_vector(2 downto 0);process(clk,ft) -fenpin; begin if clk'event and clk='1' thenif ft<25000000 thenft<='0'elseft<='1'end if ;end if;end process;end;process(rst,states) -jianbiesuocun;

34、begin if rst='1' then states<="0000"a_1<='0'b_1<='0'c_1<='0'-清零 elsif a_1='1' or b_1='1' or c_1='1' then null; -锁存 elsif a='1' then a_1<='1'states<="001" elsif b='1' then b_1<=

35、9;1'states<="010" elsif c='1' then c_1<='1'states<="100" end if; a1<=a_1;b1<=b_1;c1<=c_1;end process; end architecture art;PROCESS(CHOS,ADD,SUB) -jifen;BEGIN P_A:PROCESS(ADD,CHOS) IS VARIABLE POINTS_A2: STD_LOGIC_VECTOR(3 DOWNTO 0):="000

36、1" VARIABLE POINTS_A1: STD_LOGIC_VECTOR(3 DOWNTO 0):="0000" VARIABLE POINTS_B2: STD_LOGIC_VECTOR(3 DOWNTO 0):="0001" VARIABLE POINTS_B1: STD_LOGIC_VECTOR(3 DOWNTO 0):="0000" VARIABLE POINTS_C2: STD_LOGIC_VECTOR(3 DOWNTO 0):="0001" VARIABLE POINTS_C1: STD_

37、LOGIC_VECTOR(3 DOWNTO 0):="0000"BEGINIF(ADD'EVENT AND ADD='1')THENIF JIFEN=1 THENIF CHOS="001"THEN IF POINTS_A1="1001" THEN POINTS_A1:="0000" IF POINTS_A2="1001" THEN POINTS_A2:="0000" ELSE POINTS_A2:=POINTS_A2+1; END IF; ELSE P

38、OINTS_A1:=POINTS_A1+1; END IF;END IF; IF JIFEN=1 THEN IF CHOS="010" THEN IF POINTS_B1="1001" THEN POINTS_B1:="0000" IF POINTS_B2="1001" THEN POINTS_B2:="0000" ELSE POINTS_B2:=POINTS_B2+1; END IF; ELSE POINTS_B1:=POINTS_B1+1; END IF;END IF;IF JIFEN=1

39、THEN IF CHOS="100" THEN IF POINTS_C1="1001" THEN POINTS_C1:="0000" IF POINTS_C2="1001" THEN POINTS_C2:="0000" ELSE POINTS_C2:=POINTS_C2+1; END IF; ELSE POINTS_C1:=POINTS_C1+1; END IF;END IF;END IF; AA2<=POINTS_A2; AA1<=POINTS_A1; BB2<=POINTS

40、_B2; BB1<=POINTS_B1; CC2<=POINTS_C2; CC1<=POINTS_C1; END PROCESS P_A; P_B: PROCESS(SUB,CHOS) IS VARIABLE POINTS_D2: STD_LOGIC_VECTOR(3 DOWNTO 0):="0001" VARIABLE POINTS_D1: STD_LOGIC_VECTOR(3 DOWNTO 0):="0000" VARIABLE POINTS_E2: STD_LOGIC_VECTOR(3 DOWNTO 0):="0001&

41、quot; VARIABLE POINTS_E1: STD_LOGIC_VECTOR(3 DOWNTO 0):="0000" VARIABLE POINTS_F2: STD_LOGIC_VECTOR(3 DOWNTO 0):="0001" VARIABLE POINTS_F1: STD_LOGIC_VECTOR(3 DOWNTO 0):="0000"BEGINIF(SUB'EVENT AND SUB='1') THENIF CHOS="001" THENIF JIFEN=1 THEN IF

42、POINTS_D1="0000" THEN POINTS_D1:="1001" IF POINTS_D2="0000" THEN POINTS_D2:="1001" ELSE POINTS_D2:=POINTS_D2-1; END IF; ELSE POINTS_D1:=POINTS_D1-1; END IF;END IF;IF JIFEN=1 THENIF CHOS="010" THEN IF POINTS_E1="0000" THEN POINTS_E1:="1

43、001" IF POINTS_E2="0000" THEN POINTS_E2:="1001" ELSE POINTS_E2:=POINTS_E2-1; END IF; ELSE POINTS_E1:=POINTS_E1-1; END IF;END IF;IF JIFEN=1 THENIF CHOS="100" THEN IF POINTS_F1="0000" THEN POINTS_F1:="1001" IF POINTS_F2="0000" THEN POINT

44、S_F2:="1001" ELSE POINTS_F2:=POINTS_F2-1; END IF; ELSE POINTS_F1:=POINTS_F1-1; END IF; END IF;END IF; DD2<=POINTS_D2; DD1<=POINTS_D1; EE2<=POINTS_E2; EE1<=POINTS_E1; FF2<=POINTS_F2; FF1<=POINTS_F1;END PROCESS P_B;END ARCHITECTURE ART;process(clk,op) -fengmingbegin if clk&

45、#39;event and clk='1' then if op=25000000 then op<=0; clk2 <= not clk2; else op<=op+1; end if; end if;end process;process(clk0)begin if clk0'event and clk0='1' then if p=5 then p<=0; else p<=p+1; end if; end if;end process;begin -saomiaoxianshi process(clk) begin i

46、f clk'event and clk='1' then if cnter=25000000 then cnter<=0; else cnter<=cnter+1; end if ; end if; end process;process(newclk) begin if cnter=25000000 THEN newclk<='1' else newclk<='0' end if; if newclk'event and newclk='1' then IF cdi<7 then c

47、di<=cdi+'1' else cdi<=(others=>'0'); end if; end if ;end process; process(cdi) begin case cdi is when "000"=>led_selout<="00000001" when "001"=>led_selout<="00000010" when "010"=>led_selout<="00000100&q

48、uot; when "011"=>led_selout<="00001000" when "100"=>led_selout<="00010000" when "101"=>led_selout<="00100000" when "110"=>led_selout<="01000000" when "111"=>led_selout<="10000

49、000" end case; end process;process(p) begin case p is When "0000"=>led7s<="1000000" When "0001"=>led7s<="1111001" When "0010"=>led7s<="0100100" When "0011"=>led7s<="0110000"When "0100&qu

50、ot;=>led7s<="0011001"When "0101"=>led7s<="0010010" When "0110"=>led7s<="0000010" When "0111"=>led7s<="1111000" When "1000"=>led7s<="0000000"When "1001"=>led7s<="0010000" when others => null; end case;end process;process(rst,en,clk2) -送到蜂鸣器 beginif rst='1' thenring<='0'elsif en='1' thenring<=clk2;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论