单片机课程设计 八路抢答器Word格式.docx
《单片机课程设计 八路抢答器Word格式.docx》由会员分享,可在线阅读,更多相关《单片机课程设计 八路抢答器Word格式.docx(20页珍藏版)》请在冰豆网上搜索。
4、抢答器具有定时抢答功能,且一次抢答的时间由主持人设定(如10秒)。
当主持人启动"
开始"
键后,同时蜂鸣器发出短暂的声响,定时器进行减计时。
5、参赛选手在设定的时间内进行抢答,抢答有效,定时器停止工作,显示器上显示选手的编号和抢答的时间,并保持到主持人将系统清除为止。
6、如果定时时间已到,无人抢答,本次抢答无效,系统报警并禁止抢答,主持人将系统清零重新开始。
三、方案分析
抢答器同时供7名选手或7个代表队比赛,分别用7个按钮S1~S7表示。
设置一个系统清除和抢答控制按扭,该按扭由主持人控制。
抢答器具有锁存与显示功能。
即选手按动按钮,锁存相应的编号,并在LED数码管上显示,同时蜂鸣器发出报警声响提示。
系统设计主要包括硬件和软件两大部分,依据控制系统的工作原理和技术性能,将硬件和软件分开设计。
硬件设计部分包括电路原理图、合理选择元器件,然后对硬件进行调试、测试,以达到设计要求。
软件设计部分,首先在总体设计中完成系统总框图和各模块的功能设计,拟定详细的工作计划;
然后进行具体设计,包括各模块的流程图,选择合适的编程语言和工具,进行代码设计等;
最后是对软件进行调试、测试,达到所需功能要求。
硬件电路实验箱上已经满足要求,P2.7即为S8,由裁判控制,是抢答开始键。
P2.0-P2.6(即为S1-S7)是7组抢答的输入口,
P0口为数据总线和地址总线,通过两个574和一个ULN2003驱动元件分别输出数码管的段选信号和位选信号。
实验箱核心板上P3.2口为蜂鸣器的引脚控制口。
软件设计的方法与开发环境的选取有着直接的关系,本系统由于是采用51系列单片机,因此使用Keil语言进行开发。
此编程工具相比汇编语言具有结构化、适用范围大、可移植性好等特点。
本系统软件设计采用模块化系统设计方法,先编写各个功能模块子程序,然后进行组合与调整,经过调试后,达到设计功能要求。
本系统涉及到的功能子程序包括:
查询程序、非法抢答处理程序、倒计时程序、正常抢答处理程序、犯规抢答程序、显示程序、发声程序、T0溢出中断(计时程序)。
程序具体设计采用T0的溢出中断来实现倒计时定时,用一个两位数码管来显示倒计时,另外用一个一位数码管和一排LED灯来显示选手号。
其中,核心板上的倒计时显示为共阴极接法;
并且通过动态显示法(即位选控制)来实现四个LED的同时显示。
下图1-1所示为电路框图。
其工作原理为:
接通电源后,主持人将开关拨到“清除”状态,抢答器处于禁止状态,编号显示器灭灯,定时器显示设定时间;
主持人将开关置“开始”状态,宣布“开始”抢答器工作。
定时器倒计时,蜂鸣器给出声响提示。
选手在定时时间内抢答时,抢答器完成:
优先判断、编号锁存、编号显示、蜂鸣器提示。
当一轮抢答之后,定时器停止、其他按键无效,禁止二次抢答,如果再次抢答必须由主持人再次操作"
开始、停止"
状态开关。
图1-1抢答器的原理框图
四、主要元件介绍
1.8051单片机简介
8051系列单片机是国际上流行多年的代表机型,是国内高校教学和初学者入门首选的主流机型,也是在各种技术期刊和专业书籍中出现频率最高的经典机型。
本文以标准80C51为模型,并适当兼顾8051系列的共性和常用型号的特性。
内容主要包括:
硬件架构、ROM、RAM、指令系统、汇编程序基础和汇编语言工具链、并行端口、定时器、中断逻辑、复位逻辑、时钟电路、电源电路等功能电路的结构和工作原理,以及片内程序存储器编程原理。
80C51内含8位CPU;
广泛的布尔处理能力:
32根双向且分别可寻址的I/O线;
128字节RAM;
2个16位定时器/计数器;
全双工异步串行口(UART);
2个中断优先级;
5个中断源;
片内有时钟震荡器;
4K字节片内ROM程序储存器;
可寻址的64K字节外部程序储存空间;
可寻址得64K字节外部数据储存空间。
MCS-51单片机特点如下:
<
1>
.可靠性好:
单片机按照工业控制要求设计,抵抗工业噪声干扰优于一般的CPU,程序指令和数据都可以写在ROM里,许多信号通道都在同一芯片,因此可靠性高,易扩充。
<
2>
单片机有一般电脑所必须的器件,如三态双向总线,串并行的输入及输出引脚,可扩充为各种规模的微电脑系统。
3>
控制功能强:
单片机指令除了输入输出指令,逻辑判断指令外还有更丰富的条件分支跳跃指令。
4>
单片机具有优越的高集成电路性,使其工作速度更快、效率高。
另外80C51单片机采用12MHz的晶振,提高了信号的测量精度,并且使该系统可以通过软件改进来扩张功能。
(1)80C51的时序图
时序图如图1-2所示:
图1-280C51的时序图
时序控制电路:
①主持人将控制开关拨到“开始”位置时,蜂鸣器发声,抢答电路和定时电路进入正常抢答工作状态。
②当参赛选手按动抢答键时,蜂鸣器发声,抢答电路和定时电路停止工作。
③当设定的抢答时间到,无人抢答时,蜂鸣器发声,同时抢答电路和定时电路停止工作。
(2)8051引角及其功能
电源端Vcc40脚
接地端GND20脚图1-480C51的引脚
时钟信号输入端XTAL218脚
时钟电路引脚XTAL119脚
复位信号输入端RST9脚,高电平有效
地址锁存允许信号端ALE30脚,
6分频振荡周期,PSEN29脚
程序存储器允许输出信号端用于读取外部的程序存储器,每个机器周期中两次有效。
EA31脚外部程序存储器地址允许输入,接高电平时,执行片内程序存储器的内容,当PC超过0fffH时,自动变0。
接低电平时,访问外部程序存储器。
P039~32脚8位准双向I/O,在做输入时,要先向口地址80H写1,此时由内部上拉提成高阻态。
P11~8脚8位准双向I/O
2.数码管
数码管有8个输入接口和一个共阴极端,8个输入端分别接A,B,C,D,E,F,G七个显示管和一个小数点端DP,数码管引脚图如图2-1。
数码管代替二极管,也就是用一位数字的显示来代替两位的二极管,共同完成同样的故障显示功能。
图2-1数码管引脚图
五、设计特色
抢答器是一种应用非常广泛的设备,在各种竞赛、抢答场合中,它能迅速、客观地分辨出最先获得发言权的选手。
早期的抢答器只由几个三极管、可控硅、发光管等组成,能通过发光管的指示辩认出选手号码。
现在大多数抢答器均使用单片机(如MCS-51型)和数字集成电路,并增加了许多新功能,如选手号码显示、抢按前或抢按后的计时、选手得分显示等功能。
系统达到要求:
抢答限定时间显示10秒倒计时;
可以显示是哪位选手有效抢答和无效抢答,正确按键后有发声提示;
抢答时间倒记时显示时间完后系统复位;
有选手抢答成功后按键锁定,此状态下其他按键无效。
六、程序流程图
七、源程序介绍
根据流程图中的介绍,本设计的源程序除主程序外,还包括查询程序、非法抢答处理程序、无人抢答程序、倒计时程序、正常抢答处理程序、犯规抢答程序、显示程序、发声程序、T0溢出中断程序。
下面将对下面将对其一一介绍。
完整的源程序参见附录
a)主程序开始之前:
对数据存储单元定义,中断入口,主程序入口
D_DAT0EQU6AH
D_DAT1EQU6BH
D_DAT2EQU6CH
D_DAT3EQU6DH
D_DAT4EQU6EH
D_DAT5EQU6FH
D_DAT6EQU70H;
定义显示数据单元
ORG0000H
AJMPSTART
ORG000BH;
定时器T0入口
AJMPINTT0
b)主程序:
初始化数码管,等待主持人宣布抢答开始
START:
MOVSP,#30H
MOVD_DAT0,#10
MOVD_DAT1,#10
MOVD_DAT2,#10
MOVD_DAT3,#10;
熄灭前四个灯
MOVD_DAT4,#1
MOVD_DAT5,#0;
初始化显示数据10
MOVR3,#10;
倒计时10秒的数暂存于R3
MOVP0,#0
CLRP1.1;
初始化有关I/O口
CLRP1.2
MOVR0,#D_DAT0;
初始化显示指针寄存器
;
R0指向第一位显示数字
MOVR1,#01H;
初始化需点亮数码管位置代码
NOP
JNBP2.7,$
c)非法抢答处理程序:
READY:
LCALLDISP
JNBP2.0,ERROR1
JNBP2.1,ERROR2
JNBP2.2,ERROR3
JNBP2.3,ERROR4
JNBP2.4,ERROR5
JNBP2.5,ERROR6
JNBP2.6,ERROR7;
判断抢答犯规者,显示号码并响铃
JBP2.7,READY
LCALLSOUND;
主持人控制抢答是否开始,P2.7先置于1,开始抢答则置于0
AJMPNOERROR
随着查询程序,一开始主持人控制抢答,P2.7为1,抢答未开始,若在查询程序中发现有选手提前抢答,则程序转到非法抢答处理程序开始执行。
比如,检测到选手1犯规,则执行以下语句:
JNBP2.0,ERROR1;
同时,
ERROR1:
MOVD_DAT1,#1
LCALLSOUND
MOVR5,#1
JNBP2.7,ERROR1
AJMPSTART;
P2.7置1,重新开始
;
转犯规抢答程序
1号若抢答犯规,则会发出警报,同时数码管显示抢答选手的编号,主持人控制重新开始。
d)INT0处理程序(抢答时间程序)
NOERROR:
MOVTMOD,#11H
MOVTH0,#3CH
MOVTL0,#0B0H;
50ms
MOVR2,#20;
循环20次
SETBEA
SETBET0
SETBTR0;
定时器T0初始化
中断程序:
INTT0:
MOVTL0,#0B0H
DJNZR2,INTTO_1
MOVR2,#20;
20次循环重赋初值
DECR3
MOVD_DAT5,R3
MOVD_DAT4,#0
INTTO_1:
RETI
定时器T0采用方式一,系统主频
,计数初值
。
中断程序一次循环50ms,进行20次循环,刚好1秒。
e)正常抢答处理程序:
当确定没有选手犯规抢答时,则进入正常抢答环节,判断选手抢答成功与否
MAIN:
LCALLDISP;
调用数码管循环点亮子程序
JNBP2.0,SOUND1
JNBP2.1,SOUND2
JNBP2.2,SOUND3
JNBP2.3,SOUND4
JNBP2.4,SOUND5
JNBP2.5,SOUND6
JNBP2.6,SOUND7;
判断抢答成功者,停止计时并响铃
MOVR4,D_DAT4
CJNER4,#0,LOOP1
MOVR4,D_DAT5
CJNER4,#0,LOOP1
AJMPNOBODY;
无人抢答,停止计时并响铃
LOOP1:
AJMPMAIN;
循环执行主程序
由于程序运行速度很快,误差很小,故可以采用依次查询的方法,对结果几乎没有影响。
若选手3抢答成功,则进入以下程序
SOUND3:
CLRTR0
MOVD_DAT1,#3
SOUND3_1:
JNBP2.7,SOUND3_1
抢答成功后,停止计时,数码管显示选手号码。
需要进行下一次抢答时,则只需要将P2.7置1,此操作将由主持人完成。
同理,可以得到其他选手的处理程序。
详细程序请参见附录源程序中正常抢答处理程序部分。
f)所有选手放弃抢答程序:
NOBODY:
MOVD_DAT5,#0
NOBODY1:
JNBP2.7,NOBODY1
AJMPSTART
放弃抢答的标志是D_DAT4=0,D_DAT5=0,查询到这种情况既跳转到无人抢答处理。
g)显示子程序:
DISP:
MOVA,R1;
取位代码
MOVP0,A;
位代码送P0口
SETBP1.2
CLRP1.2;
产生一个锁存脉冲,锁存位代码
MOVA,@R0;
取需显示的数字
MOVDPTR,#DISPD;
装载笔画编码表首地址
MOVCA,@A+DPTR;
取需显示数字笔画代码
笔画代码送到P0口
SETBP1.1
产生一个锁存脉冲,锁存笔画代码
INCR0;
R0增1指向下一个需显示数字
MOVA,R1
CLRC
RLCA
MOVR1,A;
R1中的值左移1位,指向下一位数码管
CJNER0,#70H,DISP1;
R0中不为70H则继续
MOVR0,#D_DAT0;
R0中为70H,循环完一轮
重新赋初值
MOVR1,#1;
位置代码初值
DISP1:
NOP
RET
;
数字笔画代码表
0123456789熄
DISPD:
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,0
这里的显示包括对时间和选手号的显示,显示器即为核心板上的数码管,显示子程序也就是例子程序,不需要做多大的改动。
h)发声程序
一旦开始键或抢答键按下,或因非法抢答,都需要调用到发声子程序
SOUND:
MOVR7,#228
MOVR6,#0FFH
DELAY:
CPLP3.2
DE1:
DJNZR7,DE1
DJNZR6,DELAY
利用核心板上的蜂鸣器,可以发出声音,P3.2控制蜂鸣器的发声。
P3.2连续高低电平变化时,可以发出不同频率的声音,由于这里对发声的频率没有什么要求,故随意设置了一个发声频率,发声时间也很短暂。
至此,所有子程序的编写已介绍完毕。
心得
这次课程设计老师给我们安排了两个星期的时间,可以说是比较充裕的。
虽然如此,我还是很用心的做设计,利用了周六周日两天的时间在宿舍思考本次的课程设计,拿到题目,感觉太繁杂了,不知怎么下手,虽然这些知识以前都有接触过,但也只是分部分来接触,而这次的设计是要对前面几次实验的一个综合,真的很难。
也翻阅了一些资料,并自己事先编写好了程序,到了周一去到实验室时候,把自己写的程序烧进去芯片里面,发现不行,那些数字闪动得非常厉害,自己检查了好久好久,但还是发现不了问题,之后问了同学,才知是我把段码搞错了,我用的是共阴位选,但数据表的段码我却用了共阳的段码,所以不能在数码管上正常显示。
通过运用单片机设计七路抢答器程设计,发现自己的很多不足,自己知识的很多漏洞,看到了自己的实践经验还是比较缺乏,理论联系实际的能力还急需提高。
在这个过程中,我也曾经因为实践经验的缺乏失落过,也曾经仿真成功而热情高涨。
特别是Proteus仿真软件的使用,不知是由于电脑的问题还是怎么,这个软件的安装就花了我很长的时间,好不容易安装好了,又对软件的使用一点都不熟悉,要从头开始学起,对着我们的芯片原理进行仿真画图,刚刚开始时候真的很难下手,因为是英文版的软件,很多东西都看不太明白,都是通过自己一个个来慢慢琢磨,才把仿真图画了出来,然后把写好的程序导入芯片,进行仿真,当看到程序正常运行的那一刻,心中真是有几分的喜悦。
生活就是这样,汗水预示着结果也见证着收获。
劳动是人类生存生活永恒不变的话题。
虽然这只是一次的较简单的课程制作(七路抢答器),可是平心而论,也耗费了我不少的心血。
通过这次课程设计,我想说:
为完成这次课程设计我们确实很辛苦,但苦中仍有乐,和同学们相互帮助,我感觉我和同学们之间的距离更加近了。
LED亮了起来,蜂鸣器响起的是我一生以来最好听的声音,我们的心中就不免兴奋,不免激动。
以前种种艰辛这时就变成了最甜美的回忆!
这次学习给我留下了深刻的印象,使我受益匪浅。
而且对于论文的总体构思也有了很多经验,相信自己经过这一次的训练与学习,对于今后会更加努力,做得最好。
对我而言,知识上的收获重要,精神上的丰收更加可喜。
让我知道了学无止境的道理。
我们每一个人永远不能满足于现有的成就,人生就像在爬山,一座山峰的后面还有更高的山峰在等着你。
挫折是一份财富,经历是一份拥有。
这次课程设计必将成为我人生旅途上一个非常美好的回忆!
附录
总程序清单
ORG0030H
MOVR5,#1
ERROR2:
MOVD_DAT1,#2
MOVR5,#2
JNBP2.7,ERROR2
ERROR3:
MOVR5,#3
JNBP2.7,ERROR3
ERROR4:
MOVD_DAT1,#4