八位竞赛抢答器课程设计报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录摘要 (2)
1 设计意义及要求 (3)
1.1 设计意义 (3)
1.2 设计要求 (3)
4
4
4
4
5
5
6
7
7
8 49
9
4.2 C语言源程序 (10)
5 软件仿真调试 (20)
6 总结 (21)
7 参考文献 (22)
摘要
数字技术作为当今世界上发展最快的一门科学,已被广泛地应用于计算机、自动控制、电子测量仪表、通信等各个领域。例如,在生活中,很多关于智力竞赛的电视节目的抢答环节就很好的应用了数字技术。
关于竞赛抢答器的设计,最重要的是完成当参赛选手们可以开始抢答后,每次只可能有一个人抢答成功这一功能。本实验设计中,以八位竞赛抢答器
八路竞赛抢答器设计
1 设计意义及要求
1.1 设计意义
在很多关于智力竞赛的电视节目上,经常会出现抢答环节,参赛选手们
30秒),当主持人启动“开始”键后,定时器进行减计时,同时扬声器发出短暂的声响,持续时间0.5S左右。
5.参赛选手在设定的时间内进行抢答,抢答有效,定时器工作停止,显示器上显示选手的编号和抢答的时间并保持到主持人将系统清除为止,
6.如果定时时间已到,无人抢答,本次抢答无效,系统报警并禁止抢答,定时显示器上显示00。
2 方案设计
2.1 设计思路
2.1.1 模块化设计框架图
块集成了四个D触发器的74LS175芯片。
(3)数据编码部分的实现
编码部分是对锁存的数据进行编码,由于只有八个参赛选手,故只需要用八个不同的数字便可以代表所有的参赛选手,只要采用能对八位数据进行编码并能有八种或八种以上的输出的编码器即可达到要求。
(4)数据显示部分的实现
对于这样的一个仅需要显示数字的设计,很容易联想到使用七段数码管来
实现的数字的显示,而且七段数码管可以显示16种不同的输出,对于这种只需要有不少于八种的输出的设计来说,七段数码管完全可以达到要求。一般的七段数码管有10个数据输入端,所以需要有相应的译码器对输送过来的编码后的数据进行译码操作,并且这种译码器的选择必须结合数码管是共阴还是共阳的情况而定。
下图所示为总体方框图。其工作原理为:接通电源后,主持人将开关断开,抢答器处于禁止状态,定时器显示设定时间;主持人将开关接通,宣布开始抢答器工作。定时器倒计时,扬声器给出声响提示。选手在定时时间内抢答时,抢答器完成:优先判断、编号锁存、编号显示、扬声器提示。当一轮抢答之后,定时器停止、禁止二次抢答、定时器显示剩余时间。如果再次抢答必须由主持人再次操作状态开关。
3 硬件设计
3.1 元器件及其作用
在八位抢答器的设计中,我主要用到了AT89C51型号单片机、晶振、电容、排阻、电阻、电源、拨码开关、7SEG-MPX4-BLUE数码管等元器件。芯片是由ISIS 7 PROFESSIONAL仿真软件系统提供(AT89C51)。它主要由CPU,存储器和管脚组成。所谓排阻就是若干个参数完全相同的电阻,它们的一个引脚都连到一起,作为公共引脚。其余引脚正常引出。所以如果一个排阻是由n个电阻构成的,那么它就有n+1只引脚,一般来说,最左边的那个是公共引脚。它在排阻上一般用一个色点标出来。排阻一般应用在数字电路上,比如:作为某个并行口的上拉或者下拉电阻用。使用排阻比用若干只固定电阻更方便。排阻有a 型和b型的区别。 a型排阻的引脚总是奇数的。它的左端有一个公共端(用白色的圆点表示),常见的排阻有4、7、8个电阻,所以引脚共有5或8或9个。 B型排阻的引脚总是偶数的。它没有公共端,常见的排阻有4个电阻,所以引脚共有8个。
图3.1 AT89C51单片机图示及引脚排列
3.2 原理图设计
根据设计要求及用protues仿真软件做出八位竞赛抢答器电路图如下:
4 软件设计
4.1 软件设计思路
当主持人启动“开始”键后,定时器进行减计时,同时扬声器发出短暂的声响,持续时间0.5S左右。参赛选手在设定的时间内进行抢答,抢答有效,
4.2 C语言源程序
#include
#define uchar unsigned char
#define uint unsigned int
char s;
uchar num=0;
char time=20; //抢答时间
char datitime=30; //答题限时时间
uint tt,t1; //T0,T1定时器定一秒时
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71
};
uchar code tablewe[]={0XFE,0XFD,0XFB,0XF7}; void T0_Init(void)
{
TMOD=0X01;
TH0=(65536-2000)/256;
TL0=(65536-2000)%256;
TH1=(65536-2000)/256;
TL1=(65536-2000)%256;
ET0=1;
ET1=1;
EA=1;
P0=0;
}
void Key_Scan(void) //开始键扫描
{
if(K0==0)
{
delay(10);
if(K1==0)
{
while(!K1);
num=1; //数码管显示1号"1"
TR0=0; //关闭定时器0,时间停止
TR1=1; //打开定时器1,使扬声器响一声
s_flag=0; //关闭开始键标志位,使再按其他七个键不会响应}
}
if(K2==0) //下面七个键的处理同上
{