基于80C51单片机的八路抢答器设计
专业论文
题目:基于80C51单片机的八路抢答器设
计
摘要:八路智力抢答器是一个可供八个参赛组进行智力竞赛的电路装置,该
装置主要是由单片机最小系统、控制电路(八个选手抢答按钮;三个主持人
控制按钮;四个修改按钮)、数码显示电路与蜂鸣器电路组成的。单片机
(MCU )是目前在电气控制技术中广泛应用的重要元件。它具有体积小,稳
定性高,应用范围广,控制能力强,升级改造容易等诸多优点。本论文介绍
采用ATMEL 公司AT89S52单片机设计八路智能抢答器。软件采用汇编语言
编程,汇编语言属于计算机领域的低级语言,具有简明易懂, 执行效率高等的
优点。智能八路抢答器具有抢答时间与答题时间调整,抢答错误报警提示等
功能,可以广泛应用于各类知识竞赛。
关键词:抢答器;单片机; 硬件系统; 软件编程
基于80C51单片机的八路抢答器设计
一、系统概述与原理方框图
在文中,我对八路抢答器的总体设计及其主要的功能特点进行简单的分
析,并给出它的特点,实现的功能以及系统的简单操作,以对单片机及其控
制系统的了解。
(一)单片机技术发展的概述与系统问题的提出
目前,单片机正朝着高性能和多品种方向发展,单片机的发展正朝着
CMOS 化,低功耗,小体积,大容量,高性能,低价格和外围电路的内装化等
几个方面
发展。近几年,由于某种原因CHMOS 技术的进步,大大地促进了单片机的CMOS
化,此种芯片除了低功耗外,还具有功耗的可控性,使单片机可以工作在功
耗精细管理状态,特别是IIC ,API 等串行总线的引入,可以使单片机的引脚
设计得更少,单片机系统结构更加简化及规范化。
我们设计出的8路抢答器是一种基于MCS-51单片机的硬件和软件设计及
实现方法,这种电路设计具有按键有效提示, 输入错误提示, 控制报警电路,
在线修改功能等多种功能, 保密性强, 灵活性高, 特别适用于家庭! 办公室! 学
生宿舍及宾馆等场所。它具有全集成化,智能化,高精度,高性能,高可靠
性和低价格等优点,是一个值得推广的一种方法。接下来我们就对方案与设
计原理方框图进行比较分析。
(二)设计思路与系统组成及主要特点
为了使设计更具有针对性,使用性更强,我对其进行精心的设计,在设
计过程中,我们想到了很多的设计方案。
1.设计思路
设计一个八路抢答器,可同时供8名选手或者8个代表队参加比赛,他
们的编号分别为1——8, 各用一个抢答器按钮, 按钮的编号与选手的编号相
对应, 分别设为S1…S8。节目主持人设置一组控制开关,用来控制系统的清
零和抢答器的开始,修改抢答时间与答题时间,如果想调节抢答时间或答题
时间, 按" 抢答时间调节" 键或" 答题时间调节" 键进入调节状态。并且抢答器具
有数据锁存和显示的功能,抢答开始,若有选手按动抢答按钮,编号立即锁
存,并在LED 数码管上显示出选手的编号,同时蜂鸣器给出音响提示,此外,
要封锁输入电路,禁止其他选手抢答,优先抢答选手的编号一直保持到主持
人将系统清零为止。
2. 系统的主要特点有:
1)该产品的互换性好,响应速度快,抗干扰能力强,外围电路简单易懂,因
此相对来说体积小。
2) 该系统能用软件的方式设计硬件,所以用软件方式设计的系统向硬件系
统的转换是由有关开发软件自动完成的,易操作。
3) 具有具体数字显示的功能。
4) 可以从以前的组合设计转向真正的自由设计,所以设计的移植性好,效
率高。可适合大规模的现场制作。
5) 利用按钮进行输入,输入简单。
6) 具有智能报警的功能,当选定之后就马上锁定,并且发出音乐声音。大
大提高了抢答器的可靠性。
7) 因为整个系统可集成在一个芯片上,因此体积小,功耗低,可靠边性更
高。
3.系统组成
硬件电路框架如图1.2所示:硬件部分由单片机控制模块、按键模块、蜂
鸣器模块和数码显示模块组成。
图1.2
二、系统硬件电路的设计(元器件选择)
硬件电路应能完成以下功能:当主持人按下开始键时,参与选手对主持
人提出的问题要在最短的时间内作出判断 ,并按下抢答按键回答。
当第一个
人按下按键后,则在显示器上显示此参赛选手号码并进行声音提示,同时电
路将其他抢答按键封锁,使其不起作用。若有人在主持人按下开始键之前按
键,应有违规提示。当选手开始答题时,电路具有倒计时功能,倒计时时间
可以设置并显示,倒计时时间到时提醒主持人时间到。如果在规定时间内没
有人抢答则蜂鸣器报警提示。回答完或超时后,由主持人将所有按键恢复,
重新开始下一轮答题。
(一)单片机控制模块
该模块采用AT89C52单片机作为核心控制元
件,它对整个抢答器起到控制作用。当主持人按下开
始按键后,选手就可以按下自己的抢答键进行抢答,
当主持人没有按下开始键时,选手按下自己的抢答键
是无效的。
AT89C52
(二)按键输入模块(加口电路的介绍)
该模块主要由两部分组成,一部分是主持人按键起到控制的作用,一部
分是选手按键。其中,主持人按键起到控制的作用,当主持人没有按下开始
键时,选手不能抢答。另外,当选手答题完毕后,主持人要按下复位键,准
备进行下一轮的抢答,当在规定的时间内,没有选手抢答时,主持人也要按
下复位键,使其进入下一轮的抢答。
按键开关是实现人机对话的最简单地输入设备,通过它能随时发出各种
控制指令和数据到单片机。
按键输入模块的基本工作原理:当有按键被按下时按键所接的单片机端
口引脚接地,其引脚电平为0,未按下时引脚电平为1。所以,判断按键开关
是否有信号输入,是通过测量按键所接的引脚电平高低,当检测到按键所接
引脚的电平为0时,说明该按键被按下,然后再检测到电平为1时,说明按
键按下后又被放开,完成一次信号输入的过程。
单片机复位电路包括片内、片外两部分。外部复位电路就是为内部复位
电路提供两个机器周期以上的高电平而设计的。通常采用上电自动复位和按
键手动复位两种方式。当运行出错或进入死循环时,可按复位键重新运行。
复位操作可使单片机进入初始化状态,其中包括使程序计数器PC =0000H ,
这表明程序从0000H 地址单元开始执行。
按键电平复位电路
单片机有硬件复位端, 只要输入持续4个机器周期的高电平即可实现复
位。硬件复位后的各状态可知寄存器及存储器的值都恢复到了初始值, 应为本
设计功能中有倒计时时间的记忆功能,所以不能对单片机进行硬件复位,只
能用软复位。软复位实际上就是当程序执行完毕之后, 将程序指针通过一条跳
转指令让它跳转到程序的初始位置。
(三)外部晶振模块
外部振荡电路单片机必须在AT89C52的驱动下才能工作. 在单片机内部
有一个时钟振荡电路, 只需要外接一个振荡源就能产生一定的时钟信号送到
单片机内部的各个单元。
单片机内部有一个高增益的反相放大器,用于构成振荡器,反相放大器
的输入端为XTAL1,输出端为XTAL2。
内部振荡方式:是在XTAL1和XTAL2引脚两端跨接石英晶体振荡器和两
个电容构成稳定的自激振荡电路。
外部振荡方式:外部振荡方式就是把外部已有的时钟信号引入单片机内。
电容C1和C2通常取30pF ,对振荡频率有微调作用。晶振频率范围是
1.2MHz ~12MHz 。
(四)蜂鸣器模块
该模块主要是起到提醒和报警的作用,当主持人按下开始键时,蜂鸣器
响,当有选手犯规时,蜂鸣器也要发出声音,还有就是当倒计时开始时,蜂
鸣器就要发出报警的声音。
单片机I/O引脚以软件延时方法产出一定频率的方波输出,控制接在该
引脚的三极管导通和截止,从而会使接在三极管上的蜂鸣器发出声响。其发
生模块由三部分组成:(1)产生方波输出、(2)确定发生频率、(3
)确定维
持发生的时间。
蜂鸣器发声时工作在三极管的饱和状态,不发声时工作在三极管的截止
状态。
三极管在电路中起到开关与放大作用,即:发射结正偏,集电结反偏时
三极管起放大作用;发射结正偏,集电结正偏时三极管起饱和(开关闭合)
作用;发射结反偏 集电结反偏时三极管起截止(开关断开)作用。电路中发
射极与集电极上的电阻是限流电阻,起到保护三极管作用。
在这里使用的是无缘蜂鸣器,工作时需要接入音频方波,改变方波频率
可以得到不同音调的声音。
(五)数字显示模块(加四位一体数码管的原理
)
图2.5.1 图2.5.2
图2.5.3
该模块主要显示两部分内容。一部分是参加选手的编号,另一部分是显
示倒计时。图2.5.1中R2—R8七个330欧姆电阻起到限流作用,可用来控制
显示管的亮度,亮度随阻值的增大而增大。
图2.5.2中数码管上的8个引脚依照A 、B 、C 、D 、E 、F 、G 、DP 与单片
机P0.0、P0.1、P0.2 、P0.3、P0.4、P0.5、P0.6、P0.7相连接的阳极接口。
BIT1、BIT2、BIT3、BIT4是数码管的片选,对应选择第几个数码管可以亮。
对于图2.5.3中的七段数码管,各段二极管的阴极连接在一起作为公共
端,这样可以使驱动电路简单,将阴极连接在一起的称为共阴极数码管,用
高电平驱动数码管各段的阳极,其COM 端接地。
(六)抢答器电路接线图
三、系统的软件程序设计
(一)抢答器功能介绍
1.如果想调节抢答时间或答题时间, 按" 抢答时间调节" 键或" 答题时间调节"
键进入调节状态, 此时会显示现在设定的抢答时间或回答时间值, 如想加一秒
按一下" 加1s" 键, 如果想减一秒按一下"-1s" 键,时间LED 上会显示改变后的
时间,调整范围为0s~99s, 0s时再减1s 会跳到99,99s 时再加1s 会变到
0s 。 2.主持人按" 抢答开始" 键,会有提示音,并立刻进入抢答倒计时(预设30s
抢答时间),如有选手抢答,会有提示音,并会显示其号数并立刻进入回答倒
计时(预设60s 抢答时间),不进行抢答查询,所以只有第一个按抢答的选手
有效。倒数时间到小于5s 会每秒响一下提示音。 3.如倒计时期间,主持人想停止倒计时可以随时按" 停止" 按键,系统会自
动进入准备状态,等待主持人按" 抢答开始" 进入下次抢答计时。 4.如果主持人未按" 抢答开始" 键,而有人按了抢答按键,犯规抢答,LED
上不断闪烁FF 和犯规号数并响个不停,直到按下" 停止" 键为止。
5.P3.0为开始抢答,P3.1为停止,p1.0-p1.7为八路抢答输入 数码管段选
P0口,位选P2口低3位,蜂鸣器输出为P3.6口。P3.2抢答时间调整结,P3.3
回答时间调整,P3.4为时间加1调整,P3.5为时间减1调整。
(二)程序流程
(三)程序设计
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 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;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
;=====倒计时程序(抢答倒计时和回答倒计时都跳到改程序)===== 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
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
;=====延时(显示和去抖动用到)===== 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.李光飞. 楼然苗. 胡佳文. 谢象佐. 《单片机课程设计实例指导》北京航空航天大学出版社