基于51单片机八路抢答器的设计.docx

上传人:b****1 文档编号:3369260 上传时间:2023-05-05 格式:DOCX 页数:48 大小:32.89KB
下载 相关 举报
基于51单片机八路抢答器的设计.docx_第1页
第1页 / 共48页
基于51单片机八路抢答器的设计.docx_第2页
第2页 / 共48页
基于51单片机八路抢答器的设计.docx_第3页
第3页 / 共48页
基于51单片机八路抢答器的设计.docx_第4页
第4页 / 共48页
基于51单片机八路抢答器的设计.docx_第5页
第5页 / 共48页
基于51单片机八路抢答器的设计.docx_第6页
第6页 / 共48页
基于51单片机八路抢答器的设计.docx_第7页
第7页 / 共48页
基于51单片机八路抢答器的设计.docx_第8页
第8页 / 共48页
基于51单片机八路抢答器的设计.docx_第9页
第9页 / 共48页
基于51单片机八路抢答器的设计.docx_第10页
第10页 / 共48页
基于51单片机八路抢答器的设计.docx_第11页
第11页 / 共48页
基于51单片机八路抢答器的设计.docx_第12页
第12页 / 共48页
基于51单片机八路抢答器的设计.docx_第13页
第13页 / 共48页
基于51单片机八路抢答器的设计.docx_第14页
第14页 / 共48页
基于51单片机八路抢答器的设计.docx_第15页
第15页 / 共48页
基于51单片机八路抢答器的设计.docx_第16页
第16页 / 共48页
基于51单片机八路抢答器的设计.docx_第17页
第17页 / 共48页
基于51单片机八路抢答器的设计.docx_第18页
第18页 / 共48页
基于51单片机八路抢答器的设计.docx_第19页
第19页 / 共48页
基于51单片机八路抢答器的设计.docx_第20页
第20页 / 共48页
亲,该文档总共48页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

基于51单片机八路抢答器的设计.docx

《基于51单片机八路抢答器的设计.docx》由会员分享,可在线阅读,更多相关《基于51单片机八路抢答器的设计.docx(48页珍藏版)》请在冰点文库上搜索。

基于51单片机八路抢答器的设计.docx

基于51单片机八路抢答器的设计

毕业设计(论文)

题目:

基于51单片机八路抢答器的设计

系部:

专业:

学号:

学生姓名:

指导教师姓名:

指导教师职称:

2013年xx月xx日

摘要

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

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

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

现在单片机已进入各个领域,以其功耗小、智能化而著称,所以若利用单片机来设计抢答器,便使以上问题得以解决.针对以上情况,本文设计出以STC89C52RC单片机为核心的八路抢答器。

我们采用了数字显示器直接指示,自动锁存显示结果,并自动复位的设计思想,它能根据不同的抢答输入信号,经过单片机的控制处理并产生不同的与输入信号相对应的输出信号,最后通过LED数码管显示相应的路数,即使两组的抢答时间相差几微秒,也可分辨出是哪组优先按下的按键,它充分利用了单片机系统的优点,具有结构简单、功能强大、可靠性好、实用性强的特点。

本设计是以八路抢答为基本理念。

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

用开关做键盘输出,扬声器发生提示。

同时系统能够实现:

在抢答中,只有开始后抢答才有效,如果在开始抢答前抢答为犯规;满时后系统计时自动复位及主控强制复位;按键锁定,在有效状态下,按键无效非法。

【关键词】STC89C52RC共阴数码管按键蜂鸣器

前言

最近几年来,随着科技的飞速发展,单片机领域正在不断的走向社会各个角落,还带动传统控制检测日新月异更新。

在实时运作和自动控制的单片机应用到系统中,单片机如今是作为一个核心部件来使用,仅掌握单片机方面知识是不够的,还应根据其具体硬件结构,以及针对具体应用对象特点的软件结合,加以完善。

“单片机原理及应用课程设计”是电子类专业的学科基础科,它是继“汇编语言程序设计”,“接口技术”等课程之后开出的实践环节课程。

第一章工作原理

1.1设计目标

1、同时供8名选手比赛,分别用8个按钮K1~K8表示。

