文档库 最新最全的文档下载
当前位置:文档库 › 基于51单片机的八路抢答器设计单片机原理课程设计

基于51单片机的八路抢答器设计单片机原理课程设计

基于51单片机的八路抢答器设计单片机原理课程设计
基于51单片机的八路抢答器设计单片机原理课程设计

单片机原理及接口技术

课程设计报告

设计题目:基于51单片机的八路抢答器设计学号:

姓名:

指导教师:

信息与电气工程学院

二零一六年七月

八路抢答器系统设计

随着科学技术的发展和普及,各种各样的竞赛越来越多,其中抢答器的作用也就显而易见。目前很多抢答器基本上采用小规模数字集成电路设计,使用起来不够理想。因此设计一更易于使用和区分度高的抢答器成了非常迫切的任务。现在单片机已进入各个领域,以其功耗小、智能化而著称,所以若利用单片机来设计抢答器,便使以上问题得以解决.针对以上情况,本文设计出以STC89C52RC 单片机为核心的八路抢答器。我们采用了数字显示器直接指示,自动锁存显示结果,并自动复位的设计思想,它能根据不同的抢答输入信号,经过单片机的控制处理并产生不同的与输入信号相对应的输出信号,最后通过LED数码管显示相应的路数,即使两组的抢答时间相差几微秒,也可分辨出是哪组优先按下的按键,它充分利用了单片机系统的优点,具有结构简单、功能强大、可靠性好、实用性强的特点。

1. 设计任务

结合实际情况,基于AT89C51单片机设计一个八路抢答器系统。该系统应满足的功能要求为:

(1) 同时供8名选手比赛,分别用8个按钮K1 ~ K8表示,设置一个系统抢答控制开关K0,该开关由主持人控制;

(2) 用数码管显示抢答选手、答题时间倒计时、抢答时间倒计时、违规选手;

(3) 利用蜂鸣器提示抢答、误操作、答题;

(4) 抢答器具有定时抢答功能,且一次抢答的时间由主持人设定(如30秒)。当主持人启动"开始"键后,定时器进行减计时。

主要硬件设备:AT89C51单片机、蜂鸣器、按键、共阴数码管。

2. 整体方案设计

八路抢答器系统以AT89C51单片机作为整个系统的控制核心,应用其强大的接口功能,构成整个抢答器的硬件系统。其中P0、P2与数码管连接,用于显示时间和抢答选手;P1与按键连接,用于选手抢答;P3用于主持人控制和蜂鸣器调节。当主持人选择开始抢答后,蜂鸣器提示抢答开始,数码管显示抢答剩余时间,选手可以开始抢答。若选手抢答,显示抢答者编号以及剩余答题时间,同时蜂鸣器提示答题开始。

硬件电路分为复位电路、晶振电路模块、AT89C51、数码管显示电路、按键输入电路和蜂鸣器报警电路这六个模块。各模块的主要功能如下:

(1) 复位电路模块功能为复位按键按下,提供两个机器周期以上的高电平输入RST来使单片机复位;

(2) 晶振电路模块提供给单片机固定频率的震荡脉冲,这个脉冲经分频后为单片机的时钟信号;

(3) AT89C51为控制器,根据外界信号和内部程序来控制模块的输入输出;

(4) 数码管显示电路功能为根据单片机信号显示抢答、答题时间及选手等;

(5) 按键输入电路提供主持人控制和选手抢答的按键,并将电平信号输入给单片机;

(6) 蜂鸣器报警电路根据单片机信号提示答题、抢答、误操作等。

系统的整体设计方案设计图如图2-1所示。

图2-1 系统的整体方案设计图

3. 系统硬件电路设计

3.1 晶振电路

本设计采用的晶振电路为12Mhz晶振以及30pF电容构成。电路图如图3-1所示。

图3-2 复位电路图

3.3 按键输入电路

按键输入电路由8个选手抢答按键和4个主持人控制按键组成,并配备有上拉电阻以维持高电平。当按键按下时会在I/O口输入低电平,以供单片机采集并根据程序控制其余模块。其中K1、K2、K3、K4供主持人使用,1、2、3、4、5、6、7、8供选手使用。

其与单片机的接口电路如图3-3所示。

图3-3 按键输入电路与单片机的接口电路

