《AT89C51 课程设计 单片机-抢答器.docx》由会员分享,可在线阅读,更多相关《AT89C51 课程设计 单片机-抢答器.docx(16页珍藏版)》请在课桌文档上搜索。
1、抢答器设计内容提耍:电子智能抢答计分器在抢答过程中,为了知道哪组或哪位选手先答题,必须要设计个系统来完成这个任务。假如在抢答中,道视觉是很难推断出哪组先答题。利用单片机系统来设计抢答器,使以上问题得以解决,即使两组的抢答时间相差几微秒,也可辨别出哪组优先答题。本设计运用AT89C51单片机来设计智能抢答潺,组数可以在八组以内随意运用。并且具有倒计时和时间设置及报警功能。利用AT89C51单片机对信号进展锁存、显示等功能。分别从硬件和软件两方面阐述了该限制系统的设计方法,并经过调试和运行使该系统到达预期目标,具有反响快、功能齐全、好用性强的特点。一、系统总体方案设计电子智能抢答计分器在抢答过程中
2、,为了知道哪一组或哪一位选手先答网,必须要设计一个系统来完成这个任务。为了完成这个任务设计时系统能显示抢答组号、各组计分并能计分显示以及竞赛完毕时能发出报警声三个要求:电子智能抢答计分器主要是由硬件局部和软件局部构成,硬件和软件分开设计:系统综枢图如下:图1-1系统框架图抢答辑的工作原理抢答涔的工作原理是利用总片机的定时器TO、Tl中断完成,其余状态循环调用显示子程序,用4个共阴极1.ED数码管来显示,用PO口作为数码管的八个段选,用P2口中的、P2.1、P2.2、作为4个数码管其中3个位选,Pl口接4个按键,供应选手抢答,P3.0-P3.5四个接四个按钺,供应开场、完毕、答题时间调整、抢答时
3、间调整,加1、减1调整之用。抢答功能:通过四路按键协作程序来实现抢答功能。当主持人按下抢答键开场抢答后,此时任一路按下按钮均闭锁其它各路,由程序对键盘译码并显示最先按下抢答键的路数及其当前时间。抢答限时:主持人按下抢答键后,设置5秒为抢答时间(此时间可在1-99秒之间修改)。假设5秒内无人抢答,倒计时为0时发出报警,说明该抢答题目作废。此时闭锁全部抢答按键,只有当主持人再次按卜抢答推开场卜一次抢答方可抢答。答题限时:中选手按下按钮时,启动倒计时(此倒计时时间可在1-99秒之间修改),倒计时为0时发出报警,说明答题时间到。二、系统硬件设计1、限制系统及所需元件XTA1.lTA1.2RSTPOO/
4、ADOPO1/AD1PO2/AD2P03/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P21/A9P2.2/A10PSENP23/A11A1.EEAP2.4/A12P25/A13P2.6/A14P2.7/A15P1.0P3.0RxDP1.1P3.1/TXDP1.2P3.2INTOP1.3P3.3NT1P1.4P3.4/T0P1.5P3.5/T1P1.6P3.6WRP1.7P37/RD293031123456789_-START:MOVR5,SOBHMOVR4,30BH;初设抢答时间为30s;初设答题时间为60s;设置定时器T0/T1模式1:越高发声频率越
5、高,越尖:50ms为一次溢出中断:允许四个中断,TOT1INTO/INTl;一开场就运行定时器,以开场显示i:未开场抢答时候显示砰干MOVR3,0BHAC1.1.DISP1.AYJBP3.O,NEXTMddddddACA1.1.DE1.AYJBP3.O,NEXTC1.1.BRK;按键发声MOVA1RlMOVR6,A:送R1-R6,因为Rl中保存了抢答时间SETBOK;抢答标记位.用于COUNT只程序中推断是否查询抢答MOVR3,P0AH:抢答只显示计时,灭号数JMPCOUNT:进入倒计时程序,”查询有效抢答的程序.在COUNT里面NEXT:JNBPl.0,FA1.SEIJNBPl.1,FA1.
6、SE2JNBPl.2,FA1.SE3JNBP1.3,FA1.SE4AJMPSTARTTZl:JMPFA1.SE7TZ2:JMPFA1.SE8=非法抢答处理程序=FA1.SEl:ACA1.1.BARK::按键发声MovR3,WlHAJMPERRORF1.SE2:ACA1.1.BARKMOVR3,#0211AJMPERRORFA1.SE3:ACA1.1.BAKKMoVR3,*03HAJMPERRORP1.SE4:ACA1.1.BARKMOVR3,#04HAJMPERROR=INTo(抢答时间Rl调整程序=INTOSUB:MOVAtRlMOVB,MAHDlVABMOVR5,AMOVR4,BMOVR3
7、,SOAHACA1.1.DISP1.Y;先在两个时间1.ED上显示RIJNBP3.4,INCO;P3.4为+Is键,如按下跳到INCOJNBP3.5,DECO;P3.5为TS键,如按下跳到DECOJNBP3.1,BACKO;P3.1为确定键,如按下跳到BACKOAJMPINT0SUBINCO:MOVA1RICJNEA,rt63H,ADDO;假如不是99,R2加1,假如加到99,Rl就置0,重新加起。MOVR1.rtOOHACA1.1.DE1.AYlJMPINT0SUBADDO:INCRlACA1.1.DE1.AYlJMPINT0SUBDECO:MOV,R1JZSETRl:假如Rl为0,Kl就近
8、99DECRlACA1.1.DE1.AYlAJMPINT0SUBSETRl:MOVRl,#6311C1.1.DE1.AYlAJMPINT0SUBBACKO:RETI=1NTI(答比时间R2调整程序=.INTISUB:MOV,R2MOVB,#0AHDlVABMOVR5,AMOVRl,BMOVR3,#0AHACA1.1.DISP1.AYJNBP3.4,INCIJNBP3.5,DEClJNBP3.I1BACKlAJMP1NT1SUBINCl:MOV,R2CJNE,#6311,ADDlMOVK2,#0011ACA1.1.DE1.Y1AJMPINT1SUBADDl:INCR2AC1.1.DE1.AY1J
9、MPINT1SUBDECI:MOVA,R2JZSETR2DECR2ACA1.1.DE1.AYlJMPINT1SUBSETR2:MOVR2,#63HACA1.1.DE1.AYlAJMPINT1SUBBACKl:RETI=倒计时程序(抢答倒计时和答友倒计时都跳到改程序)=COUNT:MOVROdOOH;建置定时器中断次数MOVTl11,#3CHMoVT1.1,#OBOH;重置定时器RecountiMOVa,R6:R6保存了倒计时的时间,之前先将抢答时间或答电时间给R6MOVB,SOAHDIVAB;除非常出个位/十位MOV3011,A;十位存于(30H)MOV3111,B;个位存于(31H)MOVR
10、5.30H:取十位MOVR4,31H:取个位MOVA.R6SUBBA,#07HJNC1.ARGER:大于5s跳到1.ARGER,小于等于5s会提示MOVA1ROC1.RRINGJMPCHECKIT1.1.:CJNE,#14H,CHECK下面是Is的状况,响并显示号数并清RO,亚新计SETBKINGMOVA,R6JZQUIT:计时完毕MOVRO1SOOHDECR6;一秒标记减1AJMPCHECKMRGER:MOVA,ROCJNE,414H.CHECK假如IS向下运行,否不跳到查停/显示DECR6:计时一秒R6自动减1MOVRO1#00HCHECK:JNBP3.1,QCIT;如按下停顿键退出C1.
11、1.DISP1.AYJBOK,ACCO1.T假如是抢答倒计时,如是那么查询抢答,否者跳过查询接着倒数(这里起到锁抢答作用)AJMPRECOUNTAccoutjnbpi.o,trueiJNBP1.1.TRUE2JNBP1.2,TRUE3JNBPl.3,TRUE4JNBP1.4,TR1.E5JNBPl.5,TR1.E6JNBPl.6,TZ3JNBPI.7,TZ4AJMPRECOUNTTZ3:JMPTRUE7TZ4:JMPTRUE8QUIT:C1.ROK:假如按下了停顿键”执行的程序:按键发声C1.RRINGAJMPSTART=正常抢答处理程序=TRUEl:ACA1.1.BARK抢答时间R2送R6M
12、OVR3t#0111C1.ROK因为答题的计时不再查询抢答,所以就锁r抢答M0rA1R2MOYR6,AJMPCOUNTTRUE2:CA1.1.BRKMOVA,R2MOVR6,MOVR3,0211C1.ROKJMPCOUNTTRUE3:ACA1.1.BRK;MOV,R2MOVR6,MOVR3,0311C1.ROKAJMPCOUNTTR1.BkACA1.1.BARK;MOVA,R2MOVR6,MOVR3,UOlIIC1.ROKAJMPCOUNT=犯规抢答程序=ERROR:MOVRO,0011MOVTH1.#3CH:犯规号数暂存与(34H):05s向下运行-灭并停哨三灯全灭MOVT1.l,WBOHM
13、OV34H,R3HERE:MOVA,ROCJNE,#OAH,F1.ASHC1.RRINGMOVR3,#0AHMOVR4,#0AHMOVR5,SOHAJMPCHECKlF1.ASH:CJNEA,#14H,CHECK1下面是Is的状况,响并显示号数并消RO,M新计SETBRINGMOVRO,=OOHMOVR3.34H:取回号数MOVR5,#OBHMOVR4,COBH:显示FF和号数JMPCHECKlCHECKl:JNBP3.I1QUITlACA1.1.DISP1.AYAJMPHEREQlITl:C1.RRINGC1.ROKAJMPSTART=显示程序=DlSP1.AY:MOVDPTR,SDATl查
14、表显示程序,利用Po口做段选码口输出/P2低:.位做位选码输出,MOVA,R3MOVCA,A+DPTRMOVP2,rtfeliMOVPO,八ACA1.l.DE1.AYMOVDPTRMDAT2MOVA,R5MOVCA,A+DPTRMOVP2,#OfdHMOVPO,ACA1.1.DB1.AYMOVA,R4MOVCA,+DPTRMOVP2,#OfbHMOVPO,C1.1.DE1.AYRETDATkDBOOh106h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,OOH,71H了灭”,T,2,3,4J5,6一7,8,W,灭一FDT2U)B3fh,Ofh,5bh,4fh,66h,6dh
15、,7dh,07h,7fh,6h,OOH,7111;第一个为零,其他与上一样,因为十位假如为零显示熄灭=加诚时间延时(起到不会按下就加N个数)=DE1.AYl:MOV35H,W8H1.OOPO:ACA1.1.DISP1.AYDJNZ3511,1.OOPORET=-延时(显示和去抖动用到)DE1.AY:MOV32Hzl2H1.OOP:MOV33H,POAFH1.OOPl:DJNZ33H,1.OOPlDJNZ32H,1.OOPRETB=发声程序=HBRK:SETBRINGACA1.1.DEUYlACA1.1.DE1.Y1C1.RRING;按键发声RET=-T0溢出中断(响铃程序)=TOINT:MOV
16、THO,#OECHMOVT1.O1COFFHJNBRING1OUT;OUT:RETI-Tl溢出中断(计时程序)=TlINT:MOVTHl1JiSCHMOVT1.l1JiOBOHINCRORETIEND完毕语经过将近二周的堆片机课程设计,最终完成了四路抢答器的设计,虽然没有完全到达设计要求,但还是收获良多。通过这次课程设计,使我更进一步地熟识f单片机芯片的工作原理和其详细的运用方法“单片机课程设计重点就在于软件算法的设计,须要有很奇妙的程序算法,这熬炼r自己独立思索问题的实力和通过查看相关资料来解决问题的习惯。还有了解了课程设计的一股步界,和设计中应留意的问题。从这次的课程设计中,我真真正正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论学问用到实际当中,学习单片机更是如此,程序只有在常常的写与读的过程中才能提高,这就是我在这次课程设计中的最大收获。