基于80C51单片机的八路抢答器设计讲解Word下载.docx
- 文档编号:18599373
- 上传时间:2022-12-29
- 格式:DOCX
- 页数:19
- 大小:259.19KB
基于80C51单片机的八路抢答器设计讲解Word下载.docx
《基于80C51单片机的八路抢答器设计讲解Word下载.docx》由会员分享,可在线阅读,更多相关《基于80C51单片机的八路抢答器设计讲解Word下载.docx(19页珍藏版)》请在冰豆网上搜索。
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调整。
(二)程序流程
(三)程序设计
OKEQU20H;
抢答开始标志位
RINGEQU22H;
响铃标志位
ORG0000H
AJMPMAIN
ORG0003H
AJMPINT0SUB
ORG000BH
AJMPT0INT
ORG0013H
AJMPINT1SUB
ORG001BH
AJMPT1INT
ORG0040H
MAIN:
MOVR1,#30;
初设抢答时间为30s
MOVR2,#60;
初设答题时间为60s
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就可以了
;
=====查询程序=====
START:
MOVR5,#0BH
MOVR4,#0BH
MOVR3,#0BH
ACALLDISPLAY;
未开始抢答时候显示FFF
JBP3.0,NEXT;
ddddddd
ACALLDELAY
去抖动,如果"
开始键"
按下就向下执行,否者跳到非法抢答查询
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,TZ1
JNBP1.7,TZ2
AJMPSTART
TZ1:
JMPFALSE7
TZ2:
JMPFALSE8
=====非法抢答处理程序=====
FALSE1:
MOVR3,#01H
AJMPERROR
FALSE2:
ACALLBARK
MOVR3,#02H
FALSE3:
MOVR3,#03H
FALSE4:
MOVR3,#04H
FALSE5:
MOVR3,#05H
FALSE6:
MOVR3,#06H
FALSE7:
MOVR3,#07H
FALSE8:
MOVR3,#08H
=====INT0(抢答时间R1调整程序)=====
INT0SUB:
MOVB,#0AH
DIVAB
MOVR5,A
MOVR4,B
MOVR3,#0AH
先在两个时间LED上显示R1
JNBP3.4,INC0;
P3.4为+1s键,如按下跳到INCO
JNBP3.5,DEC0;
P3.5为-1s键,如按下跳到DECO
JNBP3.1,BACK0;
P3.1为确定键,如按下跳到BACKO
AJMPINT0SUB
INC0:
MOVA,R1
CJNEA,#63H,ADD0;
如果不是99,R2加1,如果加到99,R1就置0,重新加起。
MOVR1,#00H
ACALLDELAY1
ADD0:
INCR1
DEC0:
JZSETR1;
如果R1为0,R1就置99,
DECR1
SETR1:
MOVR1,#63H
BACK0:
RETI
=====INT1(回答时间R2调整程序)=====
INT1SUB:
MOVA,R2
ACALLDISPLAY
JNBP3.4,INC1
JNBP3.5,DEC1
JNBP3.1,BACK1
AJMPINT1SUB
INC1:
CJNEA,#63H,ADD1
MOVR2,#00H
ADD1:
INCR2
DEC1:
JZSETR2
DECR2
SETR2:
MOVR2,#63H
BACK1:
=====倒计时程序(抢答倒计时和回答倒计时都跳到改程序)=====
COUNT:
MOVR0,#00H;
重置定时器中断次数
重置定时器
RECOUNT:
MOVA,R6;
R6保存了倒计时的时间,之前先将抢答时间或回答时间给R6
DIVAB;
除十分出个位/十位
MOV30H,A;
十位存于(30H)
MOV31H,B;
个位存于(31H)
MOVR5,30H;
取十位
MOVR4,31H;
取个位
MOVA,R6
SUBBA,#07H
JNCLARGER;
大于5s跳到LARGER,小于等于5s会提醒
MOVA,R0
CJNEA,#0AH,FULL;
1s中0.5s向下运行
CLRRING
AJMPCHECK
FULL:
CJNEA,#14H,CHECK;
下面是1s的情况,响并显示号数并清R0,重新计
SETBRING
JZQUIT;
计时完毕
MOVR0,#00H
DECR6;
一秒标志减1
LARGER:
如果1s向下运行,否者跳到查"
停/显示"
计时一秒R6自动减1
CHECK:
JNBP3.1,QUIT;
如按下停止键退出
JBOK,ACCOUT;
如果是抢答倒计时,如是则查询抢答,否者跳过查询继续倒数(这里起到锁抢答作用)
AJMPRECOUNT
ACCOUT:
JNBP1.0,TRUE1
JNBP1.1,TRUE2
JNBP1.2,TRUE3
JNBP1.3,TRUE4
JNBP1.4,TRUE5
JNBP1.5,TRUE6
JNBP1.6,TZ3
JNBP1.7,TZ4
TZ3:
JMPTRUE7
TZ4:
JMPTRUE8
QUIT:
CLROK;
如果按下了"
停止键"
执行的程序
=====正常抢答处理程序=====
TRUE1:
抢答时间R2送R6
因为答题的计时不再查询抢答,所以就锁了抢答
AJMPCOUNT
TRUE2:
MOVR6,A
TRUE3:
TRUE4:
TRUE5:
TRUE6:
TRUE7:
TRUE8:
=====犯规抢答程序=====
ERROR:
MOVTL1,#0B0H
MOV34H,R3;
犯规号数暂存与(34H)
HERE:
CJNEA,#0AH,FLASH;
0.5s向下运行->
灭并停响
MOVR4,#0AH
MOVR5,#0AH;
三灯全灭
AJMPCHECK1
FLASH:
CJNEA,#14H,CHECK1;
MOVR3,34H;
取回号数
MOVR4,#0BH;
显示FF和号数
CHECK1:
JNBP3.1,QUIT1
AJMPHERE
QUIT1:
=====显示程序=====
DISPLAY:
MOVDPTR,#DAT1;
查表显示程序,利用P0口做段选码口输出/P2低三位做位选码输出,
MOVA,R3
MOVCA,@A+DPTR
MOVP2,#0feH
MOVP0,A
MOVDPTR,#DAT2
MOVA,R5
MOVP2,#0fdH
MOVA,R4
MOVP2,#0fbH
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
第一个为零,其他与上相同,因为十位如果为零显示熄灭
====加减时间延时(起到不会按下就加N个数)======
DELAY1:
MOV35H,#08H
LOOP0:
DJNZ35H,LOOP0
=====延时(显示和去抖动用到)=====
DELAY:
MOV32H,#12H
LOOP:
MOV33H,#0AFH
LOOP1:
DJNZ33H,LOOP1
DJNZ32H,LOOP
=====发声程序=====
BARK:
CLRRING;
=====TO溢出中断(响铃程序)=====
T0INT:
MOVTH0,#0ECH
MOVTL0,#0FFH
JNBRING,OUT;
CPLP3.6;
RING标志位为1时候P3.6口不断取反使喇叭发出一定频率的声音
OUT:
RETI
=====T1溢出中断(计时程序)=====
T1INT:
INCR0
END
总结
单片机课程设计是一门很实用,很难的设计。
这个设计用到了单片机,电路等方面的知识,通过这次课程设计,使我对单片机及其附属电路有了一定的了解,对课本上的知识有了近一步的掌握,也深刻明白了自己的不足。
通过这短短一周的实践
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 80 C51 单片机 八路 抢答 设计 讲解