基于51单片机的数字抢答器.docx
- 文档编号:24043791
- 上传时间:2023-05-23
- 格式:DOCX
- 页数:16
- 大小:178.45KB
基于51单片机的数字抢答器.docx
《基于51单片机的数字抢答器.docx》由会员分享,可在线阅读,更多相关《基于51单片机的数字抢答器.docx(16页珍藏版)》请在冰豆网上搜索。
基于51单片机的数字抢答器
目录
1前言1
2方案论证与比较2
2.1方案一2
2.2方案二2
2.3方案论证与比较3
3系统设计4
3.1单元模块4
3.1.1STC89C52单片机控制部分4
3.1.2电源部分5
3.1.3十六位抢答键盘部分5
3.1.4四位数码管显示部分6
3.1.5抢答报警部分6
3.2电路参数的计算及元器件的选择7
4软件设计8
4.1软件设计原理及设计所用工具8
4.1.1制图软件:
protel99se8
4.1.2仿真软件:
Proteus8
4.1.3集成开发环境:
KeiluVision38
4.2程序设计总体框图9
4.3软件设计主要结构图9
4.4程序设计相关说明10
4.4.1倒计时模块10
4.4.2显示字程序模块10
4.4.3按键扫描程序模块11
4.4.4报警程序模块12
5结论13
附录一.设计原理图14
附录二.仿真电路15
附录三.程序16
1前言
抢答器是一种广泛应用于企事业单位和商业部门,为各种知识竞赛、文娱活动提供公正客观快速裁决的一种常用电子设备,也是一种逐渐成型的电子产品,但市面上所售抢答器价格一般较贵且多为小规模集成电路构成,其性能单一,工作起来不够理想。
因此,提高抢答器的性能,使其具有更强的功能,使用可靠方便已为抢答器发展的一个方向。
随着集成技术和计算机技术的发展,单片机作为其一个分支亦于20世纪80年代以来获得了飞速发展,各种新品不断涌现,使单片机的应用更加深入,灵活性也大大增强。
本设计是以MCS-51单片机——STC89C52RC单片机为核心的16路抢答器系统,它充分利用了单片机系统的优点,具有结构简单、功能强大、可靠性好、实用性强的特点。
抢答器的功能暂定如下:
①,能用软件设定抢答时限。
②,抢答开始,数码管的前两位自动倒计时(以秒为单位),数码管后两位显示无关序号“00”,倒计时记到零,如果没有人抢答,则蜂鸣器报警,报警时间长度自拟。
③,有人抢答以后倒计时停止计时,并且数码管后两位显示选手的组号,并且蜂鸣器报警,其余选手的抢答将无效。
④,主持人控制按键按下以后,显示复位,并显示倒计时的初值。
2方案论证与比较
2.1方案一
图2-1方案一的系统框图
2.2方案二
图2-2方案二的系统框图
2.3方案论证与比较
比较方案一和方案二,我们可以得出这样的结论:
用方案一是全数字电路的,可以用74LS148优先编码器为核心,采用555定时器作为秒脉冲产生电路,可以用74LS192等计数器作为计数,以供数码管显示,数码管也需要74LS48或者是C4511作为编码器等等,所构成的电路复杂,控制繁琐。
并且抢答按键也受到了优先编码器输入端口的限制,如果是用74LS148,那么输入按键就被限制到了8位,最多可以做8位抢答。
但是如果选择方案二,就可以轻松解决这个问题,51单片机提供的4组共计32位的I/O端口可以轻松扩展足够的按键,并且外接8255控制器,扩展并行I/O口,还可以用移位寄存器将扩展I/O口以提供足够过的按键。
同时整个方案简单明了,一目了然,针对抢答器的复位和报警还可以用单片机的中断系统,使单片机的执行效率大大提高。
3系统设计
3.1单元模块
3.1.1STC89C52单片机控制部分
图3-1STC89C52单片机控制部分
本次设计的控制器采用了STC89C52RC单片机:
K1、C10、R3连接到单片机RESET(9脚)构成复位电路,RESET:
复位信号端和后备电源输入端。
输入10ms以上高电平脉冲,单片机复位。
Y2晶振选用了11.0592MHZ,决定了系统的时钟周期,C9和C13用于帮助晶振起振。
由于本次采用的STC89C52RC自带8K程序存储器,而本次设计程序小于8K,所以31脚EA/VP接VCC,不允许从外部读程序。
P0口内部无上拉电阻,为增强其驱动能力,上接了上拉电阻。
3.1.2电源部分
图3-2直流稳压电源供电部分
本次设计电源部分采用,常用DC+5V电源电路,从外部接入8-10VAC/DC电压,通过电桥整流以及电容滤波后,进入7805,再次滤纹波后由DC_OUT接出,电压为+5V。
注意的是,由于7805的功耗较大,所以必须要加散热片。
加D6是为了防止电流反冲。
3.1.3十六位抢答键盘部分
图3-34X4扫描键盘
该4X4扫描键盘是在单片机中常用的键盘,用单片机的任意一组I/O口,就可以扩展这样的16个键盘。
本设计采用的是P1口,如果用到P0口扩展时间需要加上拉电阻。
对于扫描键盘的编程也比较简单,没有涉及到其他外接的控制器,也就不涉及硬件的时序等。
只需要对行(或列)进行扫描,然后用延时来防抖动就行。
再用查表方法可以查出对应的按键状态。
3.1.4四位数码管显示部分
图3-4四位数码管显示电路
显示部分采用共阳极的四位数码管显示。
软件设计时候,也需要对4位公共端进行扫描。
由于公共端是接高电平有效,而单片机复位在P0口加上拉电阻后,呈现的是高电平。
故最好在公共端加上非门,故可以用一个PNP的晶体管来代替非门。
这样就可以避免单片机复位以后数码管会误显示。
在软件设计时,用常用的动态显示方法编程。
3.1.5抢答报警部分
图3-5抢答器报警电路
报警电路采用的是有源蜂鸣器报警,采用9015驱动。
而用P3.5也就是定时器1的外部引脚控制,这样可以方便的利用定时器中断进行控制。
使软件设计时可以提高单片机的执行效率,同时也可以方便地进行控制报警的时间长短。
主持人开关K18接单片机的P3.3,也就是单片机的外部中断1,可以很好的利用单片机的外部中断,进行抢答复位。
3.2电路参数的计算及元器件的选择
电源部分:
D2、D3、D4、D5、D6均采用普通二极管1N4007;C5、C8分别采用1000uf和470uf,用来滤去较大的交流成分。
C6、C7均选104瓷片电容,用于滤除小纹波。
稳压芯片选7805,产生+5V直流电压。
报警电路部分:
为使驱动能力较大,选用了9015(PNP型三极管)利用其灌电流来驱动蜂鸣器,而没选用NPN型利用拉电流驱动。
其余部分均按其典型应用电路的参考参数选择元件。
4软件设计
4.1软件设计原理及设计所用工具
4.1.1制图软件:
protel99se
Protel99SE系统是ProtelTechnology公司开发的基于Windows环境下的电路板设计软件。
采用设计库管理模式,可以进行联网设计,具有很强的数据交换能力和开放性及3D模拟功能,是一个32位的设计软件,可以完成电路原理图设计,印制电路板设计和可编程逻辑器件设计等工作,可以设计32个信号层,16个电源--地层和16个机加工层。
4.1.2仿真软件:
Proteus
Proteus的ISIS是一款Labcenter出品的电路分析实物仿真系统,可仿真各种电路和IC,并支持单片机,元件库齐全,使用方便,是不可多得的专业的单片机软件仿真系统。
4.1.3集成开发环境:
KeiluVision3
Keil软件是目前最流行开发MCS-51系列单片机的软件,KeilC51是美国KeilSoftware公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。
Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部份组合在一起。
4.2程序设计总体框图
4.3软件设计主要结构图
图4-1定时中断框图图4-2按键子程序框图
4.4程序设计相关说明
本程序主要包括了4个部分的程序模块:
倒计时模块,显示子程序模块,按键扫描程序模块,报警程序模块。
另外,主持人的复位/开始开关程序使用了外部中断1。
4.4.1倒计时模块
倒计时功能的完成用到了定时/计数器中断0,
倒计时程序如下:
voidtimeset()interrupt1
{
c--;//c值自减一
if(c==0)
{
time--;//time值自减一
c=10000;
}
}
程序初始值设置为time=10(定时10秒),c=10000,定时器为工作方式2(TMOD=0x22),定时器装入初值为0x9c。
当定时满是,c值自减一,当c值为零时,也就是一秒,time减一,这样就完成了倒计时的功能。
4.4.2显示字程序模块
此抢答器的设计用的是4位LED数码显示管显示倒计时和抢答队伍序号。
程序采用4位扫描显示的方法实现数码管的显示。
显示程序如下:
voiddisplay()
{
weicro=0xef;//I/O口初始状态
for(i=4;i>0;i--)
{
delay(10);//延时
weicro=_cror_(weicro,1);//右移循环,实现I/O状态循环
P0=weicro;
switch(weicro)//I/O口状态查询
{
case0xfe:
P2=table[num%10];break;
case0xfd:
P2=table[time/10];break;
case0xfb:
P2=table[time%10];break;
case0xf7:
P2=table[num/10];break;
}
}
}
本次设计使用了P0口作为显示扫描的位选信号,P2口作为显示码的输出。
根据人的视觉暂留效果,只要扫描时间不超过25MS,我们就能看到连续的,不闪烁的数字显示,从而实现4位LED数码管的扫描显示。
4.4.3按键扫描程序模块
此设计可实现16位抢答的功能,并可以在有人按下抢答键后,报警器报警3秒,同时按键锁定,不再响应后面的按键信息。
主持人按键具有开始和复位的功能,在主持人按下按键开始之前,抢答按键不会有响应。
抢答按键部分程序如下:
voidkey_num()
{
weicro=0xef;//I/O口状态初始化
if(flag0==1)
{
for(i=4;i>0;i--)
{
weicro=_cror_(weicro,1);//I/O状态右移循环
P1=weicro;//P1口赋状态值
for(j=16;j>0;j--)
{
if(P1==key_table[j])//I/O口状态查询(查表)
{
num=j;//键值赋值
flag0=0;
flag1=1;
}
}
}
}
}
程序利用P1口完成16个按键的扫描查询,并由查表得方式查询键值,赋给num,送入显示程序中处理显示。
程序中,flag0是按键锁定标志:
当flag0=1时,抢答按键可以响应;当flag0=0时,按键锁定,抢答键无响应。
flag1是报警器响铃标志,将在报警程序中介绍。
4.4.4报警程序模块
当倒计时结束(10秒)或者有抢答键按下时,报警器都会响铃3秒作为提示。
完成此部分功能的程序如下:
voidalarm()
{
if(flag1==1||time==0)//报警判断
{
flag0=0;
TR0=0;
TR1=1;
yes=0;//报警器开关开
}
}
voidtimer()interrupt3//定时/计数器中断1
{
d--;
if(d==0)
{
TR1=0;
flag1=0;
yes=1;//报警器开关关
time=10;
d=30000;
}
}
由按键程序中可以看到,当有抢答键按下时,flag1=1,或者在倒计时结束时,time=0,都将使得报警器判断成立,进入报警状态并锁定抢答键按键。
yes表示的是单片机的P3.5口的状态。
当yes=0时,报警电路的PNP管导通,报警器响。
程序利用了定时/计数器中断1来实现报警器的报警时间控制,时间为3秒。
当定时结束后,flag1=0,yes=1,退出报警模式,同时将倒计时复位(time=10)。
5结论
本设计是采用以STC89C52RC单片机为核心,用四位数码管和4X4扫描键盘为外围设备的数字抢答器。
最终,我们设计出的抢答器的可以实现的功能是:
①,能用软件设定抢答时限。
本设计中单片机复位时(或者主持人开关复位以后)设定的时限为10秒,具体的时间可以根据需要在软件中修改。
②,有人抢答以后倒计时停止计时,并且数码管后两位显示选手的组号,并且蜂鸣器短时报警三秒,其余选手的抢答将无效。
此后,必须由主持人开关复位,以进入新一轮的抢答。
③,主持人控制按键按下以后,显示复位,并显示倒计时的初值,进入了新一轮的抢答。
④,抢答开始,数码管的前两位自动倒计时(以秒为单位),倒计时到零,如果没有人抢答,则抢答器报警3秒,并复位到初始倒计时时间,并显示。
根据我们的设计,完全完成了预期的抢答器功能,在本设计过程中,重点是软件设计的合理规划。
其中,难点是4位数码管的动态显示,该动态显示时候,要求对四位数码管的前两位显示抢答倒计时,而后两位要显示抢答选手的组号,并且两者的显示必须要配合恰当。
我们采用两个定时器中断,和标志位(51单片机内部CPU自带的布尔处理机),解决了这个问题。
由于能力有限,本设计仍然存在着一些不足的地方。
通过本次设计,我们从中也收获了很多,培养了自己的工程意识和团队合作的精神,同时也要向在本次设计过程中给与我们帮助的老师和同学致以诚挚的谢意。
附录一.设计原理图
附录二.仿真电路
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 51 单片机 数字 抢答