基于51单片机的数字抢答器.docx

上传人:啊飒飒 文档编号:10535365 上传时间:2021-05-22 格式:DOCX 页数:20 大小:501.86KB
返回 下载 相关 举报
基于51单片机的数字抢答器.docx_第1页
第1页 / 共20页
基于51单片机的数字抢答器.docx_第2页
第2页 / 共20页
基于51单片机的数字抢答器.docx_第3页
第3页 / 共20页
基于51单片机的数字抢答器.docx_第4页
第4页 / 共20页
基于51单片机的数字抢答器.docx_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《基于51单片机的数字抢答器.docx》由会员分享,可在线阅读,更多相关《基于51单片机的数字抢答器.docx(20页珍藏版)》请在三一文库上搜索。

1、目录1 前言12 方案论证与比较22.1方案一22.2 方案二22.3方案论证与比较33 系统设计43.1单元模块43.1.1 STC89C52单片机控制部分43.1.2 电源部分53.1.3 十六位抢答键盘部分53.1.4 四位数码管显示部分63.1.5 抢答报警部分63.2电路参数的计算及元器件的选择74 软件设计84.1软件设计原理及设计所用工具84.1.1制图软件:protel 99 se84.1.2仿真软件:Proteus84.1.3集成开发环境:Keil uVision384.2程序设计总体框图94.3软件设计主要结构图94.4程序设计相关说明104.4.1 倒计时模块104.4.

2、2 显示字程序模块104.4.3 按键扫描程序模块114.4.4 报警程序模块125 结论13附录一.设计原理图14附录二.仿真电路15附录三.程序161 前言抢答器是一种广泛应用于企事业单位和商业部门,为各种知识竞赛、文娱活动提供公正客观快速裁决的一种常用电子设备,也是一种逐渐成型的电子产品,但市面上所售抢答器价格一般较贵且多为小规模集成电路构成,其性能单一,工作起来不够理想。因此,提高抢答器的性能,使其具有更强的功能,使用可靠方便已为抢答器发展的一个方向。随着集成技术和计算机技术的发展,单片机作为其一个分支亦于20世纪80年代以来获得了飞速发展,各种新品不断涌现,使单片机的应用更加深入,灵

3、活性也大大增强。本设计是以MCS-51单片机STC89C52RC单片机为核心的16路抢答器系统,它充分利用了单片机系统的优点,具有结构简单、功能强大、可靠性好、实用性强的特点。抢答器的功能暂定如下:,能用软件设定抢答时限。,抢答开始,数码管的前两位自动倒计时(以秒为单位),数码管后两位显示无关序号“00”,倒计时记到零,如果没有人抢答,则蜂鸣器报警,报警时间长度自拟。,有人抢答以后倒计时停止计时,并且数码管后两位显示选手的组号,并且蜂鸣器报警,其余选手的抢答将无效。,主持人控制按键按下以后,显示复位,并显示倒计时的初值。2 方案论证与比较2.1方案一图2-1 方案一的系统框图2.2 方案二图2

4、-2 方案二的系统框图2.3方案论证与比较比较方案一和方案二,我们可以得出这样的结论:用方案一是全数字电路的,可以用74LS148优先编码器为核心,采用555定时器作为秒脉冲产生电路,可以用74LS192等计数器作为计数,以供数码管显示,数码管也需要74LS48或者是C4511作为编码器等等,所构成的电路复杂,控制繁琐。并且抢答按键也受到了优先编码器输入端口的限制,如果是用74LS148,那么输入按键就被限制到了8位,最多可以做8位抢答。但是如果选择方案二,就可以轻松解决这个问题,51单片机提供的4组共计32位的I/O端口可以轻松扩展足够的按键,并且外接8255控制器,扩展并行I/O口,还可以

5、用移位寄存器将扩展I/O口以提供足够过的按键。同时整个方案简单明了,一目了然,针对抢答器的复位和报警还可以用单片机的中断系统,使单片机的执行效率大大提高。3 系统设计3.1单元模块3.1.1 STC89C52单片机控制部分图3-1 STC89C52单片机控制部分 本次设计的控制器采用了STC89C52RC单片机:K1、C10、R3连接到单片机RESET(9脚)构成复位电路,RESET:复位信号端和后备电源输入端。输入10ms以上高电平脉冲,单片机复位。Y2晶振选用了11.0592MHZ,决定了系统的时钟周期,C9和C13用于帮助晶振起振。由于本次采用的STC89C52RC自带8K程序存储器,而

6、本次设计程序小于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-3 4X4扫描键盘该4X4扫描键盘是在单片机中常用的键盘,用单片机的任意一组I/O口,就可以扩展这样的16个键盘。本设计采用的是P1口,

