《单片机的四路抢答器设计基程序.doc》由会员分享,可在线阅读,更多相关《单片机的四路抢答器设计基程序.doc(26页珍藏版)》请在课桌文档上搜索。
1、-基于51单片机的四路抢答器设计目录摘要2一需实现的功能2二硬件设计22.1抢答器电路图22.2单元电路设计22.2.1.主持人开关:2选手开关电路:2报警系统:2显示系统:2晶振系统:2鉴别电路:2三软件设计23.1原理框图23.2程序流程图23.3程序2四实践过程241具体过程:24.2碰到的问题及解决方案0五总结与体会2摘要现在抢答器很广泛地用于各种场合的竞赛,为竞争增添了刺激性、娱乐性。抢答器的出现为人们带来了方便,能准确无误的从假设干名参赛中确定出最先抢答者,并且有显示,声效等功能。本文介绍一种四路抢答器,由抢答电路,定时电路,报警电路等组成。关键字:四路抢答器抢答电路定时电路报警电
2、路一需实现的功能1.接通电源后,数码管显示为“F FF,此时抢答器处于制止抢答状态;2.主持人可通过抢答时间调节按键与答题时间调节按键来调节时间长短,再按下停顿键后,主持人按下“开场键,宣布“开场抢答,定时器开场倒计时且蜂鸣器提示,选手在规定的15s定时时间抢答;3.当有选手按下抢答按键时,则显示选手编号与剩余答题时间显示且蜂鸣器提示,此时其他选手不能再进展抢答;4.答题完毕后,主持人按下停顿键,如果再次抢答必须由主持人再次操作“去除和“开场状态开关,此时抢答时间与答题时间恢复为默认值,分别为15s和45s,但假设主持人只停顿键后就开场下一轮抢答则抢答时间与答题时间为上一轮设置的时间。二硬件设
3、计2.1抢答器电路图如图2.1所示为电路图,其工作原理为:接通电源后主持人将开关拨到“清零状态,抢答器处于制止状态,定时器设定时间,主持人将开关置“开场,宣布抢答开场时,定时器倒计时,扬声器发出响声。选手要在规定时间完成抢答;优先判断,编号锁存,扬声器提示。图2.1 抢答器电路图2.2单元电路设计如图2.2所示为硬件电路设计模块:图2.2 硬件电路设计模块2.2.1.主持人开关:如图2.2所示,该图为主持人宣布抢答开场与完毕信号的输入装置。图2.2.1 主持人开关选手开关电路:如图所示,该图为各个选手抢答信号的输入装置,在通过单片机,选择有效信号,同时封锁。图2.2.2 选手开关电路报警系统:
4、如图所示,报警电路用于报警,当遇到信号时,发出报警。选手在设定时间抢答时,实现优先判断编号锁存等提示。图2.2.3 报警系统电路图显示系统:如图所示,显示电路用于显示抢答时间以及抢答信号,同时对犯规抢答组进展闪烁显示。图2.3.4 显示系统电路图晶振系统:如图所示2.3.5 晶振系统电路图鉴别电路:如图所示2.3.6 鉴别电路图三软件设计3.1原理框图如图3.1所示为总体原理框图。图3.1 总体原理框图3.2程序流程图如图3.2所示为程序流程图。图3.2 程序流程图3.3程序OK EQU 20H ;抢答开场标志位 RING EQU 22H ;响铃标志位DATA0 EQU 36H ;抢答按键口数
5、据存放地址 ORG 0000H AJMP MAIN ORG 0003H AJMP INTT0 ORG 000BH AJMP T0INT ORG 001BH AJMP T1INT ORG 0040HMAIN: MOV R1,*15 ;初设抢答时间为15s MOV R2,*45 ;初设答题时间为45s mov 38h,*60 ;启用锦囊时间从60s倒计时 MOV TMOD,*11H ;设置未定时器/模式1 MOV TH0,*0F0H MOV TL0,*0FFH ;越高发声频率越高,越尖 MOV TH1,*3CH MOV TL1,*0B0H ;50ms为一次溢出中断 SETB EA SETB ET0
6、 SETB ET1 ;允许二个中断,T0/T1 CLR OK CLR RING SETB TR1 SETB TR0 ;一开场就运行定时器,以开场显示FFF.如果想重新计数,重置TH1/TL1就可以了;=;=查询程序=;=START: MOV DATA0,*0FFH ;初始化 MOV R5,*0BH MOV R4,*0BH MOV R3,*0BH ACALL DISPLAY ;未开场抢答时候显示FFF JNB P3.3,SELSUB0 JNB P3.4,TZ3 ;倒计时调整 P3.0,NE*T ACALL DELAY P3.0,NE*T ;去抖动,如果开场键按下就向下执行,否者跳到非法抢答查询
7、SETB E*0 ;开放INT0 ACALL BARK ;按键发声 MOV A,R1 MOV R6,A ;送R1-R6,因为R1中保存了抢答时间 SETB OK ;抢答标志位,在使用锦囊时用作判断是抢答倒计时还是答复倒计时 MOV R3,*0AH ;抢答只显示计时,灭号数 AJMP COUNT ;进入倒计时程序,查询有效抢答的程序在COUNT里面NE*T: JNB P1.0,FALSE1 JNB P1.1,FALSE2 JNB P1.2,TZ1 JNB P1.3,TZ2 AJMP STARTTZ1: AJMP FALSE3TZ2: AJMP FALSE4TZ3: AJMP SELSUB1 AJ
8、MP START;=;=非法抢答处理程序=;=FALSE1: MOV R3,*01H AJMP ERRORFALSE2: MOV R3,*02H AJMP ERRORFALSE3: MOV R3,*03H AJMP ERRORFALSE4: MOV R3,*04H AJMP ERROR;=;=SELSUB0(抢答时间R1调整程序)= ;=SELSUB0: MOV A,R1 MOV B,*0AH DIV AB MOV R5,A MOV R4,B MOV R3,*0AH ACALL DISPLAY ;先在两个时间LED上显示R1 JNB P3.5,INC0 ;P3.5为+1s键,如按下跳到INCO
9、 JNB P3.6,DEC0 ;P3.6为-1s键,如按下跳到DECO JNB P3.1,BACK0 ;P3.1为确定键,如按下跳到BACKO AJMP SELSUB0INC0: MOV A,R1CJNE A,*63H,ADD0 ;如果不是99,R2加1,如果加到99,R1就置0,重新加起。 MOV R1,*00H ACALL DELAY1 AJMP SELSUB0ADD0: INC R1 ACALL DELAY1 AJMP SELSUB0DEC0: MOV A,R1 JZ SETR1 ;如果R1为0, R1就置99 DEC R1 ACALL DELAY1 AJMP SELSUB0SETR1:
10、 MOV R1,*63H ACALL DELAY1 AJMP SELSUB0BACK0: AJMP START;=;=SELSUB1(答复时间R2调整程序)=;=SELSUB1: MOV A,R2 MOV B,*0AH DIV AB MOV R5,A MOV R4,B MOV R3,*0AH ACALL DISPLAY JNB P3.5,INC1 JNB P3.6,DEC1 JNB P3.1,BACK1 AJMP SELSUB1INC1: MOV A,R2 CJNE A,*63H,ADD1 MOV R2,*00H ACALL DELAY1AJMP SELSUB1ADD1: INC R2 ACA
11、LL DELAY1 AJMP SELSUB1DEC1: MOV A,R2 JZ SETR2 DEC R2 ACALL DELAY1 AJMP SELSUB1SETR2: MOV R2,*63H ACALL DELAY1 AJMP SELSUB1BACK1: AJMP START;=;=启用锦囊程序=;=REPEAT: MOV A,38h ;使用锦囊时重新计时 MOV R6,A CLR RING ;当倒计时进入最后5秒的时候,启用锦囊能消除蜂鸣;=;=倒计时程序(抢答倒计时和答复倒计时都跳到改程序)= ;=COUNT: MOV R0,*00H ;重置定时器中断次数 MOV TH1,*3CH MO
12、V TL1,*0B0H ;重置定时器RECOUNT:MOV A,R6 ;R6保存了倒计时的时间,之前先将抢答时间或答复时间给R6 MOV B,*0AH DIV AB ;除十分出个位/十位 MOV 30H,A ;十位存于(30H) MOV 31H,B ;个位存于(31H) MOV R5,30H ;取十位 MOV R4,31H ;取个位 MOV A,R6 SUBB A,*07H JNC LARGER ;大于5s跳到LARGER,小于等于5s会提醒 MOV A,R0 CJNE A,*0AH,FULL ;1s中0.5s向下运行 CLR RING AJMP CHECKFULL: CJNE A,*14H,
13、CHECK ;下面是1s的情况,响并显示号数并清R0,重新计 SETB RING MOV A,R6 JZ QUIT ;计时完毕 MOV R0,*00H DEC R6 ;一秒标志减1 AJMP CHECKLARGER: MOV A,R0 CJNE A,*14H,CHECK ;如果1s向下运行,否者跳到查停/显示 DEC R6 ;计时一秒R6自动减1 MOV R0,*00HCHECK: JNB P3.1,QUIT ;如按下停顿键退出 JNB OK,CHECKK ;只在答复倒计时才有效 AJMP NE*TTCHECKK: JNB P3.0,REPEAT ;判断是否使用锦囊NE*TT: ACALL D
14、ISPLAY OK,ACCOUT ;如果是抢答倒计时,如是则查询抢答,否者跳过查询继续倒数(这里起到锁抢答作用) AJMP RECOUNTACCOUT: MOV A,DATA0 JNB ACC.0,TRUE1 JNB ACC.1,TRUE2 JNB ACC.2,TZ7 JNB ACC.3,TZ8 AJMP RECOUNT TZ7: AJMP TRUE3 TZ8: AJMP TRUE4 AJMP RECOUNT QUIT: CLR OK ;如果按下了停顿键执行的程序 CLR RING AJMP START;=;=正常抢答处理程序=;=TRUE1: ACALL BARK MOV A,R2 MOV
15、R6,A ;抢答时间R2送R6 MOV R3,*01H CLR OK ;因为答题的计时不再查询抢答,所以就锁了抢答 AJMP COUNTTRUE2: ACALL BARK MOV A,R2 MOV R6,A MOV R3,*02H CLR OK AJMP COUNTTRUE3: ACALL BARK MOV A,R2 MOV R6,A MOV R3,*03H CLR OK AJMP COUNTTRUE4: ACALL BARK MOV A,R2 MOV R6,A MOV R3,*04H CLR OK AJMP COUNT;=;=犯规抢答程序=;=ERROR: MOV R0,*00H MOV T
16、H1,*3CH MOV TL1,*0B0H MOV 34H,R3 ;犯规号数暂存与(34H)HERE: MOV A,R0 CJNE A,*06H,FLASH ;0.3s向下运行-灭并停响 CLR RING MOV R3,*0AH MOV R4,*0AH MOV R5,*0AH ;三灯全灭 AJMP CHECK1FLASH: CJNE A,*0CH,CHECK1 ;下面是0.6s的情况,响并显示号数并清R0,重新计 SETB RING MOV R0,*00H MOV R3,34H ;取回号数 MOV R5,*0BH MOV R4,*0BH ;显示FF和号数 AJMP CHECK1CHECK1:
17、JNB P3.1,QUIT1 ACALL DISPLAY AJMP HEREQUIT1: CLR RING CLR OK AJMP START;=;=显示程序=;=DISPLAY:MOV DPTR,*DAT1 ;查表显示程序,利用P0口做段选码口输出/P2低三位做位选码输出, MOV A,R3 MOVC A,A+DPTR MOV P2,*0feH MOV P0,A ACALL DELAY MOV DPTR,*DAT2 MOV A,R5 MOVC A,A+DPTR MOV P2,*0fdH MOV P0,A ACALL DELAY MOV A,R4 MOVC A,A+DPTR MOV P2,*0
18、fbH MOV P0,A ACALL DELAY RETDAT1: DB 00h,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,00H,71H; 灭,1,2,3,4,5,6,7,8,9,灭,FDAT2: DB 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,00H,71H;第一个为零,其他与上一样,因为十位如果为零显示熄灭;=;=加减时间延时(起到不会按下就加N个数)=;=DELAY1: MOV 35H,*08HLOOP0: ACALL DISPLAY DJNZ 35H,LOOP0 RET;=;=延时(显示和去抖动用到)= ;=DELA
19、Y: MOV 32H,*12HLOOP: MOV 33H,*0AFHLOOP1: DJNZ 33H,LOOP1 DJNZ 32H,LOOP RET;=;=发声程序=;=BARK: SETB RING ACALL DELAY1 ACALL DELAY1 CLR RING ;按键发声 RET;=;=TO溢出中断(响铃程序)= ;=T0INT: MOV TH0,*0ECH MOV TL0,*0FFH JNB RING,OUT; CPL P3.7 ;RING标志位为1时候P3.7口不断取反使喇叭发出一定频率的声音OUT: RETI;=;=T1溢出中断(计时程序)= ;=T1INT: MOV TH1,*
20、3CH MOV TL1,*0B0H INC R0 RETI=INTT0中断效劳程序=INTT0: MOV DATA0,P1 CLR E*0 RETI END四实践过程41具体过程:1、在Protues ISIS软件上模拟电路及程序;2、在面包板上连接电路,如图4.1为面包板上的模拟电路;3、在万能板上焊接电路,完成作品;4、通过Proteus简化电路图,完成PCB制板的模拟。4.1 面包板模拟电路4.2碰到的问题及解决方案1、模拟程序的选择与安装程序模拟是焊板子与制板的第一步,本来打算安装protel 2004,但是在程序安装时候遇到了很大的问题,无论如何也安不上,破解很难,即便是按照要求都做
21、了,仍然行不通,而且通过上网了解得知protel很难上手,相比来说,proteus要比拟容易上手一些。2、proteus程序学习,包括ISIS里面原件的寻找,电路连接,在蜂鸣器的连接这里出了问题,只单纯的认为只要蜂鸣器的正极接单片机,负极接地就可以工作了,程序模拟时就出现问题了,蜂鸣器不工作,为此还到处找问题,是不是程序写错了,还是电路连接不对,后来通过查找资料,和他人的系统比照,发现是少了三极管的电路放大,至今为止仍然不明白为什么。3、元件的选取,我们去中发一共去了三次,第一次是三个人一起去的,买东西的时候很快发现问题,买芯片是需要型号的,做电路模拟的时候就知道需要四进一出的与门和单非门,型
22、号是什么还是现场查的,可不可靠很难说。电源的选取,开场我们就在想,+5v的电池要怎么买,店家也表示没有,告诉我们两节干电池就能带起来,害我们焊接好了电路板没有相应还以为是接错了,或者是烧了呢,后来再次买的时候,还是没有买到教师说的碱电池,想到电池用一段时间电压都会下降,但是仍然能够工作,只是下降到一定程度不能工作,我们抱着试一试的心态,买了3节干电池,发现是对的。4、电路焊接,第一次焊电路板,心情很冲动,但是现实很糟糕,走错线的不再少数,万能板是一个镜像,管脚盯着盯着就乱了,最后焊完的电路板检查了又检查还是烧了。还有一个环节就是数码管的管脚问题,店家告诉我们数码管有12个管脚,都有编号,写着1
23、、12,上网搜搜就知道怎么连接,下列图4.2是我们上网搜的,和我们的管脚有点不一样,网上其他的说明也是一样的,只是没有标112,我们买的四位共阴极的数码管正对着我们,小数点那边也就是下边的左边标号1管脚,上边的左边标号12管脚,那就按着管脚连呗,结果,可想而知,再一次连,我们就想明白了,网上除了这一篇百度文库标注了管脚,其他的并没有告诉管脚,只是说,正对着自己小数点朝下,然后就是如图,按着管脚连是错的,也可能本身这篇文章就有问题。4.2 数码管管脚图5、PCB板的制作,我们很想进展PCB板的制作,为此查找了很多资料,学习了很多,但是实在是不会一些元件的封装制作,无奈网上对于proteus ARES的资料很少,身边也没有人会的,因此,就放弃的PCB板的制作。如下列图4.3所示是我们PCB板的雏形。4.3 PCB板五总结与体会在这次实践过程中,我们小组收获了很多。从题目确实定到最后作品的制作,1、集体的力量是伟大的,大多方法多,方法总比困难多。2、想出来和做出来是两个概念。做出成品来我们很有成就感,是对我们辛勤劳动的肯定。3、提高了我们亲自的动手、动脑能力,增加了我们的实践经历。4、建议教师多多开展此类活动。. z.