2、设置一个系统抢答控制开关K0,该开关由主持人控制。

3、抢答器具有锁存与显示功能。

即选手按动按钮,锁存相应的编号,扬声器发出声响提示,并在七段数码管上显示选手号码。

选手抢答实行优先锁存,优先抢答选手的编号一直保持到主持人将系统清除为止。

4、抢答器具有定时抢答功能,且一次抢答的时间由主持人设定(如30秒)。

当主持人启动"开始"键后,定时器进行减计时。

5、参赛选手在设定的时间内进行抢答,抢答有效,定时器停止工作,显示器上显示选手的编号和抢答的时间,并保持到主持人将系统清除为止。

在这段时间如果定时时间已到,无人抢答,本次抢答无效,系统报警并禁止抢答,定时显示器上显示00。

1、在抢答中,只有开始后抢答才有效,如果在开始抢答前抢答为犯规。

2、抢答限定时间和回答问题的时间是在10~60s设定。

3、可以显示是哪位选手有效抢答和无效抢答,正确按键后有音提示。

4、抢答时间和回答问题时间倒记时显示,时间完后系统自动复位。

5、按键锁定,在有效状态下,按键无效非法。

第二章硬件设计与原理

以STC89C52RC单片机为核心,起着控制作用。

系统包括数码管显示电路、复位电路、时钟电路、按键输入电路和蜂鸣器报警电路。

设计思路分为六个模块:

复位电路、晶振电路模块、STC89C52RC、数码管显示电路、按键输入电路和蜂鸣器报警电路这六个模块。

2.1总设计框图

2.2硬件设计分析

2.2.1电源的设计

系统电源使用外接直流5伏。

2.2.2单片机最小系统

51单片机是对目前所有兼容intel8031指令系统的单片机的统称。

该系列单片机的始祖是intel的8031单片机,后来随着技术的发展,成为目前广泛应用的8为单片机之一。

单片机是在一块芯片内集成了CPU、RAM、ROM、定时器/计数器和多功能I/O口等计算机所需要的基本功能部件的大规模集成电路,又称为MCU。

51系列单片机内包含以下几个部件:

一个8位CPU;一个片内振荡器及时钟电路;

4KB的ROM程序存储器;

一个128B的RAM数据存储器;

寻址64KB外部数据存储器和64KB外部程序存储空间的控制电路;

32条可编程的I/O口线;

两个16位定时/计数器;

一个可编程全双工串行口;

5个中断源、两个优先级嵌套中断结构。

如图2-2-1所示为STC89C52RC单片机基本构造,其基本性能介绍如下:

图2-2-1STC89C52RC单片机

STC89C52RC本身内含40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中端口,3个16位可编程定时计数器,2个全双工串行通信口,STC89C51RC可以按照常规方法进行编程,但不可以在线编程。

其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。

STC89C52RC的主要特性如下表所示:

兼容MCS—51指令系统

32个可编程I/O线

4k字节可编程闪烁存储器

可编程UARL通道

三个16位可编程定时/计数器中断

时钟频率0-24MHz

2个外部中断源,共8个中断源

256×8bit内部RAM

2个读写中断口线

可直接驱动LED

软件设置睡眠和唤醒功能

低功耗空闲和掉电模式

表2-2-1STC89C52RC主要功能描述

STC89C52RC为40脚双列直插封装的8位通用微处理器,采用工业标准的C51内核,在内部功能及管脚排布上与通用的8xc52相同,其主要用于会聚调整时的功能控制。

功能包括对会聚主IC内部寄存器、数据RAM及外部接口等功能部件的初始化,会聚调整控制,会聚测试图控制,红外遥控信号IR的接收解码及与主板CPU通信等。

主要管脚有:

XTAL1(19脚)和XTAL2(18脚)为振荡器输入输出端口,外接12MHz晶振。

RST/Vpd(9脚)为复位输入端口,外接电阻电容组成的复位电路。

VCC(40脚)和VSS(20脚)为供电端口,分别接+5V电源的正负端。

