您好,欢迎访问三七文档
11前言能够实现抢答器功能的方式有多种,可以采用前期的模拟电路、数字电路或模拟与数字电路相结合的方式。近年来随着科技的飞速发展,单片机的应用正在不断地走向深入,同时带动传统控制检测日新月异更新。2系统整体方案设计本电路中的51单片机是控制的主体,起到识别按键,对数据做出相应的处理(复位,清零,锁存,报警等)。而数码管主要显示倒计时与选手按键号码。报警时间的长短也可以调节。在整个实验中调节按键然后观察显示同步,完成实验。图2.1单片机控制系统方框图3硬件电路设计3.1单片机主控电路设计3.1.1单片机最小系统设计单片机倒计时系统思路:主持人按抢答开始键,会有提示音,并立刻进入抢答倒计时(预设10s抢答时间),如有选手抢答,会有提示音,并会显示其号数并立刻进入回答倒计时(预设30s抢答时间),不进行抢答查询,所以只有第一个按抢答的选手有效。倒数时间到小于5s会每秒响一下提示音。3.1.2单片机引脚资源分配单片机主控制倒计时模块显示模块主持人控制开关抢答按钮报警电路2图3.1.2单片机引脚图单片机P1口是一个内部提供上拉电阻的8位双向I/O口,P1口的输出缓冲器可驱动4个TTL逻辑门电路。p1.0~p1.3口接四个按钮;XTAL1,XTAL2分别通过电容并联晶振;P0口是一组8位漏极开路双向I/O口,每位引脚可驱动8个逻辑门路。对P0口的管脚写“1”时,被定义为高阻抗输入。在访问外部数据存储器或程序存储器时,它可以被定义为数据总线和地址总线的低八位。P0.0~p0.6口外部必须接上拉电阻,再接一个7SEG-MPX4CC显示器。P3口是一个内部提供上拉电阻的8位双向I/O口,P3口的输出缓冲器可驱动4个TTL逻辑门电路。P3口除了一般I/O线的功能外,还具有更为重要的第二功能,p3.0~p3.4口接五个按钮,p3.6口(外部数据存储器写选通)接一个报警器。3.2显示模块设计显示模块用的是7SEG-MPX4CC,1、3、4口是用来控制数码管显示数的。3本数码管采用的是动态显示。图3.27SEG-MPX4CC图4软件流程设计4.1系统流程图图4.1系统流程图44.2倒计时程序流程图图4.2倒计时流程图开始载入倒计时初值开定时器中断T=0显示子程序定时寄存器减1结束54.3显示程序流程图图4.3显示程序流程图开始查表P2赋值P2值送p0口延时P0口做段选码口输出/P2低三位做位选码输出结束P2减164.4四路抢答器程序org0okequ20hrequ22hljmpstartorg0003hljmpinterruptedorg000bhljmpt0intorg0013hljmpint1suborg001bhljmpt1intorg0040hstart:movr1,#10movr2,#30movtmod,#11hmovth0,#0f0hmovtl0,#0ffhmovth1,#3chmovtl1,#0b0hsetbeasetbet0setbet1setbex0setbex1clrokclrrsetbtr1setbtr0inquire:movr5,#0bh;查询7movr4,#0bhmovr3,#0bhacalldisplay;未开始抢答时候显示FFFjbp3.0,keyacalldelayjbp3.0,key;去抖动,如果开始键按下就向下执行,否者跳到非法抢答查询acallbarkmova,r1movr6,asetbokmovr7,#01h;读抢答键数据信号标志,这里表示只读一次有用信号movr3,#0ah;抢答只显示计时,灭号数ljmpcountkey:jnbp1.0,f1jnbp1.1,f2jnbp1.2,f3jnbp1.3,f4ljmpinquiref1:movr3,#01h;非法抢答ljmperrorf2:movr3,#02hljmperrorf3:movr3,#03hljmperrorf4:movr3,#04hljmperrorinterrupted:mova,r1;抢答时间R1调整movb,#0ahdivamovr5,a8movr4,bmovr3,#0ahacalldisplayjnbp3.4,inc0jnbp3.5,dec0jnbp3.1,back0ljmpinterruptedinc0:mova,r1cjnea,#63h,add0;如果不是99,R2加1,如果加到99,R1就置0,重新加起。movr1,#00hacalldelay1ljmpinterruptedadd0:incr1acalldelay1ljmpinterrupteddec0:mova,r1jzsetr1;如果R1为r,R1就置99,decr1acalldelay1ljmpinterruptedsetr1:movr1,#63hacalldelay1ljmpinterruptedback0:retiint1sub:mova,r2;回答时间R2调整movb,#0ahdivabmovr5,amovr4,bmovr3,#0ah9acalldisplayjnbp3.4,inc1jnbp3.5,dec1jnbp3.1,back1ljmpint1subinc1:mova,r2cjnea,#63h,add1movr2,#00hacalldelay1ljmpint1subadd1:incr2acalldelay1ljmpint1subdec1:mova,r2jzsetr2decr2acalldelay1ljmpint1subsetr2:movr2,#63hacalldelay1ljmpint1subback1:retirepeat:mova,r2;倒计时movr6,aclrrcount:movr0,#00hmovth1,#3chmovtl1,#0b0hrecount:mova,r6;r6保存了倒计时的时间,之前先将抢答时间或回答时间给R6movb,#0ahdivab10mov30h,amov31h,bmovr5,30hmovr4,31hmova,r6subba,#07hjnclarger;大于5s跳到larger,小于等于5s会提醒mova,r0cjnea,#0ah,full;1s中0.5s向下运行clrrljmpcheckfull:cjnea,#14h,check;下面是1s的情况,响并显示号数并清R0,重新计setbrmova,r6jzquit;计时完毕movr0,#00hdecr6;一秒标志减1ljmpchecklarger:mova,r0cjnea,#14h,check;如果1s向下运行,否者跳到查停/显示decr6;计时一秒R6自动减1movr0,#00hcheck:jnbp3.1,quit;如按下停止键退出jnbok,checkk;只在回答倒计时才有效ljmpkeytcheckk:jnbp3.0,repeat;判断是否使用锦囊keyt:acalldisplayjbok,accout;如果是抢答倒计时,如是则查询抢答,否者跳过查询继续倒数ljmprecountaccout:mova,36h11jnbacc.0,true1jnbacc.1,true2jnbacc.2,true3jnbacc.3,true4ljmprecounttz1:jmptrue3tz2:jmptrue4quit:clrok;如果按下了停止键执行的程序clrrljmpinquiretrue1:acallbark;开始抢答mova,r2movr6,amovr3,#01hclrok;因为答题的计时不再查询抢答,所以就锁了抢答ljmpcounttrue2:acallbarkmova,r2movr6,amovr3,#02hclrokljmpcounttrue3:acallbarkmova,r2movr6,amovr3,#03hclrokljmpcounttrue4:acallbarkmova,r2movr6,a12movr3,#04hclrokljmpcountclrokljmpcounterror:movr0,#00h;犯规抢答movth1,#3chmovtl1,#0b0hmov34h,r3here:mova,r0cjnea,#06h,flash;0.3s向下运行-灭并停响clrrmovr3,#0ahmovr4,#0ahmovr5,#0ah;三灯全灭ljmpcheck1flash:cjnea,#0ch,check1;下面是0.8s的情况,响并显示号数并清R0,重新计setbrmovr0,#00hmovr3,34h;取回号数movr5,#0bhmovr4,#0bh;显示FF和号数ljmpcheck1check1:jnbp3.1,quit1acalldisplayljmpherequit1:clrrclrokljmpstartdisplay:movdptr,#dat1;显示程序mova,r313movca,@a+dptrmovp2,#0fehmovp0,aacalldelay2movdptr,#dat2mova,r5movca,@a+dptrmovp2,#0fdhmovp0,aacalldelay2mova,r4movca,@a+dptrmovp2,#0fbhmovp0,aacalldelay2retdat1:db00h,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,00h,71hdat2:db3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,00h,71hdelay1:mov35h,#08h;起到不会按下就加N个数loop0:acalldisplaydjnz35h,loop0retdelay:mov32h,#12h;去抖动loop:mov33h,#0afhloop1:djnz33h,loop1djnz32h,loopretdelay2:mov32h,#43h;延时loop3:mov33h,#1ehmova,r7jnzlp114loop2:djnz33h,loop2djnz32h,loop3retlp1:mova,p1cjnea,#0ffh,aa1;当不全为1时的数据为有效数据aa0:mov36h,a;将有效数据送到36H暂存ljmploop2aa1:decr7ajmpaa0bark:setbr;发声程序acalldelay1acalldelay1clrr;按键发声rett0int:movth0,#0ech;响铃程序movtl0,#0ffhjnbr,out;cplp3.6;ring标志位为1时候P3.6口不短取反使喇叭发出一定频率的声音out:retit1int:movth1,#3ch;计时程序movtl1,#0b0hincr0retiend155系统仿真图5.1选手抢答图图5.2.7seg倒计时显示图16图5.3系统仿真图176课程设计的总结与体会实验的确需要时间与坚持,然后细心的观察,不断的改进,最终完成实验。同学和老师的指导也帮了许多,记得在刚开始时我们遇到很多困难,并困扰我们很长的时间,最终在同学的帮助下跳出了这个困境,并最终实现了实验所要求的功能,可以说完整地做完一个题目是一件有挑战的事,同时锻炼了大家的能力,而在做完之后又有一种成就感,如果有时间我们还应花更多经历去独立地完成更多课题,不断提高。参考文献[1]张俊谟.单片机中级教程—原理与应用[M].北京:北京航空航天大学出版社,2006.[2]张克农.数字电子技术基础[M].北京:高等教育出版社,2003.[3]何立民.单片机高级教程—应用与设计(第2版)[M].北京:北京航空航天大学出版社,2007.[4]李建忠.单片机原理及应用(第二版)[M].西安:西安电子科技大学出版社,2008.[5]楼然苗,李光飞.单片机课程设计指导[M].北京:北京航天航空大学出版社,2007.致谢在此我要感谢的是我们的指导老师顾思思,以及课任老师陈纬。感谢老师的细心认真辅导。特别是感谢陈纬老师教给我许多原来不知道的知识。这次课程设计能够顺利地完成还要感谢我的合作伙伴兰支航、黎向阳同学,他们对我提出
本文标题:4路抢答器课程设计
链接地址:https://www.777doc.com/doc-4875221 .html