单片机课设八路抢答器.docx
《单片机课设八路抢答器.docx》由会员分享,可在线阅读,更多相关《单片机课设八路抢答器.docx(11页珍藏版)》请在冰豆网上搜索。
单片机课设八路抢答器
1设计方案及原理
1.1抢答器设计方案
(1)抢答器同时供8名选手或8个代表队比赛,分别用8个按钮“1”~“8”表示。
(2)设置一个系统清除和抢答控制的“开始”开关,该开关由主持人控制。
(3)抢答器具有锁存与显示功能。
即选手按动按钮,锁存相应的编号,并在LED数码管上显示,同时扬声器发出报警声响提示。
选手抢答实行优先锁存,优先抢答选手的编号一直保持到主持人将系统清除为止。
(4)抢答器具有定时抢答功能,且一次抢答的时间由主持人设定(如30秒)。
当主持人启动"开始"键后,定时器进行减计时,同时扬声器发出短暂的声响以提示抢答开始。
(5)参赛选手在设定的时间内进行抢答,抢答有效,定时器停止工作,显示器上显示选手的编号和抢答的时间,并保持到主持人将系统清除或者答题计时结束为止。
(6)如果定时时间已到,无人抢答,本次抢答无效,系统报警并禁止抢答,定时显示器上显示FF。
1.2抢答器设计原理
该抢答器供不多于8名选手或8个代表队的抢答比赛使用。
每个选手的座位前安装一只抢答按钮开关和一只信号灯。
主持人的座位前安装一只复原按钮开关、一只蜂鸣器和一只抢答器工作状态指示灯。
每当主持人口头发出允许抢答的号令并按下开始抢答按钮之后,哪个队先按下座位上的按钮开关,该座位的信号灯就先被点亮,同时封锁其他按钮开关的活动,并且熄灭主持人座位上的状态指示灯和发出提示声,以表明此次抢答动作已经完成。
在主持人确认后,按下复原按钮,状态指示灯重新点亮,为下一次的抢答作好准备。
电路中的蜂鸣器LS是一只带有助音腔的压电陶瓷蜂鸣器,用于模拟发出报警声的功率放大器和喇叭。
LS可以看作是一个电容性负载,本身不能流过直流电流。
发声的原理是,作用在两个电极极板的电位在发生变化时,陶瓷材料就发生弯曲,从而振动空气发出声音。
2系统硬件设计
2.1AT89C51单片机介绍
AT89C51单片机主要有以下部件构成:
八位微处理器CPU、振荡电路、总线控制部件、中断控制部件、片内Flash存储器、片内RAM、并行I/O接口、定时器和串行I/O接口。
AT89C51单片机内部由CPU、4KB的FPEROM,128B的RAM,两个16位的定时/计数器T0和T1,4个8位的I/O端P0、P1、P2、P3等组成。
单片微机内部最核心的部分是CPU。
AT89C51的主要引脚如图3.1所示。
图3.1AT89C51引脚图
2.2系统原理电路图
基于以上各个模块的设计,可以设计出系统原理电路图,P3.0为开始抢答,P3.1为停止,P1.0-P1.7为八路抢答输入,数码管段选P0口,位选P2口低3位,蜂鸣器输出为P3.6口,RST复位,XTAL1和XTAL2接晶振电路。
系统原理电路图如图3.2所示。
图3.2系统原理电路图
3系统软件设计
为了能够达到抢答的公平、公正、合理,应该在主持人发布抢答命令之前必须先设定抢答的时间,因而在编开始抢答前的程序得先编写设定时间的程序,当时间设好了之后,主持人发布抢答命令按下P3.0按键,程序开始打开定时中断开始倒计时,然后调用键盘扫描子程序,编写键盘扫描程序。
当在扫描到有人按下了答题键,马上关闭T0、调用显示程序、封锁键盘。
3.1系统流程图设计
系统流程图如图4.1所示。
图4.1系统流程图
4总结
本次设计按照题目要求,基于单片机,利用较合适的控制算法,成功的实现了抢答器的基本功能。
硬件原理结构简单,减少硬件成本和繁琐的电脑连接;软件设计方面,设计简单,可塑造性强,便于维护。
通过此次单片机课程设计,我学到了很多的东西,不仅巩固了以前所学过的知识,而且在调试仿真的实际操作过程中加强了实践能力。
这使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,才能提高自己的综合实力。
在此次设计的过程中,也遇到了不少困难,发现了自己的不足之处,如对以前所学过的知识理解得不够深刻,掌握得不够牢固,这次课程设计之后,一定把以前所学过的知识重新温故,提高对知识的实际应用能力。
参考文献
[1]冯育长.单片机系统设计与实例指导[M].西安:
西安电子科技大学出版社,2007.
[2]李华,王思明,张明敏.单片机及应用[M].兰州:
兰州大学出版社,2001.
[3]高伟.AT89单片机原理及应用[M].北京:
国防工业出版社,2008.
附录1(程序代码)
序名:
QuizBuzzer.c
源程序代码如下:
#include
#defineuintunsignedint
#defineucharunsignedchar
unsignedcharcodetable[]={0x40,0x79,/*共阴极数码管编码表0-f显示*/
0x24,0x30,0x19,0x12,0x02,0x78,0x00,
0x10,0x08,0x03,0x46,0x21,0x06,0x0e};
sbitstart=P3^6;/*变量定义*/
sbitstop=P3^5;
sbitreset=P3^7;
sbitkey1=P1^0;
sbitkey2=P1^1;
sbitkey3=P1^2;
sbitkey4=P1^3;
sbitkey5=P1^4;
sbitkey6=P1^5;
sbitkey7=P1^6;
sbitkey8=P1^7;
sbitbuzzer=P3^4;
bitstart_flag=0;
bitstop_flag=0;
bitkey1_flag=0;
bitkey2_flag=0;
bitkey3_flag=0;
bitkey4_flag=0;
bitkey5_flag=0;
bitkey6_flag=0;
bitkey7_flag=0;
bitkey8_flag=0;
bitreset_flag=0;
bitaction=0;
ucharsecond=20;
uchartimer0_count=0;
ucharnumber=0;
ucharnumber_display=0;
voiddelay(uintz)/*延时函数delay()*/
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
voiddisplay(ucharnumber,ucharsecond)/*数码管显示驱动函数display()*/
{
ucharsecond_first,second_second;
second_first=second/10;
second_second=second%10;
P2=0xfe;
P0=table[number];
delay
(2);
P2=0xfd;
P0=0x3f;
delay
(2);
P2=0xfb;
P0=table[second_first];
delay
(2);
P2=0xf7;
P0=table[second_second];
delay
(2);
}
voidstart_keyscan()/*开始键扫描函数start_keyscan()*/
{
if(start==0)
{
delay(8);
if((start==0)&&(!
start_flag))
{
start_flag=1;
action=1;
TR0=1;
}
}
else
{
start_flag=0;
}
}
voidfengming()/*蜂鸣函数fengming(),脉宽t=1ms周期T
{=2ms,频率f=0.5khz,用以报警*/
buzzer=0;/*给P3.7口送高电平*/
delay(100);/*延时1ms*/
buzzer=1;
delay(100);
}
voidmain()/*主函数main()*/
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=0;
while
(1)
{
start_keyscan();
reset_keyscan();
while(action==1)
{if(second<=5&&second>0)
fengming();
while(!
key_scan8()&&!
stop==0)
{
display(number_display,second);
if(second==0)
{
second=20;
break;
}
}
TR0=0;
display(number_display,second);
action=0;
break;
}
display(number_display,second);
}
}
voidtimer0()interrupt1/*中断服务函数timer0()interrupt1*/
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
timer0_count++;
if(timer0_count==20)
{
timer0_count=0;
second--;
if(second<=5&&second>0)
fengming();
if(second==0)
{
TR0=0;
number_display=0;
action=0;
}
}
}
附录2(仿真图)
开始时的仿真图和抢答后的仿真图分别如图1、2所示。
图1开始时仿真图
图2抢答后仿真图