八组抢答器设计报告.docx
《八组抢答器设计报告.docx》由会员分享,可在线阅读,更多相关《八组抢答器设计报告.docx(25页珍藏版)》请在冰豆网上搜索。
![八组抢答器设计报告.docx](https://file1.bdocx.com/fileroot1/2023-1/26/373cac5e-a86f-4cba-aff2-3c5132e60ee6/373cac5e-a86f-4cba-aff2-3c5132e60ee61.gif)
八组抢答器设计报告
目录
摘要………………………………………………………………………2
引言………………………………………………………………………2
1.设计任务与要求………………………………………………………2
2.设计方案与论证………………………………………………………3
3.主要硬件的介绍………………………………………………………3
1.AT89C51单片机及管脚…………………………………………………………4
2.74HC53简介……………………………………………………………………6
3.LED数码管简介…………………………………………………………………7
4.硬件电路的设计………………………………………………………9
4.1抢答器的电路框图……………………………………………………………9
4.2单元电路设计……………………………………………………………………9
4.2.1抢答器电路设计…………………………………………………………9
4.2.2选手抢答按钮设计………………………………………………………9
4.2.3显示与显示驱动电路……………………………………………………10
4.2.4报警电路设计……………………………………………………………10
4.2.5复位开始电路的设计……………………………………………………11
4.2.6.软件仿真结果……………………………………………………………12
5.软件电路的设计……………………………………………………13
5.1软件设计思想……………………………………………………………13
5.2主程序流程图……………………………………………………………14
6.设计体会……………………………………………………………15
7.参考文献……………………………………………………………16
附录
摘要
本次课程设计是采用7端数码管显示结果,以AT89C51单片机为核心,由八个抢答按钮,两个锁存器,开始按钮,复位按钮组成。
八位智能定时抢答器可靠性高,反应速度灵敏,抢答器具有PC接口,可以对系统进行初始化、工作方式、显示时间的集中设置,使用人机界面操作,使操作简单易行。
单片机应用的重要意义在于从根本上改变了传统的控制系统设计思想和设计方法,以前必须由模拟电路或数字电路实现大部分功能,现在已能用单片机通过软件方法来实现了。
引言
抢答器作为一种工具,已广泛应用于各种智力和知识竞赛场合。
但抢答器的使用频率较低,且有的要么制作复杂,要么可靠性低。
作为一个单位,如果专门购一台抢答器虽然在经济上可以承受,但每年使用的次数极少,往往因长期存放使(电子器件的)抢答器损坏,再购置的麻烦和及时性就会影响活动的开展,因此设计了本抢答器。
本设计是以八路抢答为基本理念。
考虑到依需设定限时回答的功能,利用AT89C51单片机及外围接口实现的抢答系统,利用单片机的定时器/计数器定时和记数的原理,将软、硬件有机地结合起来,使得系统能够正确地进行计时,同时使数码管能够正确地显示时间。
用开关做键盘输出,扬声器发生提示。
同时系统能够实现:
在抢答中,只有开始后抢答才有效,如果在开始抢答前抢答为无效;抢答限定时间和回答问题的时间可在1-30s设定;可以显示是哪位选手有效抢答;抢答时间和回答问题时间倒记时显示,满时后系统计时自动复位及主控强制复位;按键锁定,在有效状态下,按键无效非法。
关键词:
AT89C51LED数码管抢答器计时
1.设计任务与要求
可供八组同时抢答,有按钮控制能显示出最先抢答的组号,而对其他组不予理睬,对主持人未按启动器之前就按抢答钮的犯规组亮红灯警告,对抢答后的回答时间进行计时控制,如回答超时,则以音箱报警。
2.设计方案与论证
方案一:
系统各部分采用中小规模集成数字电路,用机械开关按钮作为控制开关,完成抢答输入信号的触发。
该方案的特点是中小规模集成电路应用技术成熟,性能可靠,能方便地完成选手抢答的基本功能,但是由于系统功能要求较高,所以电路连接集成电路相对较多,而且过于复杂,并且制作过程工序比较烦琐,使用不太方便。
方案二:
该系统采用51系列单片机AT89C51作为控制核心,该系统可以完成运算控制、信号识别以及显示功能的实现。
由于用了单片机,使其技术比较成熟,应用起来方便、简单并且单片机周围的辅助电路也比较少,便于控制和实现。
整个系统具有极其灵活的可编程性,能方便地对系统进行功能的扩张和更改。
MCS-51单片机特点如下:
<1>可靠性好:
单片机按照工业控制要求设计,抵抗工业噪声干扰优于一般的CPU,程序指令和数据都可以写在ROM里,许多信号通道都在同一芯片,因此可靠性高,易扩充。
<2>单片机有一般电脑所必须的器件,如三态双向总线,串并行的输入及输出引脚,可扩充为各种规模的微电脑系统。
<3>控制功能强:
单片机指令除了输入输出指令,逻辑判断指令外还有更丰富的条件分支跳跃指令。
方案比较及其选用依据,显然方案二比方案一简单的多,不但从性能上优于方案一,而且在使用上及其功能的实现上都较方案一简洁,并且由于单片机具有优越的高集成电路性,使其工作速度更快、效率更高。
另外80C51单片机采用12MHz的晶振,提高了信号的测量精度,并且使该系统可以通过软件改进来扩张功能。
而方案一采用了中小规模集成电路,有其复杂的电路性能,从而可能会使信号的输入输出产生延时及不必要的误差。
依此依据选择方案二比较适合。
3主要硬件介绍
AT89C51单片机是美国Atmel公司生产低电压,高性能CMOS8位单片机,片内含4kbytes的可反复擦写的只读程序存储器(EPROM)和128bytes的随机存取数据存储器(RAM),器件采用Atmel公司的高密度、非易失性存取技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器(CPU)和Flash存储单元,功能强大。
AT89C51单片机可提供许多高性价比的应用场合,可灵活应用于各种控制领域。
3.1AT89C51单片机的基本组成功能方块图
图2为AT89C51单片机的基本组成功能方块图。
由图可见,在这一块芯片上,集成了一台微型计算机的主要组成部分,其中包括CPU、存储器、可编程I/O口、
定时器/计数器、串行口等,各部分通过内部总线相连。
下面介绍几个主要部分。
图2单片机结构框图
3.1.1AT89C51单片机管脚说明
图3AT89C51单片机管脚图
ATMEL公司的AT89C51是一种高效微控制器。
采用40引脚双列直插封装形式。
AT89C51单片机是高性能单片机,因为受引脚数目的限制,所以有不少引脚具有第二功能。
VCC:
供电电压。
GND:
接地。
P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FLASH编程时,P0口作为原码输入口,当FLASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写1时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址1时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入1后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流。
P3口也可作为AT89C51的一些特殊功能口,P3口管脚备选功能:
P3.0RXD(串行输入口)P3.1TXD(串行输出口)
P3.2INT0(外部中断0)P3.3INT1(外部中断1)
P3.4T0(记时器0外部输入)P3.5T1(记时器1外部输入)
P3.6
(外部数据存储器写选通)P3.7
(外部数据存储器读选通)
P3口同时为闪烁编程和编程校验接收一些控制信号。
ALE/
:
当访问外部存储器时,地址锁存允许端的输出电平用于锁存地址的地址字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:
每当用作外部数据存储器时,将跳过一个ALE脉冲。
如想禁止ALE的输出可在SFR8EH地址上置0。
此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。
PSEN:
外部程序存储器的选通信号端。
在由外部程序存储器取指期间,每个机器周期两次PSEN有效。
但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
/VP:
当
保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管否有内部程序存储器。
注意加密方式1时,
将内部锁定为RESET;当
端保持高电平时,此间内部程序存储器。
在FLASH编程期间,此引脚也用于施加12V编程电源。
XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:
反向振荡器的输出,如采用外部时钟源驱动器件,应不接。
3.274HC573简介
74HC573(八进制3态非反转透明锁存器)跟LS/AL573的管脚一样。
器件的输入是和标准CMOS输出兼容的。
加上拉电阻,他们能和LS/ALSTTL输出兼容。
当锁存使能端为高时,这些器件的锁存对于数据是透明的(也就是说输出同步)。
当锁存使能变低时,符合建立时间和保持时间的数据会被锁存。
图2-4SL74HC573
SL74HC573使用参数:
输出能直接接到CMOS,NMOS和TTL接口上
操作电压范围:
2.0V~6.0V
低输入电流:
1.0uA
CMOS器件的高噪声抵抗特性
SL74HC573功能如表2所示。
表2SL74HC573功能
输入
输出
输出使能
功能使用
D
Q
L
H
H
L
H
L
L
L
L
X
H
X
X
Z
注:
X=无Z=高阻抗
3.3LED数码管简介
LED数码管是目前最常用的数字显示器,图A、B为共阴管和共阳管的电路,图C为两种不同出线形式的引出脚功能图。
一个LED数码管可用来显示一位0~9十进制数和一个小数点。
小型数码管(0.5寸和0.36寸)每段发光二极管的正向压降,随显示光(通常为红、绿、黄、橙色)的颜色不同略有差别,通常约为2~2.5V,每个发光二极管的点亮电流在5~10mA。
LED数码管要显示BCD码所表示的十进制数字就需要有一个专门的译码器,该译码器不但要完成译码功能,还要有相当的驱动能力。
图A共阴连接(“1”电平驱动)图B共阳连接(“0”电平驱动)
图2-5LED数码管符号及引脚功能图
LED显示器有静态和动态两种工作方式
LED显示器工作在静态显示方式下,共阴极或共阳极连接在一起,然后接地或+5V;每位的段选线(A,B,…,G,H)与一个8位并行口相连。
这样,只要在每一位的段选线上保持段选码电平,该位就能保持相应的显示字符。
在多位LED显示时,为了化简电路,降低成本,将所有位的断选线并联在一起,由一个8位的I/O口控制,即控制段选码而共阴极或共阳极点分别由相应的I/O线控制即控制位选码,这就是动态显示。
4位LED动态显示电路只需一个8位I/O口及一个4位I/O口,其中8个I/O控制段选码,4位I/O控制位选。
进行4位字符显示时,采用扫描显示方式,即在每一瞬间只使某一位显示相应字符,在此瞬间,段选控制I/O口输出相应字符段选码,位选控制I/O口在该显示位送入选通电平(共阴极送低电平,共阳极送高电平),以保证该位显示相应字符。
如此轮流,使每位显示该位应显示字符,并保持延迟一段时间(1~5ms),以造成视觉暂留效果。
不断循环送出相应的段选码、位选码,就可以获得视觉稳定的显示状态。
4.硬件电路设计
4.1抢答器的电路框图
如图1所示为电路框图。
其工作原理为:
接通电源后,主持人将开关拨到“确定”状态,抢答器处于禁止状态,编号显示器灭灯,定时器显示设定时间;主持人将开关置,“开始”状态,宣布“开始”抢答器工作。
定时器倒计时,扬声器给出声响提示。
选手在定时时间内抢答时,抢答器完成:
优先判断、编号锁存、编号显示、扬声器提示。
当一轮抢答之后,定时器停止、禁止二次抢答、定时器显示剩余时间。
如果再次抢答必须由主持人再次操作"开始、确定"状态开关。
图1抢答器框图
4.2单元电路设计
4.2.1抢答器电路设计
该电路完成两个功能:
一是分辨出选手按键的先后,并锁存优先抢答者的编号,同时译码显示电路显示编号;二是禁止其他选手按键操作无效。
如有再次抢答需由主持人将确定键重新置,“开始”然后再进行下一次抢答。
4.2.2选手抢答按钮设计
89C51的P1口做一个为选手抢答的输入按键引脚,P1.0至P1.7轮流输出低电位,给每一个选手编号1至8,当选手按下按钮时,P1口个端口的电平变化从P1口输入,经单片机处理后从P0输出由数码管显示抢答者编号。
4.2.3显示与显示驱动电路
此电路包括显示和驱动,显示采用数码管,驱动用P2口,违规者编号、抢答30秒倒计时、正常抢答者编号和回答问题时间10秒倒计时,数码管采用动态显示。
驱动电路P2口,查询显示程序利用P0口做段选码口输出P2低3位做位选码输出,当为低电平则能驱动数码管使其显示数字。
3.2.4报警电路设计
报警电路用于报警,当遇到报警信号时,发出警报。
一般喇叭是一种电感性。
8951驱动喇叭的信号为各种频率的脉冲。
因此,最简单的喇叭驱动方式就是利用达林顿晶体管,或者以两个常用的小晶体管连接成达林顿架势。
在右图中电阻R为限流电阻,在此利用晶体管的高电流增益,以达到电路快速饱和的目的
4.2.5复位开始电路的设计
外部中断和内部中断并存,单片机硬件复位端,只要持续4个机器周期的高电平即可实现复位,硬件复位后的各状态可知寄存器以及存储器的值都恢复到了初始值,因为本设计中功能中有倒计时时间的记忆功能,所以不能对单片机进行硬件复位,只能用软件复位,软件复位实际上就是当程序执行完之后,将程序通过一条跳转指令让它完成复位。
复位电路如下图示:
4.2.6.软件仿真结果
Keil软件仿真:
Proteus软件仿真
5.软件设计
5.1软件设计思想
主程序:
主程序的功能主要是完成内部各寄存单元的初始化,对ASTC89C51单片机接口电路的初始化,内部定时器的初始化,中断的初始化及调用显示程序对初始状态的显示以及对外部信号的等待处理,也就是说完成前期的准备工作等待随时对外部信号进行响应。
对开始抢答信号的处理:
当主持人按下开始抢答键后开始抢答,程序部分采用中断方式进行处理。
在中断处理程序中完成相应操作,修改计时单元的数据并发出计时提示声。
键值处理子程序:
此子程序根据键盘扫描所取得的键值作出相应处理。
显示子程序:
采用动态扫描显示,可显示选手号和抢答、倒计时时间等
(1)主程序流程图
图4主程序流程图
5.2程序代码
见附录
8.设计体会
通过这次课程设计,我想说:
为完成这次课程设计我们确实很辛苦,但苦中仍有乐,和同学们相互帮助,大学里三年的相处还赶不上这几天来的实在,我感觉我和同学们之间的距离更加近了。
这个工程确实很累,LED亮了起来,喇叭响起的是我一生以来最好听的声音,我们的心中就不免兴奋,不免激动。
前面的种种艰辛这时就变成了最甜美的回忆!
这次学习给我留下了深刻的印象,使我受益匪浅。
而且对于论文的总体构思也有了很多经验,相信自己经过这一次的训练与学习,对于今后会更加努力,做得最好。
总之,通过这次课程设计的制作与写作让我懂得了很多,这次课程设计由我们的老师的指导然后我们自己去图书馆,上网查资料然后自己和我们这组的成员一起合作商讨完成的,原以为会很简单的,但无论在制作与写作过程中我们都遇到了理论课上所不曾遇到的问题,第一是综合性太强,这次制作不仅涉及到我们所学到的单片机,数字电子技术等课程的知识还涉及到很多我们的选修及课外的知识。
第二是理论联系实际性太强,把所学的搜集到得知识运用的实际中不是一件容易的事,不仅由元件从课本上的符号到实物的认识还是理论的测量结果与实际值的误差。
课程设计已结束,对我而言,知识上的收获重要,精神上的丰收更加可喜。
让我知道了学无止境的道理。
我们每一个人永远不能满足于现有的成就,人生就像在爬山,一座山峰的后面还有更高的山峰在等着你。
挫折是一份财富,经历是一份拥有。
这次课程设计必将成为我人生旅途上一个非常美好的回忆!
参考文献
[1]辛友顺,韩彦征编著,51单片机原理与实践/高卫东,.北京航空航天大学出版社,2008.
[2]刘红玲、邵晓根,《微机原理与接口技术》,中国电力出版社,2006年第一版
[3]冯博琴,《微型计算机原理及接口技术》,清华大学出版社
[4]艾德才,《微型计算机原理与接口技术》,高等教育出版社
[5]沈美明,《IBM-PC汇编语言程序设计》,清华大学出版社
[6]任致程,《经典集成电路400例》机械工业出版社,2002
[7]薛栋梁,《单片机原理及应用》,中国水利水电出版社,2001
[8]谢筑森,《单片机开发与典型应用设计》,中国科学技术大学出版社
附录
程序
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitwela_hao=P3^0;
sbitwela1=P3^1;
sbitwela2=P3^7;
sbitrest=P3^5;
sbithost=P3^6;
sbitled=P3^2;//红灯
sbitspk=P3^3;
sbitkey1=P1^0;
sbitkey2=P1^1;
sbitkey3=P1^2;
sbitkey4=P1^3;
sbitkey5=P1^4;
sbitkey6=P1^5;
sbitkey7=P1^6;
sbitkey8=P1^7;
ucharhao,shu,shu1,shi,ge,t0,t1,start,flag;
ucharcodetable[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
voidinit();/*初始函数申明*/
voiddisplay(ucharshi,ucharge,ucharhao);
voiddelay(uintz);
voidkeyscan();
voidmain()
{
init();
display(shi,ge,hao);
while
(1)
{
if(host==0)//主持人
{
delay(5);
if(host==0)
{
flag=1;
start=1;
delay(5);
while(!
host);
}
}
if(rest==0)//复位
{
delay(5);
if(rest==0)
{
shu=30;
hao=0;
delay(5);
start=1;
delay(5);
while(!
rest);
}
}
if(start==0)
{
if(host!
=0)
{led=1;}
}
if(flag==1)
{
if(start==0)//选手按下,倒计时10秒
{
if(host!
=0)
{led=1;}
wela1=0;
wela2=0;
delay
(1);
TR0=0;
TR1=1;
display(shi,ge,hao);
delay
(1);
}
if(start==1)//主持人按下,倒计时30秒
{
wela1=0;
wela2=0;
delay
(1);
TR0=1;
TR1=0;
display(shi,ge,hao);
delay
(1);
keyscan();
}
}
}
}
voidinit()/*初始化*/
{
t0=0;
t1=0;
flag=0;
shu=30;
shu1=10;
wela_hao=0;
hao=0;
spk=1;
led=0;
TMOD=0x11;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
EA=1;
ET0=1;
ET1=1;
TR0=0;
TR1=0;
}
voiddisplay(ucharshi,ucharge,ucharhao)/*数码管动态扫描*/
{
wela1=1;
P0=table[ge];
delay(5);
wela2=1;
P0=table[shi];
delay(5);
wela_hao=0;
P2=table[hao];
delay(5);
}
voidkeyscan()/*按键扫描函数*/
{
if(key1==0)
{
delay(5);
if(key1==0)
{
hao=1;
P2=table[hao];
start=0;
TR1=1;
TR0=0;
delay(5);
while(!
key1);
}
}
if(key2==0)
{
delay(5);
if(key2==0)
{
hao=2;
P2=table[hao];
start=0;
delay(5);
while(!
key2);
}
}
if(key3==0)
{
delay(5);
if(key3==0)
{
hao=3;
P2=table[hao]