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

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

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

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

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

单片机课程设计八路抢答器

摘要

随着社会的不断发展和科学技术的不断提高,各种工业自动化不断升级,电子技术得到了飞速发展,基于单片机的控制系统已广泛应用与工业、农业、电力、电子、智能楼宇等行业,微型计算机作为嵌入式控制系统的主体与核心,代替了传统的控制系统的常规电子线路。

本设计是以八路抢答为基本理念,考虑到需设定限时回答的功能,利用AT89C51单片机及外围接口实现的抢答系统,利用单片机的定时器/计数器定时和记数的原理,将软、硬件有机地结合起来,使得系统能够正确地进行计时,同时使数码管能够正确地显示时间和抢答的号码。

用开关做键盘输出,扬声器发生提示,并且有警告灯显示。

关键词:

单片机,抢答器,显示

 

目录

 

第一章概述

1.1课题背景

随着科学技术的发展和普及,各种各样的竞赛越来越多,其中抢答器的作用也就显而易见。

目前很多抢答器基本上采用小规模数字集成电路设计,使用起来不够理想。

因此设计一更易于使用和区分度高的抢答器成了非常迫切的任务。

现在单片机已进入各个领域,以其功耗小、智能化而著称,所以若利用单片机来设计抢答器,便使以上问题得以解决。

1.2课题的意义与发展方向

随着电子技术的发展,抢答器作为一种电子产品,早已广泛应用于企业单位、学校和电视台,为各种知识竞赛、文娱活动提供公正客观快速的裁决。

它能迅速、客观地分辨出哪位选手最先按下的抢答键,大大增强了比赛的公平性,给人们带来了很大的方便。

而随着科学技术的不断发展,以单片机作为主控制器的抢答器占据了主要的地位。

目前数字电子技术已经广泛地应用于计算机、自动控制、电子测量仪表、电视、雷达、通信等各个领域。

例如在现代测量技术中,数字测量仪表不仅比模拟测量仪表精度高,功能高,而且容易实现测量的自动化和智能化。

随着集成技术的发展,尤其是中,大规模和超大规模集成电路的发展,数字电子技术的应用范围将会更广泛地渗透到国民经济的各个部门,并将产生越来越深刻的影响。

 

第二章硬件电路设计

2.1系统的控制要求与总体结构

系统的控制要求:

1.给主持人设置一个开关,用来控制系统的重启(编号显示数码管重置初始时间)和抢答器的倒计时开始。

2.抢答器显示和倒计时的功能。

抢答开始后,若有选手按动抢答器按钮,编号立即锁存,并在LED数码上显示选手的编号,同时扬声器给出音响提示。

此外,要封锁输入电路,禁止其他选手抢答。

系统的总体结构:

图2-1八位抢答器总体电路图

 

2.2外部振荡电路的设计

图2-2八位抢答器外部振荡电路

一般选用石英晶体振荡器。

此电路在加电大约延迟10ms后振荡器起振,在XTAL2引脚产生幅度为3V左右的正弦波时钟信号,其振荡频率为11.0592HZ。

电路中两个电容C1,C2的作用有两个:

一是帮助振荡器起振;二是对振荡器的频率进行微调。

C1,C2的典型值为30PF。

2.3复位电路的设计

单片机的第9脚RST为硬件复位端,只要将该端持续4个机器周期的高电平即可实现复位,复位后单片机的各状态都恢复到初始化状态,其电路图如图2-3所示:

图2-3八位抢答器复位电路

在方案中使用到了硬件复位和软件复位两种功能,由上面的硬件复位可使寄存器及存储器的值都恢复到初始值,而前面的功能提到了倒计时间需要有记忆功能,该功能实现的前提条件就是不能对单片机进行硬件复位,所以设定了软复位功能。

软复位实际上就是当程序执行完毕之后,将程序指针通过一条跳转指令让它跳转到程序执行的起始地址。

2.4显示电路的设计

显示电路使用了七段数码管7SEG-MPX4-CC,属于共阴极的,由高电平点亮。

 