P0~P3为可编程通用I/O脚,其功能用途由软件定义,在本设计中,P0端口(32~39脚)被定义为N1功能控制端口,分别与N1的相应功能管脚相连接,13脚定义为IR输入端,10脚和11脚定义为I2C总线控制端口,分别连接N1的SDAS(18脚)和SCLS(19脚)端口,12脚、27脚及28脚定义为握手信号功能端口,连接主板CPU的相应功能端,用于当前制式的检测及会聚调整状态进入的控制功能。

P0口:

P0口是一组8位漏极开路型双向I/O口,也即地址/数据总线复用口。

作为输出口用时,每位能吸收电流的方式驱动8个TTL逻辑门电路,对端口P0写“1”时,可作为高阻抗输入端用。

在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。

在Flash编程时,P0口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻。

P1口:

P1是一个带内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。

对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。

作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。

与AT89C51不同之处是,P1.0和P1.1还可分别作为定时/计数器2的外部计数输入(P1.0/T2)和输入(P1.1/T2EX)。

Flash编程和程序校验期间,P1接收低8位地址。

P2口:

P2是一个带有内部上拉电阻的8位双向I/O口,P2的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。

对端口P2写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。

在访问外部程序存储器或16位地址的外部数据存储器(例如执行MOVX@DPTR指令)时,P2口送出高8位地址数据。

在访问8位地址的外部数据存储器(如执行MOVX@RI指令)时,P2口输出P2锁存器的内容。

Flash编程或校验时,P2亦接收高位地址和一些控制信号。

P3口:

P3口是一组带有内部上拉电阻的8位双向I/O口。

P3口输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。

对P3口写入“1”时,它们被内部上拉电阻拉高并可作为输入端口。

此时,被外部拉低的P3口将用上拉电阻输出电流(IIL)。

P3口除了作为一般的I/O口线外,更重要的用途是它的第二功能P3口还接收一些用于Flash闪速存储器编程和程序校验的控制信号。

RST:

复位输入。

当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。

ALE/PROG:

当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。

一般情况下,ALE仍以时钟振荡频率的1/6输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。

要注意的是:

每当访问外部数据存储器时将跳过一个AL脉冲。

对Flash存储器编程期间,该引脚还用于输入编程脉冲(PROG)。

如有必要,可通过对特殊功能寄存器(SFR)区中的8EH单元的D0位置位,可禁止ALE操作。

该位置位后,只有一条MOVX和MOVC指令才能将ALE激活。

此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE禁止位无效。

PSEN:

程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当STC89C51RC由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN有效,即输出两个脉冲。

在此期间,当访问外部数据存储器,将跳过两次PSEN信号。

EA/VPP:

外部访问允许。

欲使CPU仅访问外部程序存储器(地址为0000H—FFFFH),EA端必须保持低电平(接地)。

需注意的是:

如果加密位LB1被编程,复位时内部会锁存EA端状态。

如EA端为高电平(接Vcc端),CPU则执行内部程序存储器中的指令。

Flash存储器编程时,该引脚加上+12V的编程允许电源Vpp,当然这必须是该器件是使用12V编程电压Vpp。

XTAL1:

振荡器反相放大器的及内部时钟发生器的输入端。

XTAL2:

振荡器反相放大器的输出端。

单片机最小原理图如图2-2-2所示。

图2-2-2单片机最小系统

单片机最小系统说明:

时钟信号的产生:

在MCS-51芯片内部有一个高增益反相放大器,其输入端为芯片引脚XTAL1,其输出端为引脚XTAL2。

而在芯片的外部,XTAL1和XTAL2之间跨接晶体振荡器和微调电容,从而构成一个稳定的自激振荡器,这就是单片机的时钟振荡电路。

时钟电路产生的振荡脉冲经过触发器进行二分频之后,才成为单片机的时钟脉冲信号。

一般地,电容C2和C3取30pF左右,晶体的振荡频率范围是1.2-12MHz。

如果晶体振荡频率高,则系统的时钟频率也高,单片机的运行速度也就快。

单片机复位使CPU和系统中的其他功能部件都处在一个确定的初始状态下,并从这个状态开始工作。

单片机复位条件:

必须使9脚加上持续两个机器周期(即24个振荡周期)的高电平。

2.2.3数码管显示电路

显示系统采用四位一体数码管来显示,LED显示屏作为大型显示设备的一种,具有亮度高、价格低、寿命长、维护简便等优点。

