3八位竞赛抢答器课程设计报告.docx
- 文档编号:3573070
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:22
- 大小:114.62KB
3八位竞赛抢答器课程设计报告.docx
《3八位竞赛抢答器课程设计报告.docx》由会员分享,可在线阅读,更多相关《3八位竞赛抢答器课程设计报告.docx(22页珍藏版)》请在冰豆网上搜索。
3八位竞赛抢答器课程设计报告
摘要2
摘要
数字技术作为当今世界上发展最快的一门科学,已被广泛地应用于计算机、自动控制、电子测量仪表、通信等各个领域。
例如,在生活中,很多关于智力竞赛的电视节目的抢答环节就很好的应用了数字技术。
关于竞赛抢答器的设计,最重要的是完成当参赛选手们可以开始抢答后,每次只可能有一个人抢答成功这一功能。
本实验设计中,以八位竞赛抢答器为例,从设计思路、方案的选择与论证、设计基本原理以及仿真结果等系统的介绍这种抢答器实现相应功能的全部过程,并会在实现基本功能的基础上实现部分的拓展功能。
关键字:
单片机、抢答器、89C51、C语言
八路竞赛抢答器设计
1设计意义及要求
1.1设计意义
在很多关于智力竞赛的电视节目上,经常会出现抢答环节,参赛选手们在得到主持人发出的特定口令之后,都会争先恐后地按下抢答器,但每次抢答环节只有可能产生一位抢答成功的选手,同时可以断定这位参赛选手肯定是反应最快按下抢答器的。
设计一个功能类似的八位抢答器不仅能够让大家进一步了解这种抢答器的工作原理,而且还能在功能上提出一些好的想法和思想,甚至可以实现部分新的功能,如果人们不断的进行具有创新性的设计实验,也许过不久那些竞赛类的电视的抢答模式就会发生一定的改变和创新,从而增加了节目的观赏性,进一步丰富大家的娱乐生活。
1.2设计要求
1.以单片机为核心,设计一个八位竞赛抢答器:
同时供八位选手或八个代表队比赛,分别用8个按钮(1号-8号)表示。
2.设置一个系统清除和抢答器控制开关S,开关有主持人控制。
3.抢答器具有锁存与显示功能,即选手按按钮,锁存相应的编号,并在优先抢答器选手的编号一直保持主持人将系统清楚为止。
4.抢答器具有定时抢答功能且一次抢答的时间由主持人设定(如30秒),当主持人启动“开始”键后,定时器进行减计时,同时扬声器发出短暂的声响,持续时间0.5S左右。
5.参赛选手在设定的时间内进行抢答,抢答有效,定时器工作停止,显示器上显示选手的编号和抢答的时间并保持到主持人将系统清除为止,
6.如果定时时间已到,无人抢答,本次抢答无效,系统报警并禁止抢答,定时显示器上显示00。
2方案设计
2.1设计思路
2.1.1模块化设计框架图
图2-1模块化设计框架图
2.1.2各个模块的实现
(1)脉冲发生器的实现
根据本实验的具体要求,锁存器需要有脉冲信号的输入,及需要有相应的脉冲发生器。
(2)数据锁存部分的实现
实验设计要求是制作一个八位竞赛抢答器,需要对代表八位参赛选手的状态(“0”或“1”)进行相应的锁存,为了电路的简化,应该采用D触发器来实现锁存功能,则对于要实现对八位数据的锁存这一功能,可以使用两块集成了四个D触发器的74LS175芯片。
(3)数据编码部分的实现
编码部分是对锁存的数据进行编码,由于只有八个参赛选手,故只需要用八个不同的数字便可以代表所有的参赛选手,只要采用能对八位数据进行编码并能有八种或八种以上的输出的编码器即可达到要求。
(4)数据显示部分的实现
对于这样的一个仅需要显示数字的设计,很容易联想到使用七段数码管来实现的数字的显示,而且七段数码管可以显示16种不同的输出,对于这种只需要有不少于八种的输出的设计来说,七段数码管完全可以达到要求。
一般的七段数码管有10个数据输入端,所以需要有相应的译码器对输送过来的编码后的数据进行译码操作,并且这种译码器的选择必须结合数码管是共阴还是共阳的情况而定。
2.1.3关于实现功能拓展的设计思路
(1)实验设计的基本要求中没有提到主持人实现清零后,数码管该显示什么,这样在设计过程中我们就可以有多重选择了,本设计中设计的是让主持人清零之后,数码管显示FFF。
这一功能可以通过基本的门电路来实现,把主持人和参赛选手接入的信号作为输入信号,通过门电路整合,使得到的输出信号来控制数据显示部分。
(2)设计要求中没有提到参赛选手提前抢答会造成犯规的这一功能,理论上会存在有参赛选手犯规的情况的发生,这样实际中增加一个抢答犯规的功能是有一定的必要性的,同样要实现这一功能,可以通过门电路的组合,收集主持人和参赛选手接入的信号,把输出信号接到一个报警装置上,实现当主持人还未发出开始抢答指令的时候,若有参赛选手抢答了,报警装置会报警的功能。
2.2总体功能框图
下图所示为总体方框图。
其工作原理为:
接通电源后,主持人将开关断开,抢答器处于禁止状态,定时器显示设定时间;主持人将开关接通,宣布开始抢答器工作。
定时器倒计时,扬声器给出声响提示。
选手在定时时间内抢答时,抢答器完成:
优先判断、编号锁存、编号显示、扬声器提示。
当一轮抢答之后,定时器停止、禁止二次抢答、定时器显示剩余时间。
如果再次抢答必须由主持人再次操作状态开关。
2.2总体功能框图
2.3元器件清单
仿真图中所需要的各种元器件如表2.3
表2.3元器件清单
元件名称
型号
数量/个
用途
单片机
AT89C51
1
控制核心
晶振
12MHZ
1
晶振电路
电容
22uF
3
晶振电路
排阻
Respack8
1
上位电阻
电阻
10k
1
复位电路
电源
+5v
3
提供电源
拨码开关
BUTTON_1
13
发出信号
数码管
7SEG-MPX4-BLUE
1
显示电路
3硬件设计
3.1元器件及其作用
在八位抢答器的设计中,我主要用到了AT89C51型号单片机、晶振、电容、排阻、电阻、电源、拨码开关、7SEG-MPX4-BLUE数码管等元器件。
芯片是由ISIS7PROFESSIONAL仿真软件系统提供(AT89C51)。
它主要由CPU,存储器和管脚组成。
所谓排阻就是若干个参数完全相同的电阻,它们的一个引脚都连到一起,作为公共引脚。
其余引脚正常引出。
所以如果一个排阻是由n个电阻构成的,那么它就有n+1只引脚,一般来说,最左边的那个是公共引脚。
它在排阻上一般用一个色点标出来。
排阻一般应用在数字电路上,比如:
作为某个并行口的上拉或者下拉电阻用。
使用排阻比用若干只固定电阻更方便。
排阻有a型和b型的区别。
a型排阻的引脚总是奇数的。
它的左端有一个公共端(用白色的圆点表示),常见的排阻有4、7、8个电阻,所以引脚共有5或8或9个。
B型排阻的引脚总是偶数的。
它没有公共端,常见的排阻有4个电阻,所以引脚共有8个。
图3.1AT89C51单片机图示及引脚排列
3.2原理图设计
根据设计要求及用protues仿真软件做出八位竞赛抢答器电路图如下:
4软件设计
4.1软件设计思路
当主持人启动“开始”键后,定时器进行减计时,同时扬声器发出短暂的声响,持续时间0.5S左右。
参赛选手在设定的时间内进行抢答,抢答有效,定时器工作停止,显示器上显示选手的编号和抢答的时间并保持到主持人将系统清除为止。
如果定时时间已到,无人抢答,系统报警并禁止抢答。
4.2C语言源程序
#include
#defineucharunsignedchar
#defineuintunsignedint
chars;
ucharnum=0;
chartime=20;//抢答时间
chardatitime=30;//答题限时时间
uinttt,t1;//T0,T1定时器定一秒时
bitflag,s_flag=1,b_flag,fall_flag;//标志位
bitK_startcountflag,K_timecountflag;//时间调整标志位
sbitK0=P3^0;
sbitbeep=P3^7;//蜂鸣器
sbitrled=P3^1;//指示灯
sbitK1=P1^0;
sbitK2=P1^1;
sbitK3=P1^2;
sbitK4=P1^3;
sbitK5=P1^4;
sbitK6=P1^5;
sbitK7=P1^6;
sbitK8=P1^7;
sbitK_Time=P3^2;//答题计时键
sbitK_startcount=P3^3;//开始抢答时间调整键
sbitK_timecount=P3^4;//答题计时时间调整键
voiddelay(ucharms)
{
uchary;
for(;ms>0;ms--)
for(y=120;y>0;y--);
}
ucharcodetabledu[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71
};
ucharcodetablewe[]={0XFE,0XFD,0XFB,0XF7};
voidT0_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;
}
voidKey_Scan(void)//开始键扫描
{
if(K0==0)
{
delay(10);
if(K0==0)
{
while(!
K0);
TR0=1;
s=time;
tt=0;
flag=1;
s_flag=1;
b_flag=1;
num=0;
beep=1;
rled=1;
fall_flag=0;//清除违规标志位
K_startcountflag=0;
K_timecountflag=0;
}
}
}
voidScan(void)//八路热键扫描(哪个键先按下,哪个优先级最高)
{
if(K1==0)
{
delay(10);
if(K1==0)
{
while(!
K1);
num=1;//数码管显示1号"1"
TR0=0;//关闭定时器0,时间停止
TR1=1;//打开定时器1,使扬声器响一声
s_flag=0;//关闭开始键标志位,使再按其他七个键不会响应
}
}
if(K2==0)//下面七个键的处理同上
{
delay(10);
if(K2==0)
{
while(!
K2);
num=2;
TR0=0;
TR1=1;
s_flag=0;//重要
}
}
if(K3==0)
{
delay(10);
if(K3==0)
{
while(!
K3);
num=3;
TR0=0;
TR1=1;
s_flag=0;
}
}
if(K4==0)
{
delay(10);
if(K4==0)
{
while(!
K4);
num=4;
TR0=0;
TR1=1;
s_flag=0;
}
}
if(K5==0)
{
delay(10);
if(K5==0)
{
while(!
K5);
num=5;
TR0=0;
TR1=1;
s_flag=0;
}
}
if(K6==0)
{
delay(10);
if(K6==0)
{
while(!
K6);
num=6;
TR0=0;
TR1=1;
s_flag=0;
}
}
if(K7==0)
{
delay(10);
if(K7==0)
{
while(!
K7);
num=7;
TR0=0;
TR1=1;
s_flag=0;
}
}
if(K8==0)
{
delay(10);
if(K8==0)
{
while(!
K8);
num=8;
TR0=0;
TR1=1;
s_flag=0;
}
}
}
voiddisplay(void)
{
if(flag==1)//开始键按下,开始计时抢答
{
if(num!
=0)//如果有人抢答,则显示相应的几号
{
P0=tabledu[num];//显示几号抢到了
P2=tablewe[0];
delay
(2);
P0=0;
P2=0XFF;
}
else//否则没人抢答,则前面不显示几号
{
P0=0;
P2=0XFF;
}
P0=tabledu[s/10];//下面为显示抢答倒计时
P2=tablewe[2];
delay
(2);
P0=0;
P2=0XFF;
P0=tabledu[s%10];
P2=tablewe[3];
delay
(2);
P2=0XFF;
P0=0;
}
else//如果开始键没有按下,则显示FFF(若有违规者,则显示违规号码及FF)或时间调整
{
if(fall_flag==1)//违规显示
{
if(num!
=0)
{
P0=tabledu[num];//显示几号违规了
P2=tablewe[0];
delay
(2);
P0=0;
P2=0XFF;
P0=tabledu[15];//下面显示FF,表示违规了
P2=tablewe[2];
delay
(2);
P0=0;//消隐
P2=0XFF;
P0=tabledu[15];
P2=tablewe[3];
delay
(2);
P0=0;
P2=0XFF;
}
else
{
P0=0;
P2=0XFF;
}
}
else//没有人违规才显示调整时间
{
if(K_startcountflag==1)
{
P0=0X6D;//第一位数码管显示"5(S)"(表示抢答时间调整)
P2=tablewe[0];
delay
(2);
P0=0;
P2=0XFF;
P0=tabledu[time/10];//下面显示调整的抢答时间
P2=tablewe[2];
delay
(2);
P0=0;
P2=0XFF;
P0=tabledu[time%10];
P2=tablewe[3];
delay
(2);
P0=0;
P2=0XFF;
}
elseif(K_timecountflag==1)
{
P0=0X07;//第一位与第二位数码管合起来显示"T",表示答题时间调整
P2=tablewe[0];
delay
(2);
P0=0;
P2=0XFF;
P0=0X31;
P2=tablewe[1];
delay
(2);
P0=0;
P2=0XFF;
P0=tabledu[datitime/10];
P2=tablewe[2];
delay
(2);
P0=0;
P2=0XFF;
P0=tabledu[datitime%10];
P2=tablewe[3];
delay
(2);
P0=0;
P2=0XFF;
}
else//否则显示FFF
{
P0=tabledu[15];
P2=tablewe[0];
delay
(2);
P0=0;
P0=tabledu[15];
P2=tablewe[2];
delay
(2);
P0=0;//消隐
P2=0XFF;
P0=tabledu[15];
P2=tablewe[3];
delay
(2);
P0=0;
P2=0XFF;
}
}
}
}
voidTime_Scan(void)//调整时间键扫描
{
if(K_startcount==0)//抢答时间调整
{
delay(10);
if(K_startcount==0)
{
while(!
K_startcount);
time++;
if(time==50)
{
time=20;
}
K_startcountflag=1;//将抢答时间标志位置1
K_timecountflag=0;//同时关闭答题时间标志位
}
}
if(K_timecount==0)//答题时间调整
{
delay(10);
if(K_timecount==0)
{
while(!
K_timecount);
datitime++;
if(datitime==60)
{
datitime=30;
}
K_timecountflag=1;
K_startcountflag=0;
}
}
}
voidmain(void)
{
T0_Init();
while
(1)
{
Key_Scan();//开始键扫描
if((flag==0)&(s_flag==1))//当开始键没按下及没有人违规时才可进行时间调整
{
Time_Scan();
}
if((flag==1)&(s_flag==0))//当开始键按下及有人抢答才进行开始回答计时倒计时
{
if(K_Time==0)
{
delay(10);
if(K_Time==0)
{
while(!
K_Time);
s=datitime;
TR0=1;
tt=0;
TR1=1;
}
}
}
if((flag==0)&(s_flag==1))//违规
{
Scan();
if(num!
=0)//开始键没有按下时,有人按下了抢答器,则置违规标志位
{
fall_flag=1;
rled=0;
}
}
if((flag==1)&(s_flag==1))//如果开始键按下且抢答键没有人按下,则进行八路抢答键扫描
{
Scan();
}
display();//显示到数码管上
}
}
voidtimer0(void)interrupt1
{
TH0=(65536-2000)/256;//2ms
TL0=(65536-2000)%256;
if(b_flag)//开始(START)键按下,嘟一声(长1秒),表示开始抢答
{
beep=~beep;
}
else
beep=1;
if(s<5)//抢答时间快到报警,隔1秒响一声且红灯闪烁,响三声
{
if(s%2==0)
{
b_flag=1;
rled=0;
}
else
{
b_flag=0;
rled=1;
}
}
tt++;
if(tt==500)//1秒
{
tt=0;
s--;
b_flag=0;//关闭开始键按下响一秒的嘟声
if(s==-1)
{
s=20;
TR0=0;
flag=0;//显示FFF
s_flag=1;
num=0;
rled=1;
}
}
}
voidtimer1(void)interrupt3//定时器1处理有人按下抢答器嘟一声(长1秒)
{
TH1=(65536-2000)/256;
TL1=(65536-2000)%256;
beep=~beep;
t1++;
if(t1==500)
{
t1=0;
TR1=0;
}
}
5软件仿真调试
在软件硬件都已连接设计好以后,我们需要用Keil、preoteus软件对其进行仿真调试。
软件调试是通过对程序的编译、连接、执行来发现程序中存在的语法错误与逻辑错误并加以排除纠正的过程。
图5.1keil调试结果图
Keil、preoteus联调效果图
6总结
在这两周的单片机课程设计实训中,我通过对八位竞赛抢答器的设计学会了运用Keil、preoteus软件,并且对单片机这门课程有了更深一步的了解。
在短时间内学会一门电路设计软件看,并且要使用proteus实现电路的仿真,这些在我眼里都不是很容易完成的任务,但是最后我以及我们的小组均能在规定的时间之内学会proteus的基本操作,单独完成各自的设计,这与小组之间的合作是离不开的,在这里我也更要感谢我们指导老师对我们的谆谆教导!
八位竞赛抢答器这种类似的抢答器在日常生活中应该挺常见的,只是很多人忽视了这种小设计,但它确实在实际生活中有较为广泛地应用,可是即使我们生活中有见到过并且不以为然的东西,等到我们亲自来独立的完成这个作品的设计,分析以及仿真结果分析甚至连接实体电路时,也许就不会觉得那么容易的。
虽然这是一种简单的小设计,但却包含了很多我们刚刚所学过的电路知识,特别是数字电子技术的基础知识,这次课程设计不仅使我们温习了刚学过的知识,也使我们对电路的整体布局有了更深的学习。
在小组方案的设计过程中,我有参与到电路图的布局,新增功能的实现、电路的仿真等环节中。
在小组方案的确定和实际设计过程中,我懂得了团队的力量,小组成员之间相互讨论商量往往能得到更好的方案,能有效地减少思维上的误区,减少仿真过程中出现故障的几率。
通过此次课程设计,我认识到了自身知识储备的不足以及实践动手能力还有待提高,针对于本次设计的结果,我认为我所设计的方案虽然可以实现最基本的功能,但存在着一定的缺陷。
我也希望通过今后的努力学习,在单片机方面能有进一步的提高。
7参考文献
【1】伍时和,《数字电子技术基础》,清华大学出版社,2009
【2】贾秀美,《数字电路硬件设计实践》,高等教育出版社,2008
【3】康华光.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 八位竞赛抢答器课程设计报告 八位 竞赛 抢答 课程设计 报告