3.4 数码管显示电路

数码管显示电路采用四位一体数码管来显示,LED显示屏作为大型显示设备的一种,具有亮度高、价格低、寿命长、维护简便等优点。LED数码管的结构简单,分为七段和八段两种形式,也有共阳和共阴之分。本设计采用八路共阴数码管,共有有4根位选线和8根段选线,要想显示一个数值,就要分别对它们的高低电平来加以控制。其中位选线低有效,段选线高有效,位选线与P0连接,段选线与P2低四位连接,分别控制P0、P2接口电平即可显示。

段选线驱动电平如表3-1所示,数码管显示电路图如图3-4所示。

表3-1 段选驱动代码

3.5 蜂鸣器报警与提示电路

本设计采用蜂鸣器和Led灯设计报警和提示电路。蜂鸣器在定时器1的控制下,当抢答开始、答题开始、误操作等情况下会提示,同时Led也会闪亮。Led

3.6 总电路图

总电路图如图3-6所示

图3-6 总电路图

4. 系统程序设计

4.1 主程序流程图

系统在开始时初始化,使抢答时间和答题时间设定为默认值,同时数码管显示FFF。然后检测开始按键,若开始键按下,则无法调整时间,同时开始检测选手按键,显示抢答剩余时间。若选手按键按下,则可以由主持人控制开始答题,然后数码管显示抢答选手和答题剩余时间。若开始键没有按下,且有选手按键,则显示误操作选手编号,同时进行提示;若没有选手按键,则可以进行答题和抢答时间调整。

系统主程序流程图如图4-1所示。

4.2 开始键与选手按键扫描子程序流程

开始键扫描程序,它扫描开始键是否按下,若开始键按下,则控制数码管显示、定时器计时、蜂鸣器提示,打开开始键标志位,关闭时间调整标志位,以响应选手的按键处理程序。

选手按键扫描程序,它扫描选手按键是否按下,若按下,则控制数码管显示、蜂鸣器提示,关闭开始键标志位以禁止其他选手抢答,同时响应开始答题按键。

图4-1 主程序流程图

4.3 显示子程序流程图

显示子程序控制数码管显示,蜂鸣器的提示,led灯的亮灭。功能如下:

(1)当没有任何操作时,数码管显示FFF,蜂鸣器和led灯无反应;

(2)当按下开始抢答键后,数码管显示抢答倒计时,蜂鸣器响一次,led灯闪烁一次;

(3)当有人抢答后,数码管显示抢答选手编号,蜂鸣器响一次;

(4)当开始答题后,数码管显示答题选手编号、剩余答题时间,蜂鸣器响一次,在时间少于3s时,led灯闪烁,蜂鸣器持续响;

(5)当存在误操作时,数码管显示误操作选手编号,蜂鸣器响一次,led闪烁一次;

(6)当进行时间调整时,数码管显示所调整的时间和调整后的答题时间或抢答时间。

显示子程序流程图如图4-2所示。

图4-2 显示子程序流程图

5. 系统调试

5.1 Proteus软件仿真调试

(1)Proteus简介

Proteus ISIS是英国Labcenter公司开发的电路分析与实物仿真软件。它运行于Windows操作系统上,可以仿真、分析(SPICE)各种模拟器件和集成电路,该软件的特点是:

1)现了单片机仿真和SPICE电路仿真相结合。具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统的仿真、RS232动态仿真、I2C调试器、SPI调试器、键盘和LCD系统仿真的功能;有各种虚拟仪器,如示波器、逻辑

分析仪、信号发生器等。

2)支持主流单片机系统的仿真。目前支持的单片机类型有:68000系列、8051系列、A VR系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列以及各种外围芯片。

3)提供软件调试功能。在硬件仿真系统中具有全速、单步、设置断点等调试功能,同时可以观察各个变量、寄存器等的当前状态,因此在该软件仿真系统中,也必须具有这些功能;同时支持第三方的软件编译和调试环境,如Keil C51 uVision2等软件。

4)具有强大的原理图绘制功能。

可以仿真51系列、A VR、PIC、ARM、等常用主流单片机。还可以直接在基于原理图的虚拟原型上编程,再配合显示及输出,能看到运行后输入输出的效果。配合系统配置的虚拟逻辑分析仪、示波器等,Proteus建立了完备的电子设计开发环境。

