一、功能分析
1、设计一个智力竞赛抢答器,可同时供8名选手或8个代表队参加比赛,他们的编号分别为0、1、2、3、4、5、6、7,各用一个抢答按钮,按钮的编号与选手的编号相对应,分别为S0-S7。
2、给节目主持人设置一个控制开关,用来控制系统的清零和抢答的开始。
3、如果想调节抢答时间或答题时间,按\"抢答时间调节\"键或\"答题时间调节\"键进入调节状态,此时会显示现在设定的抢答时间或回答时间值,如想加一秒按一下\"+1s\"键,如果想减一秒按一下\"-1s\"键,时间LED上会显示改变后的时间,调整范围为0s~99s, 0s时再减1s会跳
到99,99s时再加1s会变到0s。
4、主持人按\"抢答开始\"键,会有提示音,并立刻进入抢答倒计时(预设30s抢答时间),如有选手抢答,会有提示音,并会显示其号数并立刻进入回答倒计时(预设60s抢答时间),不进行抢答查询,所以只有第一个按抢答的选手有效。倒数时间到小于5s会每秒响一下提示音。
5、如倒计时期间,主持人想停止倒计时可以随时按\"停止\"按键,系统会自动进入准备状态(清零),等待主持人按\"抢答开始\"进入下次抢答计时。
6、如果主持人未按\"抢答开始\"键,而有人按了抢答按键,犯规抢答,LED上不断闪烁FF和犯规号数并响个不停,直到按下\"停止\" 键为止。
7、P3.0为开始抢答,P3.1为停止,p1.0-p1.7为八路抢答输入,数码管段选P0口,位选P2口低3位,扬声器输出为P3.6口。P3.2抢答时间调整,P3.3回答时间调整,P3.4为时间加1调整,P3.5为时间减1调整。
二、方案设计论证比较
1、主控部分的方案比较
方案一:用以AT89S52为核心的单片机控制方案,通过相应的程序,并通过按键来
进行电平识别,再由单片机输出相应的程序,并将相应数值通过数码来显示,运用这个方案来实现题目的要求,其硬件电路的设计简单,编程并不是很复杂,作品功能的调试只要稍微结合电路,修改一下相应程序即可。
方案二:采用数字电路实现输出电压的控制方案,用加减计数器,通过加减键实现
加计数或减计数,通过计数器的自动加减,锁存器的锁存显示等。用这种方法来实现,其优点是不用编程,但其不足的之处是电路复杂,焊接工程量大,一旦焊接错误,就会给检查硬件带来很大的麻烦,而且调试也相对麻烦。
通过比较发现,用单片机来制作的抢答器,硬件电路比较简单,容易明白,且成本
相对较低;而用数电芯片来制作的抢答器,电路相对比较复杂,,成本相对较高。综合考滤,最终选择方案一。
2、显示部分的比较设计
方案一:采用LCD1602显示,用单片机可实现数据显示,显示内容较为丰富,较
为美观,但显示亮度和字体大小在演示时不尽人意,价格也比较昂贵,且题目要求的显示内容也较少,只是倒计时的时间和相应的队号而以,所以没有采用此方案。
方案二:采用LED七段数码管,采用三极管9012做为位码驱动,电路结构简单,
并且可以实现单片机I/O口的并用,显示效果直观,明亮,调试容易,成本较低。故采用LED数码管显示。电路如下图1-1所示
图1-1
三、硬件电路设计
如图所示为总体方框图。其工作原理为:接通电源后,主持人将开关拨到\"清除\"状态,抢答器处于禁止状态,编号显示器灭灯,定时器显示设定时间;主持人将开关置“开始\"状态,宣布\"开始\"抢答器工作。定时器倒计时,扬声器给出声响提示。选手在定时时间内抢答时,抢答器完成:优先判断、编号锁存、编号显示、扬声器提示。当一轮抢答之后,定时器停止、禁止二次抢答、定时器显示剩余时间。如果再次抢答必须由主持人再次操作\"清除\"和\"开始\"状态开关。
四、各模块电路设计
1、抢答器电路
参考电路如图所示。该电路完成两个功能:一是分辨出选手按键的先后,并锁存优先抢答者的编号,同时译码显示电路显示编号;二是禁止其他选手按键操作无效。工作过程:开关S置于\"清除\"端时,RS触发器的 端均为0,4个触发器输出置0,使74LS148的 =0,使之处于工作状态。当开关S置于\"开始\"时,抢答器处于等待工作状态,当有选手将键按下时(如按下S5),74LS148的输出 经RS锁存后,1Q=1, =1,74LS48处于工作状态,4Q3Q2Q=101,经译码显示为\"5\"。此外,1Q=1,使74LS148 =1,处于禁止状态,封锁其他按键的输入。当按键松开即按下时,74LS148的 此时由于仍为1Q=1,使 =1,所以74LS148仍处于禁止状态,确保不会出二次按键时输入信号,保证了抢答者的优先性。如有再次抢答需由主持人将S开关重新置;清除\"然后再进行下一轮抢答。74LS148为8线-3线优先编码器。
2、定时电路
由节目主持人根据抢答题的难易程度,设定一次抢答的时间,通过预置时间电路对计数器进行预置,计数器的时钟脉冲由秒脉冲电路提供。可预置时间的电路选用十进制同步加减计数器74LS192进行设计,具体电路如下图所示。
该部分主要由555定时器秒脉冲产生电路、十进制同步加减计数器74LS192减法
计数电路、74LS48译码电路和2个7段数码管即相关电路组成。具体电路如图3所示。两块74LS192实现减法计数,通过译码电路74LS48显示到数码管上,其时钟信号由时钟产生电路提供。74192的预置数控制端实现预置数,由节目主持人根据抢答题的难易程度,设定一次抢答的时间,通过预置时间电路对计数器进行预置,计数器的时钟脉冲由秒脉冲电路提供。按键弹起后,计数器开始减法计数工作,并将时间显示在共阴极七段数码显示管DPY_7-SEG 上,当有人抢答时,停止计数并显示此时的倒计时时间;如果没有人抢答,且倒计时时间到时, 输出低电平到时序控制电路,控制报警电路报警,同时以后选手抢答无效。
3、报警电路
由555定时器和三极管构成的报警电路如下图所示。其中555构成多谐振荡器,振荡频率,fo=1.43/[(RI+2R2)C],其输出信号经三极管推动扬声器。PR为控制信号,当PR为高电平时,多谐振荡器工作,反之,电路停振。由555 芯片构成多谐振荡电路 ,555 的输出信号再经三极管放大 ,从而推动扬声器发声。
4、时序控制电路
时序控制电路是抢答器设计的关键,它要完成以下三项功能:
①主持人将控制开关拨到\"开始\"位置时,扬声器发声,抢答电路和定时电路进人正常抢答工作状态。
②当参赛选手按动抢答键时,扬声器发声,抢答电路和定时电路停止工作。
③当设定的抢答时间到,无人抢答时,扬声器发声,同时抢答电路和定时电路停止
工作。
根据上面的功能要求,设计的时序控制电路如上图所示。图中,门G1 的作用是控制时钟信号CP的放行与禁止,门G2的作用是控制74LS148的输人使能端 。此图的工作原理是:主持人控制开关从\"清除\"位置拨到\"开始\"位置时,来自于定时电路中的74LS279的输出 1Q=0,经G3反相, A=1,则时钟信号CP能够加到74LS192的CPD时钟输入端,定时电路进行递减计时。同时,在定时时间未到时,则\"定时到信号\"为 1,门G2的输出 =0,使74LS148处于正常工作状态,从而实现功能①的要求。当选手在定时时间内按动抢答键时,1Q=1,经 G3反相, A=0,封锁 CP信号,定时器处于保持工作状态;同时,门G2的输出 =1,74LS148处于禁止工作状态,从而实现功能②的要求。当定时时间到时,则\"定时到信号\"为0, =1,74LS148处于禁止工作状态,禁止选手进行抢答。同时, 门G1处于关门状态,封锁 CP信号,使定时电路保持00状态不变,从而实现功能③的要求。
5、秒脉冲发生电路
6、声音提示电路
接74LS279的Q1、Q2、Q3+5V15k768k8 4350.51k蜂鸣器0.51k6555210.1F
0.01F
五、软件设计流程图
1、主程序
开始N初始化中断条件是否满足N读键盘是否有键按下Y进入中断程序调用显示抢答违规并报警子程序Y2、中断服务程序
中断服务程序开中断并响声提示
设定定时器初值并启动定时器10秒枪答倒计时开始显示调用读键子程序作为延时程序是否有键按下Y调用抢答者获的回答问题子程序N10秒到中断返回
3、答题子程序
调用抢答者获的回答问题子程序响声提示设定定时器初值并启动显示抢答者且3秒后15秒倒计时20秒回答问题时间到并响声提示RET
六、程序清单
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 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,TZ1 JNB P1.7,TZ2 AJMP START TZ1: JMP FALSE7 TZ2; JMP FALSE8
;=====非法抢答处理程序=====
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
;=====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 ; 3.4为+1s键,如按下跳到INCO JNB P3.5,DEC0 ; 3.5为-1s键,如按下跳到DECO
JNB P3.1,BACK0 ; 3.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 JMP 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
;=====倒计时程序(抢答倒计时和回答倒计时都跳到改程序)===== 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 ; 如按下停止键退出 ACALL DISPLAY
JB OK,ACCOUT ; 如果是抢答倒计时,如是则查询抢答,否者跳过查询继续倒数(这里起到锁抢答作用) AJMP RECOUNT ACCOUT: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,TZ3 JNB P1.7,TZ4 AJMP RECOUNT TZ3: JMP TRUE7 TZ4: 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,#0AH,FLASH ; 0.5s向下运行->灭并停响 CLR RING MOV R3,#0AH MOV R4,#0AH
MOV R5,#0AH;三灯全灭 AJMP CHECK1
FLASH: CJNE A,#14H,CHECK1 ; 下面是1s的情况,响并显示号数并清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 DELAY MOV DPTR,#DAT2 MOV A,R5
MOVC A,@A+DPTR MOV P2,#0fdH MOV P0,A
ACALL DELAY MOV A,R4
MOVC A,@A+DPTR MOV P2,#0fbH MOV P0,A
ACALL DELAY RET
DAT1B 00h,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,00H,71H
; “灭\灭\
DAT2B 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,00H,71H
; 第一个为零,其他与上相同,因为十位如果为零显示熄灭
;====加减时间延时(起到不会按下就加N个数)====== 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
;=====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、主持人按下抢答开始键之前,抢答选手若按下抢答键,视为违规,显示其号码,同
时报警,仿真电路如图:
2、当主持人按下抢答开始键后,进入抢答倒计时,显示仿真电路如图:
3、主持人按下抢答开始键,若有选手进行抢答,显示其号码,3秒后进入抢答15秒倒计时的仿真电路图如图:
4、选手答题期间,当主持人按下复位键后,重新计时的仿真电路图如图:
因篇幅问题不能全部显示,请点此查看更多更全内容