多路抢答器课程设计报告汇总
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计说明书
题目:多路抢答器设计
二级学院机械工程学院
年级专业14级机械设计制造及其自动化学号**********
学生姓名曾骏
指导教师洪云
教师职称讲师
目录
摘要 (1)
一、绪论 (1)
1、单片机抢答器的背景 (1)
2、单片机的应用 (2)
3、抢答器的应用 (3)
二、方案设计 (4)
1、总方案设计 (4)
2、基本功能 (4)
3、扩展功能 (5)
三、硬件电路设计 (6)
1、单片机的选择 (6)
2、各模块设计 (7)
2.1、单片机最小系统 (7)
2.2、抢答按键电路 (8)
2.3、显示器电路 (8)
2.4、蜂鸣器音频输出电路 (9)
四、软件设计 (10)
1、程序设计 (10)
2、主程序设计 (11)
五、心得体会 (12)
附录
1.程序清单 (13)
2.硬件图 (23)
六、参考文献 (24)
摘要
此次设计使用AT89C51单片机为核心控制元件,设计一个简易的抢答器,与数码管、报警器等构成八路抢答器,利用了单片机的延时电路、按键复位电路、时钟电路、定时/中断电路等。
设计的抢答器具有实时显示抢答选手的号码和抢答时间的特点,而复位电路,则使其能再开始新的一轮答题和比赛,与此同时还利用汇编语言编程,使其能够实现一些基本的功能。
本次设计系统实用性强、判断精确、操作简单、扩展功能强等。
它的功能实现是比赛开始,主持人读完题之后按下总开关,则计时开始,此时数码管开始进行1s的减计时,直到有一个选手按下抢答按钮,这时对应的数码管上会显示出该选手的编号和抢答所用的时间,同时该选手的报警器也会发出声音,来提示有人抢答本题。
如果在规定的30s时间内没有选手做出抢答,则此题作废,即开始重新一轮的抢答。
关键词:单片机、抢答器、数码管、报警器
一、绪论
1、单片机抢答器的背景
二十世纪跨越了三个“电”的时代,即电气时代、电子时代和现已进入的电脑时代。
这种电脑,通常是指个人计算机,简称PC机。
它由主机、键盘、显示器等组成。
还有一类计算机,大多数人却不怎么熟悉。
这种计算机就是把智能赋予各种机械的单片机(亦称微控制器)。
单片机的最小系统只用了一片集成电路,即可进行简单运算和控制。
因为它体积小,通常都藏在被控机械的“肚子”里。
它在整个装置中,起着有如人脑的作用,要是它出了毛病,那么整个装置就将瘫痪。
现在,这种单片机的使用领域已十分广泛,如智能仪表、实时工控、通讯设备、导航系统、家用电器等。
各种产品一旦用上了单片机,就能起到使产品升级换代的功效,常在产品名称前冠以形容词--“智能型”。
如智能型洗衣机等。
现在有些工厂的技术人员或其它业余电子开发者搞出来的某些产品,不是电路太复杂,就是功能太简单且极易被仿制。
究其原因,可能就卡在产品未使用单片机或其它可编程逻辑器件上。
在知识竞赛中,特别是做抢答题时,在抢答过程中,为了更确切的知道哪一组或哪一位选手先抢答到题,必须要有一个系统来完成这个任务。
若在抢答中,只靠人的视觉(或者是听觉)是很难判断出哪一组(或哪一个选手)先抢答到题的。
利用单片机编程来设计抢答器,可以使以上问题得以解决,即使两组的抢答时间相差几微秒,也能轻松的分辨出哪一组(或哪个选手)先抢答到题的。
本文主要介绍了抢答器的工作原理及设计,以及它的实际用途。
2、单片机的应用
单片机广泛应用于仪器仪表、家用电器、医用设备、航空航天、专用设备的智能化管理及过程控制等领域,大致可分如下几个范畴:
1.在智能仪器仪表上的应用
单片机具有体积小、功耗低、控制功能强、扩展灵活、微型化和使用方便等优点,广泛应用于仪器仪表中,结合不同类型的传感器,可实现诸如电压、功率、频率、湿度、温度、流量、速度、厚度、角度、长度、硬度、元素、压力等物理量的测量。
采用单片机控制使得仪器仪表数字化、智能化、微型化,且功能比起采用电子或数字电路更加强大。
例如精密的测量设备(功率计,示波器,各种分析仪)。
2.在工业控制中的应用
用单片机可以构成形式多样的控制系统、数据采集系统。
例如工厂流水线的智能化管理,电梯智能化控制、各种报警系统,与计算机联网构成二级控制系统等。
3.在家用电器中的应用
可以这样说,现在的家用电器基本上都采用了单片机控制,从电饭褒、洗衣机、电冰箱、空调机、彩电、其他音响视频器材、再到电子秤量设备,五花八门,无所不在。
4.在计算机网络和通信领域中的应用
现代的单片机普遍具备通信接口,可以很方便地与计算机进行数据通信,为在计算机网络和通信设备间的应用提供了极好的物质条件,现在的通信设备基本上都实现了单片机智能控制,从手机,电话机、小型程控交换机、楼宇自动通信呼叫系统、列车无线通信、再到日常工作中随处可见的移动电话,集群移动通信,
无线电对讲机等。
5.单片机在医用设备领域中的应用
单片机在医用设备中的用途亦相当广泛,例如医用呼吸机,各种分析仪,监护仪,超声诊断设备及病床呼叫系统等等。
此外,单片机在工商,金融,科研、教育,国防航空航天等领域都有着十分广泛的用途。
3、抢答器的应用
随着我国经济和文化事业的发展,在很多的公开竞争场合要求有公正的竞争裁决,诸如证券、股票交易及各种智力竞赛等,因此出现了抢答器。
抢答器一般是由很多电路组成的,线路复杂,可靠性不高,功能也比较简单,特别是当抢答路数很多时,实现起来就更为困难。
因此我们设计了以单片机为核心的新型智能的抢答器,在保留原始抢答器的基本功能的同时又增加了数码管显示电路实现了其它功能。
抢答器又称为第一信号鉴别器,因此能广泛应用于各种知识竞赛、文艺活动等场合。
二、方案设计
1、总方案设计
抢答器的工作原理是采用单片机最小系统(时钟电路、复位电路),用查询式键盘进行抢答。
采用动态显示组号。
主持人按下开始抢答键后选手才可以开始抢答。
若主持人没有按下开始抢答按纽(P3.0),而有选手抢答则为抢答违规,此时报警器响起并显示此选手的组号,需要主持人按下开始抢答开关重新抢答。
在主持人按下开始抢答按纽(P3.0),蜂鸣响声提示,且数码管进行30秒倒计时(30秒内抢答有效),有选手在30秒抢答,蜂鸣器响声提示并显示他的组号,同时开始60秒倒计时(60秒内必须回答完问题),60秒后主持人按下复位开关 为下一题的抢答做准备;若此30秒内没有选手抢答,则此次抢答作废,由主持人按下复位开关进行下一轮重新抢答。
此次设计包括单片机最小系统、抢答按键 模块(8个按键)、显示模块、抢答开关模块、蜂鸣器音频输出模块。
如下图所示为总体方框图。
2本功
能 (1)、设计一个智力竞赛抢答器,可同时供8名选手或8个代表队参加比赛,他们的编号分别为0、1、2、3、4、5、6、7,各用一个抢答按钮,按钮的编号与选手的编号相对应,分别为S0-S7。
(2)、给节目主持人设置一个控制开关,用来控制系统的清零(编号显示数码管灭灯)和抢答的开始。
(3)、抢答器具有数据锁存和显示的功能。
抢答开始后,若有选手按动抢答按钮,编号立即锁存,并在LED 数码管行显示出选手的编号,扬声器给出音响提
示,同时封锁输入电路,禁止其他选手抢答。
优先抢答的选手的编号一直保持到主持人将系统清零为止。
(4)、如果主持人未按"抢答开始"键,而有人按了抢答按键,此为犯规抢答,LED上不断闪烁FF和犯规报警器并响个不停,直到主持人按下"停止" 键为止。
3、扩展功能
(1)、抢答器具有定时抢答的功能,且一次抢答的时间可以由主持人设定(比如30s)。
当节目主持人按下“开始”键后,要求定时器立即减计时,并用显示器显示,同时扬声器发出短暂的声响,声响持续时间0.5s左右。
(2)、参赛选手在设定的时间内抢答,抢答有效,定时显示器停止工作,显示器上显示选手的编号和抢答时刻的时间,并保持到主持人将系统清零为止。
(3)、如果定时器抢答的时间已到,却没有选手抢答时,本次抢答无效,系统短暂报警,并封锁输入电路,禁止选手超时后抢答。
(4)、P3.0为开始抢答,P3.1为停止,p1.0-p1.7为八路抢答输入, 数码管段选P0口,位选P2口低3位,蜂鸣器输出为P3.6口。
P3.2抢答时间调整,P3.3回答时间调整,P3.4为时间加1调整,P3.5为时间减1调整。
三、硬件电路设计
1、单片机的选择
单片机(SCM)是单片微型计算机(Single Chip Microcomputer)的简称。
它是把中央处理器CPU、随机存储器RAM、只读存储器ROM、I/O接口电路、定时/计数器以及输入输出适配器都集成在一块芯片上,构成一个完整的微型计算机。
它的最大优点是体积小,可放在仪表内部,但存储量小,输入输出适配器简单,功能较低。
目前,单片机在民用和工业测控领域得到最广泛的应用,早已深深地融入人们的生活中。
近年来,AT89C51在我国非常流行,它最大的特点是内部有可以多次重复编程的ROM,并且ROM可以直接用编程器来擦写,使用起来比较方便。
本设计使用到的元器件包括:AT89C51芯片、数码LED显示器、七段LED数码管的译码。
其中AT89C51是系统的核心,它主要负责控制各个部分的协调工作。
在其外围接上复位电路,上拉电阻,数码管,按钮以及振荡器,P1.0-P1.7为抢答输入键接口,数码管段选P0口,位选P2口,蜂鸣器输出为P3.6口。
本课题在选取单片机时,根据课本上的单片机知识,并且充分借鉴了许多成形产品使用单片机的经验,结合自己的实际情况,选择了Intel公司的89C51单片机。
单片机的引脚排列图如图2所示:
图2 AT89C51单片机引脚排列
各条引脚说明如下:
外接晶振引脚XTAL1和XTAL2
① XTAL1内部振荡电路反相放大器的输入端,是外接晶体的一个引脚。
当采用外部振荡器时,此引脚接地。
② XTAL2内部振荡电路反相放大器的输出端。
是外接晶体的另一端。
当采用外部振荡器时,此引脚接外部振荡源。
③RST复位引脚。
④PSEN片外程序存储器开发信号引脚(输出信号)。
⑤ALE提供把地址的低字节锁存到外部锁存器,ALE 引脚以不变的频率(振荡器频率的1/6)周期性地发出正脉冲信号。
因此,它可用作对外输出的时钟,或用于定时目的。
⑥EA片外程序存储器使用信号引脚/编程电源输入引脚。
⑦P0.0~P0.7:P0口8位口线,第一功能作为通用I/O接口,第二功能作为存储器扩展时的地址/数据复用口。
P1.0~P1.7:P1口8位口线,通用I/O接口无第二功能。
P2.0~P2.7:P2口8位口线,第一功能作为通用I/O接口,第二功能作为存储器扩展时传送高8位地址。
P3.0~P3.7:P3口8位口线,第一功能作为通用I/O接口,第二功能作为单片机的控制信号。
2、各模块设计
2.1、单片机最小系统
单片机的最小系统由时钟电路和复位电路组成。
时钟电路中电容器C起稳定振荡频率、快速起振的作用,电容值一般为5~33pF。
本设计中采用大小为30pF 的电容和12MHz的晶振,晶振提供89C51的时钟脉冲使其工作。
复位电路是使单片机初始化,即使单片机重新开始执行程序。
当复位开关按下,RST由高电平变为低电平,则程序从头开始执行。
通常选择C=10~30μF,R=1K,本设计采用的电容值为22μF的电容和电阻为1K的电阻。
在此次课程设计电路中当一个问题结束主持人后按下复位开关后进行下一题的准备。
如下图所示。
图3 单片机最小系统
2.2、抢答按键电路
抢答电路的功能有两个:一是能分辨出选手按键的先后,并锁存优先抢答者的编号,供译码显示电路用;二是要使其他选手的按键操作无效。
89C51的P1口做一个八路抢答按键。
P1口P1.0至P1.7对应1~8号8位选手,当主持人按下开始按钮后,电平由高电平变成低电平传入P3口,此时选手可以开始抢答。
此电路中采用10K的电阻起保护作用。
当某一选手按下抢答按钮后,电平由高电平变成低电平传入P1口,经单片机处理后从P0输出由数码管显示抢答者编号,扬声器给出音响提示。
当有一人抢答以后,由于系统已经接收到了一个电平信号,同一时间内它将不再接受另外的电平信号,所以其他选手将不好再抢答。
2.3、显示器电路
数码管的显示可以分为两种:静态显示和动态显示。
静态显示的段选位和位选位均单独连接,因此占用的I/O接口多,无法扩展多个数码管。
而数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划的同名端连在一起,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,通过分时轮流控制各个数码管的COM端,就使各个数码管轮流受控显示,这就是动态驱动。
数码显示管分为共阳数码管和共阴数码管两种。
本设计采用共阴极数码显示管做显示电路。
由于采用的是共阴的数码显示管,所以只要数码管的各引脚为高电平,那么其对应的二极管就会发光。
数码管要显示抢答违规者编号、正常抢答者编号、抢答倒计时和回答问题时间倒计时,数码管采用动态显示。
段选位接P0口,P0口显示的是抢答者的编号;位选位接P2口,P2口显示的是抢答倒计时和答题倒计时。
电源供电电压为5V,当上拉电阻选用220Ω电阻时灌电流为22mA。
不会损坏单片机的I/O口,同时也可以为数码显示管起到限制电流的保护作用。
图4 显示器电路
3.2.4、蜂鸣器音频输出电路
蜂鸣器是一种电子电路中常用的发声器件,蜂鸣器分为有源蜂鸣器和无源蜂鸣器两种。
提供蜂鸣器发声所需要较高的电流,单片机的I/O口驱动能力有限,而我们知道三极管有电流放大的作用。
蜂鸣器音频输出电路的功能是用来报警,当遇到报警信号时,发出蜂鸣声,以此来提醒操作者。
本电路通过控制不同频率的矩形脉冲来控制蜂鸣器发声。
此次课程设计中只需要一些简单的提示声音,如有抢答违规,开始抢答,抢答时间结束和回答问题时间到的提示声音。
当主持人按下开始按钮,系统接收到一个低电平,此时蜂鸣器响起;当开始抢答后,某一选手按下抢答按钮,系统接收到一个低电平,此时蜂鸣器响起;当还未开始抢答就有选手按下抢答按钮后,此时系统将接收到一个矩形脉冲由高低电平交换运行来控制蜂鸣器,是低电平时蜂鸣器响起,高电平时蜂鸣器停止发声。
图5 蜂鸣器音频输出电路
四、软件设计
1、程序设计
程序设计(Programming)是指设计、编制、调试程序的方法和过程。
在进行微机控制系统设计时,除了系统硬件设计外,大量的工作就是如何根据每个生产对象的实际需要设计应用程序。
在单片机控制系统中,大体上可分为数据处理、过程控制两个基本类型。
数据处理包括:数据的采集、数字滤波、标度变换等。
过程控制程序主要是使单片机按一定的方法进行计算,然后再输出。
为了完成上述任务,在进行软件设计时,通常把整个过程分成若干个部分,每一部分叫做一个模块。
把一个程序分成具有多个明确任务的程序模块,分别编制、调试后再把它们连接在一起形成一个完整的程序,这样的程序设计方法称为模块化程序设计。
所谓“模块”,实质上就是能完成一定功能,并相对独立的程序段,这种程序设计方法称为模块程序设计法。
模块程序设计法的主要优点是:
(1)单个模块比起一个完整的程序易编写、调试及修改。
(2)程序的易读性好。
(3)程序的修改可局部化。
(4)模块可以共存,一个模块可以被多个任务在不同条件下调用。
(5)模块程序允许设计者分割任务和利用已有程序,为设计者提供方便。
本系统软件采用模块化结构,由主程序﹑键盘子程序、显示驱动子程序等构成。
2、主程序设计
为了能够达到抢答的公平、公正、合理,应该在主持人发布抢答命令之前必须先设定抢答的时间,因而在编开始抢答前的程序得先编写设定时间的程序,当时间设好了之后,主持人按开始键发布抢答命令,若在主持人未按开始键之前,有选手提前答题,则为违规抢答,蜂鸣器会发出警告声,并在显示器上显示犯规的选手编号。
当有选手抢答成功,则程序打开定时中断开始倒计时,然后调用键盘扫描子程序,编写键盘扫描程序,其他选手在此之后按键无效。
当在扫描到有人按下了抢答键,马上关闭T0、调用显示程序、封锁键盘。
五、心得体会
通过本次课程设计使我对Proteus仿真软件的使用和汇编语言有了更进一步的了解和掌握。
并且在老师的耐心指导和自己的不懈努力下,我终于顺利的完
成了这次科研实践。
在最初编写过程中,我也曾经因为实践经验的缺乏失落过,也曾经因仿真成功而热情高涨。
特别是Proteus仿真软件的使用,一开始因为对软件不熟悉,要慢慢摸索,后来差不多会了以后,画仿真图又浪费了我大量的时间,最后在不断努力中终于把仿真图画出来了,最后要把写好的程序导入芯片。
其实这也是一大难事,由于对于书本上的很多知识还不能灵活运用,尤其是对程序语言的理解和运用,不能够充分理解每个语句的具体含义,导致编程的程序过于复杂。
但后来通过自己和同学的仔细的分析,并认真分析了原来已有的代码和应有的硬件后,经过多次调试和测试终于成功了。
平心而论,这次课程设计耗费了我不少的心血。
虽说这次课程设计有点辛苦,但是苦中还是有乐的,和同学们相互帮助,当LED亮了起来,喇叭响了起来是对我这段日子以来最好的告慰。
而且对于论文的总体构思也有了很多经验,相信自己经过这一次的训练与学习,对于今后的毕业论文会有更多帮助。
同时在查找资料的过程中我也学到了许多新的知识,在和同学协作的过程中增进同学友谊,使我对团队精神的积极性和重要性有了更加充分的理解,为以后进入社会奠定了一些基础。
附录
1、程序清单
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit wela_hao=P3^0;
sbit wela1=P3^1;
sbit wela2=P3^7;
sbit rest=P3^5;
sbit host=P3^6;
sbit led1=P3^4;//绿灯
sbit led2=P3^3;//红灯
sbit led3=P3^2;//黄灯
sbit key1=P1^0;
sbit key2=P1^1;
sbit key3=P1^2;
sbit key4=P1^3;
sbit key5=P1^4;
sbit key6=P1^5;
sbit key7=P1^6;
sbit key8=P1^7;
uchar hao,shu,shu1,shi,ge,t0,t1,start,flag; uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void init();/*初始函数申明*/
void display(uchar shi,uchar ge,uchar hao); void delay(uint z);
void keyscan();
void main()
{
init();
display(shi,ge,hao);
while(1)
{
if(host==0) //主持人 {
delay(5);
if(host==0)
{
flag=1;
start=1;
delay(5);
while(!host);
}
}
if(rest==0) //复位 {
delay(5);
if(rest==0)
{
shu1=10;
shu=30;
led2=1;
led3=1;
hao=0;
delay(5);
start=1;
delay(5);
while(!rest);
}
}
if(flag==1)
{
if(start==0)//选手按下,倒计时10秒
{
led3=0;
wela1=0;
wela2=0;
delay(1);
TR0=0;
TR1=1;
display(shi,ge,hao);
delay(1);
}
if(start==1)//主持人按下,倒计时30秒
{
led1=0;
wela1=0;
wela2=0;
delay(1);
TR0=1;
TR1=0;
display(shi,ge,hao);
delay(1);
keyscan();
}
}
}
}
void init()/*初始化*/
{
t0=0;
t1=0;
flag=0;
shu=30;
shu1=10;
wela_hao=0;
hao=0;
TMOD=0x11;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
EA=1;
ET0=1;
ET1=1;
TR0=0;
TR1=0;
}
void display(uchar shi,uchar ge,uchar hao)/*数码管动态扫描*/ {
wela1=1;
P0=table[ge];
delay(5);
wela2=1;
P0=table[shi];
delay(5);
wela_hao=0;
P2=table[hao];
delay(5);
}
void keyscan()/*按键扫描函数*/ {
if(key1==0)
{
delay(5);
if(key1==0)
{
hao=1;
P2=table[hao];
start=0;
TR1=1;
TR0=0;
delay(5);
while(!key1);
}
}
if(key2==0)
{
delay(5);
if(key2==0)
{
hao=2;
P2=table[hao];
start=0;
delay(5);
while(!key2);
}
}
if(key3==0)
{
delay(5);
if(key3==0)
{
hao=3;
P2=table[hao]; start=0;
delay(5);
while(!key3);
}
}
if(key4==0)
{
delay(5);
if(key4==0)
{
hao=4;
P2=table[hao]; start=0;
delay(5);
while(!key4); }
if(key5==0)
{
delay(5);
if(key5==0)
{
hao=5;
P2=table[hao]; start=0;
delay(5);
while(!key5);
}
}
if(key6==0)
{
delay(5);
if(key6==0)
{
hao=6;
P2=table[hao]; start=0;
delay(5);
while(!key6);
}
}
if(key7==0)
{
delay(5);
if(key7==0)
{
hao=7;
P2=table[hao];
start=0;
delay(5);
while(!key7);
}
}
if(key8==0)
{
delay(5);
if(key8==0)
{
hao=8;
P2=table[hao];
start=0;
delay(5);
while(!key8);
}
}
}
void delay(uint z)/*延时函数*/
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void time0() interrupt 1/*定时器0*/ {
TL0=(65536-50000)%256;
shi=shu/10;
ge=shu%10;
t0++;
if(t0==20)
{
t0=0;
shu--;
shi=shu/10;
ge=shu%10;
if(shu==0)
{
while(1)
{
shu=0;
hao=0;
led1=1;
led2=0;
wela1=0;
wela2=0;
delay(1);
display(shi,ge,hao); }
}
}
}
void time1() interrupt 3/*定时器1*/ {
TL1=(65536-50000)%256;
shi=shu1/10;
ge=shu1%10;
t1++;
if(t1==20)
{
t1=0;
shu1--;
shi=shu1/10;
ge=shu1%10;
if(shu1==0)
{
while(1)
{
shu1=0;
hao=0;
led1=1;
led3=1;
led2=0;
wela1=0;
wela2=0;
delay(1);
display(shi,ge,hao); }
}
2、硬件图
七、参考文献
[1] 李泉溪. 《单片机原理与应用实例仿真》.北京航天航空大学出版社 2009
年
[2] 江世明. 《基于Proteus的单片机应用技术》. 电子工业出版社 2008年
[3] 范力旻. 《单片机原理与应用》. 北京电子工业出版社2009年
[4] 郭建江. 《单片机技术与应用》. 南京东南大学出版社,2008年
[5] 楼然苗,李光飞.《单片机课程设计指导》. 北京北京航空航天大学出版社,2007年
[6] 万光毅. 《单片机实验与实践教程》. 北京航天航空大学出版社 2003年。