图3-4八位抢答器阴极七段数码管

2.5按钮输入电路的设计

抢答器的输入按钮使用常开开关:

图2-5八位抢答器抢答按键

这些常开开关组成了抢答按键,硬件电路简单,在程序设计上也不复杂,只要在程序中消除在按键过程中产生的“毛刺”

现象就可以了。

这里采用最常用的方法即延时法,其的原理为:

因为“毛刺”脉冲一般持续时间短,约为几ms,而按键的时间一般远远大于这个时间,所以当单片机检测到有按键动静后再延时一段时间(这里取10ms)后再判断此电平是否保持原状态,如果是则为有效按键,否则无效。

2.6报警电路的设计

这里能利用程序来控制单片机P3.1口线反复输出高电平或低电平,即在该口线上产生一定频率的矩形波,接上扬声器就能发出一定频率的声音,再利用延时程序控制“高”“低”电平的持续时间,就能改变输出频率,从而改变音调,使扬声器发出不同的声音。

图2-6八位抢答器报警电路

第三章软件电路设计

 

3.1八位抢答器流程图

八位抢答器流程图如3-1所示

 

 

图3-1八位抢答器流程图

3.2八位抢答器程源序

在目前单片机的发展中,其编程语言主要有C语言和汇编语言。

C语言是高级语言,编写起来比较简单易维护,汇编语言介于机器语言和高级语言之间,更接近于硬件,但编写起来比较冗长。

介于本次程序稍微复杂,所以我们这一组选择的程序采用C语言来编写。

#include

#defineuintunsignedint

#defineucharunsignedchar

//共阴极数码管编码表0-f显示

unsignedcharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,

0x6d,0x7d,0x07,0x7f,0x6f};

//变量定义

sbitBEEP=P3^1;

sbitstart_stop=P3^2;

sbitreset=P3^3;

sbitkey1=P1^0;

sbitkey2=P1^1;

sbitkey3=P1^2;

sbitkey4=P1^3;

sbitkey5=P1^4;

sbitkey6=P1^5;

sbitkey7=P1^6;

sbitkey8=P1^7;

sbitstate=P3^0;

bitstart_stop_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;

uintflag=1;

//延时函数

voiddelay(uintz)

{

uintx,y;

for(x=z;x>0;x--)

for(y=120;y>0;y--);

}

//蜂鸣器发声延时

voidDelayMS(uintx)

{

uchart;

while(x--)

for(t=0;t<100;t++);

}

//数码管显示驱动函数

voiddisplay(ucharnumber,ucharsecond)

{

ucharsecond_first,second_second;

second_first=second/10;

second_second=second%10;

P0=0x00;

P2=0xfe;

P0=table[number];

delay

(2);

P0=0x00;

P2=0xfd;

P0=0x40;

delay

(2);

P0=0x00;

P2=0xfb;

P0=table[second_first];

delay

(2);

P0=0x00;

P2=0xf7;

P0=table[second_second];

delay

(2);

P0=0x00;

}

//蜂鸣器响应按周期t发音

voidPlay(uchart)

{

uchari;

for(i=0;i<1;i++)

{

BEEP=~BEEP;

DelayMS(t);

}

BEEP=0;

}

//开始键扫描函数

voidstart_stop_keyscan()

{

if(start_stop==0)

{

delay(8);

if((start_stop==0)&&(!

start_stop_flag))

{

start_stop_flag=1;

action=1;

TR0=1;

state=0;

}

}

else

{

start_stop_flag=0;

}

}

//八位抢答键扫描函数

ucharkey_scan8()

