数电课程设计报告抢答器.docx
- 文档编号:12230828
- 上传时间:2023-04-17
- 格式:DOCX
- 页数:49
- 大小:353.07KB
数电课程设计报告抢答器.docx
《数电课程设计报告抢答器.docx》由会员分享,可在线阅读,更多相关《数电课程设计报告抢答器.docx(49页珍藏版)》请在冰豆网上搜索。
数电课程设计报告抢答器
湖南大学电气与信息工程学院
本科生课程设计
题 目:
抢答器
课 程:
数电课程设计
专 业:
电气工程及其自动化
班 级:
学 号:
姓 名:
指导 老师:
设计 时间:
2012年6月
一、设计任务……………………………………………………………2
二、原理框图……………………………………………………………2
三、液晶显示器及相关按键……………………………………………4
四、设计的逻辑结构及基本逻辑源程序………………………………5
五、思考题………………………………………………………………34
六、心得体会……………………………………………………………34
一、设计任务
基本要求:
1、设计制作一个可容纳8个组参赛的抢答器,每组控制一个抢答开关。
2、设置主持人控制键:
J0控制整个系统清零,J1用于发布抢答开始命令。
3、系统具有第一抢答信号鉴别和锁存功能
4、系统以三种方式指示第一抢答者:
第一是点亮对应组的发光二极管;第二是液晶屏显示组别;第三是第一抢答者产生时,扬声器以“嘀嘟”双频音响。
附加功能:
1、系统具有提前抢答的犯规记录功能,扬声器发出特殊的高频音响。
同时,组别显示数码管和LED指示灯都指示出该犯规组别。
2、设计积分电路。
3、限时抢答。
二、原理框图
三、液晶显示器及相关按键
1、液晶显示示意图
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
3
0
0
2、开关示意图
1
2
3
4
5
6
7
8
8:
START使能为高电平时抢答有效,有抢答则为正确输出,否则为错误输出
7:
RST清零重新开始一道题目时的清零,为高电平时清零,正常工作时为低电平
1:
RST1分数清零为高电平时将分数清零,正常工作时为低电平
键盘示意图
3、键盘示意图
1
2
3
4
5
6
7
8
ADD
SUB
1-8号键:
选手抢答按键
ADD:
加计分
SUB:
减计分
四、设计的逻辑结构及基本逻辑源程序
1、主抢答器模块
包括LOCK模块、Vfangui模块和计时模块。
思路:
WARN为高电平表示计时时间到,START由开关控制,由低电平变为高电平时计时开始,为高电平时抢答有效。
RST由开关控制,为高电平时清零,正常工作时应置为低电平。
CLK为工作时钟,频率为10MHZ。
工作时先将模块清零,则JS、G1、G2输出都为低电平,计时时间初始化,这里设置为30s。
再将START置为高电平,JS变为高电平,开始计时,在计时结束之前WARN为低电平,此时若有人抢答,抢答有效且为正常抢答,LOCK模块有输出,G1相应的位变为高电平,且JS变为低电平,计时停止。
LOCK模块有输出的必要条件是START为高电平且WARN为低电平。
犯规抢答的情况:
计时还没开始,即清零后START为低电平时抢答视为犯规,或者计时已经结束,即WARN由低电平变为高电平后抢答视为犯规。
这两种情况Vfangui模块有输出,G2相应的位变为高电平。
Vfangui模块有输出的必要条件是START为低电平或者WARN为高电平。
特别强调:
对于每一道抢答题,无论是正常抢答或者是犯规抢答,都只能记录一组,即只针对第一组抢答的选手,后面再次抢答无效,则需在VHDL程序中加入锁定的功能,对于如何实现,详见下面的程序。
LOCK模块(正常抢答):
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYLOCKIS
PORT(clk,CLEAR,START,WARN:
INSTD_LOGIC;
S:
INSTD_LOGIC_VECTOR(7DOWNTO0);
G:
OUTSTD_LOGIC_VECTOR(7DOWNTO0);
JS:
OUTSTD_LOGIC);
ENDLOCK;
ARCHITECTUREONEOFLOCKIS
signala:
STD_LOGIC;
BEGIN
PROCESS(CLEAR,START,S,WARN,clk)
BEGIN
if(clk'eventandclk='1')then
IFCLEAR='1'THENG<="00000000";JS<='0';a<='0';
ELSIFSTART='1'THEN
JS<='1';
IFWARN='0'THEN
IF(S(7)='1'ANDs(0)='0'ANDs
(1)='0'ANDs
(2)='0'ANDs(3)='0'ANDs(4)='0'ANDs(5)='0'ANDs(6)='0'anda='0')THEN
G<="10000000";a<='1';
ELSIF(S(6)='1'ANDS(0)='0'ANDS
(1)='0'ANDS
(2)='0'ANDS(3)='0'ANDS(4)='0'ANDS(5)='0'ANDS(7)='0'anda='0')THEN
G<="01000000";a<='1';
ELSIF(S(5)='1'ANDS(0)='0'ANDS
(1)='0'ANDS
(2)='0'ANDS(3)='0'ANDS(4)='0'ANDS(6)='0'ANDS(7)='0'anda='0')THEN
G<="00100000";a<='1';
ELSIF(S(4)='1'ANDS(0)='0'ANDS
(1)='0'ANDS
(2)='0'ANDS(3)='0'ANDS(7)='0'ANDS(5)='0'ANDS(6)='0'anda='0')THEN
G<="00010000";a<='1';
ELSIF(S(3)='1'ANDS(0)='0'ANDS
(1)='0'ANDS
(2)='0'ANDS(7)='0'ANDS(4)='0'ANDS(5)='0'ANDS(6)='0'anda='0')THEN
G<="00001000";a<='1';
ELSIF(S
(2)='1'ANDS(0)='0'ANDS
(1)='0'ANDS(7)='0'ANDS(3)='0'ANDS(4)='0'ANDS(5)='0'ANDS(6)='0'anda='0')THEN
G<="00000100";a<='1';
ELSIF(S
(1)='1'ANDS(0)='0'ANDS(7)='0'ANDS
(2)='0'ANDS(3)='0'ANDS(4)='0'ANDS(5)='0'ANDS(6)='0'anda='0')THEN
G<="00000010";a<='1';
ELSIF(S(0)='1'ANDS(7)='0'ANDS
(1)='0'ANDS
(2)='0'ANDS(3)='0'ANDS(4)='0'ANDS(5)='0'ANDs(6)='0'anda='0')THEN
G<="00000001";a<='1';
ENDIF;
JS<=NOTa;
ENDIF;
ENDIF;
ENDIF;
ENDPROCESS;
ENDONE;
注:
通过变量a实现锁定功能。
(省略激励)
分析:
清零后输出都为0,在CLEAR为低电平,START为高电平时,JS变为1,开始计时,1号选手抢答后,输出G的最低位变为1,JS变为0,停止计时,此时再有选手抢答,输出不改变,实现了锁定功能。
Vfangui模块(犯规抢答)
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYFANIS
PORT(clk,START,WARN,CLEAR:
INSTD_LOGIC;
P:
INSTD_LOGIC_VECTOR(7DOWNTO0);
G:
OUTSTD_LOGIC_VECTOR(7DOWNTO0));
ENDFAN;
ARCHITECTURESEVENOFFANIS
--SIGNALGS:
STD_LOGIC_VECTOR(7DOWNTO0);
signala:
STD_LOGIC;
BEGIN
PROCESS(START,P,clk,CLEAR)
BEGIN
if(clk'eventandclk='1')then
IFCLEAR='1'THENG<="00000000";a<='0';
ELSIFSTART='0'ORWARN='1'THEN
IF(P(7)='1'ANDP(0)='0'ANDP
(1)='0'ANDP
(2)='0'ANDP(3)='0'ANDP(4)='0'ANDP(5)='0'ANDP(6)='0'anda='0')THEN
G<="10000000";a<='1';
ELSIF(P(6)='1'ANDP(0)='0'ANDP
(1)='0'ANDP
(2)='0'ANDP(3)='0'ANDP(4)='0'ANDP(5)='0'ANDP(7)='0'anda='0')THEN
G<="01000000";a<='1';
ELSIF(P(5)='1'ANDP(0)='0'ANDP
(1)='0'ANDP
(2)='0'ANDP(3)='0'ANDP(4)='0'ANDP(6)='0'ANDP(7)='0'anda='0')THEN
G<="00100000";a<='1';
ELSIF(P(4)='1'ANDP(0)='0'ANDP
(1)='0'ANDP
(2)='0'ANDP(3)='0'ANDP(7)='0'ANDP(5)='0'ANDP(6)='0'anda='0')THEN
G<="00010000";a<='1';
ELSIF(P(3)='1'ANDP(0)='0'ANDP
(1)='0'ANDP
(2)='0'ANDP(7)='0'ANDP(4)='0'ANDP(5)='0'ANDP(6)='0'anda='0')THEN
G<="00001000";a<='1';
ELSIF(P
(2)='1'ANDP(0)='0'ANDP
(1)='0'ANDP(7)='0'ANDP(3)='0'ANDP(4)='0'ANDP(5)='0'ANDP(6)='0'anda='0')THEN
G<="00000100";a<='1';
ELSIF(P
(1)='1'ANDP(0)='0'ANDP(7)='0'ANDP
(2)='0'ANDP(3)='0'ANDP(4)='0'ANDP(5)='0'ANDP(6)='0'anda='0')THEN
G<="00000010";a<='1';
ELSIF(P(0)='1'ANDP(7)='0'ANDP
(1)='0'ANDP
(2)='0'ANDP(3)='0'ANDP(4)='0'ANDP(5)='0'ANDP(6)='0'anda='0')THEN
G<="00000001";a<='1';
ENDIF;
ENDIF;
ENDIF;
ENDPROCESS;
ENDSEVEN;
分析:
当START为0(计时没有开始)和WARN为1(计时结束)时,有选手抢答都能有相应的输出,且再有选手抢答时,输出不改变,实现了锁定功能。
COUNT模块(计时模块)
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYCOUNTIS
PORT(CLK,JS,SET:
INSTD_LOGIC;
HI,LO:
OUTSTD_LOGIC_VECTOR(7DOWNTO0);
WARN:
OUTSTD_LOGIC);
ENDCOUNT;
ARCHITECTURESIXOFCOUNTIS
SIGNALHS:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALLS:
STD_LOGIC_VECTOR(3DOWNTO0);
CONSTANTFPB:
INTEGER:
=9999999;
CONSTANTTEMP:
INTEGER:
=4999999;
SIGNALAQI:
INTEGERRANGE0TOFPB;
SIGNALCLKOUT:
STD_LOGIC;
BEGIN
PROCESS(CLK,JS,hs,ls,SET,CLKOUT)
BEGIN
IFSET='1'THEN
HS<="0011";LS<="0000";WARN<='0';
ELSIFCLKOUT'EVENTANDCLKOUT='1'THEN
IFJS='1'then
IFLS/="0000"then
LS<=LS-1;
ELSIFLS="0000"THEN
LS<="1001";HS<=HS-1;
IFHS="0000"ANDLS="0000"THEN
HS<="0000";LS<="0000";WARN<='1';
ENDIF;
ENDIF;
ELSIFJS='0'then
HS<=HS;LS<=LS;
ENDIF;
ENDIF;
ENDPROCESS;
PROCESS(CLK)
BEGIN
IFCLK'EVENTANDCLK='1'THEN
IFAQI AQI<=AQI+1; ELSEAQI<=0; ENDIF; ENDIF; ENDPROCESS; PROCESS(CLK) BEGIN IFCLK'EVENTANDCLK='1'THEN IF(AQI<=TEMP)THEN CLKOUT<='1'; ELSECLKOUT<='0'; ENDIF; ENDIF; ENDPROCESS; PROCESS(HS,LS) BEGIN CASEHSIS WHEN"0000"=>HI<=X"30"; WHEN"0001"=>HI<=X"31"; WHEN"0010"=>HI<=X"32"; WHEN"0011"=>HI<=X"33"; WHEN"0100"=>HI<=X"34"; WHEN"0101"=>HI<=X"35"; WHEN"0110"=>HI<=X"36"; WHEN"0111"=>HI<=X"37"; WHEN"1000"=>HI<=X"38"; WHEN"1001"=>HI<=X"39"; WHENOTHERS=>HI<=X"45"; ENDCASE; CASELSIS WHEN"0000"=>LO<=X"30"; WHEN"0001"=>LO<=X"31"; WHEN"0010"=>LO<=X"32"; WHEN"0011"=>LO<=X"33"; WHEN"0100"=>LO<=X"34"; WHEN"0101"=>LO<=X"35"; WHEN"0110"=>LO<=X"36"; WHEN"0111"=>LO<=X"37"; WHEN"1000"=>LO<=X"38"; WHEN"1001"=>LO<=X"39"; WHENOTHERS=>LO<=X"45"; ENDCASE; ENDPROCESS; ENDSIX; 分析: 工作时钟为10MHZ,通过其中的两个进程PROCESS(CLK)分频,频率变为1HZ,占空比为1/2。 输出显示在LCD上,所以通过进程PROCESS(HS,LS)将输出转变为ASCII码的形式。 2、键盘模块 键盘扫描原理: vcc ICOL0 ICOL1 ICOL2 ICOL3 1 2 3 C 4 5 6 D 7 8 9 E A 0 B F OROW0 OROW1 OROW2 OROW3 OROW[3..0]为键盘扫描码的输入端,扫描码为1110->1101->1011->0111->1110如此循环扫描。 当无按键按下时,ICOL[3..0]输出为1111 程序: 说明: 输出为十六位二进制数,初始化后所有的位为低电平,当有键被按下时相应的位变为高电平。 程序有消抖的功能。 LIBRARYIEEE; USEIEEE.STD_LOGIC_1164.ALL; USEIEEE.STD_LOGIC_UNSIGNED.ALL; entityPADTOKEYis port(CPIN,R: INSTD_LOGIC; Y: OUTSTD_LOGIC_VECTOR(15DOWNTO0); ICOL: INSTD_LOGIC_VECTOR(3DOWNTO0); OROW: OUTSTD_LOGIC_VECTOR(3DOWNTO0) ); ENDENTITY; architectureJGTofPADTOKEYis TYPESTATESIS(S0,S1,S2,S3,S4); SIGNALS: STATES; SIGNALSROW: STD_LOGIC_VECTOR(3DOWNTO0); SIGNALCPCT: INTEGERRANGE0TO255; SIGNALCTDELAY: INTEGERRANGE0TO511; SIGNALCP: STD_LOGIC; BEGIN PROCESS(CPIN) BEGIN IFCPIN='1'ANDCPIN'EVENTTHEN IFCPCT=255THEN CPCT<=0;CP<=NOTCP; ELSE CPCT<=CPCT+1; ENDIF; ENDIF; ENDPROCESS; PROCESS(CP,R) VARIABLEN: INTEGERRANGE0TO12; BEGIN IFR='1'THEN S<=S0;Y<="0000000000000000";SROW<="1110";N: =0; ELSIFCP='1'ANDCP'EVENTTHEN CASESIS WHENS0=>S<=S1; WHENS1=>OROW<=SROW;S<=S2; WHENS2=>S<=S3; CASENIS WHEN0=>Y(3DOWNTO0)<=NOTICOL; WHEN4=>Y(7DOWNTO4)<=NOTICOL; WHEN8=>Y(11DOWNTO8)<=NOTICOL; WHEN12=>Y(15DOWNTO12)<=NOTICOL; WHENOTHERS=>NULL; ENDCASE; WHENS3=>IFN=12THEN N: =0;S<=S4;CTDELAY<=0;SROW<="1110"; ELSE N: =N+4;S<=S1;SROW<=SROW(2DOWNTO0)&SROW(3); ENDIF; WHENS4=>IFCTDELAY=511THEN S<=S1;CTDELAY<=0; ELSE CTDELAY<=CTDELAY+1; ENDIF; ENDCASE; ENDIF; ENDPROCESS; ENDJGT; 3、LCD显示模块 液晶显示原理: 用户控制逻辑接口: CLK: 控制器工作时钟,上升沿有效 RST: 复位信号,高电平有效 DATA[7..0]: ASCII码数据总线 ADDR[3..0]: 字符在LCD屏幕上的地址(共两行,每行16个字符)ADDR=“0000”~“1111”对应每行的第0~15个字符 LINE: LCD1602屏幕上的行选择信号,LINE=0时数据在第一行显示,LINE=1时数据在第二行显示 BUSY: 控制器忙信号,数据未显示稳定时BUSY=1;反之为0 STROBE: 数据输入有效使能,高电平有效 控制器工作原理如下: A控制器复位 当RST信号有效时(高电平),控制器进入LCD复位与初始化操作,此时,BUSY信号持续高电平,表示控制器忙,LCD不能进行用户请求的操作。 RST信号由高变低后的大约80us之后,LCD控制器初始化完成,可以响应用户的操作请求,此时,BUSY信号变低。 LCD处于显示模式。 B字符显示 上电后的LCD必须初始化一次,之后LCD控制器停留于“WAITFORDATA”状态。 在用户向LCD控制器申请字符显示操作时,ADDR、DATA、LINE信号必须保持稳定,同时使用STROBE信号触发显示操作。 具体步骤如下: 表示字符显示位置的4bit地址信号加载到ADDR信号线上; 表示字符显示行号的1bit选择信号加载到LINE信号线上; 字符ASCII编码加载到DATA总线上并保持稳定; 用户送入STROBE的有效电平,LCD控制器进入与LCD显示器通讯的过程,显示相应地址和行位置的ASCII码对应字符,同时BUSY信号变为高电平,表示控制器忙。 此时,用户需要等待。 一定时间后,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显示在第一行。 libraryieee; useieee.s
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计 报告 抢答