课程设计报告
目
院
八人抢答器设计
工程学院
业 10 级电气工程及其自动化 2 班
题
学
专
组员:李国亮 2010160308
李 超 2010160302
黄旭婷 2010160303
何佳琪 2010160330
郭立波 2010160327
目录
第一章
设计任务要求············(1)
第二章
设计流程··············(2)
2.1 设计模块方框图··········(2)
2.2 模块功能分析···········(3)
第三章 电路设计···············(4)
3.1 系统封装图·············(4)
3.2 各种模块的 VHDL 文本输入语言·····(5)
3.3 各种模块的封装图和仿真波形·····(10)
第四章 设计总结···············(16)
参考文献····················(16)
第 1 章 设计任务要求
设计任务和基本要求:
8 人抢答器电路的功能要求如下:
1、 可供 8 人同时参赛,编号为 1 号至 8 号。没人均有一个抢答按钮,开
始抢答时,第一个按下抢答器的参赛者,数码管将显示其号码,喇叭
报警,获得抢答机会。
2、 主持人拥有一个控制开关,用于控制抢答系统的清零和启动抢答状
态。
3、 抢答器具有数据锁存好显示的功能。抢答开始后,若有参赛者按下抢
答按钮,其编号立即锁存,显示在数码管上,同时喇叭发出声音提示。
另外,在最先按下按钮后,需要封锁输入电路,禁止其他选手抢答。
最先抢答者的编号一直保持,直到主持人将系统清零为止。
4、 提高要求:设计时间显示电路,要求抢答者在规定时间内抢答,如在
抢答时间内无人按下抢答器,喇叭报警,抢答结束,数码管闪烁 0 号
码。(注:时间数字显示为倒计时方式)
1
第 2 章 设计流程
2.1 设计模块方框图:
参赛选手
抢答按钮
主持人
控制按钮
秒脉冲
编码器
锁存器
译码器
计时器
号码
显示屏
报
警
器
时间
显示屏
2.2 模块功能分析
2.2.1 参赛选手按钮电路
该电路由 8 个开关按键组成,每一个选手与一个开关对应。开关为常开型,抢答开始时
按下抢答开关时,开关断开,输入抢答信号为低电平。
2.2.2 编码器
编码器的作用是将开关信息转化为 8421BCD 码,以提供数字显示电路所需要的编码输
入。
2.2.3 锁存器
当只要有一个且为任意一个选手抢答输入信号产生时,锁存器电路被触发,在输出端产
生相应的开关电平信息,同时为避免之后的抢答开关按钮也按下产生错乱,最先产生的输出
电平变化又反馈回来将锁存器器锁定住,并保持输出的电平信息。
2.2.4 译码器
译码器的作用是将编码器输出的 8421BCD 码转化为数码管需要的逻辑状态。
2.2.5 号码和时间显示器
数码显示管有发光的共阴二极管(LED)数码管,喇叭为高电平触发。
2.2.6 计时器
通过脉冲来进行计时,用来抢答倒计时。
2.2.7 报警器
当有选手抢答成功时或倒计时到十秒后,喇叭鸣响。
3
第 3 章 电路设计
3.1 系统封装图:
图表 3.1
一、图 3.1 所示为抢答器的系统封装图,可以看到 Q1-Q8 为 8 组选手的输入抢答按钮,
RST 为复位控制信号,CLK 是脉冲信号,该系统描述的功能是当所有开关输入信号 Q1-Q8
均未按下,锁存器输出为低电平,经过 8 个输入反馈信号则为高点平,该信号作为锁存
器时能端控制信号即 EN,使锁存器处在等待接收触发输入状态;当任一开关输入信号
Q1-Q8 中的任一开关按下时,输出信号中必然会有一路为高电平,则反馈信号发生非门
后变成低电平,时能信号 EN 成为低电平后,EN 传给锁存器则立即使锁存器封锁,这时
其他抢答者信息的输入将被封锁,不能再传输到锁存器中。
二、RST 为复位控制信号,也是低电平有效,当主持人复位后即提示抢答开始时,锁存
器全为低电平,反馈时能信号为高电平,是锁存器处于等待抢答输入信号的状态。
三、输入的信号一旦锁定后,译码器的 Y[3..0]信号的输入到 7 段译码器中,7 段译码
器含有 7 段共阴极二极管,对输入的 LED[1]~LED[7]进行验证,LED 数码管对应显示出最
先抢答者的编号,并且报警器发出响声。
四、当使能端按下后,计时器开始倒计时,如果在 10 秒内没有选手按按钮,这报警器
发出响声,并反馈到锁存器的使能端 EN 使 EN 成为低电平,立即使锁存器封锁,这时其
他抢答者信息的输入将被封锁,不能再传输到锁存器中。
4
3.2 各种模块的 VHDL 文本输入语言
一.编码器
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY BM IS
PORT(B1,B2,B3,B4,B5,B6,B7,B8:IN STD_LOGIC;
RST1 :IN STD_LOGIC;
M: OUT STD_LOGIC_VECTOR(3 DOWNTO 0));
END;
ARCHITECTURE one OF BM IS
SIGNAL M1: STD_LOGIC_VECTOR(1 TO 8);
BEGIN
M1<= B1&B2&B3&B4&B5&B6&B7&B8;
PROCESS(M1,RST1)
BEGIN
IF RST1='0' THEN
M<="0000";
ELSE
CASE M1 IS
WHEN "01111111" =>M<="0001";
WHEN "10111111" =>M<="0010";
WHEN "11011111" =>M<="0011";
WHEN "11101111" =>M<="0100";
WHEN "11110111" =>M<="0101";
WHEN "11111011" =>M<="0110";
WHEN "11111101" =>M<="0111";
WHEN "11111110" =>M<="1000";
WHEN OTHERS =>M<="0000";
END CASE;
END IF;
END PROCESS;
END one;
二.锁存器
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY SC IS
PORT(S:IN STD_LOGIC_VECTOR(3 DOWNTO 0);
RST2,EN2:IN STD_LOGIC;
C:OUT STD_LOGIC_VECTOR(3 DOWNTO 0) );
END;
5
ARCHITECTURE TWO OF SC IS
BEGIN
PROCESS(S,EN2,RST2)
BEGIN
IF RST2='0' THEN
C<="0000";
ELSE IF EN2='1' THEN
C<=S;
END IF;
END IF;
END PROCESS;
END TWO;
三.译码器
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY YM IS
PORT(Y:IN STD_LOGIC_VECTOR(3 DOWNTO 0);
LED1:OUT STD_LOGIC_VECTOR(7 DOWNTO 1));
END;
ARCHITECTURE THREE OF YM IS
BEGIN
PROCESS(Y)
BEGIN
CASE Y IS
WHEN "0001"=>LED1<="0000110";
WHEN "0010"=>LED1<="1011011";
WHEN "0011"=>LED1<="1001111";
WHEN "0100"=>LED1<="1100110";
WHEN "0101"=>LED1<="1101101";
WHEN "0110"=>LED1<="1111101";
WHEN "0111"=>LED1<="0000111";
WHEN "1000"=>LED1<="1111111";
WHEN OTHERS=>LED1<="0111111";
END CASE;
END PROCESS;
END THREE;
四.报警器
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY BJ IS
PORT(BC,BS:IN STD_LOGIC_VECTOR(3 DOWNTO 0);
6