LED数码管的结构简单,分为七段和八段两种形式,也有共阳和共阴之分。

以八段共阳管为例,它有8个发光二极管(比七段多一个发光二极管,用来显示sP,即点),每个发光二极管的阳极连在一起,如图(图2-2-4)所示。

这样,一个LED数码管就有I根位选线和8根段选线,要想显示一个数值,就要分别对它们的高低电平来加以控制。

为方便起见,本文主要讨论共阴八段LED数码显示管,其他类形的显示管与其类似。

图2-2-3LED数码管

LED灯的显示原理:

通过同名管脚上所加电平的高低来控制发光二极管是否点亮而显示不同的字形,如H,G,F,E,D,C,B,A全亮显示为8,采用共阴极连接驱动代码,代码表如下表(表2-2-2)所示。

表2-2-2驱动代码表

显示数值

H,G,F,E,D,C,B,A

驱动代码

0

00111111

3FH

1

00000110

06H

2

01011011

5BH

3

01001111

4FH

4

01100110

66H

5

01101101

6DH

6

01111101

7DH

7

00000111

07H

8

01111111

7FH

9

01101111

6FH

2.2.4按键输入电路

按键是由一组按压式或触摸式开关构成的阵列,是一种常用的输入设备。

键盘可分为编码式键盘和非编码式键盘两种。

1.编码键盘通过硬件电路产生被按按键的键码,这种键盘所需程序简单,但硬件电路复杂、价格昂贵通常不被单片机系统采用。

2.非编码键盘常用一些按键排列成行列矩阵,其硬件逻辑与按键编码不存在严格的对应关系,而要由所用的程序来决定。

非编码键盘的硬件接口简单,但是要占用较多的CPU时间,通常采用可编程键盘管理芯片来克服这个缺点。

本设计使用两种按键,一种是按键式非编码键盘和轻触式非编码开关。

在接线时由于有四个引脚,连接时需要用万用表进行测量,然后接通两个引脚,原理图如下。

要进行数据的计算就必须先进行数据的输入,也就必须确定按键输入的数值是什么,这就需要对键盘进行扫描,从而确定究竟是哪个键按下。

图2-2-4按键电路

2.2.5报警与指示电路

图2-2-5报警与指示电路

第三章软件设计与分析

3.1软件设计的组成

该系统由延时子函数、初始化子函数、开始键扫描子函数、选手抢答按键扫描子函数、显示子函数、调整时间键扫描子函数、定时器0中断子函数、定时器1中断子函数、主函数和数据定义这几部分组成。

3.2各部分软件分析

3.2.1延时子函数

//延时子函数

voiddelay(ucharx)

{

uchary;

for(;x>0;x--)

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

}

3.2.2初始化子函数

//初始化子函数

voidinit()

{

TMOD=0x11;

TH0=(65536-2000)/256;

TL0=(65536-2000)%256;

TH1=(65536-2000)/256;

TL1=(65536-2000)%256;

ET0=1;

ET1=1;

EA=1;

P0=0x00;

time1=10;

time2=10;

flag2=1;

}

3.2.3开始键扫描子函数

//开始键扫描子函数

voidkey1()

{

uchari=100;

if(K0==0)

{

delay(10);

if(K0==0)

{

while(K0==0&&i)

{

i--;

delay(10);

}

TR0=1;

s=time1;

m=0;

flag1=1;

flag2=1;

flag3=1;

num=0;

beep=1;

D0=1;

flag4=0;//清除违规标志位

aa=0;

bb=0;

}

}

}

3.2.4选手抢答按键扫描子函数

//选手抢答按键扫描子函数

voidkey()

