单片机课设八路抢答器.docx

上传人:b****5 文档编号:11757144 上传时间:2023-03-31 格式:DOCX 页数:11 大小:157.41KB
下载 相关 举报
单片机课设八路抢答器.docx_第1页
第1页 / 共11页
单片机课设八路抢答器.docx_第2页
第2页 / 共11页
单片机课设八路抢答器.docx_第3页
第3页 / 共11页
单片机课设八路抢答器.docx_第4页
第4页 / 共11页
单片机课设八路抢答器.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

单片机课设八路抢答器.docx

《单片机课设八路抢答器.docx》由会员分享,可在线阅读,更多相关《单片机课设八路抢答器.docx(11页珍藏版)》请在冰豆网上搜索。

单片机课设八路抢答器.docx

单片机课设八路抢答器

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抢答后仿真图

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 育儿理论经验

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1