#51单片机三路抢答器Word文档下载推荐.docx

上传人:b****5 文档编号:21297185 上传时间:2023-01-29 格式:DOCX 页数:19 大小:89.08KB
下载 相关 举报
#51单片机三路抢答器Word文档下载推荐.docx_第1页
第1页 / 共19页
#51单片机三路抢答器Word文档下载推荐.docx_第2页
第2页 / 共19页
#51单片机三路抢答器Word文档下载推荐.docx_第3页
第3页 / 共19页
#51单片机三路抢答器Word文档下载推荐.docx_第4页
第4页 / 共19页
#51单片机三路抢答器Word文档下载推荐.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

#51单片机三路抢答器Word文档下载推荐.docx

《#51单片机三路抢答器Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《#51单片机三路抢答器Word文档下载推荐.docx(19页珍藏版)》请在冰豆网上搜索。

#51单片机三路抢答器Word文档下载推荐.docx

采用宏晶公司的STC89C52作为系统控制器的CPU方案。

原理框图如图1所示:

图1原理方框图

2系统的主要功能

本系统是借用单片机采用模块化设计的抢答器,包括3路抢答按钮、开始按钮、复位按钮,指示灯显示,倒计时显示部分。

用中断0和中断1的控制按钮做复位和开始控制。

主持人按键开始后,选手开始抢答为有效,相应成功指示灯亮,并开始倒时,回答问题的时间限定为10秒,满时后系统计时自动复位及主控复位。

3抢答器的硬件设计

3.1STC89C52简介

STC89C52引脚图如图2所示:

图2STC89C52引脚图

主要性能:

和MCS-51单片机产品兼容

8K字节在系统可编程Flash存储器

1000次擦写周期

全静态操作:

0Hz~33Hz

三级加密程序存储器

32个可编程I/O口线

三个16位定时器/计数器

八个中断源

全双工UART串行通道

低功耗空闲和掉电模式

掉电后中断可唤醒

看门狗定时器

双数据指针

掉电标识符

功能特性描述:

STC89C52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。

使用宏晶高密度非易失性存储器技术制造,和工业80C51产品指令和引脚完全兼容。

片上Flash允许程序存储器在系统可编程,亦适于常规编器。

在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得STC89C52为众多嵌入式控制使用系统提供高灵活、超有效的解决方案。

STC89C52具有以下标准功能:

8k字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。

另外,STC89C52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。

空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。

掉电保护方式下,RAM内容被保存,振荡器被冻结。

VCC:

电源

GND:

P0口:

P0口是一个8位漏极开路的双向I/O口。

作为输出口,每位能驱动8个TTL逻辑电平。

对P0端口写“1”时,引脚用作高阻抗输入。

当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。

在这种模式下,P0具有内部上拉电阻。

在flash编程时,P0口也用来接收指令字节;

在程序校验时,输出指令字节。

程序校验时,需要外部上拉电阻。

P1口:

P1口是一个具有内部上拉电阻的8位双向I/O口,p1输出缓冲器能驱动4个TTL逻辑电平。

对P1端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。

作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出

电流(IIL)。

此外,P1.0和P1.2分别作定时器/计数器2的外部计数输入(P1.0/T2)和时器/计数器2的触发输入(P1.1/T2EX),具体如下表所示。

在flash编程和校验时,P1口接收低8位地址字节。

P1.0T2(定时器/计数器T2的外部计数输入),时钟输出

P1.1T2EX(定时器/计数器T2的捕捉/重载触发信号和方向控制)

P1.5MOSI(在系统编程用)

P1.6MISO(在系统编程用)

P1.7SCK(在系统编程用)}

P2口:

P2口是一个具有内部上拉电阻的8位双向I/O口,P2输出缓冲器能驱动4个TTL逻辑电平。

对P2端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。

作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。

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

在这种使用中,P2口使用很强的内部上拉发送1。

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

在flash编程和校验时,P2口也接收高8位地址字节和一些控制信号。

P3口:

P3口是一个具有内部上拉电阻的8位双向I/O口,p2输出缓冲器能驱动4个TTL逻辑电平。

对P3端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。

P3口亦作为STC89S52特殊功能(第二功能)使用,。

在flash编程和校验时,P3口也接收一些控制信号。

P3.0RXD(串行输入)

P3.1TXD(串行输出)

P3.2INT0(外部中断0)

P3.3INT0(外部中断0)

P3.4T0(定时器0外部输入)

P3.5T1(定时器1外部输入)

P3.6WR(外部数据存储器写选通)

P3.7RD(外部数据存储器写选通)

