版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 八路抢答器计课程设计设计题目: 八路抢答器 学院系别: 机械与电子工程学院 班 级: 机电自动化zb42902 目录一 设计任务及要求.4二 方案设计.4三 硬件电路设计.5四 软件设计.8五 总结.18 摘 要抢答器作为一种工具,已广泛应用于各种智力和知识竞赛场合。但抢答器的使用频率较低,且有的要么制作复杂,要么可靠性低。作为一个单位,如果专门购一台抢答器虽然在经济上可以承受,但每年使用的次数极少,往往因长期存放使(电子器件的)抢答器损坏,再购置的麻烦和及时性就会影响活动的开展,因此设计了本抢答器。本设计是以八路抢答为基本理念。考虑到依需设定限时回答的功能,利用at89c51单片机及外围接
2、口实现的抢答系统,利用单片机的定时器/计数器定时和记数的原理,将软、硬件有机地结合起来,使得系统能够正确地进行计时,同时使数码管能够正确地显示时间。用开关做键盘输出,扬声器发生提示。同时系统能够实现:在抢答中,只有开始后抢答才有效,如果在开始抢答前抢答为无效;抢答限定时间和回答问题的时间可在1-99s设定;可以显示是哪位选手有效抢答和无效抢答,正确按键后有音乐提示;抢答时间和回答问题时间倒记时显示,满时后系统计时自动复位及主控强制复位;按键锁定,在有效状态下,按键无效非法。一、设计任务与要求一、题目:8路比赛抢答器二、基本要求: 利用8051单片机中断系统,制作一个有8个按键的比赛抢答器。在有
3、人按键时进行对应选手显示。三、设计任务:1设计硬件电路,画出电路原理图;2画出程序流程图;3编制程序,写出源程序代码;4写出5000字的详细说明书,要求字迹工整,原理叙述正确,会计算主要元器件的一些参数,并选择元器件;5个人总结。四、参考资料:1. 教材;2单片机实验指导书 二、方案设计 方案:该系统采用51系列单片机at89c51作为控制核心,该系统可以完成运算控制、信号识别以及显示功能的实现。由于用了单片机,使其技术比较成熟,应用起来方便、简单并且单片机周围的辅助电路也比较少,便于控制和实现。整个系统具有极其灵活的可编程性,能方便地对系统进行功能的扩张和更改。mcs-51单片机特点如下:
4、可靠性好:单片机按照工业控制要求设计,抵抗工业噪声干扰优于一般的cpu,程序指令和数据都可以写在rom里,许多信号通道都在同一芯片,因此可靠性高,易扩充。单片机有一般电脑所必须的器件,如三态双向总线,串并行的输入及输出引脚,可扩充为各种规模的微电脑系统。 控制功能强:单片机指令除了输入输出指令,逻辑判断指令外还有更丰富的条件分支跳跃指令。其原理框图如下:抢答按扭优先编码电路锁存器译码电路译码显示主持人按钮开关控制电路报警电路秒脉冲产生电路定时电路译码电路显示电路三、硬件电路设计1、 抢答器的电路框图 如图1所示为电路框图。其工作原理为:接通电源后,主持人将开关拨到“清除”状态,抢答器处于禁止状
5、态,编号显示器灭灯,定时器显示设定时间;主持人将开关置,“开始”状态,宣布“开始”抢答器工作。定时器倒计时,扬声器给出声响提示。选手在定时时间内抢答时,抢答器完成:优先判断、编号锁存、编号显示、扬声器提示。当一轮抢答之后,定时器停止、禁止二次抢答、定时器显示剩余时间。如果再次抢答必须由主持人再次操作开始、停止状态开关。抢答按扭优先编码电路锁存器译码电路译码显示主持人控制开关控制电路报警电路秒脉冲产生电路定时电路译码电路显示电路 图1抢答器框图 如图1所示为电路框图。其工作原理为:接通电源后,主持人将开关拨到“清除”状态,抢答器处于禁止状态,编号显示器灭灯,定时器显示设定时间;主持人将开关置,“
6、开始”状态,宣布“开始”抢答器工作。定时器倒计时,扬声器给出声响提示。选手在定时时间内抢答时,抢答器完成:优先判断、编号锁存、编号显示、扬声器提示。当一轮抢答之后,定时器停止、禁止二次抢答、定时器显示剩余时间。如果再次抢答必须由主持人再次操作“开始、停止”状态开关。 图2抢答电路的接口电路2、单元电路设计(1)抢答器电路参考电路如图2所示。该电路完成两个功能:一是分辨出选手按键的先后,并锁存优先抢答者的编号,同时译码显示电路显示编号;二是禁止其他选手按键操作无效。如有再次抢答需由主持人将s开关重新置,“清除”然后再进行下一次抢答。 (2)时序控制电路设计时序控制电路是抢答器设计的关键,它要完成
7、以下功能:a.主持人将控制开关拨到开始位置时,扬声器发声,抢答电路和定时电路进人正常抢答工作状态。 b.当参赛选手按动抢答键时,扬声器发声,抢答电路和定时电路停止工作。(3)复位电路的设计外部中断和内部中断并存,单片机硬件复位端,只要持续4个机器周期的高电平即可实现复位,硬件复位后的各状态可知寄存器以及存储器的值都恢复到了初始值,因为本设计中功能中有倒计时时间的记忆功能,所以不能对单片机进行硬件复位,只能用软件复位,软件复位实际上就是当程序执行完之后,将程序通过一条跳转指令让它完成复位。复位电路如图3所示: 图3复位电路图 图4时钟震荡电路3、时钟震荡电路 时钟震荡电路单片机必须在at89c5
8、1的驱动下才能工作,在单片机内部有一个时钟震荡电路,只需要外接一个振荡器就能产生一定的时钟信号送到单片机内部的各个单元,时钟震荡电路如图4所示。 4、报警电路设计报警电路用于报警,当遇到报警信号时,发出警报。一般喇叭是一种电感性图5报警电路图。8951驱动喇叭的信号为各种频率的脉冲。因此,最简单的喇叭驱动方式就是利用达林顿晶体管,或者以两个常用的小晶体管连接成达林顿架势。在右图中电阻r为限流电阻,在此利用晶体管的高电流增益,以达到电路快速饱和的目的。不过,如果要由p0输出到此电路,还需要连接一个10k的上拉电阻。选手在设定的时间内抢答时,实现:优先判断、编号锁存、编号显示、扬声器提示。当一轮抢
9、答之后,定时器停止、禁止二次抢答、定时器显示剩余时间。如果再次抢答必须由主持人再次作清除和开始状态开关。 图5报警电路图 四、软件设计1、系统主程序设计为了能够达到抢答的公平、公正、合理,应该在主持人发布抢答命令之前必须先设定抢答的时间,因而在编开始抢答前的程序得先编写设定时间的程序,当时间设好了之后,主持人发布抢答命令按下p1.7按键,程序开始打开定时中断开始倒计时,然后调用键盘扫描子程序,编写键盘扫描程序。当在扫描到有人按下了答题键,马上关闭t0、调用显示程序、封锁键盘。主程序设置抢答时间和回答问题时间定时器及并行口初始化将时间计数器及启动标志值1开中断采并行口数据为0吗?启动标志=1吗?
10、判断抢答组号将抢答组发光二极管点亮判断哪一组为抢答组将抢答组号送显示抢答时间到了吗?输出响铃信号提示超时继续抢答比赛吗?系统返回nyyynyn 主程序流程图2、 主程序清单ok equ 20h;抢答开始标志位ring equ 22h;响铃标志位org 0000hajmp mainorg 0003hajmp int0suborg 000bhajmp t0intorg 0013hajmp int1suborg 001bhajmp t1intorg 0040hmain: mov r1,#30;初设抢答时间为30smov r2,#60;初设答题时间为60smov tmod,#11h;设置未定时器/模式
11、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,#0bhmov r3,#0bhacall display;未开始抢答时候显示fffjb p3.0,next;ddddd
12、ddacall delayjb p3.0,next;去抖动,如果开始键按下就向下执行,否者跳到非法抢答查询acall bark;按键发声mov a,r1mov r6,a;送r1-r6,因为r1中保存了抢答时间setb ok;抢答标志位,用于count只程序中判断是否查询抢答mov r7,#01h ;读抢答键数据信号标志,这里表示只读一次有用信号mov r3,#0ah;抢答只显示计时,灭号数ajmp count;进入倒计时程序,查询有效抢答的程序在count里面next: jnb p1.0,false1jnb p1.1,false2jnb p1.2,false3jnb p1.3,false4jn
13、b p1.4,false5jnb p1.5,false6jnb p1.6,false7jnb p1.7,false8ajmp start;=非法抢答处理程序=false1: mov r3,#01hajmp errorfalse2: mov r3,#02hajmp errorfalse3: mov r3,#03hajmp errorfalse4: mov r3,#04hajmp errorfalse5: mov r3,#05hajmp errorfalse6: mov r3,#06hajmp errorfalse7: mov r3,#07hajmp errorfalse8: mov r3,#08
14、hajmp error;=int0(抢答时间r1调整程序)=int0sub:mov a,r1mov b,#0ahdiv abmov r5,amov r4,bmov r3,#0ahacall display;先在两个时间led上显示r1jnb p3.4,inc0;p3.4为+1s键,如按下跳到incojnb p3.5,dec0;p3.5为-1s键,如按下跳到decojnb p3.1,back0;p3.1为确定键,如按下跳到backoajmp int0subinc0: mov a,r1cjne a,#63h,add0;如果不是99,r2加1,如果加到99,r1就置0,重新加起。mov r1,#00
15、hacall delay1ajmp int0subadd0: inc r1acall delay1ajmp int0subdec0: mov a,r1jz setr1;如果r1为0, r1就置99,dec r1acall delay1ajmp int0subsetr1: mov r1,#63hacall delay1ajmp int0subback0: reti;=int1(回答时间r2调整程序)=int1sub:mov a,r2mov b,#0ahdiv abmov r5,amov r4,bmov r3,#0ahacall displayjnb p3.4,inc1jnb p3.5,dec1j
16、nb p3.1,back1ajmp int1subinc1: mov a,r2cjne a,#63h,add1mov r2,#00hacall delay1ajmp int1subadd1: inc r2acall delay1ajmp int1subdec1: mov a,r2jz setr2dec r2acall delay1ajmp int1subsetr2: mov r2,#63hacall delay1ajmp int1subback1: reti;=倒计时程序(抢答倒计时和回答倒计时都跳到改程序)=repeat:mov a,r2 ;使用锦囊时重新计时mov r6,aclr ring
17、count: mov r0,#00h;重置定时器中断次数mov th1,#3chmov tl1,#0b0h;重置定时器recount:mov a,r6;r6保存了倒计时的时间,之前先将抢答时间或回答时间给r6mov b,#0ahdiv ab;除十分出个位/十位mov 30h,a;十位存于(30h)mov 31h,b;个位存于(31h)mov r5,30h;取十位mov r4,31h;取个位mov a,r6subb a,#07hjnc larger;大于5s跳到larger,小于等于5s会提醒mov a,r0cjne a,#0ah,full;1s中0.5s向下运行clr ringajmp che
18、ckfull: 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;如按下停止键退出jnb ok,checkk ;只在回答倒计时才有效ajmp nexttcheckk:jnb p3.0,repeat ;判断是否使用锦囊nextt: acall
19、 displayjb ok,accout;如果是抢答倒计时,如是则查询抢答,否者跳过查询继续倒数(这里起到锁抢答作用)ajmp recountaccout:mov a,36hjnb acc.0,true1jnb acc.1,true2jnb acc.2,true3jnb acc.3,true4jnb acc.4,true5jnb acc.5,true6jnb acc.6,tz1jnb acc.7,tz2ajmp recounttz1:jmp true7tz2:jmp true8quit: clr ok;如果按下了停止键执行的程序clr ringajmp start;=正常抢答处理程序=true
20、1: acall barkmov a,r2mov r6,a;抢答时间r2送r6mov r3,#01hclr ok;因为答题的计时不再查询抢答,所以就锁了抢答ajmp counttrue2:acall barkmov a,r2mov r6,amov r3,#02hclr okajmp counttrue3:acall barkmov a,r2mov r6,amov r3,#03hclr okajmp counttrue4:acall barkmov a,r2mov r6,amov r3,#04hclr okajmp counttrue5:acall barkmov a,r2mov r6,amov
21、 r3,#05hclr okajmp counttrue6: acall barkmov a,r2mov r6,amov r3,#06hclr okajmp counttrue7:acall barkmov a,r2mov r6,amov r3,#07hclr okajmp counttrue8:acall barkmov a,r2mov r6,amov r3,#08hclr okajmp count;=犯规抢答程序=error: mov r0,#00hmov th1,#3chmov tl1,#0b0hmov 34h,r3;犯规号数暂存与(34h)here: mov a,r0cjne a,#0
22、6h,flash;0.3s向下运行-灭并停响clr ringmov r3,#0ahmov r4,#0ahmov r5,#0ah;三灯全灭ajmp check1flash: cjne a,#0ch,check1;下面是0.8s的情况,响并显示号数并清r0,重新计setb ringmov r0,#00hmov r3,34h;取回号数mov r5,#0bhmov r4,#0bh;显示ff和号数ajmp check1check1: jnb p3.1,quit1acall displayajmp herequit1: clr ringclr okajmp start;=显示程序=display:mov
23、dptr,#dat1;查表显示程序,利用p0口做段选码口输出/p2低三位做位选码输出,mov a,r3movc a,a+dptrmov p2,#0fehmov p0,aacall delay2mov dptr,#dat2mov a,r5movc a,a+dptrmov p2,#0fdhmov p0,aacall delay2mov a,r4movc a,a+dptrmov p2,#0fbhmov p0,aacall delay2retdat1:db 00h,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,00h,71h;灭,1,2,3,4,5,6,7,8,9,灭,fda
24、t2:db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,00h,71h;第一个为零,其他与上相同,因为十位如果为零显示熄灭;=加减时间延时(起到不会按下就加n个数)=delay1: mov 35h,#08hloop0: acall displaydjnz 35h,loop0ret;=延时4236个机器周期(去抖动用到)=delay: mov 32h,#12hloop: mov 33h,#0afhloop1: djnz 33h,loop1djnz 32h,loopret;=延时4236个机器周期(显示用到)=delay2: mov 32h,#43hloop3: mov 33h,#1ehmov a,r7 ;每隔6070个机器周期读一次p1口,全为1时为无效数据,继续读,有一个不为1时,转到正常抢答处理jnz aaaa1 ;没读到有效数据时继续转到aaaa1loop2: djnz 33h,loop2djnz 32h,loop3ret;=读抢答按键数据口
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论