7、如果用到P0口扩展时间需要加上拉电阻。对于扫描键盘的编程也比较简单,没有涉及到其他外接的控制器,也就不涉及硬件的时序等。只需要对行(或列)进行扫描,然后用延时来防抖动就行。再用查表方法可以查出对应的按键状态。3.1.4 四位数码管显示部分图3-4 四位数码管显示电路显示部分采用共阳极的四位数码管显示。软件设计时候,也需要对4位公共端进行扫描。由于公共端是接高电平有效,而单片机复位在P0口加上拉电阻后,呈现的是高电平。故最好在公共端加上非门,故可以用一个PNP的晶体管来代替非门。这样就可以避免单片机复位以后数码管会误显示。在软件设计时,用常用的动态显示方法编程。3.1.5 抢答报警部分图3-5

8、抢答器报警电路报警电路采用的是有源蜂鸣器报警,采用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直流电压。报警电路部分:

9、为使驱动能力较大,选用了9015(PNP型三极管)利用其灌电流来驱动蜂鸣器,而没选用NPN型利用拉电流驱动。其余部分均按其典型应用电路的参考参数选择元件。4 软件设计4.1软件设计原理及设计所用工具4.1.1制图软件:protel 99 seProtel 99 SE系统是Protel Technology公司开发的基于Windows环境下的电路板设计软件。采用设计库管理模式,可以进行联网设计,具有很强的数据交换能力和开放性及3D模拟功能,是一个32位的设计软件,可以完成电路原理图设计,印制电路板设计和可编程逻辑器件设计等工作,可以设计32个信号层,16个电源-地层和16个机加工层。4.1.2仿

10、真软件:Proteus Proteus的ISIS是一款Labcenter出品的电路分析实物仿真系统,可仿真各种电路和IC,并支持单片机,元件库齐全,使用方便,是不可多得的专业的单片机软件仿真系统。4.1.3集成开发环境:Keil uVision3Keil软件是目前最流行开发MCS-51系列单片机的软件,Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境

11、(uVision)将这些部份组合在一起。4.2程序设计总体框图 4.3软件设计主要结构图 图4-1 定时中断框图 图4-2 按键子程序框图4.4程序设计相关说明本程序主要包括了4个部分的程序模块:倒计时模块,显示子程序模块,按键扫描程序模块,报警程序模块。另外,主持人的复位/开始开关程序使用了外部中断1。4.4.1 倒计时模块倒计时功能的完成用到了定时/计数器中断0,倒计时程序如下:void timeset() interrupt 1c-; /c值自减一if(c=0) time-; /time值自减一 c=10000; 程序初始值设置为 time=10(定时10秒),c=10000,定时器为工

12、作方式2(TMOD=0x22),定时器装入初值为0x9c。当定时满是,c值自减一,当c值为零时,也就是一秒,time减一,这样就完成了倒计时的功能。4.4.2 显示字程序模块 此抢答器的设计用的是4位LED数码显示管显示倒计时和抢答队伍序号。程序采用4位扫描显示的方法实现数码管的显示。 显示程序如下:void display()weicro=0xef; / I/O口初始状态for(i=4;i0;i-)delay(10); / 延时weicro=_cror_(weicro,1); / 右移循环,实现I/O状态循环P0=weicro;switch(weicro) / I/O口状态查询case 0x

13、fe:P2=tablenum%10;break;case 0xfd:P2=tabletime/10;break;case 0xfb:P2=tabletime%10;break;case 0xf7:P2=tablenum/10;break; 本次设计使用了P0口作为显示扫描的位选信号,P2口作为显示码的输出。根据人的视觉暂留效果,只要扫描时间不超过25MS,我们就能看到连续的,不闪烁的数字显示,从而实现4位LED数码管的扫描显示。4.4.3 按键扫描程序模块 此设计可实现16位抢答的功能,并可以在有人按下抢答键后,报警器报警3秒,同时按键锁定,不再响应后面的按键信息。主持人按键具有开始和复位的功

14、能,在主持人按下按键开始之前,抢答按键不会有响应。 抢答按键部分程序如下:void key_num()weicro=0xef; / I/O口状态初始化if(flag0=1)for(i=4;i0;i-)weicro=_cror_(weicro,1); / I/O状态右移循环 P1=weicro; /P1口赋状态值for(j=16;j0;j-)if(P1=key_tablej) / I/O口状态查询(查表)num=j; /键值赋值flag0=0;flag1=1; 程序利用P1口完成16个按键的扫描查询,并由查表得方式查询键值,赋给num,送入显示程序中处理显示。程序中,flag0是按键锁定标志:当

