基于单片机的8路抢答器的设计
- 格式:doc
- 大小:182.00 KB
- 文档页数:15
数字抢答器的概述对于抢答器我们大家来说都不陌生,它是用于很多竞赛场合,真正实现先抢先答,让最先抢到题的选手来回答问题。
抢答器不仅考验选手的反应速度同时也要求选手具备足够的知识面和一定的勇气。
选手们都站在同一个起跑线上,体现了公平公正的原则。
1.2 设计任务与要求基本要求:1.给主持人设置一个开关,用来控制系统的清零(编号显示数码管灭灯)和抢答器的开始。
2.抢答器具有数据锁存和显示的功能。
抢答开始后,若有选手按动抢答器按钮,编号立即锁存,并在LED数码上显示选手的编号,同时扬声器给出音响提示。
此外,要封锁输入电路,禁止其他选手抢答。
发挥部分:1.抢答器具有定时抢答的功能,且一次抢答的时间可以由主持人设定(如30秒)。
当节目主持人启动“开始”键后,要求定时器立即减计时,并用显示器显示,同时扬声器发出短暂的声响,声响持续时间0.5秒左右。
2.参加选手在设定的时间内抢答,抢答有效,定时器停止工作,显示器上显示选手的编号和抢答时刻的时间,并保持到主持人将系统清零为止。
3.如果定时抢答的时间已到,却没有选手抢答时,本次抢答无效,系统短暂报警,并封锁输入电路,禁止选手超时后抢答,时间显示器上显示00。
4.选手如果在主持人按开始键之前违规抢答,系统报警,LED显示违规选手号码和FF,直到主持人按下停止键。
程序系统结构图硬件电路确定后,软件的编程要与硬件相匹配,软硬件才能结合完成所要实现的功能。
由功能分析得到以下的软件结构图:软件系统结构图原理框图设计方案3.1总体设计根据抢答器的基本功能,可以设计出如下的单片机外围电路:图3-1 总体设计如图3-1,P3.0为开始抢答,P3.2为停止,P1.0-P1.7为八路抢答输入,数码管段选P0口,位选P2口低3位,蜂鸣器输出为P3.6口。
P3.2为时间加1调整,P3.3为时间减1调整。
3.2 外部振荡电路图3-2 外部振荡电路3.3 复位电路的设计单片机的第9脚RST为硬件复位端,只要将该端持续4个机器周期的高电平即可实现复位,复位后单片机的各状态都恢复到初始化状态,其电路图如图4所示:图3-3 复位电路3.4 显示电路的设计显示电路使用了七段数码管7SEG-MPX4-CC,它是共阴极的,由高电平点亮。
图3-4 阴极七段数码管3.5 按钮输入电路的设计抢答器的输入按钮使用常开开关,图3-5 抢答按键3.6 发声这里能利用程序来控制单片机P3.6口线反复输出高电平或低电平,即在该口线上产生一定频率的矩形波,接上扬声器就能发出一定频率的声音,再利用延时程序控制“高”“低”电平的持续时间,就能改变输出频率,从而改变音调,使扬声器发出不同的声音。
设计效果运行图抢答前主持人按下开始按钮 30S计时选手 1 按下抢答按钮 60S计时选手 4 抢答犯规调整抢答时间调整回答时间实验总结在一开始的时候,很担心自己不能完成实验,这个实验在书上没有现成的,图书馆的书又都被借走了,在设计电路的时候,考虑的不是很全面。
尤其是最开始安装设计软件Proteus 7 Professional,安装了很多次,但是都感觉不行,从7.4安装到7.5,后来还是在同学的帮助下完成。
然后参考老师给我们的参考资料,借鉴网上的一些设计,去粗取精,博采众长,终于完成了这次的设计。
在此要感谢我的指导老师,感谢老师给我这样的机会锻炼,而且他在网上一直在线,为同学解答疑难问题。
在整个设计过程中我懂得了许多东西,大大提高了动手的能力,使我充分体会到了在创造过程中的探索的艰难和成功的喜悦。
专周干了很多事情,老师说得对“我们多做点,多学点,不好吗,等你工作了再来学,你就要吃苦了."附录:程序代码:ORG 0000HAJMP MAINORG 0003HAJMP INT0SUBORG 000BHAJMP T0INTORG 001BHAJMP T1INTOK EQU 20H ; 抢答开始标志位RING EQU 22H ; 响铃标志位 ORG 0040HMAIN: MOV R1,#0FH; 初设抢答时间为15sMOV R2,#0AH; 初设答题时间为10sMOV TMOD,#11H; 设置未定时器/模式1MOV TH0,#0F0HMOV TL0,#0FFH; 越高发声频率越高,越尖MOV TH1,#3CHMOV TL1,#0B0H; 50ms为一次溢出中断SETB EASETB ET0SETB ET1SETB EX0SETB EX1; 允许四个中断,T0/T1/INT0/INT1CLR OKCLR RINGSETB TR1SETB TR0; 一开始就运行定时器,以开始显示FFF.如果想重新计数,重置TH1/TL1就可以了START: MOV R5,#0BHMOV R4,#0BHACALL DISPLAY; 未开始抢答时候显示FFFJB P3.0,NEXTACALL DELAYJB P3.0,NEXT;去抖动,如果"开始键"按下就向下执行,否者跳到非法抢答查询 ACALL BARK;按键发声MOV A,R1MOV R6,A; 送R1->R6,因为R1中保存了抢答时间SETB OK; 抢答标志位,用于COUNT只程序中判断是否查询抢答MOV R3,#0AH; 抢答只显示计时,灭号数AJMP COUNT;进入倒计时程序,"查询有效抢答的程序"在COUNT里面NEXT: JNB P1.0,FALSE1JNB P1.1,FALSE2 JNB P1.2,FALSE3JNB P1.3,FALSE4JNB P1.4,FALSE5JNB P1.5,FALSE6JNB P1.6,FALSE7JNB P1.7,FALSE8 AJMP STARTFALSE1: ACALL BARK; 按键发声MOV R3,#01HAJMP ERRORFALSE2: ACALL BARKMOV R3,#02HAJMP ERRORFALSE3: ACALL BARKMOV R3,#03HAJMP ERRORFALSE4: ACALL BARKMOV R3,#04HAJMP ERRORFALSE5: ACALL BARKAJMP ERRORFALSE6: ACALL BARKMOV R3,#06HAJMP ERRORFALSE7: ACALL BARKMOV R3,#07HAJMP ERRORFALSE8: ACALL BARKMOV R3,#08HAJMP ERRORCOUNT: MOV R0,#00H; 重置定时器中断次数MOV TH1,#3CHMOV TL1,#0B0HRECOUNT: MOV A,R6; R6保存了倒计时的时间 MOV B,#0AHDIV AB; 除十分出个位/十位MOV 30H,A; 十位存于(30H)MOV 31H,B; 个位存于(31H)MOV R5,30H ; 取十位MOV R4,31H ; 取个位MOV A,R6CLR CSUBB A,#07HJNC LARGER ;大于5s跳到LARGER,小于等于5s会提醒MOV A,R0CJNE A,#0AH,FULL;1s中0.5s向下运行CLR RINGAJMP CHECKFULL: CJNE A,#14H,CHECK ; 1s时,响并显示号数并清R0,重新计时 SETB RINGMOV A,R6JZ QUIT ; 计时完毕MOV R0,#00HDEC R6 ; 一秒标志减1AJMP CHECKLARGER: MOV A,R0CJNE A,#14H,CHECK ; 如果1s向下运行,否者跳到查"停/显示"DEC R6; 计时一秒R6自动减1MOV R0,#00HCHECK: JNB P3.1,QUIT; 如按下停止键退出ACALL DISPLAYJNB P1.0,TRUE1JNB P1.1,TRUE2 JNB P1.2,TRUE3JNB P1.3,TRUE4JNB P1.4,TRUE5JNB P1.5,TRUE6JNB P1.6,TRUE7JNB P1.7,TRUE8AJMP RECOUNTQUIT: CLR OK ; 如果按下了"停止键"重新回到开始CLR RINGACALL BARKAJMP STARTTRUE1: ACALL BARK; 按键发声MOV A,R2MOV R6,A; 抢答时间R2送R6MOV R3,#01HCLR OK;AJMP LOOP2TRUE2:ACALL BARK;MOV A,R2MOV R6,AMOV R3,#02HCLR OKTRUE3:ACALL BARK; MOV A,R2MOV R6,AMOV R3,#03H CLR OKAJMP LOOP2 TRUE4:ACALL BARK; MOV A,R2MOV R6,AMOV R3,#04H CLR OKAJMP LOOP2 TRUE5: ACALL BARK; MOV A,R2MOV R6,AMOV R3,#05H CLR OKAJMP LOOP2 TRUE6: ACALL BARK; MOV A,R2MOV R6,AMOV R3,#06H CLR OKAJMP LOOP2 TRUE7: ACALL BARK; MOV A,R2MOV R6,AMOV R3,#07H CLR OKAJMP LOOP2 TRUE8: ACALL BARK; MOV A,R2MOV R6,ACLR OKLOOP2: AJMP DISPLAY ;抢答后停止计时,等待返回SETB RING JNB P3.1 ,QUITAJMP LOOP2ERROR: SETB RING ;犯规响铃MOV R5,#0BHMOV R4,#0BH; 显示FF和犯规号数LOOP3: ACALL DISPLAYJNB P3.1 , QUIT1; 等待“停止”键按下AJMP LOOP3QUIT1: CLR RINGCLR OKAJMP STARTDISPLAY:MOV DPTR,#DAT1; 查表显示程序,利用P0口做段选码口输出/P2低三位做位选码输出 MOV A,R5MOVC A,@A+DPTRMOV P2,#01HMOV P0,AACALL DELAYMOV DPTR,#DAT2MOV A,R4MOVC A,@A+DPTRMOV P2,#02HMOV P0,AACALL DELAYMOV A,R3MOVC A,@A+DPTR MOV P2,#04HMOV P0,AACALL DELAYRET DAT1:DB 00H,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,00H,71H ;"灭","1","2","3","4","5","6","7","8","9","灭","F"DAT2:DB 3FH, 06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,00H,71HDELAY1: MOV 35H,#08HLOOP0: ACALL DISPLAYDJNZ 35H,LOOP0RETDELAY: MOV 32H,#12HLOOP: MOV 33H,#0AFHLOOP1: DJNZ 33H,LOOP1DJNZ 32H,LOOPRETBARK: SETB RINGACALL DELAY1ACALL DELAY1CLR RING; 按键发声RETINT0SUB:MOV A,R1MOV B,#0AHDIV ABMOV R5,AMOV R4,BMOV R3,#0AHACALL DISPLAYJNB P3.2,INC0; P3.2为+1s键,如按下跳到INCOJNB P3.3,DEC0; P3.3为-1s键,如按下跳到DECOJNB P3.4,BACK0; P3.4为确定键,如按下跳到BACKOAJMP INT0SUBINC0: MOV A,R1CJNE A,#63H,ADD0; 如果不是99,R2加1,如果加到99了,R1就置0,重新加起MOV R1,#00HACALL DELAY1AJMP INT0SUBADD0: INC R1ACALL DELAY1AJMP INT0SUBDEC0: MOV A,R1JZ SETR1;如果R1为0, R1就置99,DEC R1ACALL DELAY1AJMP INT0SUBSETR1: MOV R1,#63HACALL DELAY1AJMP INT0SUBBACK0: RETIT0INT:MOV TH0,#0ECHMOV TL0,#0FFHJNB RING,OUTCPL P3.6 ; RING标志位为1时候P3.6口不短取反使喇叭发出一定频率的声音OUT: RETIT1INT: MOV TH1,#3CHMOV TL1,#0B0HINC R0RETIEND。