课程设计报告
课程名称:单片机课程设计
报告题目:8位竞赛抢答器的设计 学生姓名: 所在学院:信息科学与工程学院 专业班级: 学生学号: 指导教师:
2013 年12月25日 课程设计任务书 报告题目 | | | | |
| |
| |
| | | | 设计一个数字式电容测量仪电路,要求如下: 以单片机为核心,设计一个8位竞赛抢答器:同时供8名选手或8个代表队比赛,分别用8个按钮S0~S7表示。 设置一个系统清除和抢答控制开关S,开关由主持人控制。 抢答器具有锁存与显示功能。即选手按按钮,锁存相应的编号,并在优先抢答选手的编号一直保持到主持人将系统清除为止。当主持人启动“开始”键后,定时器进行减计时,同时扬声器发出短暂的声响,声响持续的时间为0.5s左右。 参赛选手在设定的时间内进行抢答,抢答有效,定时器停止工作,显示器上显示选手的编号和抢答的时间,并保持到主持人将系统清除为止。 如果定时时间已到,无人抢答,本次抢答无效,系统报警并禁止抢答,定时显示器上显示00 | | 第17周: 周一、周二:选题,明确任务,指导教师对课题进行讲解,资料检索 周三:硬件设计,硬件仿真 周四、周五:软件设计 第18周: 周一:综合调试 周二、周三、周四:书写课程设计报告 周五:答辩评分 | | 1.与设计内容对应的软件程序 2.课程设计总结报告 |
|
|
|
|
|
|
|
|
摘要抢答器作为一种工具,已广泛应用于各种智力和知识竞赛场合。但抢答器的使用频率较低,且有的要么制作复杂,要么可靠性低。作为一个单位,如果专门购一台抢答器虽然在经济上可以承受,但每年使用的次数极少,往往因长期存放使(电子器件的)抢答器损坏,再购置的麻烦和及时性就会影响活动的开展,因此设计了本抢答器。 本设计是以八路抢答为基本理念。考虑到依需设定限时回答的功能,利用AT89C52单片机及外围接口实现的抢答系统,利用单片机的定时器/计数器定时和记数的原理,将软、硬件有机地结合起来,使得系统能够正确地进行计时,同时使数码管能够正确地显示时间。用开关做键盘输出,扬声器发生提示。同时系统能够实现:在抢答中,只有开始后抢答才有效,如果在开始抢答前抢答为无效;抢答限定时间和回答问题的时间可在1-30s设定;可以显示是哪位选手有效抢答,正确按键后有5s的音乐提示(即扬声器发出响声);抢答时间和回答问题时间倒记时显示,满时后系统计时自动复位及主控强制复位;按键锁定,在有效状态下,按键无效非法。
关键词:89c52;电路;显示;按键
目录一、概述…………………………………………………………………………1 二、方案设计………………………………………………………………1 三、硬件电路设计…………………………………………………………2 1、抢答器的电路框图…………………………………………………………2 2、单元电路 ………………………………………………………………………………3 2.1、抢答器电路………………………………………………………………………3 2.2、时序控制电路……………………………………………………………………3 2.3、复位电路…………………………………………………………………………3 3、时钟震荡电路………………………………………………………………3 4、报警电路…………………………………………………………………3 四、软件设计………………………………………………………………4 1、系统主程序…………………………………………………………4 2、系统程序…………………………………………………………5 五、结论与心得………………………………………………………………………10 六、参考文献……………………………………………………………………10
一、概述本实验电路由抢答电路、译码显示电路、主持人控制电路、定时电路、报警电路组成。通过复位按键FW,电路进入准备就绪状态。将抢答时间设定在30S,然后按下开始键开始抢答。,在电路中“S0-S7”为8路抢答器的8个按键,当有键按下,程序锁定信号,从P2口输出抢答者号码的七段码值,送到数码管显示,并封锁按键,保持刚才按键按下时刻的时间,禁止其他人按键的输入,从而实现了抢答的功能。当设定的抢答时间结束,仍然没有抢答键被按下,则产生已经超时的报警信号,结束抢答。当要进行下一次的抢答时,首先按一下复位按键,电路复位。 该设计是以MCS51为基础,结合单片机汇编语言知识,设计而成的8位竞赛抢答器。在伟福试验箱上实现仿真。 主持人按下“开始抢答键”既单脉冲键后,喇叭响0.5秒给出提示信号,并立刻进入抢答倒计时(预设30秒抢答时间)此时,数码显示管上显示倒计时时间:有选手抢答,停止计时,八段数码显示抢答时间和选手号;无选手抢答,倒计时30秒后,显示00。然后选手等待主持人按下按钮开始新一轮抢答。 注意: (1)由于设计的局限性,如果在无人抢答期间,30秒还未到,主持人不能按下重新下一轮抢答按钮。 (2)由于试验箱上按钮数量有限,故选用开关代替按钮,供8位选手抢答使用。鉴于开关与按钮动作过程的差异,所以每次当选手抢答,拨下开关时必须将开关复位。 (3)当系统出现错误的时候,停止操作,重新编译开始。
二、方案设计方案:该系统采用51系列单片机AT89C51作为控制核心,该系统可以完成运算控制、信号识别以及显示功能的实现。由于用了单片机,使其技术比较成熟,应用起来方便、简单并且单片机周围的辅助电路也比较少,便于控制和实现。整个系统具有极其灵活的可编程性,能方便地对系统进行功能的扩张和更改。MCS-51单片机特点如下:
<1>可靠性好:单片机按照工业控制要求设计,抵抗工业噪声干扰优于一般的CPU,程序指令和数据都可以写在ROM里,许多信号通道都在同一芯片,因此可靠性高,易扩充。 <2>单片机有一般电脑所必须的器件。 <3> 控制功能强:单片机指令除了输入输出指令,逻辑判断指令外还有更丰富的条件分支跳跃指令。
三、硬件电路设计1、抢答器的电路框图 如图3.1.1所示为电路框图。其工作原理为:接通电源后,主持人按下开关即为“开始”状态,宣布“开始”抢答器工作。编号显示器灭灯,定时器显示设定时间。定时器倒计时,扬声器给出5s声响提示。选手在定时时间内抢答时,抢答器完成:优先判断、编号锁存、编号显示。当一轮抢答之后,定时器停止、禁止二次抢答、定时器显示剩余时间。如果再次抢答必须由主持人再次操作"开始、停止"状态按键。
图3.1.1电路框图 2、单元电路3.2.1、抢答器电路 该电路完成两个功能:一是判断出选手按键的先后,并锁存优先抢答者的编号,同时译码显示电路显示编号;二是禁止其他选手按键操作无效。如有再次抢答需由主持人将S开关重新置,“清除”然后再进行下一次抢答。 3.2.2、时序控制电路 时序控制电路是抢答器设计的关键,它要完成以下功能:
a.主持人将控制开关拨到"开始"位置时,扬声器发声,抢答电路和定时电路进人正常抢答工作状态。
b.当参赛选手按动抢答键时,扬声器发声,抢答电路和定时电路停止工作。 3.2.3、复位电路设计 外部中断和内部中断并存,单片机硬件复位端,只要持续4个机器周期的高电平即可实现复位,硬件复位后的各状态可知寄存器以及存储器的值都恢复到了初始值,因为本设计中功能中有倒计时时间的记忆功能,所以不能对单片机进行硬件复位,只能用软件复位,软件复位实际上就是当程序执行完之后,将程序通过一条跳转指令让它完成复位。 3、时钟震荡电路时钟震荡电路单片机必须在89C52驱动下才能工作,在单片机内部有一个时钟震荡电路,只需要外接一个振荡器就能产生一定的时钟信号送到单片机内部的各个单元。 4、报警电路报警电路用于报警,当遇到报警信号时,发出警报。8952动喇叭的信号为各种频率的脉冲。因此,最简单的喇叭驱动方式就是利用达林顿晶体管,或者以两个常用的小晶体管连接成达林顿架势。在右图中电阻R为限流电阻,在此利用晶体管的高电流增益,以达到电路快速饱和的目的。不过,如果要由P0输出到此电路,还需要连接一个10K的上拉电阻。 file:///C:/Users/83570/AppData/Local/Temp/OICE_78C48033-D549-423C-91D1-C72951558F6E.0/msohtmlclip1/01/clip_image003.jpg 图3硬件电路图
四、软件设计1、系统主程序为了能够达到抢答的公平、公正、合理,应该在主持人发布抢答命令之前必须先设定抢答的时间,因而在编开始抢答前的程序得先编写设定时间的程序,当时间设好了之后,主持人发布抢答命令按下s1按键,程序开始打开定时中断开始倒计时,然后调用键盘扫描子程序,编写键盘扫描程序。当在扫描到有人按下了答题键,马上关闭T0、调用显示程序、封锁键盘。 以单片机为核心,设计一个8位竞赛抢答器:同时供8名选手或8个代表队比赛,分别用8个按钮S0~S7表示。 设置一个系统清除和抢答控制开关S,开关由主持人控制。 抢答器具有锁存与显示功能。即选手按按钮,锁存相应的编号,并在优先抢答选手的编号一直保持到主持人将系统清除为止。当主持人启动“开始”键后,定时器进行减计时,同时扬声器发出短暂的声响,声响持续的时间为0.5s左右。 参赛选手在设定的时间内进行抢答,抢答有效,定时器停止工作,显示器上显示选手的编号和抢答的时间,并保持到主持人将系统清除为止。 如果定时时间已到,无人抢答,本次抢答无效,系统报警并禁止抢答,定时显示器上显示00。
file:///C:/Users/83570/AppData/Local/Temp/OICE_78C48033-D549-423C-91D1-C72951558F6E.0/msohtmlclip1/01/clip_image004.gif 图4.1主程序方框图 2、系统程序#include<reg52.h> #defineuint unsigned int #defineuchar unsigned char sbits1=P3^0; sbitwe=P3^6; ucharh[]={0xe0,0xd0,0xb0,0x70}; uchar code table[] ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff}; uchar num,count; uchara=0,c=0,t,bb=0,t1; voiddelay(uint z) { uint x,y; for(x=110;x>0;x--) for(y=z;y>0;y--); } voidwrite_sx() { P2=0xdf; P0=0x08; P2=0x00; P0=0xff; P2=0xff; P0=table[t1]; P2=0x00; P0=0x00; delay(5); P2=0xdf; P0=0x40; P2=0x00; P0=0xff; P2=0xff; P0=table[(t/10)%10]; P2=0x00; P0=0x00; delay(5); P2=0xdf; P0=0x80; P2=0x00; P0=0xff; P2=0xff; P0=table[t%10]; P2=0x00; P0=0x00; delay(5); }
voidinit() { P2=0xbf;P0=0xbf; TMOD=0x01; TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=0; ET0=1; TR0=1; }
voidkeyscan() { we=0; if(s1==0) { delay(5); if(s1==0) { while(!s1); EA=1; P2=0xbf;P0=0xff; t=30; a=1; t1=10; c=0; } } if(c==0) { P3=0xfd; num=P3; num=num&0xf0; if(num!=0xf0) { delay(5); if(num!=0xf0) { while(P3!=0xfd); c=1; EA=0; if(num==h[3]) t1=1; if(num==h[2]) t1=2; if(num==h[1]) t1=3; if(num==h[0]) t1=4; } }
P3=0xfb; num=P3; num=num&0xf0; if(num!=0xf0) { delay(5); if(num!=0xf0) { while(P3!=0xfb); c=1; EA=0; if(num==h[3]) t1=5; if(num==h[2]) t1=6; if(num==h[1]) t1=7; if(num==h[0]) t1=8; } } } } voidmain() { init(); while(1) { keyscan(); if((a==1)&&((t>0)&&(t<=30))) { write_sx(); } if(t==0) { EA=0; t=0; t1=10; } } } voidtimer0() interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; count++; if(count==10) { P2=0xbf;P0=0xbf; } if(count==20) { count=0; t--; } } 五、结论与心得通过这次课程设计,我深刻的认识到自己在许多方面的不足。通过编程,我学会了如何独立的写出程序,提高了自己的分析解决问题的能力,并且使自己所学的知识与实践相结合,应用到实践当中。 在刚开始的时候无从下手,感觉有些茫然,但同学和老师给予我很大的帮助,每当设计过程中遇到困难时,老师都会细心的教导我,耐心的为我讲解,同学也热心帮助我,为我排忧解难,让我深深的体会到了团队的力量和重要性。 通过设计,我也学到了很多书本上没有的知识。在设计当中遇到了很多问题,但通过查找资料,克服了这些问题,提高了自己在实际当中解决问题的能力。 在此我感谢学校给了我们的这次实践机会。在这里为奔波劳累在这次设计中老师便是感谢,老师们不辞劳苦,不在乎身体的不适认真为我们讲解并为我们知道实际操作过程中的问题。让我们一步一步有序完成此次课程设计。在这里对我们的廖老师、曹老师说声谢谢,谢谢你们,你们辛苦了!也祝你们身体健康工作顺利 六、参考文献[1] 张毅刚.《单片机原理及应用》.高等教育出版社,2009 [2] 谭浩强.《C程序设计教程》.清华大学出版社 [3] 周兴华.《单片机C程序设计》.北京航空航天大学出版社
|