{

if(K1==0)

{

delay(10);

if(K1==0)

{

while(!

K1);

num=1;//数码管显示1号"1"

TR0=0;//关闭定时器0,时间停止

TR1=1;//打开定时器1,使扬声器响一声

flag2=0;//关闭开始键标志位,使再按其他七个键不会响应

}

}

if(K2==0)//下面七个键的处理同上

{

delay(10);

if(K2==0)

{

while(!

K2);

num=2;

TR0=0;

TR1=1;

flag2=0;//重要

}

}

if(K3==0)

{

delay(10);

if(K3==0)

{

while(!

K3);

num=3;

TR0=0;

TR1=1;

flag2=0;

}

}

if(K4==0)

{

delay(10);

if(K4==0)

{

while(!

K4);

num=4;

TR0=0;

TR1=1;

flag2=0;

}

}

if(K5==0)

{

delay(10);

if(K5==0)

{

while(!

K5);

num=5;

TR0=0;

TR1=1;

flag2=0;

}

}

if(K6==0)

{

delay(10);

if(K6==0)

{

while(!

K6);

num=6;

TR0=0;

TR1=1;

flag2=0;

}

}

if(K7==0)

{

delay(10);

if(K7==0)

{

while(!

K7);

num=7;

TR0=0;

TR1=1;

flag2=0;

}

}

if(K8==0)

{

delay(10);

if(K8==0)

{

while(!

K8);

num=8;

TR0=0;

TR1=1;

flag2=0;

}

}

}

3.2.5显示子函数

//显示子函数

voiddisplay()

{

if(flag1==1)//开始键按下,开始计时抢答

{

if(num!

=0)//如果有人抢答,则显示相应的几号

{

P0=table1[num];//显示几号抢到了

P2=table2[0];

delay

(2);

P0=0;

P2=0xff;

}

else//否则没人抢答,则前面不显示几号

{

P0=0x00;

P2=0xff;

}

P0=table1[s/10];//下面为显示抢答倒计时

P2=table2[2];

delay

(2);

P0=0;

P2=0xff;

P0=table1[s%10];

P2=table2[3];

delay

(2);

P2=0xff;

P0=0x00;

}

else//如果开始键没有按下,则显示FFF(若有违规者,则显示违规号码及FF)或时间调整

{

if(flag4==1)//违规显示

{

if(num!

=0)

{

P0=table1[num];//显示几号违规了

P2=table2[0];

delay

(2);

P0=0x00;

P2=0xff;

P0=table1[15];//下面显示FF,表示违规了

P2=table2[2];

delay

(2);

P0=0x00;//消隐

P2=0xff;

P0=table1[15];

P2=table2[3];

delay

(2);

P0=0x00;

P2=0xff;

}

else

{

P0=0x00;

P2=0xff;

}

}

else//没有人违规才显示调整时间

{

if(aa==1)

{

P0=0x6d;//第一位数码管显示"5(S)"(表示抢答时间调整)

P2=table2[0];

delay

(2);

P0=0x00;

P2=0xff;

P0=table1[time1/10];//下面显示调整的抢答时间

P2=table2[2];

delay

(2);

P0=0x00;

P2=0xff;

P0=table1[time1%10];

P2=table2[3];

delay

(2);

P0=0x00;

P2=0xff;

}

elseif(bb==1)

{

P0=0x07;//第一位与第二位数码管合起来显示"T",表示答题时间调整

P2=table2[0];

delay

(2);

P0=0x00;

P2=0xff;

P0=0x31;

P2=table2[1];

delay

(2);

P0=0x00;

P2=0xff;

P0=table1[time2/10];

P2=table2[2];

delay

(2);

P0=0x00;

P2=0xff;

P0=table1[time2%10];

P2=table2[3];

delay

(2);

P0=0x00;

P2=0xff;

}

else//否则显示FFF

{

P0=table1[15];

P2=table2[0];

delay

(2);

P0=0x00;

P0=table1[15];

P2=table2[2];

delay

(2);

P0=0x00;//消隐

P2=0xff;

P0=table1[15];

P2=table2[3];

delay

(2);

P0=0x00;

P2=0xff;

}

}

}

}

3.2.6调整时间键扫描子函数

//调整时间键扫描子函数

voidkey2()

{

uchari=100;

if(S2==0)//抢答时间调整

{

delay(10);

if(S2==0)

{

while(S2==0&&i)

{

i--;

delay(10);

}

time1++;

if(time1==61)

{

time1=10;

}

aa=1;//将抢答时间标志位置1

bb=0;//同时关闭答题时间标志位

}

}

if(S3==0)//答题时间调整

{

delay(10);

if(S3==0)

{

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

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2