抢答器设计Word文档下载推荐.docx
《抢答器设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《抢答器设计Word文档下载推荐.docx(17页珍藏版)》请在冰豆网上搜索。
第一章数字抢答器的概述及制作要求
1.1数字抢答器的概述
对于抢答器我们大家来说都不陌生,它是用于很多竞赛场合,真正实现先抢先答,让最先抢到题的选手来回答问题。
抢答器不仅考验选手的反应速度同时也要求选手具备足够的知识面和一定的勇气。
选手们都站在同一个起跑线上,体现了公平公正的原则。
1.2设计任务与要求
任务:
要求:
1、终端大于等于2;
2、能够控制抢答时间;
3、能够对终端进行加分和减分。
绪论
1.1单片机抢答器的背景
二十世纪跨越了三个“电”的时代,即电气时代、电子时代和现已进入的电脑时代。
不过,这种电脑,通常是指个人计算机,简称PC机。
它由主机、键盘、显示器等组成。
还有一类计算机,大多数人却不怎么熟悉。
这种计算机就是把智能赋予各种机械的单片机(亦称微控制器)。
顾名思义,这种计算机的最小系统只用了一片集成电路,即可进行简单运算和控制。
因为它体积小,通常都藏在被控机械的“肚子”里。
它在整个装置中,起着有如人类头脑的作用,它出了毛病,整个装置就瘫痪了。
现在,这种单片机的使用领域已十分广泛,如智能仪表、实时工控、通讯设备、导航系统、家用电器等。
各种产品一旦用上了单片机,就能起到使产品升级换代的功效,常在产品名称前冠以形容词——“智能型”,如智能型洗衣机等。
现在有些工厂的技术人员或其它业余电子开发者搞出来的某些产品,不是电路太复杂,就是功能太简单且极易被仿制。
究其原因,可能就卡在产品未使用单片机或其它可编程逻辑器件上。
在知识竞赛中,特别是做抢答题时,在抢答过程中,为了更确切的知道哪一组或哪一位选手先抢答到题,必须要有一个系统来完成这个任务。
若在抢答中,只靠人的视觉(或者是听觉)是很难判断出哪一组(或哪一个选手)先抢答到题的。
利用单片机编程来设计抢答器,可以使以上问题得以解决,即使两组的抢答时间相差几微秒,也能轻松的分辨出哪一组(或哪个选手)先抢答到题的。
本文主要介绍了抢答器的工作原理及设计,以及它的实际用途。
1.2单片机抢答器的意义
本系统采用单片机作为整个控制核心。
控制系统的四个模块为:
显示模块、存储模块、语音模块、抢答开关模块。
该系统通过开关电路四个按键输入抢答信号;
利用一个数码管来完成显示功能;
用按键来让选手进行抢答,在数码管上显示哪一组先答题的,从而实现整个抢答过程。
在知识比赛中,特别是做抢答题目的时候,在抢答过程中,为了知道哪一组或哪一位选手先答题,必须要设计一个系统来完成这个任务。
如果在抢答中,靠视觉是很难判断出哪组先答题。
利用单片机系统来设计抢答器,使以上问题得以解决,即使两组的抢答时间相差几微秒,也可分辨出哪组优先答题。
本文主要介绍了单片机抢答器设计及工作原理,以及它的实际用途。
系统工作原理本系统采用89c52单片机作为核心。
控制系统的四个模块分别为:
存储模块、显示模块、语音模块、抢答开关模块。
该抢答器系统通过开关电路四个按键输入抢答信号;
利用一个数码管来完成显示功能。
工作时,用按键通过开关电路输入各路的抢答信号,经单片机的处理,输出控制信号,单片机控制的智能抢答器设计。
1.3抢答器的应用
随着我国经济和文化事业的发展,在很多公开竞争场合要求有公正的竞争裁决,诸如证券、股票交易及各种智力竞赛等,因此出现了抢答器。
抢答器一般是由很多电路组成的,线路复杂,可靠性不高,功能也比较简单,特别是当抢答路数很多时,实现起来就更为困难。
因此我们设计了以单片机为核心的新型智能的抢答器,在保留了原始抢答器的基本功能的同时又增加一系列的实用功能并简化其电路结构。
抢答器又称为第一信号鉴别器,其主要应用于各种知识竞赛、文艺活动等场合。
传统普通抢答器主要存在以下缺陷:
(一)、在一次抢答过程中,当出现超前违规抢答时,只能处理违规抢答信号,而对没有违规的有效抢答信号不能进行处理,因而使该次抢答过程变为无效。
(二)、当有多个违规抢答时,普通抢答器或采用优先编码电路选择其中一个,或利用抢答电路电子元件的“竞争”选择其中一个。
对于后者由于抢答电路制作完毕后电子元件被固定。
各路抢答信号的“竞争”能力也被固定,因而本质上也有优先权。
普通抢答器存在不公平性。
(三)、当有多个违规抢答时,普通抢答器只能“抓住”其中一个而出现“漏洞”。
2.1单片机芯片的选择
单片机选用的是Atmel公司推出的AT89S52,它是一种低功效、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。
使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。
在单芯片上拥有灵巧的8位CPU和在线系统可编程Flash,使得AT89S52具有以下标准功能:
8K字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。
空闲模式下,CPU停止工作,允许RAM、定时器/计数器串口、中断继续工作。
掉电保护方式下RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
而且,它还具有一个看门狗(WDT)定时/计数器。
如果程序没有正常工作,就会强制整个系统复位,还可以在程序陷入死循环的时候,让单片机复位而不用整个系统断电,从而保护你的硬件电路。
T89S52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中端口,2个16位可编程定时计数器,2个全双工串行通信口,片上Flash允许程序存储器在系统可编程,亦适于常规编程器。
其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。
2.1.1模块性能分析
模块部分主要分为AT89C52芯片、独立式键盘、LED数码管显示部分,下面对这后两部分进行介绍,其中对LED七段数码管显示器做详细介绍,并根据实际工作情况采用合适的工作方式。
2.1.2单片机管脚说明
2.2.1独立式键盘
利用3个常开按钮开关key1~key3组成抢答器的输入电路。
key1~key3为自复式常开按钮开关,分别作为3位抢答按钮。
当程序执行时,按下按键,七段数码管显示器上即显示相应的是哪个选手按下抢答。
2.2.2LED数码管显示
译码器的逻辑功能是将每一个输入的二进制代码译成对应的输出高、低电平信号,是编码器的反操作。
数码管可以用TTL或CMOS集成电路直接驱动,所以使用译码器将BCD编码译成数码管所需要的驱动信号,以便使数码管用十进制数字显示出BCD编码表示的数值。
七段数码管的段排列和内部结构如图所示七段数码管的段排列和内部部结构应根据实际情况决定究竟采用共阳还是共阴方式,其基本原则是:
若单片机口线直接驱动数码管各段,最好采用共阳极数码管。
点亮显示器分为静态和动态显示两种方法。
所谓静态显示,就是当显示器显示某一字符时,相应的发光二极管恒定的导通或是截止。
当位数较多时,用静态显示所需的I/O过多,一般采用动态显示方法。
所谓动态显示,就是逐位地轮流点亮各位显示器(扫描),对于每一位显示器而言,每个一段时间点亮一次。
显示器的点亮既与点亮时的导通电流有关,也与点亮时间和间隔时间比例有关。
调整电流和时间参数,可是实现亮度较高、较为稳定的显示,同时可减少工作电流。
在这次课程设计中根据实际需要采用了七段数码管共阳极和静态显示方式。
抢答器的实现方式有种多样,通过纯电子器件搭建电路实现,纯电子器件实现没有软件参与,调试简单,但是它不易于扩展和修改,而且电路结构复杂,调试困难电子,电子器件管脚很多,实际搭建起来费时费力,焊接很容易出错。
于是,我想到了用单片机实现。
单片机体积小价格低,应用方便,稳定可靠。
单片机将很多任务交给了软件编程去实现,大大简化了外围硬件电路,使外围电路的实现简单方便。
由于单片机本身不具有软件编译测试的功能,我们需要借助其他软件编译,将编译好的程序“烧”入单片机内。
在实际电路设计中,需要先通过仿真软件测试电路以及编译的程序,检查外围电路设计是否合理,软件编译是否正确,以及软件和硬件电路能否正常配合工作,能否准确的实现所设计的功能。
如果测试通过,电路仿真没有问题能完全实现功能的话就可以实际的做板子的焊接工作了。
在老师的指导下我选择了常用的单片机仿真软件proteus6.7进行仿真。
第三章硬件电路设计
3.1总体设计
图3-1总体设计
如图3-1,P3.0为开始抢答,P3.1为停止,P1.0-P1.3为3路抢答输入,数码管段选P0口,位选P2口低3位,蜂鸣器输出为P3.7口。
3.2外部振荡电路
图3-2外部振荡电路
一般选用石英晶体振荡器。
此电路在加电大约延迟10ms后振荡器起振,在XTAL2引脚产生幅度为3V左右的正弦波时钟信号,其振荡频率主要由石英晶振的频率确定。
电路中两个电容C1,C2的作用有两个:
一是帮助振荡器起振;
二是对振荡器的频率进行微调。
C1,C2的典型值为20PF。
3.3复位电路的设计
单片机的第9脚RST为硬件复位端,只要将该端持续4个机器周期的高电平即可实现复位,复位后单片机的各状态都恢复到初始化状态,其电路图如图4所示:
图3-3复位电路
在方案中使用到了硬件复位和软件复位两种功能,由上面的硬件复位可使寄存器及存储器的值都恢复到初始值,而前面的功能提到了倒计时间需要有记忆功能,该功能实现的前提条件就是不能对单片机进行硬件复位,所以设定了软复位功能。
软复位实际上就是当程序执行完毕之后,将程序指针通过一条跳转指令让它跳转到程序执行的起始地址。
3.1.1显示电路的设计
显示电路使用了七段数码管7SEG-MPX4-CA,它是共阳极的,由低电平点亮。
图3-4阳极七段数码管
3.1.2按钮输入电路的设计
这些常开开关组成了抢答按键,硬件电路简单,在程序设计上也不复杂,只要在程序中消除在按键过程中产生的“毛刺”
现象就可以了。
这里采用最常用的方法即软件延时法。
3.1.3发声
这里能利用程序来控制单片机P3.76口线反复输出高电平或低电平,即在该口线上产生一定频率的矩形波,接上扬声器就能发出一定频率的声音,再利用延时程序控制“高”“低”电平的持续时间,就能改变输出频率,从而改变音调,使扬声器发出不同的声音。
第四章系统软件设计
4.1抢答器流程图
流程图是使用图形表示算法的思路是一种极好的方法,不论采用何种程序设计方法,程序总体结构确定后,一般以程序流程图的形式对其进行描述。
总体框图中的各个子模块或各个子任务也应该结合具体的教学模型和算法画出较详细的程序流程图,供后面编写具体程序和阅读程序使用。
4.2主程序
我们组所设计的抢答器的程序采用的是C程序设计,C语言的显著特点是用二进制来编写程序,程序的各个部分除了必要的信息交流外彼此之间相互独立。
这种结构化方式可使程序层次清晰,便于使用、维护以及调试。
C语言是以函数形式提供给用户的,这些函数可方便的调用,并具有多种循环、条件语句控制程序流向,从而使程序完全结构化。
虽然C语言也是强类型语言,但它的语法比较灵活,允许程序编写者有较大的自由度。
本次设计的主程序中包括时钟设计程序,定时器中断子程序,LED显示程序以及按键控制子程序,程序设计如下:
#include<
AT89X52.H>
#defineucharunsignedchar
#defineuintunsignedint
uintx,y,m,n,Tshi,Tge,zhuchi,haoma,f,Sshi,Sge;
uchartable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
//键盘端口
sbitkey1=P1^2;
sbitkey2=P1^3;
sbitkey3=P1^4;
sbitkey4=P1^5;
sbitkey5=P1^6;
sbitkeyzhu=P3^0;
//主持人
sbitkeyqing=P3^1;
//清零
sbitkeyf=P3^7;
//蜂鸣器端口
sbitwei1=P2^0;
//位选端口
sbitwei3=P2^2;
sbitwei4=P2^3;
sbitwei5=P2^4;
sbitwei6=P2^5;
voiddelayms(uintxms)//延时函数
{
uinti,j;
for(i=xms;
i>
0;
i--)
for(j=50;
j>
j--);
}
voidinit()//初始化
TMOD=0x11;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=0;
x=10;
y=0;
m=0;
n=0;
Tshi=0;
Tge=0;
Sshi=0;
Sge=0;
haoma=0;
zhuchi=0;
f=0;
keyf=0;
voiddisplay(uintTshi,uintTge,uinthaoma,uintSshi,uintSge)//数码显示
wei3=0;
P0=table[Tshi];
delayms(5);
wei3=1;
wei4=0;
P0=table[Tge];
wei4=1;
wei1=0;
P0=table[haoma];
wei1=1;
wei5=0;
P0=table[Sshi];
wei5=1;
wei6=0;
P0=table[Sge];
wei6=1;
voidkeyscan()//扫描键盘
uchardaojishi=30;
if(zhuchi==0)
{
if(key1==0)
{
delayms(10);
{
TR0=0;
//抢答1
zhuchi=1;
haoma=1;
keyf=1;
delayms(20);
keyf=0;
if(zhuchi==0)
{
delayms(10);
P2=table[daojishi];
}
}
}
if(key2==0)
//抢答2
haoma=2;
P2=table[daojishi];
if(key3==0)
//抢答3
haoma=3;
if(keyzhu==0)
delayms(10);
TR0=1;
//开始计数,暂停
keyf=1;
delayms(50);
if(keyqing==0)
init();
//停止,程序计数
delayms(20);
voidmain()
while
(1)
keyscan();
display(Tshi,Tge,haoma,Sshi,Sge);
voidT0_time()interrupt1
y++;
n++;
f++;
if(y==2)
Tshi=x/10;
Tge=x%10;
if(x==0)
x=0;
delayms(500);
x--;
Sshi=m/10;
Sge=m%10;
if(m==0)
m--;
5.2中断程序
5.2.1什么是中断
中断是指由于某种随机事件的发生,计算机暂停现行的程序的运行,转去执行另一个程序,以处理发生的事件,处理完毕后又自动返回原来的程序继续运行。
有五种中断源:
外部中断0、外部中断1、定时器中断0、定时器中断1、串行中断。
它们的描述如下表所示:
中断源符号
名称
中断号
INT0
外部中断0
T0
定时器中断0
1
INT1
外部中断1
2
T1
定时器中断1
3
TI/RI
串行中断
4
5.2.2中断所用到的寄存器
(1)、定时器/计数器控制寄存器TCON
(2)、中断允许控制寄存器IE
(3)、串行控制寄存器SCON
5.2.3为什么采用中断控制方式
CPU与外部设备的数据传送方式:
无条件传送方式、程序查询传送方式、中断传送方式
优点:
(1)实现分时操作
(2)实时响应(3)可靠性高
定时器的初始化:
(1确定工作方式-对TMOD赋值;
(2)设置初始值-直接将初值写入THO,TLO;
(3)开启定时器的中断-{ETO=1EA=1};
(4)启动定时器-将TR0或TRI置“1”。
参考文献
1.单片机应用技术(c语言),成友才,中国劳动社会保障出版社,2007
2.数字电子电路分析与应用,邓木生,张文初,高等教育出版社,2008
3.C语言程序设计,谭浩强,清华大学出版社,2008
4.c语言程序设计案例精粹,崔丹,罗建航,电子工业出版社,2010
本课程设计评语:
指导教师(签名):
时间:
年月日
本课程设计成绩:
指导教师(签名):