基于51单片机的八路抢答器课程设计Word文档下载推荐.docx
- 文档编号:21412432
- 上传时间:2023-01-30
- 格式:DOCX
- 页数:15
- 大小:551.93KB
基于51单片机的八路抢答器课程设计Word文档下载推荐.docx
《基于51单片机的八路抢答器课程设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《基于51单片机的八路抢答器课程设计Word文档下载推荐.docx(15页珍藏版)》请在冰豆网上搜索。
3.编制程序,写出源程序代码;
4.写出5000字的详细说明书,要求字迹工整,原理叙述正确,会计算主要元器件的一些参数,并选择元器件;
5.个人总结。
四、参考资料:
1.教材;
2.《单片机实验指导书》
二、方案设计
方案:
该系统采用51系列单片机AT89C51作为控制核心,该系统可以完成运算控制、信号识别以及显示功能的实现。
由于用了单片机,使其技术比较成熟,应用起来方便、简单并且单片机周围的辅助电路也比较少,便于控制和实现。
整个系统具有极其灵活的可编程性,能方便地对系统进行功能的扩张和更改.MCS-51单片机特点如下:
〈1>
可靠性好:
单片机按照工业控制要求设计,抵抗工业噪声干扰优于一般的CPU,程序指令和数据都可以写在ROM里,许多信号通道都在同一芯片,因此可靠性高,易扩充.
<
2〉单片机有一般电脑所必须的器件,如三态双向总线,串并行的输入及输出引脚,可扩充为各种规模的微电脑系统。
〈3〉控制功能强:
单片机指令除了输入输出指令,逻辑判断指令外还有更丰富的条件分支跳跃指令.其原理框图如下:
三、硬件电路设计
1、抢答器的电路框图
如图1所示为电路框图。
其工作原理为:
接通电源后,主持人将开关拨到“清除”状态,抢答器处于禁止状态,编号显示器灭灯,定时器显示设定时间;
主持人将开关置,“开始”状态,宣布“开始”抢答器工作。
定时器倒计时,扬声器给出声响提示.选手在定时时间内抢答时,抢答器完成:
优先判断、编号锁存、编号显示、扬声器提示。
当一轮抢答之后,定时器停止、禁止二次抢答、定时器显示剩余时间。
如果再次抢答必须由主持人再次操作"
开始、停止"
状态开关。
图1抢答器框图
接通电源后,主持人将开关拨到“清除”状态,抢答器处于禁止状态,编号显示器灭灯,定时器显示设定时间;
主持人将开关置,“开始"
状态,宣布“开始”抢答器工作。
如果再次抢答必须由主持人再次操作“开始、停止”状态开关。
图2抢答电路的接口电路
2、单元电路设计
(1)抢答器电路
参考电路如图2所示.该电路完成两个功能:
一是分辨出选手按键的先后,并锁存优先抢答者的编号,同时译码显示电路显示编号;
二是禁止其他选手按键操作无效.如有再次抢答需由主持人将S开关重新置,“清除"
然后再进行下一次抢答。
(2)时序控制电路设计
时序控制电路是抢答器设计的关键,它要完成以下功能:
a.主持人将控制开关拨到”开始"
位置时,扬声器发声,抢答电路和定时电路进人正常抢答工作状态。
b。
当参赛选手按动抢答键时,扬声器发声,抢答电路和定时电路停止工作.
(3)复位电路的设计
外部中断和内部中断并存,单片机硬件复位端,只要持续4个机器周期的高电平即可实现复位,硬件复位后的各状态可知寄存器以及存储器的值都恢复到了初始值,因为本设计中功能中有倒计时时间的记忆功能,所以不能对单片机进行硬件复位,只能用软件复位,软件复位实际上就是当程序执行完之后,将程序通过一条跳转指令让它完成复位。
复位电路如图3所示:
图3复位电路图
图4时钟震荡电路
3、时钟震荡电路
时钟震荡电路单片机必须在AT89C51的驱动下才能工作,在单片机内部有一个时钟震荡电路,只需要外接一个振荡器就能产生一定的时钟信号送到单片机内部的各个单元,时钟震荡电路如图4所示。
4、报警电路设计
报警电路用于报警,当遇到报警信号时,发出警报。
一般喇叭是一种电感性图5报警电路图。
8951驱动喇叭的信号为各种频率的脉冲.因此,最简单的喇叭驱动方式就是利用达林顿晶体管,或者以两个常用的小晶体管连接成达林顿架势.在右图中电阻R为限流电阻,在此利用晶体管的高电流增益,以达到电路快速饱和的目的。
不过,如果要由P0输出到此电路,还需要连接一个10K的上拉电阻。
选手在设定的时间内抢答时,实现:
如果再次抢答必须由主持人再次作”清除”和"
开始"
图5报警电路图
四、软件设计
1、系统主程序设计
为了能够达到抢答的公平、公正、合理,应该在主持人发布抢答命令之前必须先设定抢答的时间,因而在编开始抢答前的程序得先编写设定时间的程序,当时间设好了之后,主持人发布抢答命令按下P1.7按键,程序开始打开定时中断开始倒计时,然后调用键盘扫描子程序,编写键盘扫描程序。
当在扫描到有人按下了答题键,马上关闭T0、调用显示程序、封锁键盘.
主程序流程图
2、主程序清单
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
JBP3.0,NEXT;
去抖动,如果"
开始键"
按下就向下执行,否者跳到非法抢答查询
ACALLBARK;
按键发声
MOVA,R1
MOVR6,A;
送R1—〉R6,因为R1中保存了抢答时间
SETBOK;
抢答标志位,用于COUNT只程序中判断是否查询抢答
MOVR7,#01H;
读抢答键数据信号标志,这里表示只读一次有用信号
MOVR3,#0AH;
抢答只显示计时,灭号数
AJMPCOUNT;
进入倒计时程序,”查询有效抢答的程序"
在COUNT里面
NEXT:
JNBP1。
0,FALSE1
JNBP1.1,FALSE2
JNBP1.2,FALSE3
JNBP1。
3,FALSE4
4,FALSE5
5,FALSE6
6,FALSE7
JNBP1.7,FALSE8
AJMPSTART
=====非法抢答处理程序=====
FALSE1:
MOVR3,#01H
AJMPERROR
FALSE2:
MOVR3,#02H
FALSE3:
MOVR3,#03H
FALSE4:
MOVR3,#04H
FALSE5:
MOVR3,#05H
FALSE6:
MOVR3,#06H
FALSE7:
MOVR3,#07H
FALSE8:
MOVR3,#08H
AJMPERROR文档为个人收集整理,来源于网络文档为个人收集整理,来源于网络
=====INT0(抢答时间R1调整程序)=====
INT0SUB:
MOVB,#0AH
DIVAB
MOVR5,A
MOVR4,B
MOVR3,#0AH
ACALLDISPLAY;
先在两个时间LED上显示R1
JNBP3。
4,INC0;
P3。
4为+1s键,如按下跳到INCO
5,DEC0;
5为—1s键,如按下跳到DECO
1,BACK0;
P3.1为确定键,如按下跳到BACKO
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
MOVB,#0AH
MOVR5,A
MOVR3,#0AH
ACALLDISPLAY
JNBP3.4,INC1
JNBP3.5,DEC1
JNBP3.1,BACK1
INC1:
MOVA,R2
CJNEA,#63H,ADD1
MOVR2,#00H
ADD1:
INCR2
DEC1:
JZSETR2
DECR2
SETR2:
MOVR2,#63H
BACK1:
=====倒计时程序(抢答倒计时和回答倒计时都跳到改程序)=====
REPEAT:
MOVA,R2;
使用锦囊时重新计时
MOVR6,A
COUNT:
MOVR0,#00H;
重置定时器中断次数
MOVTH1,#3CH
MOVTL1,#0B0H;
重置定时器
RECOUNT:
MOVA,R6;
R6保存了倒计时的时间,之前先将抢答时间或回答时间给R6
MOVB,#0AH
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向下运行
AJMPCHECK
FULL:
CJNEA,#14H,CHECK;
下面是1s的情况,响并显示号数并清R0,重新计
SETBRING
JZQUIT;
计时完毕
MOVR0,#00H
DECR6;
一秒标志减1
LARGER:
MOVA,R0
CJNEA,#14H,CHECK;
如果1s向下运行,否者跳到查"
停/显示”
DECR6;
计时一秒R6自动减1
CHECK:
JNBP3。
1,QUIT;
如按下停止键退出
JNBOK,CHECKK;
只在回答倒计时才有效
AJMPNEXTT
CHECKK:
0,REPEAT;
判断是否使用锦囊
NEXTT:
ACALLDISPLAY
JBOK,ACCOUT;
如果是抢答倒计时,如是则查询抢答,否者跳过查询继续倒数(这里起到锁抢答作用)
AJMPRECOUNT
ACCOUT:
MOVA,36H
JNBACC.0,TRUE1
JNBACC。
1,TRUE2
2,TRUE3
JNBACC.3,TRUE4
4,TRUE5
JNBACC.5,TRUE6
JNBACC.6,TZ1
7,TZ2
TZ1:
JMPTRUE7
TZ2:
JMPTRUE8
QUIT:
CLROK;
如果按下了"
停止键"
执行的程序
=====正常抢答处理程序=====
TRUE1:
ACALLBARK
MOVA,R2
MOVR6,A;
抢答时间R2送R6
MOVR3,#01H
CLROK;
因为答题的计时不再查询抢答,所以就锁了抢答
AJMPCOUNT
TRUE2:
ACALLBARK
MOVR6,A
MOVR3,#02H
TRUE3:
MOVR3,#03H
TRUE4:
MOVR3,#04H
TRUE5:
MOVR3,#05H
TRUE6:
MOVR3,#06H
TRUE7:
MOVR3,#07H
TRUE8:
MOVR3,#08H
=====犯规抢答程序=====
ERROR:
MOVR0,#00H
MOVTL1,#0B0H
MOV34H,R3;
犯规号数暂存与(34H)
HERE:
MOVA,R0
CJNEA,#06H,FLASH;
0。
3s向下运行->
灭并停响
MOVR4,#0AH
MOVR5,#0AH;
三灯全灭
AJMPCHECK1
FLASH:
CJNEA,#0CH,CHECK1;
下面是0.8s的情况,响并显示号数并清R0,重新计
MOVR0,#00H
MOVR3,34H;
取回号数
MOVR5,#0BH
MOVR4,#0BH;
显示FF和号数
CHECK1:
JNBP3.1,QUIT1
AJMPHERE
QUIT1:
CLRRING
=====显示程序=====
DISPLAY:
MOVDPTR,#DAT1;
查表显示程序,利用P0口做段选码口输出/P2低三位做位选码输出,
MOVA,R3
MOVCA,@A+DPTR
MOVP2,#0feH
MOVP0,A
ACALLDELAY2
MOVDPTR,#DAT2
MOVA,R5
MOVCA,@A+DPTR
MOVP2,#0fdH
MOVP0,A
MOVA,R4
MOVCA,@A+DPTR
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
=====延时4236个机器周期(去抖动用到)=====
DELAY:
MOV32H,#12H
LOOP:
MOV33H,#0AFH
LOOP1:
DJNZ33H,LOOP1
DJNZ32H,LOOP
=====延时4236个机器周期(显示用到)=====
DELAY2:
MOV32H,#43H
LOOP3:
MOV33H,#1EH
MOVA,R7;
每隔60~70个机器周期读一次P1口,全为1时为无效数据,继续读,有一个不为1时,转到正常抢答处理
JNZAAAA1;
没读到有效数据时继续转到AAAA1
LOOP2:
DJNZ33H,LOOP2
DJNZ32H,LOOP3
=====读抢答按键数据口程序=====
由于在读抢答数据口的时候,单片机首先进入倒计时程序,再调用显示程序,最后才检测按键口
然而在检测按键口时动态扫描要调用三次(4ms)延时程序。
这样就会导致读数据口出现滞后,造成1号优先最高.8号最低.
故采用在延时子程序中加了读数据口程序。
保证了灵敏度和可靠性
AAAA1:
MOVA,P1
CJNEA,#0FFH,AA1;
当不全为1时的数据为有效数据
AA0:
MOV36H,A;
将有效数据送到36H暂存
AJMPLOOP2
AA1:
DECR7
AJMPAA0
=====发声程序=====
BARK:
SETBRING
CLRRING;
=====TO溢出中断(响铃程序)=====
T0INT:
MOVTH0,#0ECH
MOVTL0,#0FFH
JNBRING,OUT;
CPLP3。
6;
RING标志位为1时候P3.6口不短取反使喇叭发出一定频率的声音
OUT:
=====T1溢出中断(计时程序)=====
T1INT:
MOVTH1,#3CH
MOVTL1,#0B0H
INCR0
RETI
END本文为互联网收集,请勿用作商业用途文档为个人收集整理,来源于网络
器件名称
规格型号
数量
微处理器
AT89C51
1
极性电容
10uF
电阻
3WTT10K
9
电容
20PF
3
晶振
12MHZ
按钮
15
共阴4位7段数码管
SMGSM410561K
扬声器
表1器件选型方案的详细清单
五、总结
通过此次的课程设计,让我更进一步的巩固了单片机的各种知识。
但在设计的过程中,遇到了很多的问题,有一些知识已经不太清楚了,但是通过一些资料又重新的翻阅并且认真的复习了相关教科书中的内容。
此次的课程设计树立了对自己工作能力的信心,相信会对今后的学习工作生活都有非常重要的影响,而且大大的提高了动手能力,使我充分的体会到了创造过程中的探索的艰难和成功的喜悦。
虽然这次做出的作品还存在很多需要改进的地方,但是在整个设计过程中所学习到的东西是这次实训所得到的最大收获跟财富,使我终身受益。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 51 单片机 八路 抢答 课程设计