RST:

复位输入。

晶振工作时,RST脚持续2个机器周期高电平将使单片机复位。

看门狗计时完成后,RST脚输出96个晶振周期的高电平。

特殊寄存器AUXR(地址8EH)上的DISRTO位可以使此功能无效。

DISRTO默认状态下,复位高电平有效。

ALE/PROG:

地址锁存控制信号(ALE)是访问外部程序存储器时,锁存低8位地址的输出脉冲。

在flash编程时,此引脚(PROG)也用作编程输入脉冲。

在一般情况下,ALE以晶振六分之一的固定频率输出脉冲,可用来作为外部定时器或时钟使用。

然而,特别强调,在每次访问外部数据存储器时,ALE脉冲将会跳过。

如果需要,通过将地址为8EH的SFR的第0位置“1”,ALE操作将无效。

这一位置“1”,ALE仅在执行MOVX或MOVC指令时有效。

否则,ALE将被微弱拉高。

这个ALE使能标志位(地址为8EH的SFR的第0位)的设置对微控制器处于外部执行模式下无效。

PSEN:

外部程序存储器选通信号(PSEN)是外部程序存储器选通信号。

当STC89C52从外部程序存储器执行外部代码时,PSEN在每个机器周期被激活两次,而在访问外部数据存储器时,PSEN将不被激活。

EA/VPP:

访问外部程序存储器控制信号。

为使能从0000H到FFFFH的外部程序存储器读取指令,EA必须接GND。

为了执行内部程序指令,EA应该接VCC。

在flash编程期间,EA也接收12伏VPP电压。

XTAL1:

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

XTAL2:

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

3、2LED灯

LED灯示意图如图3所示:

图3LED灯示意图

单片机的P1.0~P1.7分别接到D4-D11这8个LED灯。

3.38255接口芯片

单片机系统里常用的8255[1]芯片是一个典型的可编程通用并行接口芯片,用来扩展单片机的端口,它具有3个8位的并行口,有三种工作方式,可作为单片机和各种外部设备连接的接口电路。

8255的引脚图如图4所示。

图48255的引脚图

8255引脚功能说明:

RESET:

复位输入线,当该输入端外于高电平时,所有内部寄存器(包括控制寄存器)均被清除,所有I/O口均被置成输入方式。

PA0~PA7:

端口A输入输出线,一个8位的数据输出锁存器/缓冲器,一个8位的数据输入锁存器。

PB0~PB7:

端口B输入输出线,一个8位的I/O锁存器,一个8位的输入输出缓冲器。

PC0~PC7:

端口C输入输出线,一个8位的数据输出锁存器/缓冲器,一个8位的数据输入缓冲器。

端口C可以通过工作方式设定而分成2个4位的端口,每个4位的端口包含一个4位的锁存器,分别和端口A和端口B配合使用,可作为控制信号输出或状态信号输入端口。

CS:

片选信号线,当这个输入引脚为低电平时,表示芯片被选中,允许8255和CPU进行通讯。

RD:

读信号线,当这个输入引脚为低电平时,允许8255通过数据总线向CPU发送数据或状态信息,即CPU从8255读取信息或数据。

WR:

写入信号,当这个输入引脚为低电平时,允许CPU将数据或控制字写8255。

D0~D7:

三态双向数据总线,8255和CPU数据传送的通道,当CPU执行输入输出指令时,通过它实现8位数据的读/写操作,控制字和状态信息也通过数据总线传A0,A1:

地址选择线,用来选择8255的PA口,PB口,PC口和控制寄存器。

当A0=0,A1=0时,PA口被选择;

当A0=0,A1=1时,PB口被选择;

当A0=1,A1=0时,PC口被选择;

当A0=1.A1=1时,控制寄存器被选择。

在本次设计中,8255芯片用来扩展系统的外部接口,将8255的PA、PB、PC口给数码管、键盘使用。

3.4数码管显示模块

数码管原理图如图5所示:

图5数码管原理图

在本次设计中,数码管的8段是由芯片8255的PB口控制亮灭,每个数码管的公共脚分别由8255的PA0-PA5经三极管扩流后进行控制,且数码管是共阳极的。

当公共脚接上电源正极,笔画脚通过一个220欧姆电阻接负极,对应的笔画就会点亮。

要在某位数码管上显示一个数字,首先把待显示数字的显示码送给8255的PB口,接着选中要显示的位。

3.5按键模块

按键示意图如图6所示:

图6按键示意图

在单片机系统中键盘中按钮数量较多时,为了减少I/O口的占用,常常将按钮排列成矩阵形式,在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按钮加以连接。

