八路抢答器的设计课程毕业设计1.doc_第1页
八路抢答器的设计课程毕业设计1.doc_第2页
八路抢答器的设计课程毕业设计1.doc_第3页
八路抢答器的设计课程毕业设计1.doc_第4页
八路抢答器的设计课程毕业设计1.doc_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

物理与电子工程学院单片机原理与接口技术课程设计报告书 设计题目: 八路抢答器的设计 专 业: 自动化 班 级: 二班 学生姓名: 马光 学 号: 20103412108 指导教师: 尹世忠 2013年12月16日物理与电子工程学院 课程设计任务书专业: 自动化 班级: 2班 学生姓名马光学号2010341218课程名称单片机原理与接口技术设计题目八路抢答器的设计设计目的、主要内容(参数、方法)及要求设计目的:巩固单片机原理与接口技术课程中所学的知识,提高学生的动手能力和创新能力,培养学生查阅资料和阅读文献的能力,培养学生初步的科研能力,为毕业设计奠定基础。主要内容:本课程设计主要是利用单片机原理与接口技术课程中所学的知识,完成一个知识竞赛中用到的8路抢答器的设计。设计内容包括硬件电路原理图、显示程序设计、硬件和软件的综合调试。设计要求:1、以80c51系列单片机为核心器件,组成一个8路抢答器,能够供8个参赛队进行抢答。2、在现有的单片机实验系统上完成硬件电路接线。3、完成该课题的程序设计、提交程序设计框图及程序设计清单。4、完成硬件与软件的综合调试,实现预定功能。5、通过老师审核,提交课程设计报告。工作量2周时间,每天3学时,共计42学时进度安排第1-3天:根据任务书的要求查阅相关资料。阅读相关文献。搞清楚本课题的设计内容,对本课题的设计有个初步的设想。第4-5天:完成本课题设计的基本设计方案,通过指导老师的审核。第6-7天:完成课题的硬件电路的设计,完成程序设计。第8-9天:进行调试。第10-11天:撰写课题设计报告书,并根据指导教师的意见进行修改。第12天:完成课程设计报告书。第13天:提交报告书。第14天:指导教师批阅课程设计报告书。主要参考资料1、韩志军,沈晋源,王振波.单片机应用系统设计m机械工业出版社,2005年2、李全利.单片机原理与接口技术m高等教育出版社,2009年第二版3、马淑兰.单片机技术及应用实例分析m西安电子科技大学出版社,2009年4、自己查阅一些抢答器的设计实例以作参考。指导教师签字教研室主任签字摘 要抢答器作为一种工具,已广泛应用于各种智力和知识竞赛场合。但抢答器的使用频率较低,且有的要么制作复杂,要么可靠性低。作为一个单位,如果专门购一台抢答器虽然在经济上可以承受,但每年使用的次数极少,往往因长期存放使(电子器件的)抢答器损坏,再购置的麻烦和及时性就会影响活动的开展,因此设计了本抢答器。本设计是以八路抢答为基本理念。考虑到依需设定限时回答的功能,利用at89c51单片机及外围接口实现的抢答系统,利用单片机的定时器/计数器定时和记数的原理,将软、硬件有机地结合起来,使得系统能够正确地进行计时,同时使数码管能够正确地显示时间。用开关做键盘输出,扬声器发生提示。同时系统能够实现:在抢答中,只有开始后抢答才有效,如果在开始抢答前抢答为无效;抢答限定时间和回答问题的时间可在1-99s设定;可以显示是哪位选手有效抢答和无效抢答,正确按键后有音乐提示;抢答时间和回答问题时间倒记时显示,满时后系统计时自动复位及主控强制复位;按键锁定,在有效状态下,按键无效非法。关键字:抢答器;竞赛;单片机目 录1 设计任务与要求51.1设计目的51.2设计要求52 总体设计思路53 硬件电路设计53.1原理图的确定53.2抢答器接口电路63.3时序控制电路设计63.4复位电路的设计63.5晶振电路的设计73.6报警电路设计83.7 选手抢答键(矩阵式键盘)83.8显示与显示驱动电路94 软件设计104.1系统主程序设计104.2 程序清单115 仿真调试196 总结20参 考 文 献20 1 设计任务与要求1.1设计目的巩固单片机原理与接口技术课程中所学的知识,提高学生的动手能力和创新能力,培养学生查阅资料和阅读文献的能力,培养学生初步的科研能力,为毕业设计奠定基础。主要内容:本课程设计主要是利用单片机原理与接口技术课程中所学的知识,完成一个知识竞赛中用到的8路抢答器的设计。设计内容包括硬件电路原理图、显示程序设计、硬件和软件的综合调试。1.2设计要求(1)以80c51系列单片机为核心器件,组成一个8路抢答器,能够供8个参赛队进行抢答。(2)在现有的单片机实验系统上完成硬件电路接线。(3)完成该课题的程序设计、提交程序设计框图及程序设计清单。(4)完成硬件与软件的综合调试,实现预定功能。(5)通过老师审核,提交课程设计报告。2 总体设计思路接通电源后,主持人将开关拨到“清除”状态,抢答器处于禁止状态,编号显示器灭灯,定时器显示设定时间;主持人将开关置,“开始”状态,宣布“开始”抢答器工作。定时器倒计时,扬声器给出声响提示。选手在定时时间内抢答时,抢答器完成:优先判断、编号锁存、编号显示、扬声器提示。当一轮抢答之后,定时器停止、禁止二次抢答、定时器显示剩余时间。如果再次抢答必须由主持人再次操作“开始、停止”状态开关。3 硬件电路设计3.1原理图的确定单片机实现抢答的原理图同抢答电路的接口电路如图3-1-1图3-1-1单片机实现抢答的原理图 3.2抢答器接口电路参考电路如图3-1-1所示。该电路完成两个功能:一是分辨出 选手按键的先后,并锁存优先抢答者的编号,同时译码显示电路显示编号;二是禁止其他选手按键操作无效。如有再次抢答需由主持人将s开关重新置,“清除” 然后再进行下一次抢答。 3.3时序控制电路设计时序控制电路是抢答器设计的关键,它要完成以下功能:a.主持人将控制开关拨到开始位置时,扬声器发声,抢答电路和定时电路进人正常抢答工作状态。 b.当参赛选手按动抢答键时,扬声器发声,抢答电路和定时电路停止工作3.4复位电路的设计外部中断和内部中断并存,单片机硬件复位端,只要持续4个机器周期的高电平即可实现复位,硬件复位后的各状态可知寄存器以及存储器的值都恢复到了初始值,因为本设计中功能中有倒计时时间的记忆功能,所以不能对单片机进行硬件复位,只能用软件复位,软件复位实际上就是当程序执行完之后,将程序通过一条跳转指令让它完成复位。复位电路如图3-4-1,3-4-2所示: 复位电路原理图图3-4-2复位电路 图3-4-1复位电路该复位电路采用上电自动复位和手动复位两种复位方式,图中网络标号所指9连接到单片机的复位引脚。要实现复位只需在,51系列单片机的reset引脚上加上5ms的高电平就可以了。上电复位是利用电容的充电来实现的,即上电瞬间reset端的电位与vcc相同,随着电容上储能增加,电容电压也逐渐增大,充电电流减小,reset端的电位。这样就会建立一个脉冲电压,调节电容与电阻的大小可对脉冲的持续时间进行调节。通常若采用12mhz的晶振时,复位元件参数为22f的电解电容和10k的电阻。按钮复位电路是通过按下复位按钮时,电源对reset端维持两个机器周期的高电平实现复位的。3.5晶振电路的设计msc-51单片机的定时控制功能是用时钟电路和振荡器完成的,而根据硬件电路的不同,连接方式分为内部时钟方式和外部时钟方式。本设计中采用内部时钟方式。如图3-5-1所示图3-5-1晶振电路原理图3.6报警电路设计报警电路用于报警,当遇到报警信号时,发出警报。一般喇叭是一种电感性图5报警电路图。8951驱动喇叭的信号为各种频率的脉冲。因此,最简单的喇叭驱动方式就是利用达林顿晶体管,或者以两个常用的小晶体管连接成达林顿架势。如图3-6-1中电阻r为限流电阻,在此利用晶体管的高电流增益,以达到电路快速饱和的目的。不过,如果要由p0输出到此电路,还需要连接一个10k的上拉电阻。 选手在设定的时间内抢答时,实现:优先判断、编号锁存、编号显示、扬声器提示。当一轮抢答之后,定时器停止、禁止二次抢答、定时器显示剩余时间。如果再次抢答必须由主持人再次作清除和开始状态开关。 图3-6-1报警电路图3.7 选手抢答键(矩阵式键盘)at89c51的p1口做一个为选手抢答的输入按键引脚,如图3-7-1,p1.0至p1.7轮流输出低电位,给每一个选手编号1至8,当选手按下按钮时,p1口个端口的电平变化从p1口输入,经单片机处理后从p0输出由数码管显示抢答者编号。图3-7-1选手抢答键电路3.8显示与显示驱动电路此电路包括显示和驱动,显示采用数码管,如图3-8-1驱动用p2口, 违规者编号、抢答30秒倒计时、正常抢答者编号和回答问题时间60秒倒计时,数码管采用动态显示。驱动电路p2口,查询显示程序利用p0口做段选码口输出p2低3位做位选码输出,当为低电平则能驱动数码管使其显示数字。在+5v电压下接10k的电阻,保证正常压降。 图3-8-1显示与显示驱动电路4 软件设计4.1系统主程序设计主程序设置抢答时间和回答问题时间定时器及并行口初始化将时间计数器及启动标志值1开中断采并行口数据为0吗?启动标志=1吗?判断抢答组号报警电路发声判断哪一组为抢答组将抢答组号送显示抢答时间到了吗?输出响铃信号提示超时继续抢答比赛吗?系统返回nyyynyn图4-1-1系统主程序流程图为了能够达到抢答的公平、公正、合理,应该在主持人发布抢答命令之前必须先设定抢答的时间,因而在编开始抢答前的程序得先编写设定时间的程序。如图4-1-1所示当时间设好了之后,主持人发布抢答命令按下p1.7按键,程序开始打开定时中断开始倒计时,然后调用键盘扫描子程序,编写键盘扫描程序。当在扫描到有人按下了答题键,马上关闭t0、调用显示程序、封锁键盘。4.2 程序清单定时器t1时间初值:设50ms时间初值为z,z的计算方法为(216- z)12=1250103,结果z=15536d=3cb0hok equ 20h ;抢答开始标志位 ring equ 22h ;响铃标志位 data0 equ 36h ;抢答按键口数据存放地址 org 0000h ajmp main org 0003h ajmp int0sub org 000bh ajmp t0int org 0013h ajmp int1sub org 001bh ajmp t1int org 0040hmain: mov r1,#30 ;初设抢答时间为30s mov r2,#60 ;初设答题时间为60s mov tmod,#11h ;设置未定时器/模式1 mov th0,#0f0h mov tl0,#0ffh ;越高发声频率越高,越尖 mov th1,#3ch mov tl1,#0b0h ;50ms为一次溢出中断 setb ea setb et0 setb et1 setb ex0 setb ex1 ;允许四个中断,t0/t1/int0/int1 clr ok clr ring setb tr1 setb tr0 ;一开始就运行定时器,以开始显示ppp.如果想重新计数,重置th1/tl1就可以了;查询程序start: mov data0,#0ffh ;初始化 mov r5,#0bh mov r4,#0bh mov r3,#0bh acall display ;未开始抢答时候显示ppp jnb p3.3 ,int0sub jnb p3.4,tz1 ;倒计时调整 jb p3.0,next ;ddddddd acall delay jb p3.0,next ;去抖动,如果开始键按下就向下执行,否者跳到非法抢答查询 setb ex0 ;开放int0 acall bark ;按键发声 mov a,r1 mov r6,a ;送r1-r6,因为r1中保存了抢答时间 setb ok ;抢答标志位,用于count只程序中判断是 否查询抢答(在使用锦囊时用作判断是抢 答倒计时还是回答倒计时) mov r3,#0ah ;抢答只显示计时,灭号数 ajmp count ;进入倒计时程序,查询有效抢答的程序 在count里面next: jnb p1.0,false1 jnb p1.1,false2 jnb p1.2,false3 jnb p1.3,false4 jnb p1.4,false5 jnb p1.5,false6 jnb p1.6,tz1 jnb p1.7,tz2 ajmp starttz1: jmp false7tz2: jmp false8;非法抢答处理程序false1: acall bark ;按键发声 mov r3,#01h ajmp errorfalse2: acall bark mov r3,#02h ajmp errorfalse3: acall bark mov r3,#03h ajmp errorfalse4: acall bark mov r3,#04h ajmp errorfalse5: acall bark mov r3,#05h ajmp errorfalse6: acall bark mov r3,#06h ajmp errorfalse7: acall bark mov r3,#07h ajmp errorfalse8: acall bark mov r3,#08h ajmp error;int0(抢答时间r1调整程序)int0sub: mov a,r1 mov b,#0ah div ab mov r5,a mov r4,b mov r3,#0ah acall display ;先在两个时间led上显示r1 jnb p3.4,inc0 ;p3.4为+1s键,如按下跳到inco jnb p3.5,dec0 ;p3.5为-1s键,如按下跳到deco jnb p3.1,back0 ;p3.1为确定键,如按下跳到backo ajmp int0subinc0: mov a,r1 cjne a,#63h,add0 ;如果不是99,r2加1,如果加到 99,r1就置0,重新加起。 mov r1,#00h acall delay1ajmp int0subadd0: inc r1 acall delay1 ajmp int0subdec0: mov a,r1 jz setr1 ;如果r1为0, r1就置99, dec r1 acall delay1 ajmp int0subsetr1: mov r1,#63h acall delay1 ajmp int0subback0: reti ;int1(回答时间r2调整程序)int1sub: mov a,r2 mov b,#0ah div ab mov r5,a mov r4,b mov r3,#0ah acall display jnb p3.4,inc1 jnb p3.5,dec1 jnb p3.1,back1 ajmp int1subinc1: mov a,r2 cjne a,#63h,add1 mov r2,#00h acall delay1ajmp int1subadd1: inc r2 acall delay1 ajmp int1subdec1: mov a,r2 jz setr2 dec r2 acall delay1 ajmp int1subsetr2: mov r2,#63h acall delay1 ajmp int1subback1: reti ;倒计时程序(抢答倒计时和回答倒计时都 跳到改程序)count: mov r0,#00h ;重置定时器中断次数 mov th1,#3ch mov 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,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 ;如按下停止键退出 acall display jb ok,accout ;如果是抢答倒计时,如是则查询抢答,否 者跳过查询继续倒数(这里起到锁抢答 作用) ajmp recountaccout: mov a,data0 jnb p1.0,true1 jnb p1.1,true2 jnb p1.2,true3 jnb p1.3,true4 jnb p1.4,true5 jnb p1.5,true6 jnb p1.6,tz3 jnb p1.7,tz4 ajmp recount tz3: jmp true7 tz4: jmp true8 quit: clr ok ;如果按下了停止键执行的程序 clr ring ajmp start;正常抢答处理程序true1: acall bark ;按键发声 mov a,r2 mov 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 counttrue5: acall bark; mov a,r2 mov r6,a mov r3,#05h clr ok ajmp counttrue6: acall bark; mov a,r2 mov r6,a mov r3,#06h clr ok ajmp counttrue7: acall bark; mov a,r2 mov r6,a mov r3,#07h clr ok ajmp counttrue8: acall bark; mov a,r2 mov r6,a mov r3,#08h clr okajmp count;犯规抢答程序error: mov r0,#00h mov th1,#3ch mov tl1,#0b0h mov 34h,r3 ;犯规号数暂存与(34h)here: mov a,r0 cjne a,#0ah,flash ;0.5s向下运行-灭并停响 clr ring mov r3,#0ah mov r4,#0ah mov r5,#0ah ;三灯全灭 ajmp check1flash: cjne a,#14h,check1 ;下面是1s的情况,响并显示号数并清 r0,重新计 setb ring mov r0,#00h mov r3,34h ;取回号数 mov r5,#0bh mov r4,#0bh ;显示pp和号数 ajmp check1check1: jnb p3.1,quit1 acall display ajmp herequit1: clr ring clr okajmp 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,#0fbh mov p0,a acall delay retdat1:db 00h,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,00h,73h ;灭,1,2,3,4,5,6,7,8,9,灭,pdat2:db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,00h,73h ;第一个为零,其他与上相同,因为十位如果为零显示熄灭delay1: mov 35h,#08h ;加减时间延时(起到不会按下就加n个数)loop0: acall display djnz 35h,loop0 ret ;延时(显示和去抖动用到)delay: mov 32h,#12hloop: mov 33h,#0afhloop1: djnz 33h,loop1 djnz 32h,loopret ;发声程序bark: setb ring acall delay1 acall delay1 clr ring ;按键发声ret;to溢出中断(响铃程序)t0int: mov th0,#0ech mov tl0,#0ffh jnb ring,out; cpl p3.6 ;ring标志位为1时候p3.6口不断取反使喇叭发出一定频率的声音out: reti;t1溢出中断(计时程序)t1int: mov th1,#3ch mov tl1,#0b0h inc r0reti ;intt0中断服务程序intt0:mov data0,p1clr ex0reti end5 仿真调试试验的程序通过keil软件编译,产生hex文件如图5-1-1所示图5-1-1程序在keil软件上编译结果通过proteus进行仿真,如仿真结果所示,按下开始后,数码管开始倒计时,仿真结果如图5-1-2所示。图5-1-2 proteus仿真当有选手按下按扭时,数码管显示选手号码并开始倒计时,如图5-1-3所示: 图5-1-3 选手按下键的proteus仿真结果通过仿真结果证实,该方案可行。该设计方案同过51系列单片机的p0口作为段选输出,用p2口作为位选输出,动态扫描led显示管,显示时间。并通过接在p3.0-p3.6口的按键开关控制开始、结束、喇叭提示等功能。p1口接选手按键,控制抢答。本设计实现简单,成本较低很适合我们大学生动手实践。6 总结 经过历时两周的时间,通过查阅书籍、文献终于把八路抢答器的设计完成了。在这其间,让我更加了解到单片机的神奇,更加体会到单片机软件硬件结合所能发挥的能量。虽然在设计其间遇到了很多难题,如:繁琐的程序设计,复杂的硬件电路组合等,但是经过不断的查阅资料,反复地推敲中我还是顺利完成了这个设计。通过自己动手,我学会了很多东西:在学习设计中不可能一蹴而就,这需要我们反复推敲,不断学习新的知识;这次设计是我更加了解了单片机,使我能够更加熟练地应用单片机知

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论