在PROTEUS绘制好原理图后,调入已编译好的目标代码文件:*.HEX,可以在PROTEUS的原理图中看到模拟的实物运行状态和过程。PROTEUS 是单片机课堂教学的先进助手。

PROTEUS不仅可将许多单片机实例功能形象化,也可将许多单片机实例运行过程形象化。前者可在相当程度上得到实物演示实验的效果,后者则是实物演示实验难以达到的效果。

它的元器件、连接线路等却和传统的单片机实验硬件高度对应。这在相当程度上替代了传统的单片机实验教学的功能,例:元器件选择、电路连接、电路检测、电路修改、软件调试、运行结果等。

(2)Proteus仿真过程

选取合适的纸张大小,绘制原理图,导入程序文件,点击运行仿真。则在原理图中可以看到节点的电平状态,数码管、led灯、蜂鸣器的响应状态,从而可以检验是否达到所期望的功能要求。

1)调试时要注意的问题:在ISIS中,每个元器件的管脚都要占据一块区域,该区域会排斥外部的走线;在仿真时要设置单片机的时钟频率;元件之间距离要足够以供修改与添加;P0口需要配备上拉电阻以维持高电平。

2)调试时遇到的问题及解决办法:在仿真时遇到单片机引脚不存在的现象,如图5-1所示。在更换了另一块单片机后问题解决。

图5-1 仿真问题3)仿真运行结果:

①初始化后数码管显示FFF如图5-2所示。

图5-2

②按下开始抢答键,数码管显示抢答剩余时间倒计时同时蜂鸣器提示,如图5-3所示。当剩余时间少于3s时蜂鸣器和led灯同时提示,如图5-4所示。

图5-3

图5-4

③抢答成功后蜂鸣器提示,数码管显示抢答选手编号,如图5-5所示。

图5-5

④按下开始答题键后,蜂鸣器提示,数码管显示答题选手编号及答题时间倒计时,如图5-6所示。

⑤进行时间调整时,蜂鸣器提示,数码管显示调整后答题时间或者抢答时间,如图5-7所示。

5-6

5.2 硬件调试

硬件调试结果符合Proteus仿真调试结果,不再赘述。

6. 程序清单

#include

#define uchar unsigned char

#define uint unsigned int

sbit K0=P3^0;//开始抢答按键

sbit beep=P3^7;//蜂鸣器

sbit D0=P3^1;//指示灯

sbit K1=P1^0;//1号选手抢答按键

sbit K2=P1^1;//2号选手抢答按键

sbit K3=P1^2;//3号选手抢答按键

sbit K4=P1^3;//4号选手抢答按键

sbit K5=P1^4;//5号选手抢答按键

sbit K6=P1^5;//6号选手抢答按键

sbit K7=P1^6;//7号选手抢答按键

sbit K8=P1^7;//8号选手抢答按键

sbit S1=P3^2;//答题计时键

sbit S2=P3^3;//开始抢答时间调整键

sbit S3=P3^4;//答题计时时间调整键

char s;

uchar num=0;//显示抢答选手

char time1;//抢答时间

char time2;//答题限时时间

uint m,n;//T0,T1定时器定一秒时

bit flag1,flag2,flag3,flag4; //标志位

bit aa,bb;//时间调整标志位

//延时子函数

void delay(uint z)

{

uint x,y;

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

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

}

uchar code table1[]={

//共阴数码管段码值

0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71

};

uchar code table2[]={

//共阴数码管位码值

0xfe,0xfd,

0xfb,0xf7

};

//初始化子函数

void init()

{

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;

}

//开始键扫描子函数

void key1()

{

uchar i=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;

}

}

}

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

void key()

{

uchar i=100;

if(K1==0)

{

delay(10);

if(K1==0)

{

while(K1==0&&i)

{

i--;

delay(10);

}

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

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

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

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

}

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

{

delay(10);

if(K2==0)

{

while(K2==0&&i)

{

i--;

delay(10);

}

num=2;

TR0=0;

TR1=1;

flag2=0; //重要

}

}

if(K3==0)

{

delay(10);

if(K3==0)

{

while(K3==0&&i)

{

i--;

delay(10);

}

num=3;

TR0=0;

相关文档
相关文档 最新文档