课程设计智力抢答器比较方案
『壹』 四人智力竞赛抢答器的课程设计
四路抢答器的复PLC程序设制计 系统工作原理
1.1控制要求
(1)竞赛者若要回答主持人所提问题时,须抢先按下桌上的抢答按钮;
(2)绿色指示灯亮后,须等主持人按下复位按钮PB5后,指示灯才熄灭;
(3)如果竞赛者在主持人打开SW1开关10 s内抢先按下按钮,电磁线圈将使彩球摇动,以示竞赛者得到一次幸运的机会;
(4)如果在主持人打开SW1开关10 s内无人抢答,则必须有声音警示,同时红色指示灯亮,以示竞赛者放弃该题;
(5)在竞赛者抢答成功后,应限定一定的时间回答问题,根据题目难易可设定时间(如2 min);
(6)当主持人打开SW2开关后记时开始,如果竞赛者在回答问题时超出设定时限,则红色指示灯亮并伴有声音提示,竞赛者停止回答问题。
----------更多详见: http://www.gkbtob.com/html/jszl/yyfa/4439.html
『贰』 数电四人智力抢答器课程设计
给你一个8路数显自动抢答器电路,你接4路即可。也不知道你认为合适不合适,这是一个标准抢答器电路。希望你能用得上。
『叁』 关于抢答器的EDA课程设计(完整的)
抢答器
通信081 李笑笑 082278
一、简要说明
在进行智力竞赛抢答题比赛时,在一定时间内,各参赛者考虑好答案后都想抢先答题。如果没有合适的设备,有时难以分清他们的先后,使主持人感到为难。为了使比赛能顺利进行,需要有一个能判断抢答先后的设备,我们将它称为智力竞赛抢答器。
二、设计要求
1.最多可容纳15名选手或15个代表队参加比赛,他们的编号分别为1到15,各用一个抢答按钮,其编号与参赛者的号码一一对应。此外,还有一个按钮给主持人用来清零,主持人清零后才可进行下一次抢答。
2.抢答器具有数据锁存功能,并将所锁存的数据用LED数码管显示出来。在主持人将抢答器清零后,若有参赛者按抢答按钮,数码管立即显示出最先动作的选手的编号,抢答器对参赛选手动作的先后有很强的分辨能力,即较他们动作的先后只相差几毫秒,抢答器也能分辨出来。数码管不显示后动作选手的编号,只显示先动作选手的编号,并保持到主持人清零为止。
3.在各抢答按钮为常态时,主持人可用清零按钮将数码管变为零状态,直至有人使用抢答按钮为止。抢答时间设为10秒。在10秒后若没有参赛者按抢答按钮,抢答按钮无效。并保持到主持人清零为止。
三、设计提示
1. 输入输出信号
输出显示的位扫描时钟信号可以作为键盘输入的检测扫描信号。10秒定时计数器的时钟信号可以选2Hz的时钟。复位信号用来使10秒定时器和键盘编码器清零。15个按键输入信号应进行编码。A—G数码管段驱动信号。SEG0,SEGl数码管位驱动信号。
2.系统功能
按下异步复位键,10秒定时器和键盘编码器清零。放开异步复位健后,启动定时器,并允许键盘编码器扫描信号输入端,如在10秒内发现有输入信号,将其编码输出,同时使定时器停止计时;否则,停止扫描编码和定时,直到再次按下异步复位健键。把16进制编码转换为十进制码,经译码后显示。
3.设计框图如图:
四、程序代码
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;
entity answer is
port(
KEY_IN: in std_logic_vector(15 downto 1);
CLEAR: in std_logic;
SCANCLK: in std_logic;
CLK1S: in std_logic;
LED_OUT: out std_logic_vector(6 downto 0);
SCAN_OUT: out std_logic;
SOUND_OUT: out std_logic
);
end answer;
architecture rtl of answer is
signal KEY_CODE: integer range 0 to 15;
signal KEY_CODE_REG: integer range 0 to 15;
signal KEY_EN: std_logic;
signal NUM1: integer range 0 to 9;
signal NUM2: integer range 0 to 9;
signal KEY_EN1,KEY_EN2: std_logic;
signal KEY_IN1,KEY_IN2,KEY_INS: std_logic_vector(15 downto 1);
signal HEX: integer range 0 to 9;
signal TIME_CNT: std_logic_vector(3 downto 0);
begin
process(KEY_EN,KEY_IN,SCANCLK,CLEAR)
begin
if CLEAR = '0' then
KEY_CODE_REG<=0;
elsif SCANCLK'event and SCANCLK = '1' then
if KEY_CODE_REG = 0 then
KEY_CODE_REG<=KEY_CODE;
end if;
end if;
end process;
process(SCANCLK,CLEAR,KEY_IN)
begin
if SCANCLK'event and SCANCLK = '1' then
KEY_IN2 <= KEY_IN1;
KEY_IN1 <= KEY_IN;
end if;
end process;
KEY_INS<=not KEY_IN2 or KEY_IN1;
KEY_CODE<=0 when KEY_EN = '0' else
1 when KEY_INS(1)='0' else
2 when KEY_INS(2)='0' else
3 when KEY_INS(3)='0' else
4 when KEY_INS(4)='0' else
5 when KEY_INS(5)='0' else
6 when KEY_INS(6)='0' else
7 when KEY_INS(7)='0' else
8 when KEY_INS(8)='0' else
9 when KEY_INS(9)='0' else
10 when KEY_INS(10)='0' else
11 when KEY_INS(11)='0' else
12 when KEY_INS(12)='0' else
13 when KEY_INS(13)='0' else
14 when KEY_INS(14)='0' else
15 when KEY_INS(15)='0' else
0 ;
process(CLK1S,CLEAR,KEY_EN)
begin
if CLEAR = '0' then
TIME_CNT <= "0000";
elsif CLK1S'event and CLK1S = '1' then
if KEY_EN='1' then
TIME_CNT<=TIME_CNT + 1;
end if;
end if;
end process;
KEY_EN<='1' when KEY_CODE_REG = 0 and TIME_CNT<=9 else '0';
process(CLK1S,CLEAR,KEY_EN)
begin
if CLEAR = '0' then
KEY_EN1 <= '1';
KEY_EN2 <= '1';
elsif CLK1S'event and CLK1S = '1' then
KEY_EN2 <= KEY_EN1;
KEY_EN1 <= KEY_EN;
end if;
end process;
SOUND_OUT<=SCANCLK when KEY_EN1='0' and KEY_EN2='1' else '0';
with HEX select
LED_OUT<="0000110" when 1,
"1011011" when 2,
"1001111" when 3,
"1100110" when 4,
"1101101" when 5,
"1111101" when 6,
"0000111" when 7,
"1111111" when 8,
"1101111" when 9,
"0111111" when OTHERS;
HEX<= NUM1 when SCANCLK='0' else NUM2;
NUM2<=1 when KEY_CODE_REG>9 ELSE 0;
NUM1<=KEY_CODE_REG when KEY_CODE_REG<=9 ELSE KEY_CODE_REG-10;
SCAN_OUT <= SCANCLK;
end rtl;
『肆』 跪求课程设计《四人智力抢答器》
相关文档已发你邮箱了!
四路多路智能抢答器设计
前言
关于这次设计的用于多人竞赛抢答的器件,在现实生活中很常见,尤其是在随着各种智益电视节目的不断发展,越来越多的竞赛抢答器被用在了其中,这种抢答器的好处是不仅能够锻炼参赛选手的反应能力,而且能增加节目现场的紧张、活跃气氛,让观众看得更有情趣。可见抢答器在现实生活中确实很实用,运用前景非常广泛。
在知识竞赛中,特别是做抢答题时,在抢答过程中,为了知道哪一组或哪一位选手先答题,必须要有一个系统来完成这个任务。如果在抢答中,只靠人的视觉是很难判断出哪组先答题。这次设计就是用几个触发器以及三极管巧妙的设计抢答器,使以上问题得以解决,即使两组的抢答时间相差几微秒,也可分辨出哪组优先答题。本文主要介绍了抢答器的工作原理及设计,以及它的实际用途。
前言 1
一、实验目的 2
二、实验内容和要求 2
三、设计思路 2
四、电路设计 2
1.电路设计指标 3
2.仿真电路组成 4
(1)四路抢答器原理 4
(2)定时器实现 5
(3)计数电路 6
(4)完整电路 7
五、总结与体会 7
六、参考文献 8
一、实验目的
1.学习智力竞赛抢答器电路的工作原理。
2.学习综合数字电子电路的设计、实现和调试方法。
二、实验内容和要求
设计实现一个可容纳四组参赛者的数字智力竞赛抢答器。
要求:每组设置一个抢答按钮供抢答者使用;电路具有第一抢答信号的鉴别和锁存功能。在此基础上再增加计分电路和犯规电路。
三、设计思路
可将整个系统分为三个主要模块:抢答鉴别模块QDJB;抢答计时模块JSQ;抢答计分模块JFQ。整个系统的组成框图如图5-5-8所示。
图--1 智力竞赛抢答器系统框图
四、电路设计
图--2
1.电路设计指标
I.本抢答器最多可提供4名参赛选手使用,编号为1~4号,各队分别用一个按钮(S1~S4)控制,并设置一个系统清零和抢答控制开关S5,该开关由主持人控制。
II.抢答器具有数据锁存功能,并将锁存数据用发光二极管指示灯显示出来,同时蜂鸣器发出间歇式声响,主持人清零后,声音提示停止。
III.抢答先后的分辨率为1ms。
IV.开关S5作为清零及抢答控制开关(有主持人控制),当开关S5被按下时,抢答电路清零,松开后则允许抢答,输入抢答信号由抢答按钮的S1~S4实现。
V.有抢答信号输入时,有数码管显示出相应组别的号码。此时再按其他任何一个抢答开关均无效,指示灯依旧保持第一个开关按下时所对应的状态不变。
VI.能完成由主持人控制的30秒倒计时,有抢答信号输入后计时器停止。
VII.能完成定时器复位,启动,暂停/继续计数。
VIII.能完成对每个选手抢答次数的记录,并可复位。
2.仿真电路组成
(1)四路抢答器原理
见图--3
图--3
该电路由四个D触发器、与非门及脉冲触发电路等组成。其中S1,S2,S3、S4为抢答人按钮,S5为主持人复位。74LS175为四D触发器。
无人抢答时,S1~S4均未被按下,1D~4D均为低电平,在555定时器电路产生时钟脉冲作用下,1Q立即变为高电平,对应指示灯X1发光,同时数码管显示为1,将555定时脉冲封锁,此时送给74ls175的CLK端不再有脉冲信号,所以74LS175输出不再变化,其他抢答者再按下按钮也不起作用,从而实现了抢答。若要清除,则由主持人按S5按钮完成,并为下一次抢答做好准备。
(2)定时器实现
①秒脉冲发生器由555定时器和外接元件R1、R2、C构成多谐振荡器。F=1Hz
定时器电路见图--4
图--4
②计数器由两片74LS192同步十进制计数器构成
利用错位输出端BO于下一级DOWN相连
30循环设置为,十位片DCBA=0011 个位片DCBA=0000
③译码及显示电路有译码驱动器74LS48和7段数码管组成
④控制电路
与非门U20A和U21A组成RS触发器,实现计数器复位、计数和保持30
电路如图--5所示
图--5
(3)计数电路
计数器由74LS192构成
置数输入端接地,up端接选手输入信号,当有信号输入是加一,load端接电源和复位开关用于复位,down加开关控制计数器的减法, 电路如图--6
图--7
(4)完整电路
见图--8
图--8
五、总结与体会
本系统是一个可供4人抢答的抢答器,当主持人按下禁止抢答的开关时,抢答被禁止.如果在此期间选手将不能抢答;当控制开关断开时抢答允许,此时若有人抢答,数码显示器将显示抢答者的组数,提示主持人抢答已经完成.
本次设计是本人第一次运用数字电路模拟实际的东西。因而在许多方面都还不熟练,不如说对一些元器件的功能还不完全了解,不能熟练运用,因而不能完全的一次性设计好该电路。不过通过本次的课程设计我学到了学多的知识,学会了Multisim的一些基本使用方法,培养了我们独立思考问题解决问题的能力,加深了我们对数电、模电知识的理解,巩固了我们的学习知识,有助于我们今后的学习。
总之,在这次的课程设计过程中,我收获了很多,即为我的以后学习设计有很大的帮助,也为将来的人生之路做好了一个很好的铺垫。
六、参考文献
①《基于Multisim10的电子仿真 实验与设计》 王连英 北京邮电大学出本社
②《电子技术动手实践》 崔瑞雪 北京航空航天大学出版社
③《数字电子技术基础》 余孟尝 高等教育出版社
『伍』 多路智力竞赛抢答器的设计
你可以参看一下PLC方面的书籍。这个是典型的例子。大部分教科书上都有。
『陆』 四人智力竞赛抢答器课程设计
用两个JK和一些门电路
原理是将2个JK的CP能过门电路分别接2个抢答器按钮
一旦一人完成抢答就用他的JK上的Q或Q非信号就把另一个人的CP屏掉,用与门或者或门
『柒』 课程设计 八路竞赛抢答器
第一章抢答器设计功能分析
1.1 数字抢答器的概述
对于抢答器我们大家来说都不陌生,它是用于很多竞赛场合,真正实现先抢先答,让最先抢到题的选手来回答问题。抢答器不仅考验选手的反应速度同时也要求选手具备足够的知识面和一定的勇气。选手们都站在同一个起跑线上,体现了公平公正的原则。
1.2 设计任务与要求
基本要求:
1. 给主持人设置一个开关,用来控制系统的清零(编号显示数码管灭灯)和抢答器的开始。
2. 抢答器具有数据锁存和显示的功能。抢答开始后,若有选手按动抢答器按钮,编号立即锁存,并在LED数码上显示选手的编号,同时扬声器给出音响提示。此外,要封锁输入电路,禁止其他选手抢答。
发挥部分:
1. 抢答器具有定时抢答的功能,且一次抢答的时间可以由主持人设定(如30秒)。当节目主持人启动“开始”键后,要求定时器立即减计时,并用显示器显示,同时扬声器发出短暂的声响,声响持续时间0.5秒左右。
2. 参加选手在设定的时间内抢答,抢答有效,定时器停止工作,显示器上显示选手的编号和抢答时刻的时间,并保持到主持人将系统清零为止。
3. 如果定时抢答的时间已到,却没有选手抢答时,本次抢答无效,系统短暂报警,并封锁输入电路,禁止选手超时后抢答,时间显示器上显示00。
4. 选手如果在主持人按开始键之前违规抢答,系统报警,LED显示违规选手号码和FF,直到主持人按下停止键。
第二章 抢答器方案论证
抢答器的实现方式有种多样,通过纯电子器件搭建电路实现,如优先编码器,锁存器,555定时器译码器等,纯电子器件实现没有软件参与,调试简单,但是它不易于扩展和修改,而且电路结构复杂,调试困难电子,电子器件管脚很多,实际搭建起来费时费力,焊接很容易出错。于是,我想到了用单片机实现。单片机体积小价格低,应用方便,稳定可靠。单片机将很多任务交给了软件编程去实现,大大简化了外围硬件电路,使外围电路的实现简单方便。由于单片机本身不具有软件编译测试的功能,我们需要借助其他软件编译,将编译好的程序“烧”入单片机内。
在实际电路设计中,需要先通过仿真软件测试电路以及编译的程序,检查外围电路设计是否合理,软件编译是否正确,以及软件和硬件电路能否正常配合工作,能否准确的实现所设计的功能。如果测试通过,电路仿真没有问题能完全实现功能的话就可以实际的做板子的焊接工作了。在老师的指导下我选择了常用的单片机仿真软件proteus6.9以及keil 进行仿真。
第三章 硬件电路设计
3.1总体设计
根据抢答器的基本功能,可以设计出如下的单片机外围电路:
图3-1 总体设计
如图3-1,P3.0为开始抢答,P3.2为停止,P1.0-P1.7为八路抢答输入,数码管段选P0口,位选P2口低3位,蜂鸣器(用绿灯代替)输出为P3.6口。P3.2为时间加1调整,P3.3为时间减1调整。
3.2 外部振荡电路
图3-2 外部振荡电路
一般选用石英晶体振荡器。此电路在加电大约延迟10ms后振荡器起振,在XTAL2引脚产生幅度为3V左右的正弦波时钟信号,其振荡频率主要由石英晶振的频率确定。电路中两个电容 C1,C2的作用有两个:一是帮助振荡器起振;二是对振荡器的频率进行微调。C1,C2的典型值为30PF。
3.3 复位电路的设计
单片机的第9脚RST为硬件复位端,只要将该端持续4个机器周期的高电平即可实现复位,复位后单片机的各状态都恢复到初始化状态,其电路图如图4所示:
图3-3 复位电路
在方案中使用到了硬件复位和软件复位两种功能,由上面的硬件复位可使寄存器及存储器的值都恢复到初始值,而前面的功能提到了倒计时间需要有记忆功能,该功能实现的前提条件就是不能对单片机进行硬件复位,所以设定了软复位功能。软复位实际上就是当程序执行完毕之后,将程序指针通过一条跳转指令让它跳转到程序执行的起始地址。
3.1.4 显示电路的设计
显示电路使用了七段数码管7SEG-MPX4-CC,它是共阴极的,由高电平点亮。
图3-4 阴极七段数码管
4.1.5 按钮输入电路的设计
抢答器的输入按钮使用常开开关,
图3-5 抢答按键
这些常开开关组成了抢答按键,硬件电路简单,在程序设计上也不复杂,只要在程序中消除在按键过程中产生的“毛刺”现象就可以了。这里采用最常用的方法即延时法,其的原理为:因为“毛刺”脉冲一般持续时间短,约为几ms,而按键的时间一般远远大于这个时间,所以当单片机检测到有按键动静后再延时一段时间(这里取10ms)后再判断此电平是否保持原状态,如果是则为有效按键,否则无效。
3.1.6 发声
这里能利用程序来控制单片机P3.6口线反复输出高电平或低电平,即在该口线上产生一定频率的矩形波,接上扬声器就能发出一定频率的声音,再利用延时程序控制“高”“低”电平的持续时间,就能改变输出频率,从而改变音调,使扬声器发出不同的声音。
第四章 系统软件设计
4.1 程序系统结构图
硬件电路确定后,软件的编程要与硬件相匹配,软硬件才能结合完成所要实现的功能。由功能分析得到以下的软件结构图:
图4-1 软件系统结构图
4.2 程序流程图
整个程序主要由定时器T0、定时器T1、外部中断0和主程序构成。
定时器T0用于使扬声器发声,当需要响铃时,把响铃标志位置一,每次中断都对P3.7取反,扬声器发声,改变定时器初值,可改变扬声器频率。定时器程流程图如下:
图4-2 响铃程序流程图
定时器T1用于倒计时,每次中断为50ms,当计数标志为20时即为一秒,显示数字减一。其流程图如下:
图4-3 倒计时中断流程图
外部中断0用于调整倒计时时间,流程图如下:
图4-4 调整抢答时间流程图
主程序协调三个中断一起工作,实现抢答功能,其流程图如下:
图4-5 主程序流程图
附录:
程序代码:
P3.0为开始抢答,P3.1为停止,P1.0-P1.7为八路抢答输入,数码管段选P0口,位选P2的低三位口,蜂鸣器输出为P3.6口。
ORG 0000H
AJMP MAIN
ORG 0003H
AJMP INT0SUB
ORG 000BH
AJMP T0INT
ORG 001BH
AJMP T1INT
OK EQU 20H ; 抢答开始标志位
RING EQU 22H ; 响铃标志位
ORG 0040H
MAIN: MOV R1,#0FH; 初设抢答时间为15s
MOV R2,#0AH; 初设答题时间为10s
MOV TMOD,#11H; 设置未定时器/模式1
MOV TH0,#0F0H
MOV TL0,#0FFH; 越高发声频率越高,越尖
MOV TH1,#3CH
MOV TL1,#0B0H; 50ms为一次溢出中断
SETB EA
SETB ET0
SETB ET1
SETB EX0
SETB EX1; 允许四个中断,T0/T1/INT0/INT1
CLR OK
CLR RING
SETB TR1
SETB TR0; 一开始就运行定时器,以开始显示FFF.如果想重新计数,重置TH1/TL1就可以了
查询程序:
START: MOV R5,#0BH
MOV R4,#0BH
MOV R3,#0BH
ACALL DISPLAY; 未开始抢答时候显示FFF
JB P3.0,NEXT
ACALL DELAY
JB P3.0,NEXT;去抖动,如果"开始键"按下就向下执行,否者跳到非法抢答查询
ACALL BARK;按键发声
MOV A,R1
MOV R6,A; 送R1->R6,因为R1中保存了抢答时间
SETB OK; 抢答标志位,用于COUNT只程序中判断是否查询抢答
MOV R3,#0AH; 抢答只显示计时,灭号数
AJMP COUNT;进入倒计时程序,"查询有效抢答的程序"在COUNT里面
NEXT: JNB P1.0,FALSE1
JNB P1.1,FALSE2
JNB P1.2,FALSE3
JNB P1.3,FALSE4
JNB P1.4,FALSE5
JNB P1.5,FALSE6
JNB P1.6,FALSE7
JNB P1.7,FALSE8
AJMP START
非法抢答处理程序:
FALSE1: ACALL BARK; 按键发声
MOV R3,#01H
AJMP ERROR
FALSE2: ACALL BARK
MOV R3,#02H
AJMP ERROR
FALSE3: ACALL BARK
MOV R3,#03H
AJMP ERROR
FALSE4: ACALL BARK
MOV R3,#04H
AJMP ERROR
FALSE5: ACALL BARK
MOV R3,#05H
AJMP ERROR
FALSE6: ACALL BARK
MOV R3,#06H
AJMP ERROR
FALSE7: ACALL BARK
MOV R3,#07H
AJMP ERROR
FALSE8: ACALL BARK
MOV R3,#08H
AJMP ERROR
倒计时程序(包括有效抢答程序):
COUNT: MOV R0,#00H; 重置定时器中断次数
MOV TH1,#3CH
MOV TL1,#0B0H; 重置定时器
RECOUNT: MOV A,R6; R6保存了倒计时的时间
MOV B,#0AH
DIV AB; 除十分出个位/十位
MOV 30H,A; 十位存于(30H)
MOV 31H,B; 个位存于(31H)
MOV R5,30H ; 取十位
MOV R4,31H ; 取个位
MOV A,R6
CLR C
SUBB A,#07H
JNC LARGER ;大于5s跳到LARGER,小于等于5s会提醒
MOV A,R0
CJNE A,#0AH,FULL;1s中0.5s向下运行
CLR RING
AJMP CHECK
FULL: CJNE A,#14H,CHECK ; 1s时,响并显示号数并清R0,重新计时
SETB RING
MOV A,R6
JZ QUIT ; 计时完毕
MOV R0,#00H
DEC R6 ; 一秒标志减1
AJMP CHECK
LARGER: MOV A,R0
CJNE A,#14H,CHECK ; 如果1s向下运行,否者跳到查"停/显示"
DEC R6; 计时一秒R6自动减1
MOV R0,#00H
CHECK: JNB P3.1,QUIT; 如按下停止键退出
ACALL DISPLAY
JNB P1.0,TRUE1
JNB P1.1,TRUE2
JNB P1.2,TRUE3
JNB P1.3,TRUE4
JNB P1.4,TRUE5
JNB P1.5,TRUE6
JNB P1.6,TRUE7
JNB P1.7,TRUE8
AJMP RECOUNT
QUIT: CLR OK ; 如果按下了"停止键"重新回到开始
CLR RING
ACALL BARK
AJMP START
正常抢答处理程序:
TRUE1: ACALL BARK; 按键发声
MOV A,R2
MOV R6,A; 抢答时间R2送R6
MOV R3,#01H
CLR OK;
AJMP LOOP2
TRUE2:ACALL BARK;
MOV A,R2
MOV R6,A
MOV R3,#02H
CLR OK
AJMP LOOP2
TRUE3:ACALL BARK;
MOV A,R2
MOV R6,A
MOV R3,#03H
CLR OK
AJMP LOOP2
TRUE4:ACALL BARK;
MOV A,R2
MOV R6,A
MOV R3,#04H
CLR OK
AJMP LOOP2
TRUE5: ACALL BARK;
MOV A,R2
MOV R6,A
MOV R3,#05H
CLR OK
AJMP LOOP2
TRUE6: ACALL BARK;
MOV A,R2
MOV R6,A
MOV R3,#06H
CLR OK
AJMP LOOP2
TRUE7: ACALL BARK;
MOV A,R2
MOV R6,A
MOV R3,#07H
CLR OK
AJMP LOOP2
TRUE8: ACALL BARK;
MOV A,R2
MOV R6,A
MOV R3,#08H
CLR OK
LOOP2: AJMP DISPLAY ;抢答后停止计时,等待返回
SETB RING
JNB P3.1 QUIT
AJMP LOOP2
犯规抢答程序:
ERROR: SETB RING ;犯规响铃
MOV R5,#0BH
MOV R4,#0BH; 显示FF和犯规号数
LOOP3: ACALL DISPLAY
JNB P3.1 QUIT1; 等待“停止”键按下
AJMP LOOP3
QUIT1: CLR RING
CLR OK
AJMP START
显示程序:
DISPLAY:MOV DPTR,#DAT1; 查表显示程序,利用P0口做段选码口输出/P2低三位做位选码输出
MOV A,R5
MOVC A,@A+DPTR
MOV P2,#01H
MOV P0,A
ACALL DELAY
MOV DPTR,#DAT2
MOV A,R4
MOVC A,@A+DPTR
MOV P2,#02H
MOV P0,A
ACALL DELAY
MOV A,R3
MOVC A,@A+DPTR
MOV P2,#04H
MOV P0,A
ACALL DELAY
RET
DAT1:DB 00H,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,00H,71H
;"灭","1","2","3","4","5","6","7","8","9","灭","F"
DAT2:DB 3FH, 06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,00H,71H
DELAY1: MOV 35H,#08H
LOOP0: ACALL DISPLAY
DJNZ 35H,LOOP0
RET
延时(显示和去抖动用到):
DELAY: MOV 32H,#12H
LOOP: MOV 33H,#0AFH
LOOP1: DJNZ 33H,LOOP1
DJNZ 32H,LOOP
RET
发声程序:
BARK: SETB RING
ACALL DELAY1
ACALL DELAY1
CLR RING; 按键发声
RET
INT0(抢答时间R1调整程序):
INT0SUB:MOV A,R1
MOV B,#0AH
DIV AB
MOV R5,A
MOV R4,B
MOV R3,#0AH
ACALL DISPLAY;先在两个时间LED上显示R1
JNB P3.2,INC0; P3.2为+1s键,如按下跳到INCO
JNB P3.3,DEC0; P3.3为-1s键,如按下跳到DECO
JNB P3.4,BACK0; P3.4为确定键,如按下跳到BACKO
AJMP INT0SUB
INC0: MOV A,R1
CJNE A,#63H,ADD0; 如果不是99,R2加1,如果加到99了,R1就置0,重新加起
MOV R1,#00H
ACALL DELAY1
AJMP INT0SUB
ADD0: INC R1
ACALL DELAY1
AJMP INT0SUB
DEC0: MOV A,R1
JZ SETR1;如果R1为0, R1就置99,
DEC R1
ACALL DELAY1
AJMP INT0SUB
SETR1: MOV R1,#63H
ACALL DELAY1
AJMP INT0SUB
BACK0: RETI
TO溢出中断(响铃程序):
T0INT:MOV TH0,#0ECH
MOV TL0,#0FFH
JNB RING,OUT
CPL P3.6 ; RING标志位为1时候P3.6口不短取反使喇叭发出一定频率的声音
OUT: RETI
T1溢出中断(计时程序):
T1INT: MOV TH1,#3CH
MOV TL1,#0B0H
INC R0
RETI
END