{

if(key1==0)

{

delay(8);

if((key1==0)&&(!

key1_flag))

{

key1_flag=1;

number=1;

number_display=number;

}

}

else

{

key1_flag=0;

number=0;

}

if(key2==0)

{

delay(8);

if((key2==0)&&(!

key2_flag))

{

key2_flag=1;

number=2;

number_display=number;

}

}

else

{

key2_flag=0;

number=0;

}

if(key3==0)

{

delay(8);

if((key3==0)&&(!

key3_flag))

{

key3_flag=1;

number=3;

number_display=number;

}

}

else

{

key3_flag=0;

number=0;

}

if(key4==0)

{

delay(8);

if((key4==0)&&(!

key4_flag))

{

key4_flag=1;

number=4;

number_display=number;

}

}

else

{

key4_flag=0;

number=0;

}

if(key5==0)

{

delay(8);

if((key5==0)&&(!

key5_flag))

{

key5_flag=1;

number=5;

number_display=number;

}

}

else

{

key5_flag=0;

number=0;

}

if(key6==0)

{

delay(8);

if((key6==0)&&(!

key6_flag))

{

key6_flag=1;

number=6;

number_display=number;

}

}

else

{

key6_flag=0;

number=0;

}

if(key7==0)

{

delay(8);

if((key7==0)&&(!

key7_flag))

{

key7_flag=1;

number=7;

number_display=number;

}

}

else

{

key7_flag=0;

number=0;

}

if(key8==0)

{

delay(8);

if((key8==0)&&(!

key8_flag))

{

key8_flag=1;

number=8;

number_display=number;

}

}

else

{

key8_flag=0;

number=0;

}

if(number_display!

=0)

{

return1;

}

else

{

return0;

}

}

//复位键扫描函数

voidreset_keyscan()

{

if(reset==0)

{

delay(8);

if((reset==0)&&(!

reset_flag))

{

reset_flag=1;

number_display=0;

state=1;

}

}

else

{

reset_flag=0;

}

}

//主函数

voidmain()

{

uintt;

TMOD=0x01;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

EA=1;

ET0=1;

TR0=0;

while

(1)

{

if(number_display!

=0)

Play(number_display/2);//蜂鸣器发声

start_stop_keyscan();

reset_keyscan();

while(action)

{

while(!

key_scan8())

{

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

{

uinti;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

timer0_count++;

if(timer0_count==20)

{

timer0_count=0;

second--;

if(second==0)

{

Play

(2);

TR0=0;

number_display=0;

state=1;

action=0;

}

}

}

 

第四章结论

经过此次课程设计,我明白了任何一个控制系统都是要经过实践和时间的考验方能不断的完善。

而我们自己也应该学会认真、专心,更有毅力的做一件事情,这样我们在以后的学习和生活中才能经得起实践和时间的考验。

同时,通过这次课程设计我发现,只有理论水平提高了;才能够将课本知识与实践相整合,理论知识服务于教学实践,以增强自己的动手能力。

这个课程设计十分有意义,我获得很深刻的经验。

通过这次课程设计,我们知道了理论和实际的距离,也知道了理论和实际想结合的重要性,,也从中得知了很多书本上无法得知的知识。

 

感想

本课程设计是在同学的讨论下和查阅各种资料下完成的,通过这次课程设计,我深刻的认识到了团队力量是多么的强大,也明白了以后再有课程设计之类的或有什么难题要多向周围的人请教,多上网找答案。

而不只是一个人专研。

在此,我还要感谢同组同学的帮忙,在论文资料的收集和实验期间,不管遇到什么困难同组同学都主动给予帮助、认真讨论学习,在此也感谢他们!

 

参考文献

[1]张伟.《单片机原理及应用》,机械工业出版社,2005

[2]张鑫.《单片机原理及应用》,电子工业出版社,2005

[3]曹国清.《数学电路与逻辑设计》中国矿业大学出版社,2004

[4]任致程.《经典集成电路400例》机械工业出版社,2002

[5]薛栋梁.《单片机原理及应用》,中国水利水电出版社,2001

[6]吴金戎,沈庆阳等.《8051单片机实践与应用》,清华大学出版社,2001

[7]杨晓辉、张彤、姜俊海.智能抢答器的设计与制作[J].长春大学学报.2000.06:

24-25

[8]张培仁.《MCS-51单片机原理与应用》[M].北京:

清华大学出版社,2003.

 

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

当前位置:首页 > 小学教育 > 其它课程

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

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