八路抢答器课程设计带程序版Word文档下载推荐.doc
《八路抢答器课程设计带程序版Word文档下载推荐.doc》由会员分享,可在线阅读,更多相关《八路抢答器课程设计带程序版Word文档下载推荐.doc(23页珍藏版)》请在冰点文库上搜索。
主任签字:
年月日
摘要
抢答器是一种应用非常广泛的设备,在各种竞猜、抢答场合中,它能迅速、客观地分辨出最先获得发言权的选手。
本文介绍了利用52单片机及外围接口实现的抢答系统,利用单片机的定时器/计数器定时和记数的原理,将软、硬件有机地结合起来,使得系统能够正确地进行计时,同时使数码管能够正确地显示时间。
同时系统能够实现:
在抢答中,只有开始后抢答才有效,如果在开始抢答前抢答为无效;
可以显示是抢答时间和回答问题时间倒记时显示,满时后系统计时主控强制复位。
关键字:
抢答器;
52单片机;
定时器;
计数器;
数码管
目录
设计要求 1
1方案论证与对比 1
1.1方案一:
采用数字电路控制 1
1.2方案二:
采用单片机控制 2
1.3方案对比与选择 2
2单元电路设计 3
2.2抢答器显示模块的设计 4
2.3控制器模块电路的设计 5
2.4复位电路的设计 5
2.5晶振电路设计 6
2.6按键电路设计 7
3软件详细设计 7
3.1系统主程序设计 7
3.2 显示子程序的设计 9
3.3抢答处理程序的设计 10
4调试功能说明 10
4.1硬件系统的调试 10
4.2软件调试 11
4.3软硬件系统联合调式 12
4.4焊接的问题及解决 12
5详细仪器清单 13
6总结与思考 13
致谢 14
参考文献 16
附录一 17
附录二 18
八路抢答器
设计要求
1、一位主持人与3位抢答者,复位后,甲乙丙的绿、红灯全亮,开始键、复位键的指示灯全暗;
主持人按复位键则仅复位指示灯亮,其他都暗,准备开始;
主持人按开始键,开始灯亮,允许甲乙丙抢答,此时优先者则相应成功指示灯亮,如允许前抢就犯规相应的犯规红灯亮;
抢答成功则相应的绿灯亮,答题开始并进行倒计时,到规定时间不允许答题,并返回复位状态;
2、具有抢答控制和倒计时显示功能;
3、控制器应有复位控制、开始控制、抢答控制和状态指示等功能,并有答题时间控制和显示功能。
1方案论证与对比
在电视和学校中我们会经常看到一些智力抢答的节目,如果要是让抢答者用举手等方法,主持人很容易误判,会造成抢答的不公平,比赛中为了准确、公正、直观地判断出第一抢答者,所设计的抢答器通常由数码显示、灯光、音响等多种手段指示出第一抢答者。
为了使这种不公平不发生,只有靠电子产品的高准确性来保障抢答的公平性。
1.1方案一:
采用数字电路控制
定时抢答器的总体框图如图1所示,它由主体电路和扩展电路两部分组成。
主体电路完成基本的抢答功能,即开始抢答后,当选手按动抢答键时,能显示选手的编号,同时能封锁输入电路,禁止其他选手抢答。
扩展电路完成定时抢答的功能[1]。
定时抢答器的工作过程是:
接通电源时,节目主持人将开关置于“清除”位置,抢答器处于禁止工作状态,编号显示器灭灯,定时显示器显示设定的时间,当节目主持人宣布“抢答开始”,同时将控制开关拨到“开始”位置,其他选手抢答到时间后,抢答器处于工作状态,定时器倒计时。
当一轮答题结束后,数码管显示0,即又进入下一轮抢答,原理框图如图1所示:
抢答按键
优先编码器
译码显示器
锁存器
检测按钮
控制
图1方案一系统方框图
1.2方案二:
采用单片机控制
此电路完成的功能如图2所示,当主持人宣布抢答开始的时候,按下开始按钮,此时电路进入抢答状态,选手的输入采用了扫描式的输入,之后把相应的信息送往单片机,再由单片机输出到显示输出电路中。
此时有人第一按下相应的抢答按钮,经过单片机的控制选择,在八段显示器上显示相应的号码,并锁存,同时禁止其他按钮的输入。
图2方案二系统方框图
1.3方案对比与选择
数字电路的制作方案比较容易实现,并且在原理方面也是较简单,但这种方式制作过程复杂,而且准确性与可靠性不高,成品面积大,安装、维护困难,在具体的应用过程中也容易出问题。
利用了单片机的延时电路、按键复位电路、时钟电路、定时/中断等电路,设计的抢答器具有实时显示抢答选手的号码和抢答时间的特点,还有复位电路,使其再开始新的一轮的答题和比赛,同时还可编程功能,使其实现其他一些基本的功能。
显然方案二比方案一简单的多,不但从性能上优于方案一,而且在使用上及其功能的实现上都较方案一简洁,并且由于单片机具有优越的高集成电路性,使其工作速度更快、效率更高[2]。
另外89C52单片机采用12MHz的晶振,提高了信号的测量精度,并且使该系统可以通过软件改进来扩张功能。
而方案一采用了中小规模集成电路,有其复杂的电路性能,从而可能会使信号的输入输出产生延时及不必要的误差。
依此依据选择方案二比较适合。
综合考虑采用第二种方案来完成本次八路抢答器课程设计。
2单元电路设计
2.1总体硬件设计思路
其工作原理为:
接通电源后,主持人将开关拨到“清除”状态,抢答器处于禁止状态,编号显示器灭灯,定时器显示设定时间;
主持人将开关置,“开始”状态,宣布“开始”抢答器工作,定时器倒计时。
选手在定时时间内抢答时,抢答器完成:
优先判断、编号锁存、编号显示。
当一轮抢答之后,定时器停止,禁止二次抢答,定时器显示剩余时间。
如果再次抢答必须由主持人再次操作“开始、停止”状态开关。
总体原理图见附录一。
其原理框图如下:
图3抢答器的原理框图
2.2抢答器显示模块的设计
显示模块主要是显示抢答的时间、组别号码等,使用传统的数码管及发光二极管显示。
数码管具有:
低能耗、低损耗、低压、寿命长、耐老化、防晒、防潮、防火、防高(低)温,对外界环境要求低,易于维护,同时其具有精度高、称量快、操作简单等特点。
数码显示是采用BCD编码显示数字,程序编译容易,资源占用较少[3]。
数码显示管用来作为时间的显示输出,一般用7段数码显示管。
本次设计中采用7段共阳数码显示管应用简单、可靠性高、成本低,作为显示输出。
连接时段选信号接在8255PB口的PB.0~PB.7八个I/O口上。
其模块接口电路如图4所示:
图4显示模块接口电路
。
表1:
七段LED字型码
显示字符
共阳极字符
C0H
A
88H
1
F9H
b
83H
A4H
C
C6H
3
B0H
d
A1H
4
99H
E
86H
5
92H
F
8EH
6
82H
P
8CH
7
F8H
H
89H
8
80H
L
C7H
9
90H
灭
FFH
2.3控制器模块电路的设计
采用ATMEL公司的STC89C52作为系统控制器的CPU(CentralProcessingUnit)。
芯片引脚如图5所示:
图589C52及8255的引脚图
2.4复位电路的设计
该复位电路采用上电自动复位和手动复位两种复位方式,图中网络标号所指9连接到单片机的复位引脚。
要实现复位只需在52系列单片机的RESET引脚上加上5ms的高电平就可以了。
上电复位是利用电容的充电来实现的,即上电瞬间RESET端的电位与Vcc相同,随着电容上储能增加,电容电压也逐渐增大,充电电流减小,RESET端的电位。
这样就会建立一个脉冲电压,调节电容与电阻的大小可对脉冲的持续时间进行调节。
通常若采用12MHz的晶振时,复位元件参数为22μF的电解电容和1kΩ的电阻。
按钮复位电路是通过按下复位按钮时,电源对RESET端维持两个机器周期的高电平实现复位的[4]。
电路如图6示:
图6复位电路
2.5晶振电路设计
MSC-51单片机的定时控制功能是用时钟电路和振荡器完成的,而根据硬件电路的不同,连接方式分为内部时钟方式和外部时钟方式。
本设计中采用内部时钟方式。
单片机内部有一个反相放大器,XTAL1、XTAL2分别为反相放大器的输入端和输出端,外接定时反馈元件组成振荡器(内部时钟方式),产生时钟送至单片机内部各元件。
时钟频率越高,单片机控制器的控制节拍就越快,运算速度也就越快。
一般来说单片机内部有一个带反馈的线性反相放大器,外界晶振(或接陶瓷振荡器)和电容就可组成振荡器,如图6所示。
加电以后延时一段时间(约10ms)振荡器产生时钟,不受软件控制,图中Y1为晶振,震荡产生的时钟频率主要由Y1确定。
电容C1,C2的作用有两个:
一是帮助振荡器起振,二是对振荡器的频率起微调作用,典型值为30pF。
电路如图7所示:
图7晶振电路
2.6按键电路设计
选手抢答及主持人开始复位按键采用4行4列矩阵式键盘,其特点是键多时占用I/O口线少,硬件资源利用合理。
矩阵式键盘电路如图8所示。
图8矩阵式电路接口图
3软件详细设计
3.1系统主程序设计
为了能够达到抢答的公平、公正、合理,应该在主持人发布抢答命令之前必须先设定抢答的时间,因而在编开始抢答前的程序得先编写设定时间的程序,当时间设好了之后,主持人发布抢答命令按下P1.7按键,程序开始打开定时中断开始倒计时,然后调用键盘扫描子程序,编写键盘扫描程序。
主程序流程图如下:
主程序系统结构应包括系统初始化模块、按键模块、非法抢答模块、正确抢答模块调整抢答时间、调整回答时间和显示模块,结构图如图9所示,详细程序见附录2。
图9主程序流程图
3.2显示子程序的设计
用8255芯片的PA控制数码管的位选,端口PB控制数码管段码显示。
数码管显示正在播放歌曲序列号信息。
七段LED数码管构成“日”字形,还有一只发光二极管作为小数点。
因此,这种七段数码管又可称为八段数码管。
通过8个发光段的不同组合,可以显示0—9个数字,从而可以实现十六进制整数和小数的显示。
LED数码管显示器可以分为共阴极和共阳极两种接法。
开始调试时,在Protues软件上可以很好模拟动态显示效果,但硬件电路数码管显示效果失真,考虑到延时在动态显示中的重要作用,通过调小延时时间,使数码管稳定、准确地显示。
显示子程序的设计流程如图10所示。
图10显示子程序的设计
3.3抢答处理程序的设计
该部分完成两个功能:
一是分辨出选手按键的先后,并锁存优先抢答者的选定项,;
二是若其他选手按键操作无效,则不会显示其按键,视为不理会,如有再次抢答需由主持人将S开关重新置,“清除”然后再进下一次抢答。
通过STC89C52芯片的控制,从而构成了整个电路[5]。
抢答组数可以在八组以内任意使用,其流程图如下:
图11.抢答处理程序设计
4调试功能说明
4.1硬件系统的调试
系统调试包括硬件调试和软件调试,而且两者是密不可分的。
设计好的硬件电路和软件程序,只有经过联合调试,才能验证其正确性;
软硬件的配人情况以及是否达到设计任务的要求,也只有经过调试,才能发现问题并加以解决、完善,最终开发成实用产品。
4.1.1电路板的制作与检查
当智能抢答器的硬件和软件程序设计完成后,为了事先验证硬件和软件的相容性以及整体方案设计的可行性,本设计用Proteus软件对智能抢答器进行仿真,如果软件仿真能够达到设计要求的话,证明整体设计方案具有可行性,可以进行实物电路的焊接,进行软硬件的联合调试。
Proteus相当于硬件开发,只是虚拟的,可以看到程序代码是怎么样一步一步运行。
考虑到本系统所用元器件较少,大部分功能都是通过软件编程来实现,同时也出于对毕业设计成本的考虑,因此所用到的板子是自己手工制作的PCB板。
在电路板的制作中,首先要进行线路的排布。
利用PROTEL软件模拟实际电路板的线路走向,尽量避免线路出现交叉短路,电源线路尽量安排在电路板的最外圈。
PCB板刻录完成之后,开始进行焊接工作。
焊接完后进行电路板检查,将原线路图与实际焊接的电路板进行对比,由于线路不多,所以用万用表的欧姆档或是短路声响指示功能来做焊点的检测,如此可以避免焊接时漏焊、虚焊和配线错误的问题,同时保证了所制作出来的线路与原设计线路的一致性。
4.1.2电路模块调试
本设计硬件部分主要为显示模块按键模块。
硬件电路功能检测主要针对这两部分进行测试。
对于显示电路,由于使用的是三联数码管显示屏,首先要确定数码管的共阴还是共阳极。
因此先用万用表检测是什么极性。
然后再先固定下,检查显示电路能否正常显示。
最后再焊接上去。
对于按键部分,首先要确定各个按键是否完好,先自己接到一个简易的电路上测试下,确定完好后再焊接。
4.2软件调试
软件的设计与调试实行分模块实现方法。
本设计软件调试中的分模块包括显示功能模块、调正时间功能模块,抢答功能模块。
各个独立模块功能调试成功后,将这些模块程序通过主程序合并在一起,最后再对合并后的总程序进行调试。
各软件模块首先要通过PC和仿真器进行软件调试,当仿真效果符合要求后,再烧写进单片机看能否在实际电路板上正常工作。
编程语言的软件设计采用MCS-51汇编语言编写,所使用的调试软件批Proteus[6]。
软件的调试必须在开发系统的支持下进行。
先分别调试通过各个模块程序,然后调试主程序,再将各部分连接进行调试。
调试的范围可以由小到大、逐步增加。
通常交叉使用单步运行、断点运行、连续运行等多种方式,每次执行完毕后,检查CPU执行现场、RAM的有关内容、I/O口的状态等。
发现一个问题,解决一个问题,直至全部通过。
4.3软硬件系统联合调式
将烧录好的AT89S52芯片固定在电路板底座上。
接下来给系统通电,系统正常工作时,可以看到:
当主持人没有按下“开始抢答键”时,显示装置显示的是“0”,当主持人按下“开始抢答键”时,如果有选手抢到题,显示装置显示抢答的倒计时时间,如果抢答时间耗尽而没有选手抢答,则显示装置显示“0”;
如果抢答倒计时期间有选手抢答,则指示灯没有变换,即按键无效,如果答题时间倒计时10s时答题选手还没有回答完问题,则时间跳完,主持人按复位键进入下一轮。
另外,任何时候,主持人可以按下手中的“停止”按键终止一切进程,使显示装置显示“0”。
上述情况均是智能抢答器正常工作的情况,如果在软硬件的调试过程中不能做到以上几点,应该努力排错修改,不断完善智能抢答器的功能。
4.4焊接的问题及解决
一般来说,造成硬件问题的首要问题就是焊接了,也就是说焊接的好与坏直接响产品的正常运行。
造成焊接质量不高的常见原因是:
(1)焊锡用量过多,形成焊点的锡堆积;
焊锡过少,不足以包裹焊点。
(2)冷焊。
焊接时烙铁温度过低或加热时间不足,焊锡未完全熔化、浸润、焊锡表面不光亮(不光滑),有细小裂纹。
(3)夹松香焊接,焊锡与元器件或印刷板之间夹杂着一层松香,造成电连接不良。
若夹杂加热不足的松香,则焊点下有一层黄褐色松香膜;
若加热温度太高,则焊点下有一层碳化松香的黑色膜。
对于有加热不足的松香膜的情况,可以用烙铁进行补焊。
对于已形成黑膜的,则要"
吃"
净焊锡,清洁被焊元器件或印刷板表面,重新进行焊接才行。
(4)焊锡连桥。
指焊锡量过多,造成元器件的焊点之间短路。
这在对超小元器件及细小印刷电路板进行焊接时要尤为注意。
(5)焊剂过量,焊点明围松香残渣很多。
当少量松香残留时,可以用电烙铁再轻轻加热一下,让松香挥发掉,也可以用蘸有无水酒精的棉球,擦去多余的松香或焊剂。
(6)焊点表面的焊锡形成尖锐的突尖。
这多是由于加热温度不足或焊剂过少,以及烙铁离开焊点时角度不当浩成的内。
最小系统的电路不工作,首先应该确认电源电压是否正常。
用电压表测量接地引脚跟电源引脚之间的电压,看是否符合电源电压,常用的是5V左右。
接下来就是检测复位引脚的电压是否正常,EA引脚的电压要正常为5V左右。
5详细仪器清单
表2仪器清单
仪器名称
数量/个
STC89C52
8255
SW-PB
Y1XTAL
按键式开关
LED
1K电阻
100PF电容
6总结与思考
课程设计是培养我们综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对我们实际工作能力的具体训练和考察过程。
随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域,在生活中可以说得是无处不在。
因此作为二十一世纪的大学生来说掌握单片机的开发技术是十分重要的。
回顾这次单片机课程设计,我感慨颇多。
从选题到定稿,从理论到实践,在两个星期的日子里,可以说得是苦多于甜,但是可以学到很多很多的的东西,不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次课程设计使我懂得了理论与实际相结合的重要性,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,提高自己的实际动手能力和独立思考的能力。
在设计的过程中我遇到了很多问题,从而发现了自己的不足之处,主要是对以前所学过的理论知识掌握得不够透彻,对单片机语言掌握得不好,以及缺少实践经验。
这次课程设计使我重新了解自己的水平,从而确定了今后的努力方向。
我想这对于自己以后的学习和工作都会有很大的帮助的。
在这次设计中遇到了很多实际性的问题。
在实际设计中才发现,书本上理论性的东西与在实际运用中的还是有一定的出入的,所以有些问题不但要深入地理解,而且要不断地更正以前的错误思维。
对于单片机设计,其硬件电路是比较简单的,主要是解决程序设计中的问题。
而程序设计是一个很灵活的东西,它反映了你解决问题的逻辑思维和创新能力。
它才是一个设计的灵魂所在。
因此在整个设计过程中大部分时间是用在程序上面的。
很多子程序是可以借鉴书本上的,但怎样衔接各个子程序才是关键的问题所在,这需要对单片机的结构很熟悉。
因此可以说单片机的设计是软件和硬件的结合,二者是密不可分的。
这次课程设计更好的加深了我们对电路知识的掌握、理解及运用,提高了我的实际动手能力和学习兴趣。
致谢
经过自己不断的搜索努力以及指导老师的耐心指导和热情帮助,本设计已经基本完成。
在这段时间里,老师严谨的治学态度和热忱的工作作风令我十分钦佩,老师指导使我受益非浅。
同时实验室的开放也为我的设计提供了实习场地。
在此对指导老师和同学表示深深的感谢。
通过这次单片机课程设计,深刻地认识到学好知识的重要性,也理解了理论联系实际的含义,并且检验了大学几年的学习成果。
虽然在这次设计中对于知识的运用和衔接还不够熟练。
但是我将在以后的工作和学习中继续努力、不断完善。
这将近两个星期的设计是对过去所学知识的系统提高和扩充的过程,为今后的发展打下了良好的基础。
15
参考文献
[1]高卫东,辛友顺,韩彦征,《51单片机原理与实践编著》[M],北京航空航天大学出版社,2008.1
[2]刘红玲、邵晓根,《微机原理与接口技术》[M],中国电力出版社,2006年第一版
[3]冯博琴,《微型计算机原理及接口技术》[M],清华大学出版社
[4]艾德才,《微型计算机原理与接口技术》[M],高等教育出版社
[5]沈美明,《IBM-PC汇编语言程序设计》[M],清华大学出版社
[6]薛栋梁,《单片机原理及应用》[M],中国水利水电出版社,2001
附录一:
八路抢答器原理图
附录二:
程序
#include<
reg52.h>
#defineucharunsignedchar
#defineuintunsignedint
sbitRESET=P3^2;
sbitSTART=P3^3;
ucharxdataPA_at_0xD9FF,PB_at_0XDBFF,PC_at_0XDDFF, //定义外部变量,强制分配地址
EX_PORT_CON_at_0XDFFF;
ucharcodeLED_CODE[]={0XA0,0XBB,0X62,0X2A,0X39,0X2C,0X24,0XBA, //LED段码(0~9)
0X20,0X28};
ucharKEY,SEC=9,COUNT=0;
bitGOT_KEY=0,ERROR=0;
voidDelay(uintA);
voidKey_Scan();
voidmain()
{
EX_PORT_CON=0X81;
//8255初始化(PA,PB,PC_H输出,PC_L输入)
TMOD=1;
PC=0x10;
//键盘初始化
TH0=0X3C;
//定时器初始化
TL0=0XB2;
ET0=1;
TR0=0;
EA=1;
PA=0XFE;
A:
P1=0XC0;
SEC=9;
while
(1)
{ PB=LED_CODE[0];
if(!
RESET)
{
Delay(200);
if(!
{
while(!
RESET);
P1=0XbF;
//复位灯亮其余不
while
(1)
{
Key_Scan();
if(GOT_KEY){GOT_KEY=0;
ERROR=1;
break;
} //为允许抢答检测是否有人犯规
if(!
START) //允许抢答后扫描键盘并倒计时
{
Delay(200);
if(!
START)
while(!
START){Key_Scan();
gotoRESULT;
}}
//TR0=1;
P1=0X7F;
while
(1)
{
Key_Scan();
if((GOT_KEY