基于51单片机的8路抢答器.docx
《基于51单片机的8路抢答器.docx》由会员分享,可在线阅读,更多相关《基于51单片机的8路抢答器.docx(17页珍藏版)》请在冰豆网上搜索。
![基于51单片机的8路抢答器.docx](https://file1.bdocx.com/fileroot1/2022-11/22/21879ec3-6e71-40a1-b3ee-8ecc2c65fa63/21879ec3-6e71-40a1-b3ee-8ecc2c65fa631.gif)
基于51单片机的8路抢答器
摘要之阿布丰王创作
时间:
二O二一年七月二十九日
抢答器作为一种工具,已广泛应用于各种智力和知识竞赛场所.但抢答器的使用频率较低,且有的要么制作复杂,要么可靠性低.作为一个单元,如果专门购一台抢答器虽然在经济上可以接受,但每年使用的次数极少,往往因长期寄存使(电子器件的)抢答器损坏,再购置的麻烦和及时性就会影响活动的开展,因此设计了本抢答器.
本设计是以八路抢答为基本理念.考虑到依需设定限时回答的功能,利用AT89C51单片机及外围接口实现的抢答系统,利用单片机的按时器/计数器按时和记数的原理,将软、硬件有机地结合起来,使得系统能够正确地进行计时,同时使数码管能够正确地显示时间.用开关做键盘输出,扬声器发生提示.同时系统能够实现:
在抢答中,只有开始后抢答才有效,如果在开始抢答前抢答为无效;抢答限按时间和回答问题的时间可在1-99s设定;可以显示是哪位选手有效抢答和无效抢答,正确按键后有音乐提示;抢答时间和回答问题时间倒记时显示,满时后系统计时自动复位及主控强制复位;按键锁定,在有效状态下,按键无效非法.
关键词:
51单片机,抢答器,时间设定
1抢答器设计功能分析1
1.1数字抢答器的概述1
1.2设计任务与要求1
2方案设计2
3硬件电路设计3
3.1总体设计3
3.2外部振荡电路3
3.3复位电路的设计4
3.4显示电路的设计4
3.5按钮输入电路的设计4
3.6发声5
4系统软件设计6
4.1法式系统结构图6
4.2法式流程图6
4.3法式代码:
9
4.3.1查询法式:
10
4.3.2非法抢答处置法式:
10
4.3.3倒计时法式(包括有效抢答法式):
11
4.3.4正常抢答处置法式:
13
4.3.5犯规抢答法式:
14
4.3.6显示法式:
15
4.3.7延时(显示和去颤动用到):
16
4.3.8TO溢出中断(响铃法式):
17
4.3.9T1溢出中断(计时法式):
17
总结18
参考文献19
1抢答器设计功能分析
1.1数字抢答器的概述
对抢答器我们年夜家来说都不陌生,它是用于很多竞赛场所,真正实现先抢先答,让最先抢到题的选手来回答问题.抢答器不单考验选手的反应速度同时也要求选手具备足够的知识面和一定的勇气.选手们都站在同一个起跑线上,体现了公平公正的原则.
1.2设计任务与要求
基本要求:
1.给主持人设置一个开关,用来控制系统的清零(编号显示数码管灭灯)和抢答器的开始.
2.抢答器具有数据锁存和显示的功能.抢答开始后,若有选手按动抢答器按钮,编号立即锁存,并在LED数码上显示选手的编号,同时扬声器给出音响提示.另外,要封锁输入电路,禁止其他选手抢答.
发挥部份:
1.抢答器具有按时抢答的功能,且一次抢答的时间可以由主持人设定(如30秒).当节目主持人启动“开始”键后,要求按时器立即减计时,并用显示器显示,同时扬声器发出长久的声响,声响继续时间0.5秒左右.
2.介入选手在设定的时间内抢答,抢答有效,按时器停止工作,显示器上显示选手的编号和抢答时刻的时间,并坚持到主持人将系统清零为止.
3.如果按时抢答的时间已到,却没有选手抢答时,本次抢答无效,系统长久报警,并封锁输入电路,禁止选手超时后抢答,时间显示器上显示00.
4.选手如果在主持人按开始键之前违规抢答,系统报警,LED显示违规选手号码和FF,直到主持人按下停止键.
2方案设计
该系统采纳51系列单片机AT89C51作为控制核心,该系统可以完成运算控制、信号识别以及显示功能的实现.由于用了单片机,使其技术比力成熟,应用起来方便、简单而且单片机周围的辅助电路也比力少,便于控制和实现.整个系统具有极其灵活的可编程性,能方便地对系统进行功能的扩张和更改.MCS-51单片机特点如下:
<1>可靠性好:
单片机依照工业控制要求设计,抵当工业噪声干扰优于一般的CPU,法式指令和数据都可以写在ROM里,许多信号通道都在同一芯片,因此可靠性高,易扩充.
<2>单片机有一般电脑所必需的器件,如三态双向总线,串并行的输入及输出引脚,可扩充为各种规模的微电脑系统.<3>控制功能强:
单片机指令除输入输出指令,逻辑判断指令外还有更丰富的条件分支跳跃指令.
原理框图如下:
图2-1原理框图
3硬件电路设计
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个机器周期的高电平即可实现复位,复位后单片机的各状态都恢复到初始化状态,其电路图如图所示:
图3-3复位电路
在方案中使用到了硬件复位和软件复位两种功能,由上面的硬件复位可使寄存器及存储器的值都恢复到初始值,而前面的功能提到了倒计时间需要有记忆功能,该功能实现的前提条件就是不能对单片机进行硬件复位,所以设定了软复位功能.软复位实际上就是当法式执行完毕之后,将法式指针通过一条跳转指令让它跳转到法式执行的起始地址.
3.4显示电路的设计
显示电路使用了七段数码管7SEG-MPX4-CC,它是共阴极的,由高电平点亮.
图3-4阴极七段数码管
按钮输入电路的设计
抢答器的输入按钮使用常开开关,
图3-5抢答按键
这些常开开关组成了抢答按键,硬件电路简单,在法式设计上也不复杂,只要在法式中消除在按键过程中发生的“毛刺”
现象就可以了.这里采纳最经常使用的方法即延时法,其的原理为:
因为“毛刺”脉冲一般继续时间短,约为几ms,而按键的时间一般远远年夜于这个时间,所以当单片机检测到有按键动态后再延时一段时间(这里取10ms)后再判断此电平是否坚持原状态,如果是则为有效按键,否则无效.
3.6发声
这里能利用法式来控制单片机P3.6口线反复输出高电平或低电平,即在该口线上发生一定频率的矩形波,接上扬声器就能发出一定频率的声音,再利用延时法式控制“高”“低”电平的继续时间,就能改变输出频率,从而改变音调,使扬声器发出分歧的声音.
4系统软件设计
4.1法式系统结构图
硬件电路确定后,软件的编程要与硬件相匹配,软硬件才华结合完成所要实现的功能.由功能分析获得以下的软件结构图:
图4-1软件系统结构图
4.2法式流程图
整个法式主要由按时器T0、按时器T1、外部中断0和主法式构成.
按时器T0用于使扬声器发声,当需要响铃时,把响铃标识表记标帜位置一,每次中断都对P3.7取反,扬声器发声,改变按时器初值,可改变扬声器频率.按时器程流程图如下:
图4-2响铃法式流程图
按时器T1用于倒计时,每次中断为50ms,当计数标识表记标帜为20时即为一秒,显示数字减一.其流程图如下:
图4-3倒计时中断流程图
外部中断0用于调整倒计时时间,流程图如下:
图4-4调整抢答时间流程图
主法式协调三个中断一起工作,实现抢答功能,其流程图如下:
图4-5主法式流程图
4.3法式代码:
P3.0为开始抢答,P3.1为停止,P1.0-P1.7为八路抢答输入,数码管段选P0口,位选P2的低三位口,蜂鸣器输出为P3.6口.
ORG0000H
AJMPMAIN
ORG0003H
AJMPINT0SUB
ORG000BH
AJMPT0INT
ORG001BH
AJMPT1INT
OKEQU20H;抢答开始标识表记标帜位
RINGEQU22H;响铃标识表记标帜位
ORG0040H
MAIN:
MOVR1,#0FH;初设抢答时间为15s
MOVR2,#0AH;初设答题时间为10s
MOVTMOD,#11H;设置未按时器/模式1
MOVTH0,#0F0H
MOVTL0,#0FFH;越高发声频率越高,越尖
MOVTH1,#3CH
MOVTL1,#0B0H;50ms为一次溢出中断
SETBEA
SETBET0
SETBET1
SETBEX0
SETBEX1;允许四个中断,T0/T1/INT0/INT1
CLROK
CLRRING
SETBTR1
SETBTR0;一开始就运行按时器,以开始显示FFF.如果想重新计数,重置TH1/TL1就可以了
4.3.1查询法式:
START:
MOVR5,#0BH
MOVR4,#0BH
MOVR3,#0BH
ACALLDISPLAY;未开始抢答时候显示FFF
JBP3.0,NEXT
ACALLDELAY
JBP3.0,NEXT;去颤动,如果"开始键"按下就向下执行,否者跳到非法抢答查询
ACALLBARK;按键发声
MOVA,R1
MOVR6,A;送R1->R6,因为R1中保管了抢答时间
SETBOK;抢答标识表记标帜位,用于COUNT只法式中判断是否查询抢答
MOVR3,#0AH;抢答只显示计时,灭号数
AJMPCOUNT;进入倒计时法式,"查询有效抢答的法式"在COUNT里面
NEXT:
JNBP1.0,FALSE1
JNBP1.1,FALSE2
JNBP1.2,FALSE3
JNBP1.3,FALSE4
JNBP1.4,FALSE5
JNBP1.5,FALSE6
JNBP1.6,FALSE7
JNBP1.7,FALSE8
AJMPSTART
4.3.2非法抢答处置法式:
FALSE1:
ACALLBARK;按键发声
MOVR3,#01H
AJMPERROR
FALSE2:
ACALLBARK
MOVR3,#02H
AJMPERROR
FALSE3:
ACALLBARK
MOVR3,#03H
AJMPERROR
FALSE4:
ACALLBARK
MOVR3,#04H
AJMPERROR
FALSE5:
ACALLBARK
MOVR3,#05H
AJMPERROR
FALSE6:
ACALLBARK
MOVR3,#06H
AJMPERROR
FALSE7:
ACALLBARK
MOVR3,#07H
AJMPERROR
FALSE8:
ACALLBARK
MOVR3,#08H
AJMPERROR
4.3.3倒计时法式(包括有效抢答法式):
COUNT:
MOVR0,#00H;重置按时器中断次数
MOVTH1,#3CH
MOVTL1,#0B0H;重置按时器
RECOUNT:
MOVA,R6;R6保管了倒计时的时间
MOVB,#0AH
DIVAB;除十分出个位/十位
MOV30H,A;十位存于(30H)
MOV31H,B;个位存于(31H)
MOVR5,30H;取十位
MOVR4,31H;取个位
MOVA,R6
CLRC
SUBBA,#07H
JNCLARGER;年夜于5s跳到LARGER,小于即是5s会提醒
MOVA,R0
CJNEA,#0AH,FULL;1s中0.5s向下运行
CLRRING
AJMPCHECK
FULL:
CJNEA,#14H,CHECK;1s时,响并显示号数并清R0,重新计时
SETBRING
MOVA,R6
JZQUIT;计时完毕
MOVR0,#00H
DECR6;一秒标识表记标帜减1
AJMPCHECK
LARGER:
MOVA,R0
CJNEA,#14H,CHECK;如果1s向下运行,否者跳到查"停/显示"
DECR6;计时一秒R6自动减1
MOVR0,#00H
CHECK:
JNBP3.1,QUIT;如按下停止键退出
ACALLDISPLAY
JNBP1.0,TRUE1
JNBP1.1,TRUE2
JNBP1.2,TRUE3
JNBP1.3,TRUE4
JNBP1.4,TRUE5
JNBP1.5,TRUE6
JNBP1.6,TRUE7
JNBP1.7,TRUE8
AJMPRECOUNT
QUIT:
CLROK;如果按下了"停止键"重新回到开始
CLRRING
ACALLBARK
AJMPSTART
4.3.4正常抢答处置法式:
TRUE1:
ACALLBARK;按键发声
MOVA,R2
MOVR6,A;抢答时间R2送R6
MOVR3,#01H
CLROK;
AJMPLOOP2
TRUE2:
ACALLBARK;
MOVA,R2
MOVR6,A
MOVR3,#02H
CLROK
AJMPLOOP2
TRUE3:
ACALLBARK;
MOVA,R2
MOVR6,A
MOVR3,#03H
CLROK
AJMPLOOP2
TRUE4:
ACALLBARK;
MOVA,R2
MOVR6,A
MOVR3,#04H
CLROK
AJMPLOOP2
TRUE5:
ACALLBARK;
MOVA,R2
MOVR6,A
MOVR3,#05H
CLROK
AJMPLOOP2
TRUE6:
ACALLBARK;
MOVA,R2
MOVR6,A
MOVR3,#06H
CLROK
AJMPLOOP2
TRUE7:
ACALLBARK;
MOVA,R2
MOVR6,A
MOVR3,#07H
CLROK
AJMPLOOP2
TRUE8:
ACALLBARK;
MOVA,R2
MOVR6,A
MOVR3,#08H
CLROK
LOOP2:
AJMPDISPLAY;抢答后停止计时,等候返回
SETBRING
JNBP3.1QUIT
AJMPLOOP2
4.3.5犯规抢答法式:
ERROR:
SETBRING;犯规响铃
MOVR5,#0BH
MOVR4,#0BH;显示FF和犯规号数
LOOP3:
ACALLDISPLAY
JNBP3.1QUIT1;等候“停止”键按下
AJMPLOOP3
QUIT1:
CLRRING
CLROK
AJMPSTART
4.3.6显示法式:
DISPLAY:
MOVDPTR,#DAT1;查表显示法式,利用P0口做段选码口输出/P2低三位做位选码输出
MOVA,R5
MOVCA,@A+DPTR
MOVP2,#01H
MOVP0,A
ACALLDELAY
MOVDPTR,#DAT2
MOVA,R4
MOVCA,@A+DPTR
MOVP2,#02H
MOVP0,A
ACALLDELAY
MOVA,R3
MOVCA,@A+DPTR
MOVP2,#04H
MOVP0,A
ACALLDELAY
RET
DAT1:
DB00H,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,00H,71H
;"灭","1","2","3","4","5","6","7","8","9","灭","F"
DAT2:
DB3FH,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,00H,71H
DELAY1:
MOV35H,#08H
LOOP0:
ACALLDISPLAY
DJNZ35H,LOOP0
RET
4.3.7延时(显示和去颤动用到):
DELAY:
MOV32H,#12H
LOOP:
MOV33H,#0AFH
LOOP1:
DJNZ33H,LOOP1
DJNZ32H,LOOP
RET
发声法式:
BARK:
SETBRING
ACALLDELAY1
ACALLDELAY1
CLRRING;按键发声
RET
INT0(抢答时间R1调整法式):
INT0SUB:
MOVA,R1
MOVB,#0AH
DIVAB
MOVR5,A
MOVR4,B
MOVR3,#0AH
ACALLDISPLAY;先在两个时间LED上显示R1
JNBP3.2,INC0;P3.2为+1s键,如按下跳到INCO
JNBP3.3,DEC0;P3.3为-1s键,如按下跳到DECO
JNBP3.4,BACK0;P3.4为确定键,如按下跳到BACKO
AJMPINT0SUB
INC0:
MOVA,R1
CJNEA,#63H,ADD0;如果不是99,R2加1,如果加到99了,R1就置0,重新加起
MOVR1,#00H
ACALLDELAY1
AJMPINT0SUB
ADD0:
INCR1
ACALLDELAY1
AJMPINT0SUB
DEC0:
MOVA,R1
JZSETR1;如果R1为0,R1就置99,
DECR1
ACALLDELAY1
AJMPINT0SUB
SETR1:
MOVR1,#63H
ACALLDELAY1
AJMPINT0SUB
BACK0:
RETI
4.3.8TO溢出中断(响铃法式):
T0INT:
MOVTH0,#0ECH
MOVTL0,#0FFH
JNBRING,OUT
CPLP3.6;RING标识表记标帜位为1时候P3.6口不短取反使喇叭发出一定频率的声音
OUT:
RETI
4.3.9T1溢出中断(计时法式):
T1INT:
MOVTH1,#3CH
MOVTL1,#0B0H
INCR0
RETI
END
总结
通过此次的课程设计,让我更进一步的巩固了单片机的各种知识.但在设计的过程中,遇到了很多的问题,有一些知识已经不太清楚了,可是通过一些资料又重新的翻阅而且认真的复习了相关教科书中的内容.此次的课程设计树立了对自己工作能力的信心,相信会对今后的学习工作生活都有非常重要的影响,而且年夜年夜的提高了入手能力,使我充沛的体会到了缔造过程中的探索的艰难和胜利的喜悦.虽然这次做出的作品还存在很多需要改进的处所,可是在整个设计过程中所学习到的工具是这次实训所获得的最年夜收获跟财富,使我终身受益.
参考文献
1.李建忠.单片机原理及应用.西安电子科技年夜学出书社,2008;
2.杨居义.单片机课程设计指导.清华年夜学出书社,2009;
3.李海滨等.单片机技术课程设计与项目实例.中国电力出书社,2009.
时间:
二O二一年七月二十九日