15、flag0=1时,抢答按键可以响应;当flag0=0时,按键锁定,抢答键无响应。flag1是报警器响铃标志,将在报警程序中介绍。4.4.4 报警程序模块当倒计时结束(10秒)或者有抢答键按下时,报警器都会响铃3秒作为提示。完成此部分功能的程序如下:void alarm()if(flag1=1 | time=0) /报警判断flag0=0;TR0=0; TR1=1;yes=0; /报警器开关开 void timer() interrupt 3 /定时/计数器中断1d-;if(d=0)TR1=0;flag1=0;yes=1; /报警器开关关time=10;d=30000;由按键程序中可以看到,当有

16、抢答键按下时,flag1=1,或者在倒计时结束时,time=0,都将使得报警器判断成立,进入报警状态并锁定抢答键按键。yes表示的是单片机的P3.5口的状态。当yes=0时,报警电路的PNP管导通,报警器响。 程序利用了定时/计数器中断1来实现报警器的报警时间控制,时间为3秒。 当定时结束后,flag1=0,yes=1,退出报警模式,同时将倒计时复位(time=10)。 5 结论本设计是采用以STC89C52RC单片机为核心,用四位数码管和4X4扫描键盘为外围设备的数字抢答器。最终,我们设计出的抢答器的可以实现的功能是:,能用软件设定抢答时限。本设计中单片机复位时(或者主持人开关复位以后)设定

17、的时限为10秒,具体的时间可以根据需要在软件中修改。,有人抢答以后倒计时停止计时,并且数码管后两位显示选手的组号,并且蜂鸣器短时报警三秒,其余选手的抢答将无效。此后,必须由主持人开关复位,以进入新一轮的抢答。,主持人控制按键按下以后,显示复位,并显示倒计时的初值,进入了新一轮的抢答。,抢答开始,数码管的前两位自动倒计时(以秒为单位),倒计时到零,如果没有人抢答,则抢答器报警3秒,并复位到初始倒计时时间,并显示。根据我们的设计,完全完成了预期的抢答器功能,在本设计过程中,重点是软件设计的合理规划。其中,难点是4位数码管的动态显示,该动态显示时候,要求对四位数码管的前两位显示抢答倒计时,而后两位要

18、显示抢答选手的组号,并且两者的显示必须要配合恰当。我们采用两个定时器中断,和标志位(51单片机内部CPU自带的布尔处理机),解决了这个问题。由于能力有限,本设计仍然存在着一些不足的地方。通过本次设计,我们从中也收获了很多,培养了自己的工程意识和团队合作的精神,同时也要向在本次设计过程中给与我们帮助的老师和同学致以诚挚的谢意。附录一.设计原理图附录二.仿真电路 附录三.程序#include #include sbit yes=P35;bit flag0;bit flag1;unsigned int i,j,d,c,num,time;unsigned char weicro;unsigned ch

19、ar table11=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff; unsigned char key_table17=0x00,0xee,0xed,0xeb,0xe7,0xde,0xdd,0xdb,0xd7,0xbe,0xbd,0xbb,0xb7,0x7e,0x7d,0x7b,0x77;void display();void alarm();void delay(unsigned int z);void key_num();void init();void main()init();while(1)display();key_

20、num();alarm();void init()EA=1;ET0=1;ET1=1;EX0=1;IT0=1;TMOD=0x22;TH1=0x9C;TH0=0x9C;c=10000;d=30000;time=10; void display()weicro=0xef;for(i=4;i0;i-)delay(10);weicro=_cror_(weicro,1);P0=weicro;switch(weicro)case 0xfe:P2=tablenum%10;break;case 0xfd:P2=tabletime/10;break;case 0xfb:P2=tabletime%10;break;

21、case 0xf7:P2=tablenum/10;break; void key_num()weicro=0xef;if(flag0=1)for(i=4;i0;i-)weicro=_cror_(weicro,1);P1=weicro;for(j=16;j0;j-)if(P1=key_tablej)num=j;flag0=0;flag1=1;void begin() interrupt 0flag0=1;num=0;TR0=1;void timeset() interrupt 1c-;if(c=0)time-;c=10000;void alarm()if(flag1=1 | time=0)flag0=0;TR0=0;TR1=1;yes=0; void timer() interrupt 3d-;if(d=0)TR1=0;flag1=0;yes=1;time=10;d=30000;void delay(unsigned int z) unsigned int x,y;for(x=z;x0;x-)for(y=110;y0;y-);19

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1