这样,一个端口(如P1口)就能组成4*4=16个按钮,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就能组成20键的键盘,而直接用端口线则只能多出一键(9键)。

由此可见,在需要的键数比较多时,采用矩阵法来做键盘是合理的。

矩阵式键盘的按钮识别办法确定矩阵式键盘上何键被按下,介绍一种“行扫描法”。

行扫描法又称为逐行(或列)扫描查询法,是一种最常用的按钮识别办法。

判断键盘中有无键按下将全部列线置高电平,然后检测行线的状态。

只要有一行的电平为高,则表示键盘中有键被按下,而且闭合的键位于高电平线和4根列线相交叉的4个按钮之中。

若所有行线均为低电平,则键盘中无键按下。

判断闭合键所在的位置:

在确认有键按下后,即可进入确定具体闭合键的过程。

其办法是:

将全部列线置为高电平,在确定某根行线位置为高电平后,再逐列对列线置高再检测先前返回高电平的行线的电平状态。

若此行返回为高,则该列线和返为高电平的行线交叉处的按钮就是闭合的按钮。

本次设计虽只用到其中三个按键但考虑到以后对系统升级,所以采用了矩阵式键盘。

3.6外部中断0和外部中断1

外部中断0和外部中断1示意图如图7所示:

图7外部中断0和外部中断1示意图

在单片机上有两个引脚,名称为INT0、INT1,也就是P3.2、P3.3这两个引脚。

在单片机内部的TCON寄存器中有四位是和外中断有关的。

IT0:

INT0触发方式控制位,可由软件进和置位和复位,IT0=0,INT0为低电平触发方式,IT0=1,INT0为负跳变触发方式。

IE0:

INT0中断请求标志位。

当有外部的中断请求时,这位就会置1(这由硬件来完成),在CPU响应中断后,由硬件将IE0清0。

IT1、IE1的用途和IT0、IE0相同。

按键0接单片机P32脚,按键1接单片机的P33脚。

本次设计用到了外中断1和外中断0,需接上跳帽W1和W2。

4抢答器的软件设计

4.1主程序流程及分析

抢答器的基本工作原理:

在抢答竞赛或呼叫时,有多个信号同时或不同时送入主电路中,抢答器内部的寄存器工作,并识别、记录第一个号码,同时内部的定时器开始工作,记录有关时间并产生超时信号。

在整个抢答器工作过程中,显示电路还要根据现场的实际情况向外电路输出相应信号。

抢答器的工作流程分为:

系统复位、正常流程、违例流程等几部分,如图8所示,下面予以介绍。

1、主持人按复位键,复位指示灯亮,进入准备状态,主持人出题。

3、主持人按开始键,进入抢答部分,有人抢答就开始回答倒计时,抢答人在此限定时间内做出回答,计时完毕后停止做答并返回复位状态。

无人抢答则主持人根据实际情况做出处理后可进入下一轮抢答。

4、如果主持人未按开始键,而有人按了抢答按键,犯规抢答,相应犯规灯亮。

主持人根据实际情况做出处理后可进入下一轮抢答。

图8工作流程图

4.2总程序模块

在本次设计中,总程序可分为主程序部分,显示部分,延时部分,键盘部分,计时部分,定时器工作模式设定及初始化部分,中断程序部分。

主程序:

main()

