八路抢答器前言(八路抢答器原理说明)
八路抢答器的功能
抢答器的功能是:在当今的一些智力竞赛中的某些环节,需要考验参赛的选选手的反应能力的时候,我们就会需要判断谁做出的选择更快,因为人的判断不如机械判断更客观,所以就有了抢答器的诞生;八路数字抢答器也是这个功能。
传统抢答器只是大概判断出抢答成功或犯规选手台号,无法显示出每个选手的抢答时间。而今抢答器可以通过数据来说明裁决结果的准确性、公平性。使比赛大大增加了娱乐性的同时,也更加公平、公正。
如何设计基于单片机的多功能8路抢答器
八路抢答器的设计
摘要
本文介绍了一种采用数字电路制作的多功能数显抢答器,它主要采用了74系列的常用集成电路,它除了具有基本的抢答功能之外,还具有定时报警的功能,和数显的功能,当抢答开始后,系统会自动倒计时,并且时间是可以预设的,期间有人抢答的话系统会停止计时,如果期间没人抢答,系统会有短暂的报警,提示抢答结束。
关键字
单片机、PLC、抢答、报警、数显
一、 设计目的
在电视和学校中我们会经常看到一些智力抢答的节目,如果要是让抢答者用举手等方法,主持人很容易误判,会造成抢答的不公平,比赛中为了准确、公正、直观地判断出第一抢答者,所设计的抢答器通常由数码显示、灯光、音响等多种手段指示出第一抢答者。为了使这种不公平不发生,只有靠电子产品的高准确性来保障抢答的公平性。
二、 方案
制作抢答器可以用好多的方法,可以用单片机来完成,它的功能强大制作简单,并且外围的元件也很少;也可以用PLC来实现,他的制作也是比较简单;还可以用我们学过的EDA技术来制作;最后也可以用数字电路来实现,它的原理比较简单,集成块的价格也比较便宜且很容易购买,与我们学完的〈〈数字电路〉〉联系紧密,能将我们所学知识用于实际,对巩固所学知识有重要意义,用了一些成型电路,如NE555标准秒脉冲电路等,使总体方案易于实现。
方案一〈采用数字电路〉
1、原理方框图
定时抢答器的总体框图如图1所示,它由主体电路和扩展电路两部分组成。主体电路完成基本的抢答功能,即开始抢答后,当选手按动抢答键时,能显示选手的编号,同时能封锁输入电路,禁止其他选手抢答。扩展电路完成定时抢答的功能。
图1
图1所示的定时抢答器的工作过程是:接通电源时,节目主持人将开关置于“清除”位置,抢答器处于禁止工作状态,编号显示器灭灯,定时显示器显示设定的时间,当节目主持人宣布“抢答开始”,同时将控制开关拨到“开始”位置,扬声器给出声响提示,抢答器处于工作状态,定时器倒计时。当定时时间到,却没有选手抢答时,系统报警,并封锁输入电路,禁止选手超时后抢答。当选手在定时时间内按动抢答键时,抢答器要完成以下四项工作:
①优先编码电路立即分辨出抢答者的编号,并由锁存器进行锁存,然后由译码显示电路显示编号;
②扬声器发出短暂声响,提醒节目主持人注意;
③控制电路要对输入编码电路进行封锁,避免其他选手再次进行抢答;
④控制电路要使定时器停止工作,时间显示器上显示剩余的抢答时间,并保持到主持人将系统清零为止。当选手将问题回答完毕,主持人操作控制开关,使系统回复到禁止工作状态,以便进行下一轮抢答。
方案二〈采用单片机〉
1、原理方框图
此电路完成的功能如图2所示,当主持人宣布抢答开始的时候,按下开始按钮,此时电路进入抢答状态,选手的输入采用了扫描式的输入,之后把相应的信息送往单片机,再由单片机输出到显示输出电路中。此时有人第一按下相应的抢答按钮,经过单片机的控制选择,在八段显示器上显示相应的号码,并锁存,同时禁止其他按钮的输入。
(图2)
方案三〈采用PLC〉
1、原理方框图
此电路的功能如图3所示,当主持人打开启动开关后,在设定时间TO 内,如果某组抢先按下抢答按钮,则驱动音效电路①发出声响,指示灯LI亮,并且在8段数码管显示器上显示出抢答成功的组号,此时电路实现互锁,其他组再按下抢答按钮为无效;
如果在时间TO内,无人应答,则驱动音效电路②发出声响,指示灯L2亮,表示抢答者均放弃该题;
在抢答成功后,主持人打开限时开关SW2,启动计时器,在设定的时间TI 内回答有效,当到达设定时间TI时,驱动音效电路③,指示灯L3亮,表示答题时间到。
(图3)
三、 方案选择
方案比较
数字电路
单片机
PLC
制作难度
低
一般
一般
实现难度
一般
低
低
价格
低
一般
高
电路原理
简单
一般
一般
设计难度
简单
高
一般
通过上面的方案比较,数字电路的制作方案比较容易实现,并且在原理方面也是比较简单,所以我选择采用第一种方案来完成抢答器电路。
四、 设计系统功能
1.基本功能:
(1) 同时供8名选手比赛,分别用8个按钮S0 ~ S7表示。
(2)设置一个系统清除和抢答控制开关S,该开关由主持人控制。
(3)抢答器具有锁存与显示功能。即选手按动按钮,锁存相应的编号,扬声器发出声响提示,并在七段数码管上显示选手号码。选手抢答实行优先锁存,优先抢答选手的编号一直保持到主持人将系统清除为止。
2.扩展功能:
(1)抢答器具有定时抢答功能,且一次抢答的时间由主持人设定(如30秒)。当主持人启动"开始"键后,定时器进行减计时。
(2)参赛选手在设定的时间内进行抢答,抢答有效,定时器停止工作,显示器上显示选手的编号和抢答的时间,并保持到主持人将系统清除为止。在这段(3)如果定时时间已到,无人抢答,本次抢答无效,系统报警并禁止抢答,定时显示器上显示00。
五、 各部分单元电路的设计
(1)抢答器的主体电路设计
抢答电路的功能有两个:一是能分辨出选手按键的先后,并锁存优先抢答者的编号,供译码显示电路用;二是要使其他选手的按键操作无效。选用优先编码器74148和DFF锁存器可以完成上述功能,其电路组成如图4所示。其工作原理是:当主持人控制开关处于“清除”位置时,RS触发器的端为低电平,输出端(4Q~1Q)全部为低电平。于是74LS48的 =0,显示器灭灯;74148的选通输入端 =0,74LS148处于工作状态,此时锁存电路不工作。当主持人开关拨到“开始”位置时,优先编码电路和锁存电路同时处于工作状态,即抢答器处于等待工作状态,等待输入端 7... 0输入信号,当有选手将键按下时(如按下S5),74LSl48的输出=010, =0,经RS锁存器后,CTR=l, =1,74LS279处于工作状态,4Q3Q2Q=101,经74LS48译码后,显示器显示出“5”。此外,CTR=1,使74l48的端为高电平,74LSl48处于禁止工作状态,封锁了其它按键的输入。当按下的键松开后,74LSl48的为高电平,但由于CTR维持高电平不变,所以74LSl48仍处于禁止工作状态,其它按键的输入信号不会被接收。这就保证了抢答者的优先性以及抢答电路的准确性。当优先抢答者回答完问题后,由主持人操作控制开关S,使抢答电路复位,以便进行下一轮抢答。
(图4)
74LS148为8线-3线优先编码器,表1为其功能表。
表1 74LS148的功能真值表
(2)定时电路设计
原理及设计:该部分主要由555定时器秒脉冲产生电路、十进制同步加减计数器74LS192减法计数电路、74LS48译码电路和2个7段数码管即相关电路组成。具体电路如图5所示。两块74LS192实现减法计数,通过译码电路74LS48显示到数码管上,其时钟信号由时钟产生电路提供。74192的预置数控制端实现预置数,由节目主持人根据抢答题的难易程度,设定一次抢答的时间,通过预置时间电路对计数器进行预置,如果要设置为30S,就可以在计数器的预置数控制端输入00110000。时钟脉冲由秒脉冲电路提供。按键弹起后,计数器开始减法计数工作,并将时间显示在共阴极七段数码显示管上,当有人抢答时,停止计数并显示此时的倒计时时间;如果没有人抢答,且倒计时时间到时,输出低电平到时序控制电路,控制报警电路报警,同时以后选手抢答无效。具体电路如图5所示。
(图5)
秒脉冲产生电路:秒脉冲由NE555提供,它的的3端输出的脉冲的频率为
,结合我们的实际经验及考虑到元器件的成本,我们选择的电阻值为R1=15K,R2=68K,C=10uF,代入到上式中即得,即秒脉冲。
(3)报警电路的设计
采用555定时器和三极管构成的报警电路如图6所示。其中555构成多谐振荡器,振荡频率
其输出信号经三极管推动扬声器。PR为控制信号,当PR为高电平时,多谐振荡器工作,当PR为低电平的时候,电路停振。
(图6)
(4)时序控制电路设计
与门G1 的作用是控制时钟信号CP的放行与禁止,门G2的作用是控制74LS148的输入使能端(即图二中的5端)。图7的工作原理是:主持人控制开关从"清除"位置拨到"开始"位置时,来自于图2中的74LS279的输出 1Q,即CTR=0,经G3反相,输出为1,则NE555产生的时钟信号CP能够加到74LS192的CPD时钟输入端,定时电路进行递减计时。同时,在定时时间未到时,则"定时到信号"为 1,门G2的输出 =0,使 74LS148处于正常工作状态。当选手在定时时间内按动抢答按键时,CTR=1,经G3反相,输出为0,封锁 CP信号,定时器处于保持工作状态;同时,门G2的输出 =1,74LS148处于禁止工作状态。当定时时间到时,则"定时到信号"为0,/ST=1,74LS148处于禁止工作状态,禁止选手进行抢答。同时,门G1处于关门状态,封锁时钟CP信号,使定时电路保持00状态不变,此次抢答结束。
(图7)
集成单稳态触发器74LS121用于控制报警电路及发声的时间(其功能表见表2),具体原理如下:主要由555时钟电路(用于控制报警声音频率)、蜂鸣器即相关的延时电路和控制电路组成。单稳态触发器74121通过信号/Ys、BO2、S控制报警与否和报警时间,555时钟电路产生脉冲时钟。在规定的时间有人抢答时,/Ys由1跳变到0,74121有状态2,即Q输出暂态高电平,蜂鸣器连续发声报警,持续时间为 =2.15秒;如果在规定时间内无人抢答,BO2由1跳变到0,74121有状态1,Q输出暂态高电平,蜂鸣器连续发声报警持续时间为
结合图6所示报警电路,分析 计算如下: 。取C=100uF, R=25K,。有=2.15秒。(原理图见图8)
(图8)
表2 74121功能表
(6) 电源电路
电源电路采用三端集成线性稳压集成块,L7805CV,因为它的外围电路比较简单,并且工作比较稳定,很适合74系列的集成块。它的稳压精度为2%,工作电流1.5A,封装为TO-220(A),工作温度也很不错,并且具有过温保护和短路保护,最大输入电压为35V,能对电路的长时间工作有很大的保障。(具体电路见图9)
(图9)
六、 总结
毕业设计不仅是对前面所学知识的一种检验,而且也是对自己能力的一种提高。下面我对整个毕业设计的过程做一下简单的总结。
第一,接到任务以后进行选题。选题是毕业设计的开端,选择恰当的、感兴趣的题目,这对于整个毕业设计是否能够顺利进行关系极大。好比走路,这开始的第一步是具有决定意义的,第一步迈向何方,需要慎重考虑。否则,就可能走许多弯路、费许多周折,甚至南辕北辙,难以到达目的地。因此,选;题时一定要考虑好了。
第二,题目确定后就是找资料了。查资料是做毕业设计的前期准备工作,好的开端就相当于成功了一半,到图书馆、书店、资料室去虽说是比较原始的方式,但也有可取之处的。总之,不管通过哪种方式查的资料都是有利用价值的,要一一记录下来以备后用。
第三,通过上面的过程,已经积累了不少资料,对所选的题目也大概有了一些了解,这一步就是在这样一个基础上,综合已有的资料来更透彻的分析题目。
第四,有了研究方向,就应该动手实现了。其实以前的三步都是为这一步作的铺垫。
通过这次设计,我对数字电路设计中的逻辑关系等有了一定的认识,对以前学的数字电路又有了一定的新认识,温习了以前学的知识,就像人们常说的温故而知新嘛,但在设计的过程中,遇到了很多的问题,有一些知识都已经不太清楚了,但是通过一些资料又重新的温习了一下数字电路部分的内容。在这次毕业设计中也使我们的同学关系更进一步了,同学之间互相帮助,有什么不懂的大家在一起商量,听听不同的看法对我们更好的理解知识,所以在这里非常感谢帮助我的同学。
在此要感谢我的指导老师,感谢老师给我这样的机会锻炼。在整个毕业设计过程中我懂得了许多东西,也培养了我独立工作的能力,树立了对自己工作能力的信心,相信会对今后的学习工作生活有非常重要的影响。而且大大提高了动手的能力,使我充分体会到了在创造过程中的探索的艰难和成功的喜悦。虽然这个项目还不是很完善,但是在设计过程中所学到的东西是这次毕业设计的最大收获和财富,使我终身受益。
八路数显抢答器工作原理
控制器是由可控硅和IC1的控制端构成。当任意按下一个按键时,可控硅都会被触发导通,使IC1的控制端始终保持有一个高电平的输入。因此所按的数字得以锁存。这样,后按下的按键就不能起作用,数码管就只显示先按下的键号。
这里的可控硅另一端与音乐片的正极相连,当可控硅导通时,使音乐片得以通电发声,从而完成整个抢答功能。该音乐片上电即能触发,也能自动停止,因此无需设暂停键。当按下复位键时,可控硅被切断电源而截止,IC1的控制端则由高电平转变为低电平而清零,为下一次抢答做准备。
扩展资料
功能
1、题目编辑:对现有格式的题目导入。
2、题目删除:删除已经导入且不要的题目。
3、显示、隐藏面板
4、抢答模式
5、显示主界面
6、硬件设置
7、软件设置
8、扫描台号
9、抢答组设置
10、奖项设置
11、进入抢答
12、赛后统计:抢答比赛所得到结果进行导出。。
参考资料来源:百度百科-抢答器
AT89S51单片机八路抢答器工作原理
基于MCS-51系列单片机AT89S51的八路抢答器
基于MCS-51系列单片机AT89S51的八路抢答器
前言
随着现代电子电路的快速发展,以及电子行业对现有电子工程技术的不断需求,特别是对实际操作实践的电子人才的需求越来越多,所以加强学生动手能力、重视实践应该是电子发展需求的必然趋向。实践动手能力的培养是一种综合能力,这种能力当然是在一定难度的前提下完成的,通过一定数量的实践才能逐步形成的。因此在培养实践能力的同时,要通过实践来不断的发现问题和解决问题的途径和方法,从而提高实践能力。
近年来,随着单片机档次的不断提高,功能的不断完善,其应用日趋成熟、应用领域日趋扩大,特别是工业测控、尖端武器和日用家电等领域更是因为有了单片机而生辉增色。单片机应用技术已成为一项新的工程应用技术。本次实习设计的题目为基于单片机的抢答器。
在本次的课程设计中我主要负责了该系统的印制电路板PCB的制作
一、方案论证
方案一:系统各部分采用中小规模集成数字电路,用机械开关按钮作为控制开关,完成抢答输入信号的触发。该方案的特点是中小规模集成电路应用技术成熟,性能可靠,能方便地完成选手抢答的基本功能,但是由于系统功能要求较高,所以电路连接集成电路相对较多,而且过于复杂,并且制作过程工序比较烦琐,使用不太方便。
方案二:该系统采用MCS-51系列单片机AT89S51作为控制核心,该系统可以完成运算控制、信号识别以及显示功能的实现。由于用了单片机,使其技术比较成熟,应用起来方便、简单并且单片机周围的辅助电路也比较少,便于控制和实现。整个系统具有极其灵活的可编程性,能方便地对系统进行功能的扩张和更改性。?CS-51单片机特点如下:
1?可靠性好:单片机按照工业控制要求设计,抵抗工业噪声干扰优于一般的CPU?,程序指令和数据都可以烧写在ROM许多信号通道都在同一芯片,因此可靠性高。
2?易扩充:单片机有一般电脑所必须的器件,如三态双向总线,串并行的输入及输出引脚,可扩充为各种规模的微电脑系统
3?控制功能强:单片机指令除了输入输出指令,逻辑判断指令外还有更丰富的条件分支跳跃指令。原理框图如1-1所示;
图1-1
方案比较及其选用依据,显然方案二比方案一简单的多,不但从性能上优于方案一,而且在使用上及其功能的实现上都较方案一简洁,并且由于单片机具有优越的高集成电路性,使其工作速度更快、效率更高。另外AT89S51单片机采用12MHz的晶振,提高了信号的测量精度,并且使该系统可以通过软件改进来扩张功能。而方案一采用了中小规模集成电路,有其复杂的电路性能,从而可能会使信号的输入输出产生延时及不必要的误差。依此依据选择方案二比较适合。
二、原理分析
1.?本电路采用单片机AT89C51作为控制芯片,单片机的P0口外接八个发光二极管,每个发光二极管分别作为八位选手的信号指示灯。并在各个外接电路上并接开关按键,按键另一端接地。发光二极管采用共阳极接法,由于P0口为高电平呈输入状态,当有按键按下时,P0口呈低电平与按键对应的发光二极管满足点亮条件点亮。在程序编程上采用查询,查询P0口P0。0到P0。7的八个端口呈低电平,即查询是哪个选手先按键,然后将选手号码的字节数据送至串行口输出并在数码管上显现出来。
2.?蜂鸣器是利用三极管处于开关状态是的导通与截止工作,在三极管导通时蜂鸣器工作,三极管截止时蜂鸣器不工作。三极管采用8550?PNP型基极接于P1。2口置其低电平时三极管导通,置其高电平时三极管截止。
3.?数码管采用共阳极七段显示,其内部发光二极管为共阳极接高电平,当对应发光二极管一端为低电平时发光二极管点亮,显示的数字或字符由送入的字节数据控制,字节数据的输出采用串形口工作模式0,8位串行字节数据的输出通过RXD端口送出,TXD端用于送出同步移位脉冲,作为外接器件的同步移位信号。数据的发送是在TI=0的情况下,由一写发送缓冲器的指令开始CPU执行完该指令,串行口即将8位数据从RXD端送出,同时TXD端发出同步移位脉冲。8位数据发送完毕后由硬件置位TI=1,通过查询TI位来确定是否发送完一组数据,TI=1表示发送缓冲器已空,当要发送下一组数据时用软件使TI清零,然后即可发送下一组数据。
4.?软件设计分析首先在程序的开始为选手设置了一段违规程序,该程序的作用是为了防止选手在主持人没有按下抢答键时,有的选手已经提前抢答了,本次抢答为无效抢答,并有报警和记录下该位选手的选号,做违规处理,如果选手超出了在规定的提前抢答次数,则该选手将被取消以后的抢答资格。如果在主持按下抢答键时再抢答,该次抢答被视为有效抢答,在主持按下回答问题的键时选手就可以在规定的时间内回答问题了
图1-2
1?选手查询程序:
ORG?0000H
START:CLR?A
MOV?A,#0FFH
MOV?P0,A
LOP:JNB?P2。4,LP
JNB?P0。0,SA1
JNB?P0。1,SA2
JNB?P0。2,SA3
JNB?P0。3,SA4
JNB?P0。4,SA5
JNB?P0。5,SA6
JNB?P0。6,SA7
JNB?P0。7,SA8
SJMP?LOP
SA1:AJMP?SB1
SA2:AJMP?SB2
SA3:AJMP?SB3
SA4:AJMP?SB4
SA5:AJMP?SB5
SA6:AJMP?SB6
SA7:AJMP?SB7
SA8:AJMP?SB8
LP:MOV?R0,#9
LOP1:LCALL?LED
LCALL?DEL
JNB?P0。0,SIP1
JNB?P0。1,SIP2
JNB?P0。2,SIP3
JNB?P0。3,SIP4
JNB?P0。4,SIP5
JNB?P0。5,SIP6
JNB?P0。6,SIP7
JNB?P0。7,SIP8
DEC?R0
CJNE?R0,#0,LOP1
MOV?R0,#0
LCALL?LED
LCALL?DEL
SJMP?LOP
SIP1:AJMP?DIP1
SIP2:AJMP?DIP2
SIP3:AJMP?DIP3
SIP4:AJMP?DIP4
SIP5:AJMP?DIP5
SIP6:AJMP?DIP6
SIP7:AJMP?DIP7
SIP8:AJMP?DIP8
SB1:MOV?R2,#1
LCALL?LED1
LCALL?DE
SJMP?LP1
SB2:MOV?R2,#2
LCALL?LED1
LCALL?DE
SJMP?LP1
SB3:MOV?R2,#3
LCALL?LED1
LCALL?DE
SJMP?LP1
SB4:MOV?R2,#4
LCALL?LED1
LCALL?DE
SJMP?LP1
SB5:MOV?R2,#5
LCALL?LED1
LCALL?DE
SJMP?LP1
SB6:MOV?R2,#6
LCALL?LED1
LCALL?DE
SJMP?LP1
SB7:MOV?R2,#7
LCALL?LED1
LCALL?DE
SJMP?LP1
SB8:MOV?R2,#8
LCALL?LED1
LCALL?DE
SJMP?LP1
LP1:JNB?P2。4,LOP2
SJMP?LP1
DIP1:MOV?R2,#1
LCALL?LED1
LCALL?DE
SJMP?LH1
DIP2:MOV?R2,#2
LCALL?LED1
LCALL?DE
SJMP?LH1
DIP3:MOV?R2,#3
LCALL?LED1
LCALL?DE
SJMP?LH1
DIP4:MOV?R2,#4
LCALL?LED1
LCALL?DE
SJMP?LH1
DIP5:MOV?R2,#5
LCALL?LED1
LCALL?DE
SJMP?LH1
DIP6:MOV?R2,#6
LCALL?LED1
LCALL?DE
SJMP?LH1
DIP7:MOV?R2,#7
LCALL?LED1
LCALL?DE
SJMP?LH1
DIP8:MOV?R2,#8
LCALL?LED1
LCALL?DE
SJMP?LH1
LH1:JNB?P2。4,LOOP
SJMP?LH1
LOP2:MOV?A,#11H
MOV?SBUF,A
JNB?TI,$
CLR?TI
LCALL?DEL
AJMP?LOP
2?串行输出程序:
该部分程序的设计利用了单片机的串行模式0输出,该输出方式占用IO口少。可以省去许多IO口作为功能的扩展使用。在该模式下,我们采用了输出查询的方式,就是要借助发送标志TI,当程序执行到发送标志位时,查询其标志位TI的值,只要TI的值是0程序就继续查询,知道查询到TI为1时才结束,然后在进入下一组数据的发送。由于串行输出时送进去的数都是十进制数,以致计算机不能识别,所以还要把送进去的十进制数转化成而进制数,这样才能输出。因此在输出程序前必须有拆字程序,把原来送进去的十进制数转化成二进制数,然后在输出并通过数码管显示出来。但是如果在显示选手选号与显示选手回答问题所用的到计同用一段串行输出程序时就会造成程序的混乱,所以在此处设计了两段初始值不同的显示程序,从而可能增加了程序的烦琐化。
LED1:MOV?A,R2
MOV?B,#10
DIV?AB
MOV?R1,A
MOV?R3,B
MOV?A,R1
MOV?DPTR,#TAB
MOVC?A,@A+DPTR
MOV?SBUF,A
JNB?TI,$
CLR?TI
MOV?A,R3
MOVC?A,@A+DPTR
MOV?SBUF,A
JNB?TI,$
CLR?TI
RET。
LED:MOV?A,R0
MOV?B,#10
DIV?AB
MOV?R1,A
MOV?R3,B
MOV?A,R1
MOV?DPTR,#TAB
MOVC?A,@A+DPTR
MOV?SBUF,A
JNB?TI,$
CLR?TI
MOV?A,R3
MOVC?A,@A+DPTR
MOV?SBUF,A
JNB?TI,$
CLR?TI
RET
DE:CLR?P1。2
LCALL?DEL01
SETB?P1。2
LCALL?DEL01
RET
TAB:DB?11H,0D7H,32H,92H,0D4H,98H,18H,0D3H,10H,90H
RET
END
3倒计时程序
该程序为选手回答问题时的30秒倒计时程序,其中前25秒为正常的倒计时,在后5秒倒计时时伴随有报警声,用于提示选手回答问题的剩余时间。如果该选手在正常的倒计时内没有完成问题的回答,那么倒计时将被清零。
LOOP:MOV?R0,#30
LPP:LCALL?LED
LCALL?DEL
JNB?P2。4,LOP2
DEC?R0
CJNE?R0,#5,LPP
MOV?R0,#5
LPP1:JNB?P2。4,LOP2
LCALL?LED
LCALL?DE
DEC?R0
CJNE?R0,#0,LPP1
MOV?R0,#0
LCALL?LED
LCALL?DEL
LJMP?START
4延时程序
该系统设计了两段延时程序,一段1秒延时,是为了30秒倒计时调用和程序中一秒延时所用;另一段为0。5秒延时,用于报警。程序的设计中报警时间为一秒,但是由于在硬件的设计时只设计了一个按键,这样就会造成连续按键时会使所设定的报警声不断的响,这是设计中不允许的,所以在软件编程时设计了一个0。5秒的延时,被报警时所调用,这样就使报警声能很清楚地区分出来了
DEL:MOV?R6,#20?DEL01:MOV?R6,#10
DEL1:MOV?R5,#100?DEL11:MOV?R5,#100
DEL2:MOV?R4,#250?DEL21:MOV?R4,#250
DJNZ?R4,$?DJNZ?R4,$
DJNZ?R5,DEL2?DJNZ?R5,DEL21
DJNZ?R6,DEL1?DJNZ?R6,DEL11
RET?RET
5报警程序
该段程序主要是用于本系统中的所有报警使用,报警时间延时为1秒钟。
DE:CLR?P1。2
LCALL?DEL01
SETB?P1。2
LCALL?DEL01
RET
三、制作过程
五、参考文献
曾峰,巩海洪,曾波,电子工业出版社,印刷电路板(PCB)设计与制作?2005.8
梅海凤,王艳秋,张军,汪毓铎,清华大学出版社?单片机原理与接口技术?2004.2
北京交通大学出版社
第二个文献:基于51单片机八路抢答器设计程序及电路图
基于51单片机八路抢答器设计程序及电路图
说明:本人的这个设计改进后解决了前一个版本中1号抢答优先的问题,并增加了锦囊的设置,当参赛选手在回答问题时要求使用锦囊,则主持人按下抢答开始键,计时重新开始。
;八路抢答器电路请看下图是用ps仿真的,已经测试成功
单片机八路抢答器电路图
;============================================================
;================单片机八路抢答器程序?=====================
;================?51hei?=======================
;================?2008?年?5月?=======================
;============================================================
OK?EQU?20H;抢答开始标志位
RING?EQU?22H;响铃标志位
ORG?0000H
AJMP?MAIN
ORG?0003H
AJMP?INT0SUB
ORG?000BH
AJMP?T0INT
ORG?0013H
AJMP?INT1SUB
ORG?001BH
AJMP?T1INT
ORG?0040H
MAIN:?MOV?R1,#30;初设抢答时间为30s
MOV?R2,#60;初设答题时间为60s
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;ddddddd
ACALL?DELAY
JB?P3.0,NEXT;去抖动,如果"开始键"按下就向下执行,否者跳到非法抢答查询
ACALL?BARK;按键发声
MOV?A,R1
MOV?R6,A;送R1-R6,因为R1中保存了抢答时间
SETB?OK;抢答标志位,用于COUNT只程序中判断是否查询抢答
MOV?R7,#01H?;读抢答键数据信号标志,这里表示只读一次有用信号
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:?MOV?R3,#01H
AJMP?ERROR
FALSE2:?MOV?R3,#02H
AJMP?ERROR
FALSE3:?MOV?R3,#03H
AJMP?ERROR
FALSE4:?MOV?R3,#04H
AJMP?ERROR
FALSE5:?MOV?R3,#05H
AJMP?ERROR
FALSE6:?MOV?R3,#06H
AJMP?ERROR
FALSE7:?MOV?R3,#07H
AJMP?ERROR
FALSE8:?MOV?R3,#08H
AJMP?ERROR
;=====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.4,INC0;P3.4为+1s键,如按下跳到INCO
JNB?P3.5,DEC0;P3.5为-1s键,如按下跳到DECO
JNB?P3.1,BACK0;P3.1为确定键,如按下跳到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
;=====INT1(回答时间R2调整程序)=====
INT1SUB:MOV?A,R2
MOV?B,#0AH
DIV?AB
MOV?R5,A
MOV?R4,B
MOV?R3,#0AH
ACALL?DISPLAY
JNB?P3.4,INC1
JNB?P3.5,DEC1
JNB?P3.1,BACK1
AJMP?INT1SUB
INC1:?MOV?A,R2
CJNE?A,#63H,ADD1
MOV?R2,#00H
ACALL?DELAY1
AJMP?INT1SUB
ADD1:?INC?R2
ACALL?DELAY1
AJMP?INT1SUB
DEC1:?MOV?A,R2
JZ?SETR2
DEC?R2
ACALL?DELAY1
AJMP?INT1SUB
SETR2:?MOV?R2,#63H
ACALL?DELAY1
AJMP?INT1SUB
BACK1:?RETI
;=====倒计时程序(抢答倒计时和回答倒计时都跳到改程序)=====
REPEAT:MOV?A,R2?;使用锦囊时重新计时
MOV?R6,A
CLR?RING
COUNT:?MOV?R0,#00H;重置定时器中断次数
MOV?TH1,#3CH
MOV?TL1,#0B0H;重置定时器
RECOUNT:MOV?A,R6;R6保存了倒计时的时间,之前先将抢答时间或回答时间给R6
MOV?B,#0AH
DIV?AB;除十分出个位/十位
MOV?30H,A;十位存于(30H)
MOV?31H,B;个位存于(31H)
MOV?R5,30H;取十位
MOV?R4,31H;取个位
MOV?A,R6
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;如按下停止键退出
JNB?OK,CHECKK?;只在回答倒计时才有效
AJMP?NEXTT
CHECKK:JNB?P3.0,REPEAT?;判断是否使用锦囊
NEXTT:?ACALL?DISPLAY
JB?OK,ACCOUT;如果是抢答倒计时,如是则查询抢答,否者跳过查询继续倒数(这里起到锁抢答作用)
AJMP?RECOUNT
ACCOUT:
MOV?A,36H
JNB?ACC.0,TRUE1
JNB?ACC.1,TRUE2
JNB?ACC.2,TRUE3
JNB?ACC.3,TRUE4
JNB?ACC.4,TRUE5
JNB?ACC.5,TRUE6
JNB?ACC.6,TZ1
JNB?ACC.7,TZ2
AJMP?RECOUNT
TZ1:JMP?TRUE7
TZ2:JMP?TRUE8
QUIT:?CLR?OK;如果按下了"停止键"执行的程序
CLR?RING
AJMP?START
;=====正常抢答处理程序=====
TRUE1:?ACALL?BARK
MOV?A,R2
MOV?R6,A;抢答时间R2送R6
MOV?R3,#01H
CLR?OK;因为答题的计时不再查询抢答,所以就锁了抢答
AJMP?COUNT
TRUE2:ACALL?BARK
MOV?A,R2
MOV?R6,A
MOV?R3,#02H
CLR?OK
AJMP?COUNT
TRUE3:ACALL?BARK
MOV?A,R2
MOV?R6,A
MOV?R3,#03H
CLR?OK
AJMP?COUNT
TRUE4:ACALL?BARK
MOV?A,R2
MOV?R6,A
MOV?R3,#04H
CLR?OK
AJMP?COUNT
TRUE5:ACALL?BARK
MOV?A,R2
MOV?R6,A
MOV?R3,#05H
CLR?OK
AJMP?COUNT
TRUE6:?ACALL?BARK
MOV?A,R2
MOV?R6,A
MOV?R3,#06H
CLR?OK
AJMP?COUNT
TRUE7:ACALL?BARK
MOV?A,R2
MOV?R6,A
MOV?R3,#07H
CLR?OK
AJMP?COUNT
TRUE8:ACALL?BARK
MOV?A,R2
MOV?R6,A
MOV?R3,#08H
CLR?OK
AJMP?COUNT
;=====犯规抢答程序=====
ERROR:?MOV?R0,#00H
MOV?TH1,#3CH
MOV?TL1,#0B0H
MOV?34H,R3;犯规号数暂存与(34H)
HERE:?MOV?A,R0
CJNE?A,#06H,FLASH;0.3s向下运行-灭并停响
CLR?RING
MOV?R3,#0AH
MOV?R4,#0AH
MOV?R5,#0AH;三灯全灭
AJMP?CHECK1
FLASH:?CJNE?A,#0CH,CHECK1;下面是0.8s的情况,响并显示号数并清R0,重新计
SETB?RING
MOV?R0,#00H
MOV?R3,34H;取回号数
MOV?R5,#0BH
MOV?R4,#0BH;显示FF和号数
AJMP?CHECK1
CHECK1:?JNB?P3.1,QUIT1
ACALL?DISPLAY
AJMP?HERE
QUIT1:?CLR?RING
CLR?OK
AJMP?START
;=====显示程序=====
DISPLAY:MOV?DPTR,#DAT1;查表显示程序,利用P0口做段选码口输出/P2低三位做位选码输出,
MOV?A,R3
MOVC?A,@A+DPTR
MOV?P2,#0feH
MOV?P0,A
ACALL?DELAY2
MOV?DPTR,#DAT2
MOV?A,R5
MOVC?A,@A+DPTR
MOV?P2,#0fdH
MOV?P0,A
ACALL?DELAY2
MOV?A,R4
MOVC?A,@A+DPTR
MOV?P2,#0fbH
MOV?P0,A
ACALL?DELAY2
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
;第一个为零,其他与上相同,因为十位如果为零显示熄灭
;====加减时间延时(起到不会按下就加N个数)======
DELAY1:?MOV?35H,#08H
LOOP0:?ACALL?DISPLAY
DJNZ?35H,LOOP0
RET
;=====延时4236个机器周期(去抖动用到)=====
DELAY:?MOV?32H,#12H
LOOP:?MOV?33H,#0AFH
LOOP1:?DJNZ?33H,LOOP1
DJNZ?32H,LOOP
RET
;=====延时4236个机器周期(显示用到)=====
DELAY2:?MOV?32H,#43H
LOOP3:?MOV?33H,#1EH
MOV?A,R7?;每隔60~70个机器周期读一次P1口,全为1时为无效数据,继续读,有一个不为1时,转到正常抢答处理
JNZ?AAAA1?;没读到有效数据时继续转到AAAA1
LOOP2:?DJNZ?33H,LOOP2
DJNZ?32H,LOOP3
RET
;=====读抢答按键数据口程序=====
;由于在读抢答数据口的时候,单片机首先进入倒计时程序,再调用显示程序,最后才检测按键口
;然而在检测按键口时动态扫描要调用三次(4ms)延时程序.这样就会导致读数据口出现滞后,造成1号优先最高.8号最低.
;故采用在延时子程序中加了读数据口程序.保证了灵敏度和可靠性
AAAA1:?MOV?A,P1
CJNE?A,#0FFH,AA1?;当不全为1时的数据为有效数据
AA0:?MOV?36H,A?;将有效数据送到36H暂存
AJMP?LOOP2
AA1:?DEC?R7
AJMP?AA0
;=====发声程序=====
BARK:?SETB?RING
ACALL?DELAY1
ACALL?DELAY1
CLR?RING;按键发声
RET
;=====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
仅供参考。
课程设计 八路竞赛抢答器
第一章抢答器设计功能分析
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
谁给我个八路抢答器的总结和致谢!!
DP801运算速度快,它能在很短的时间内处理多个信息。我们利用它的插座便能制作出一台八路抢答器。
抢答器有八路接口,可以随用随接,需要几路用几路。并且为比赛主持人准备了按钮和显示灯,以便确认是否有人抢答。
运行程序,单片机快速检测各抢答台按钮和主持人按钮。主持人按下“开始”按钮后0#灯点亮。单片机继续检测各按钮。若有人按钮,则显示其号码,并调用地址为70的子程序计时(画横线处可更改计时时间)。在计时过程中,若答对问题,主持人可用“复位”键退出子程序继续下一题。到时间还没有回答完,单片机便会发出声音报告,然后自动继续运行。若无人按钮,主持人可用“复位”键熄灭0#灯进行下一题。
制作安装:将接口板、指示灯、按钮、插孔焊接好固定在如图2的盒子里。
使用时,将用到的抢答器按钮插头插进插孔里运行程序就可以了。抢答器由按钮、接口板、单片机(DP801)三部分组成,按钮和接口板之间用插头、插座连接。接口板和单片机之间用26线扁平线连接。接口板电路原理图见图1。
程序清单如下:
地址 指令机器码 指令助记符 注释 地址 指令机器码 指令助记符 注释
0 04 00 SS4 ;数码管清零 33 04 05 SS 5 ;5号台按钮了
2 08 01 09 DZ1,09 ;检测1号台 35 12 70 DY 70 ;调用检测子程序
5 04 01 SS1 ;1号台按钮了 37 08 06 44 DZ 6,44 ;检测6号台
7 12 70 DY70 ;调用检测子程序 40 04 06 SS6 ;6号台按钮了
9 08 02 16 DZ 2,16 ;检测2号台 42 12 70 DY 70 ;调用检测子程序
12 04 02 SS 2 ;2号台按钮了 44 08 07 51 DZ 7,51 ;检测7号台
14 12 70 DY 70 ;调用检测子程序 47 04 07 SS 7 ;检测7号台了
16 08 03 23 DZ 3,23 ;检测3号台 49 12 70 DY 70 ;调用检测子程序
19 04 03 SS 3 ;3号台按钮了 51 08 08 58 DZ 8,58 ;检测8号台
21 21 70 DY 70 ;调用检测子程序 54 05 08 SS 8 ;8号台按钮了
23 08 04 30 DZ 4,30 ;检测4号台 56 12 70 DY 70 ;调用检测子程序
26 04 04 SS 4 ;4号台按钮了 58 08 00 63 DZ 0,63 ;检测主持人“开始”按钮
28 12 70 DY 70 ;调用检测子程序 61 00 00 JT 0 ;点亮0#灯,可以抢答
30 08 05 37 DZ5,37 ;检测5号台 63 08 09 00 DZ 9 ;检测主持人“复位”按钮
66 01 00 DK 0 ;断开0#灯,不可抢答 76 16 15 01 JISH 05,1 ;限时15秒回答问题
68 10 00 ZX 0 ;反复检测 79 09 09 88 TZ 09,88 ;检测主持人“复位”按钮
70 03 23 03 ZY 23,3 ;发出声音 82 08 15 79 DZ 15,79 ;未到时,再次检测
73 03 21 04 ZY 21,4 ;有人抢答 85 03 25 03 ZY 25,3 ;时间到,发出声音
88 01 00 DK 0 ;断开0#灯 90 13 FH ;回原处继续运行