1、数电课程设计报告抢答器湖南大学电气与信息工程学院本科生课程设计题目: 抢答器课程:数电课程设计专业:电气工程及其自动化班级:学号:姓名:指导老师: 设计时间: 2012年6月 一、设计任务2二、原理框图2三、液晶显示器及相关按键4四、设计的逻辑结构及基本逻辑源程序5五、思考题34六、心得体会34一、设计任务 基本要求: 1、设计制作一个可容纳8个组参赛的抢答器,每组控制一个抢答开关。2、设置主持人控制键:J0控制整个系统清零,J1用于发布抢答开始命令。3、系统具有第一抢答信号鉴别和锁存功能4、系统以三种方式指示第一抢答者:第一是点亮对应组的发光二极管;第二是液晶屏显示组别;第三是第一抢答者产生
2、时,扬声器以“嘀嘟”双频音响。附加功能: 1、系统具有提前抢答的犯规记录功能,扬声器发出特殊的高频音响。同时,组别显示数码管和LED指示灯都指示出该犯规组别。2、设计积分电路。3、限时抢答。二、原理框图三、液晶显示器及相关按键1、 液晶显示示意图 10101010101010103002、 开关示意图 123456788:START使能 为高电平时抢答有效,有抢答则为正确输出,否则为错误输出7:RST清零 重新开始一道题目时的清零,为高电平时清零,正常工作时为低电平1:RST1分数清零 为高电平时将分数清零,正常工作时为低电平键盘示意图3、 键盘示意图 12345678ADDSUB 1-8号键
3、: 选手抢答按键 ADD: 加计分SUB: 减计分 四、设计的逻辑结构及基本逻辑源程序1、主抢答器模块 包括LOCK模块、Vfangui模块和计时模块。思路:WARN为高电平表示计时时间到,START由开关控制,由低电平变为高电平时计时开始,为高电平时抢答有效。RST由开关控制,为高电平时清零,正常工作时应置为低电平。CLK为工作时钟,频率为10MHZ。工作时先将模块清零,则JS、G1、G2输出都为低电平,计时时间初始化,这里设置为30s。再将START置为高电平,JS变为高电平,开始计时,在计时结束之前WARN为低电平,此时若有人抢答,抢答有效且为正常抢答,LOCK模块有输出,G1相应的位变
4、为高电平,且JS变为低电平,计时停止。LOCK模块有输出的必要条件是START为高电平且WARN为低电平。犯规抢答的情况:计时还没开始,即清零后START为低电平时抢答视为犯规,或者计时已经结束,即WARN 由低电平变为高电平后抢答视为犯规。这两种情况Vfangui模块有输出,G2相应的位变为高电平。Vfangui模块有输出的必要条件是START为低电平或者WARN为高电平。特别强调:对于每一道抢答题,无论是正常抢答或者是犯规抢答,都只能记录一组,即只针对第一组抢答的选手,后面再次抢答无效,则需在VHDL程序中加入锁定的功能,对于如何实现,详见下面的程序。LOCK模块(正常抢答) :LIBRA
5、RY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY LOCK IS PORT( clk,CLEAR,START,WARN:IN STD_LOGIC; S:IN STD_LOGIC_VECTOR(7 DOWNTO 0); G:OUT STD_LOGIC_VECTOR(7 DOWNTO 0); JS:OUT STD_LOGIC );END LOCK;ARCHITECTURE ONE OF LOCK ISsignal a: STD_LOGIC; BEGIN PROCESS(CLEAR,START,S,WARN,clk) BEGIN if(clkevent and c
6、lk=1) then IF CLEAR=1 THEN G=00000000; JS=0;a=0; ELSIF START=1 THEN JS=1; IF WARN=0 THEN IF(S(7)=1 AND s(0)=0AND s(1)=0AND s(2)=0AND s(3)=0AND s(4)=0AND s(5)=0AND s(6)=0 and a=0) THEN G=10000000; a=1; ELSIF(S(6)=1 AND S(0)=0AND S(1)=0AND S(2)=0AND S(3)=0AND S(4)=0AND S(5)=0AND S(7)=0 and a=0) THEN G
7、=01000000; a=1; ELSIF(S(5)=1 AND S(0)=0AND S(1)=0AND S(2)=0AND S(3)=0AND S(4)=0AND S(6)=0AND S(7)=0 and a=0) THEN G=00100000; a=1; ELSIF(S(4)=1 AND S(0)=0AND S(1)=0AND S(2)=0AND S(3)=0AND S(7)=0AND S(5)=0AND S(6)=0 and a=0) THEN G=00010000; a=1; ELSIF(S(3)=1 AND S(0)=0AND S(1)=0AND S(2)=0AND S(7)=0A
8、ND S(4)=0AND S(5)=0AND S(6)=0 and a=0) THEN G=00001000; a=1; ELSIF(S(2)=1 AND S(0)=0AND S(1)=0AND S(7)=0AND S(3)=0AND S(4)=0AND S(5)=0AND S(6)=0 and a=0) THEN G=00000100; a=1; ELSIF(S(1)=1 AND S(0)=0AND S(7)=0AND S(2)=0AND S(3)=0AND S(4)=0AND S(5)=0AND S(6)=0and a=0) THEN G=00000010; a=1; ELSIF(S(0)
9、=1 AND S(7)=0AND S(1)=0AND S(2)=0AND S(3)=0AND S(4)=0AND S(5)=0AND s(6)=0 and a=0) THEN G=00000001; a=1; END IF; JS=NOT a ; END IF; END IF; END IF; END PROCESS; END ONE;注:通过变量a实现锁定功能。 (省略激励)分析:清零后输出都为0,在CLEAR为低电平,START为高电平时,JS变为1,开始计时,1号选手抢答后,输出G的最低位变为1,JS变为0,停止计时,此时再有选手抢答,输出不改变,实现了锁定功能。Vfangui模块(犯规
10、抢答) LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY FAN IS PORT( clk,START,WARN,CLEAR:IN STD_LOGIC; P:IN STD_LOGIC_VECTOR(7 DOWNTO 0); G:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END FAN;ARCHITECTURE SEVEN OF FAN IS - SIGNAL GS:STD_LOGIC_VECTOR(7 DOWNTO 0); signal a: STD_LOGIC; BEGIN PROCESS(START,P,clk,CLEA
11、R) BEGIN if(clkevent and clk=1) then IF CLEAR=1 THEN G=00000000;a=0; ELSIF START=0 OR WARN=1 THEN IF(P(7)=1 AND P(0)=0AND P(1)=0AND P(2)=0AND P(3)=0AND P(4)=0AND P(5)=0AND P(6)=0 and a=0) THEN G=10000000; a=1; ELSIF(P(6)=1 AND P(0)=0AND P(1)=0AND P(2)=0AND P(3)=0AND P(4)=0AND P(5)=0AND P(7)=0 and a=
12、0) THEN G=01000000; a=1; ELSIF(P(5)=1 AND P(0)=0AND P(1)=0AND P(2)=0AND P(3)=0AND P(4)=0AND P(6)=0AND P(7)=0 and a=0) THEN G=00100000; a=1; ELSIF(P(4)=1 AND P(0)=0AND P(1)=0AND P(2)=0AND P(3)=0AND P(7)=0AND P(5)=0AND P(6)=0 and a=0) THEN G=00010000; a=1; ELSIF(P(3)=1 AND P(0)=0AND P(1)=0AND P(2)=0AN
13、D P(7)=0AND P(4)=0AND P(5)=0AND P(6)=0 and a=0) THEN G=00001000; a=1; ELSIF(P(2)=1 AND P(0)=0AND P(1)=0AND P(7)=0AND P(3)=0AND P(4)=0AND P(5)=0AND P(6)=0 and a=0) THEN G=00000100; a=1; ELSIF(P(1)=1 AND P(0)=0AND P(7)=0AND P(2)=0AND P(3)=0AND P(4)=0AND P(5)=0AND P(6)=0and a=0) THEN G=00000010; a=1; E
14、LSIF(P(0)=1 AND P(7)=0AND P(1)=0AND P(2)=0AND P(3)=0AND P(4)=0AND P(5)=0AND P(6)=0 and a=0) THEN G=00000001; a=1; END IF; END IF; END IF; END PROCESS; END SEVEN; 分析:当START为0(计时没有开始)和WARN为1(计时结束)时,有选手抢答都能有相应的输出,且再有选手抢答时,输出不改变,实现了锁定功能。COUNT模块(计时模块)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_
15、LOGIC_UNSIGNED.ALL;ENTITY COUNT IS PORT( CLK,JS,SET:IN STD_LOGIC; HI,LO:OUT STD_LOGIC_VECTOR(7 DOWNTO 0); WARN:OUT STD_LOGIC); END COUNT; ARCHITECTURE SIX OF COUNT IS SIGNAL HS:STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL LS:STD_LOGIC_VECTOR(3 DOWNTO 0); CONSTANT FPB:INTEGER :=9999999; CONSTANT TEMP:INTEGER
16、 :=4999999; SIGNAL AQI:INTEGER RANGE 0 TO FPB; SIGNAL CLKOUT :STD_LOGIC; BEGIN PROCESS(CLK,JS,hs,ls,SET,CLKOUT) BEGIN IF SET=1 THEN HS=0011;LS=0000; WARN=0; ELSIF CLKOUTEVENT AND CLKOUT=1THEN IF JS=1 then IF LS/=0000 then LS=LS-1; ELSIF LS=0000 THEN LS=1001; HS=HS-1; IF HS=0000 AND LS=0000 THEN HS=0
17、000;LS=0000; WARN=1; END IF; END IF; ELSIF JS=0 then HS=HS;LS=LS; END IF; END IF; END PROCESS; PROCESS(CLK) BEGIN IF CLKEVENT AND CLK=1THEN IF AQIFPB THEN AQI=AQI+1; ELSE AQI=0; END IF; END IF; END PROCESS; PROCESS(CLK) BEGIN IF CLKEVENT AND CLK=1THEN IF(AQI=TEMP ) THEN CLKOUT = 1; ELSE CLKOUT HIHIH
18、IHIHIHIHIHIHIHI HILOLOLOLOLOLOLOLOLOLO LO1101-1011-0111-1110如此循环扫描。当无按键按下时,ICOL3.0输出为1111程序:说明:输出为十六位二进制数,初始化后所有的位为低电平,当有键被按下时相应的位变为高电平。程序有消抖的功能。LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;entity PADTOKEY is port (CPIN,R :IN STD_LOGIC; Y: OUT STD_LOGIC_VECTOR(15 DOWNTO 0
19、); ICOL : IN STD_LOGIC_VECTOR(3 DOWNTO 0); OROW : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) ); END ENTITY;architecture JGT of PADTOKEY is TYPE STATES IS (S0,S1,S2,S3,S4); SIGNAL S: STATES; SIGNAL SROW : STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL CPCT : INTEGER RANGE 0 TO 255; SIGNAL CTDELAY: INTEGER RANGE 0 TO 511
20、; SIGNAL CP:STD_LOGIC; BEGIN PROCESS(CPIN) BEGIN IF CPIN=1 AND CPIN EVENT THEN IF CPCT=255 THEN CPCT=0;CP= NOT CP; ELSE CPCT=CPCT+1; END IF; END IF; END PROCESS; PROCESS(CP,R) VARIABLE N:INTEGER RANGE 0 TO 12; BEGIN IF R=1 THEN S=S0;Y=0000000000000000;SROWSOROW=SROW;SSY(3 DOWNTO 0)Y(7 DOWNTO 4)Y(11
21、DOWNTO 8)Y(15 DOWNTO 12)NULL; END CASE; WHEN S3=IF N=12 THEN N:=0;S=S4;CTDELAY=0;SROW=1110; ELSE N:=N+4;S=S1;SROWIF CTDELAY=511 THEN S=S1;CTDELAY=0; ELSE CTDELAY=CTDELAY+1; END IF; END CASE;END IF;END PROCESS;END JGT;3、 LCD显示模块液晶显示原理:用户控制逻辑接口:CLK:控制器工作时钟,上升沿有效RST:复位信号,高电平有效DATA7.0:ASCII码数据总线ADDR3.0:
22、字符在LCD屏幕上的地址(共两行,每行16个字符) ADDR=“0000”“1111”对应每行的第015个字符LINE: LCD1602屏幕上的行选择信号,LINE=0时数据在第一行显示,LINE=1时数据在第二行显示BUSY: 控制器忙信号,数据未显示稳定时BUSY=1;反之为0STROBE: 数据输入有效使能,高电平有效 控制器工作原理如下:A 控制器复位当RST信号有效时(高电平),控制器进入LCD复位与初始化操作,此时,BUSY信号持续高电平,表示控制器忙,LCD不能进行用户请求的操作。RST信号由高变低后的大约80us之后,LCD控制器初始化完成,可以响应用户的操作请求,此时,BUS
23、Y信号变低。LCD处于显示模式。B 字符显示上电后的LCD必须初始化一次,之后LCD控制器停留于“WAIT FOR DATA” 状态。在用户向LCD控制器申请字符显示操作时,ADDR、DATA、LINE信号必须保持稳定,同时使用STROBE信号触发显示操作。具体步骤如下:表示字符显示位置的4bit地址信号加载到ADDR信号线上;表示字符显示行号的1bit选择信号加载到LINE信号线上;字符ASCII编码加载到DATA总线上并保持稳定;用户送入STROBE的有效电平,LCD控制器进入与LCD显示器通讯的过程,显示相应地址和行位置的ASCII码对应字符,同时BUSY信号变为高电平,表示控制器忙。此
24、时,用户需要等待。一定时间后,LCD字符显示稳定,BUSY信号变为低电平,等待用户下一次操作申请。如此循环。 程序:说明:一共写十三个字符,每个字符定义三个状态(如lcd_1_out,lcd_1_strobe, lcd_1_wait),ascii_1_in ascii_1B_in为要显示的十三个字符,以ASCII码的形式输入。令ascii_1_in 、ascii_2_in、ascii_3_in 、ascii_4_in、ascii_5_in 、ascii_6_in、ascii_7_in 、ascii_8_in、ascii_9_in 、ascii_A_in、ascii_B_in显示在第二行,ascii_14_in、ascii_15_in 、ascii_16_in、ascii_17_in 、ascii_18_in、ascii_19_in 、ascii_1A_in、ascii_1B_in 显示在第一行。library ieee;use ieee.s
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1