{unsignedcharflag=0;

light=0xc0;

Timer1_Init();

while

(1)

{GInt_Init();

P1=light;

display(6,second);

if(second==0)

{second=0x09;

TR1=0;

light=0x7f;

}

flag=keyboard();

if(light==0x3f)

{switch(flag)

{case1:

light=0xfd,TR1=1;

break;

case2:

light=0xf7,TR1=1;

case3:

light=0xdf,TR1=1;

default:

light=0x3f;

}

if(light==0x7f)

{switch(flag)

{case1:

light=0xfe;

light=0xfb;

light=0xef;

default:

light=0x7f;

打开中断及相应的设定:

voidGInt_Init(void)

{EA=1;

EX0=1;

IT0=1;

EX1=1;

IT1=1;

ET1=1;

}

外中断0:

voidISR_Ex0(void)interrupt0{light=0x7f;

外中断1:

1voidISR_Ex1(void)interrupt2

{light&

=0xbf;

定时器工作模式设定及初始化:

voidTimer1_Init(void)

{TMOD=0x10;

TH1=(65535-50000)/256;

TL1=(65535-50000)%256;

1秒时间的设定:

voidISR_Timer1(void)interrupt3

{Timer_Count++;

if(Timer_Count==20)

{Timer_Count=0;

second--;

Timer1_Init();

延时部分:

voiddelay(unsignedintx)

{unsignedchari,j,k;

while(x--)

{for(i=0;

i<

=5;

i++)

for(j=0;

j<

=10;

j++)

;

显示部分:

#include"

reg51.h"

#include"

ABSACC.H"

#definea8255_PAXBYTE[0xD1FF]

#definea8255_PBXBYTE[0xD2FF]

#definea8255_PCXBYTE[0xD5FF]

#definea8255_CONXBYTE[0xD7FF]

unsignedcharconstnum_table[16]={

0xA0,/*0*/

0xBB,/*1*/

0x62,/*2*/

0x2A,/*3*/

0x39,/*4*/

0x2C,/*5*/

0x24,/*6*/

0xBA,/*7*/

0x20,/*8*/

0x28,/*9*/

0x30,/*A*/

0x25,/*B*/

0xE4,/*C*/

0x23,/*D*/

0x64,/*E*/

0x74,/*F*/};

voiddisplay(unsignedcharplace,unsignedcharnumber){a8255_CON=0x89;

a8255_PA=0xff;

a8255_PB=0xff;

a8255_PA=~(0x01<

<

(place-1));

a8255_PB=num_table[number];

键盘部分:

unsignedcharkeyboard()

{unsignedcharPC_data;

unsignedcharj;

unsignedchary=0;

a8255_CON=0x89;

a8255_PA=0xf1;

a8255_PB=0xff;

delay

(1);

PC_data=a8255_PC;

for(j=0;

4;

{if((PC_data&

(1<

j))==(1<

j))

y=j+1;

return(y);

完整总程序见附录。

5调试结果及分析

本设计主要是在编写的程序编译通过后,用下载软件将编写的程序下载到实验开发板上,验证结果是否满足设计要求。

主要通过按键部分进行控制,通过数码管和LED灯部分进行观察。

经验证,在抢答中,只有开始后抢答才有效,如果在开始抢答前抢答为无效,相应犯规灯亮;

主持人按键开始后,选手开始抢答为有效,相应成功指示灯亮,并开始倒时,回答问题的时间限定为10秒,满时后系统计时自动复位及主控复位,满足设计要求。

参考文献

[1]张鑫编著.《单片机原理及使用》[M].北京:

电子工业出版社,2005.8.105—136.

[2]陈家骏,郑滔主编.《程序设计教程》[M].北京:

机械工业出版社,2004.8.41—92.

[3]余文俊主编.《8051C语言实习》[M].北京:

中国水利水电出版社,2002.10.50—89.

[4]孙育才编著. 

《新型AT89S52系列单片机及其使用》[M].北京:

清华大学出版社,2005.5.1—63.

附录一:

总体原理图

总体原理图如图9所示:

图9总体硬件连接原理图

图中U1为单片机STC89C52,U2为芯片8255,单片机的P1.0~P1.7分别接到D4-D11这8个LED灯。

复位按键和开始按键分别接到单片机的P3.2、P3.3脚,单片机的P0.0-P0.7脚接8255芯片D0-D7脚,8255的PA0-PA5分别接6个数码管的位选,同时PA0-PA3接键盘的四列,PC3-PC0接键盘的四行,PB0接数码管引脚11,PB1接数码管引脚10,PB2接数码管引脚7,PB3接数码管引脚1,PB4接数码管引脚2,PB5接数码管引脚3,PB6接数码管引脚4,PB7接数码管引脚5。

附录二:

总程序

//包括一个51标准内核的头文件

#include"

//库函数

#definea8255_PAXBYTE[0xD1FF]/*PA口地址*/

#definea8255_PBXBYTE[0xD2FF]/*PB口地址*/

#definea8255_PCXBYTE[0xD5FF]/*PC口地址*/

#definea8255_CONXBYTE[0xD7FF]/*控制字地址*/

unsignedcharTimer_Count=0;

//定义变量

unsignedcharsecond=9;

unsignedcharlight;

unsignedcharconstnum_table[16]={

0x74,/*F*/

};

voidTimer1_Init(void);

//函数声明

voidGInt_Init(void);

voiddelay(unsignedintx);

voiddisplay(unsignedcharplace,unsignedcharnumber);

unsignedcharkeyboard();

main()//主程序

Timer1_Init();

定时器工作模式设定及初始化

while

(1)//主程序循环

//函数调用(打开中断及相应的设定)

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

当前位置:首页 > 高等教育 > 医学

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

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