基于单片机的抢答系统设计Word文档下载推荐.docx

上传人:b****4 文档编号:7444872 上传时间:2023-05-08 格式:DOCX 页数:16 大小:252.58KB
下载 相关 举报
基于单片机的抢答系统设计Word文档下载推荐.docx_第1页
第1页 / 共16页
基于单片机的抢答系统设计Word文档下载推荐.docx_第2页
第2页 / 共16页
基于单片机的抢答系统设计Word文档下载推荐.docx_第3页
第3页 / 共16页
基于单片机的抢答系统设计Word文档下载推荐.docx_第4页
第4页 / 共16页
基于单片机的抢答系统设计Word文档下载推荐.docx_第5页
第5页 / 共16页
基于单片机的抢答系统设计Word文档下载推荐.docx_第6页
第6页 / 共16页
基于单片机的抢答系统设计Word文档下载推荐.docx_第7页
第7页 / 共16页
基于单片机的抢答系统设计Word文档下载推荐.docx_第8页
第8页 / 共16页
基于单片机的抢答系统设计Word文档下载推荐.docx_第9页
第9页 / 共16页
基于单片机的抢答系统设计Word文档下载推荐.docx_第10页
第10页 / 共16页
基于单片机的抢答系统设计Word文档下载推荐.docx_第11页
第11页 / 共16页
基于单片机的抢答系统设计Word文档下载推荐.docx_第12页
第12页 / 共16页
基于单片机的抢答系统设计Word文档下载推荐.docx_第13页
第13页 / 共16页
基于单片机的抢答系统设计Word文档下载推荐.docx_第14页
第14页 / 共16页
基于单片机的抢答系统设计Word文档下载推荐.docx_第15页
第15页 / 共16页
基于单片机的抢答系统设计Word文档下载推荐.docx_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

基于单片机的抢答系统设计Word文档下载推荐.docx

《基于单片机的抢答系统设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《基于单片机的抢答系统设计Word文档下载推荐.docx(16页珍藏版)》请在冰点文库上搜索。

基于单片机的抢答系统设计Word文档下载推荐.docx

扩展部分:

谁先抢答,对应的数码管亮5次抢答人的编号,并发出声音提示。

2方案论证

2.1按键选择

方案1:

用独立的外接按键方案2:

用矩阵键盘

键盘是单片机系统中通用的输入设备,用于向系统输入数据或控制信息。

常用的键盘有两种,分别是独立键盘和矩阵式键盘。

矩阵式键盘相对其更加灵敏,并且可扩展更多按键,适用于按键数量较多的场合。

独立式键盘接口电路,它的硬件电路和软件编程都比较简单,但每个按键必须占一根I/O口线,在按键个数较多时,I/O口线资源浪费较大,故只在按键数量不多时采用该电路。

而本设计所需要的抢答键只要6个,也不算多,虽然矩阵式键盘有其较高的灵敏性,但从简单编程的角度出发,最终还是选择独立式键盘。

2.2数码管选择

共阴级数码管方案2:

共阴级数码管

LED显示器是由发光二极管显示字段的显示器件。

在单片机应用系统中通常使用的是七段LED,这种显示器有共阴极与共阳极两种。

   图1共阴极图2共阳极图3管脚配置

共阴极LED显示器的发光二极管阴极共地,当某个发光二极管的阳极为高电平时,该发光二极管则点亮;

共阳极LED显示器的发光二极管阳极并接。

由于平时都是采用共阴极的数码管,比较熟悉其代码,所以选用共阴极数码管。

3硬件设计

电路包括以下六个部分:

单片机,晶振电路,抢答按键电路,6位数码管显示,复位开关电路及声音提示电路。

单片机内部有一个复位开关,但是只是内部自带的,而设计的要求就是自编程序实现复位功能,所以还得附加一个复位开关电路。

图4总设计框图

3.1AT89C51控制电路

AT89C51是最常用的单片机芯片,该芯片有40个引脚,其中P0~P3为数据输入/输出接口,XTAL1和XTAL2用于外接晶体;

RESET用于复位信号输入;

ALE是地址锁存允许控制位,其输出频率是时钟振荡频率的1/6;

,程序存储器允许;

,该引脚的接法决定着程序存储器的0000~0FFFH这4KB地址范围是在单片机内部还是外部。

MCS-51系列单片机有四组8位并行I/O口,记作P0、P1、P2和P3。

每组I/O口内部都有8位数据输入缓冲器、8位数据输出锁存器及数据输出驱动等电路。

四组并行I/O端口即可以按字节操作,又可以按位操作。

当系统没有扩展外部器件时,I/O端口用作双向输入输出口;

当系统作外部扩展时,使用P0、P2口作系统地址和数据总线、P3口有第二功能,与MCS-51的内部功能器件配合使用。

图5单片机模块

本设计中各引脚接法如下:

P0口外接LED显示屏用于显示;

由于P0口内部无上拉电阻,为保证按键断开时I/O口线有确定的高电平,所以在P0口外部要接上拉和限流电阻。

P0口接的是段选;

P1口的6个端口分别与6个BUTTON按键相连,所以在编程的时候要分别定义;

P2口接位选;

P3.3接K0复位键,另一端接地,所以是低电平有效;

P3.2与扬声器相连,扬声器的另一端也是接地;

如图所示的单片机模块里面左上部分的电路构成晶振电路,于产生时钟频率;

左半边的中间电路是复位电路,采用了手动复位与自动上电复位结合的形式,复位可靠,电路简单;

复位信号是系统内部初始化所需的,当系统加电开始工作时,或工作过程中出现故障无法正常工作时,都需要复位信号使系统能重新开始工作。

因此,系统需要上电复位、手动复位和遇故障自动复位电路。

此设计采用片内RAM空间,故电路里将ALE和

引脚悬空处理,将

接地。

3.2六位LED动态显示电路

LED显示器有静态显示与动态显示两种方式。

(1) 

LED静态显示方式

各位LED的位选线连在一起接地或接+5V;

每位LED的段选线(a-dp)各与一个八位并行口相连。

在同一时间里每一位显示的字符可以各不相同。

(2)LED动态显示方式

将所有LED的段选线并联在一起,由一个八位I/O口控制,而位选线分别由相应的I/O口线控制。

如:

8位LED动态显示电路只需要两个八位I/O口。

其中一个控制段选码,另一个控制位选。

图6显示屏模块

本设计中,多位七段共阴LED数码管与单片机连接时将所有LED的段选线并联在一起,由一个八位I/O口控制,而位选线分别由相应的I/O口线控制。

由于所有位的段选码皆由一个I/O控制,因此,在每个瞬间,多位LED只可能显示相同的字符。

要想每位显示不同的字符,必须采用动态扫描显示方式。

即在每一瞬间只使某一位显示相应字符。

在此瞬间,位选控制I/O口在该显示位送入选通电平(共阴极送低电平)以保证该位显示相应字符,段选控制I/O口输出相应字符段选码。

如此轮流,使每位显示该位应显示字符,并保持延时一段时间,以造成视觉暂留效果。

不断循环送出相应的段选码、位选码,就可以获得视觉稳定的显示状态。

3.2按键电路

图7按键电路显示模块

AT89C51的P1口接6个独立按键,此处采用按键输入为低电平有效,所以按键的一端接地,另一端接P1口的I/O口线。

P1.0~P1.5分别接BUTTON按键,并命名为K1、K2、K3、K4、K5、K6。

按键有BUTTON及SWITCH开关两种,而BUTTON按键比较好操作只需按一下即可,而SWITCH开关还要来回拨动,虽然SWITCH有不具备活动性的开关,可以不用消抖语句,可是当复位键按下的时候,还要将开关拨起来,使用起来更加繁琐,所以采用BUTTON按键,只要在程序中添加消抖语句判断即可。

3.3扬声器及复位电路

图8扬声器及复位模块

将P3.0接扬声器并命名为beep;

P3.4接BUTTON复位键,低电平有效。

4软件设计

图9抢答程序流程图

设计基本思路:

当运行开关一打开,6只数码管轮流循环显示1~6,开始循环跑马,接着就开始判断是否有人抢答,所以就要设计跑马的程序,并在跑马里面就要添加键盘扫描语句

判断是否有人抢答,为了不能重复抢答所以得添加一个标志位flag禁止在他人抢答的基础上再次抢答。

基本功能就是在抢答后6个数码管同时显示抢答者的号码,将位选设为全部显示即可。

扩展功能就是抢答后在相应的位管显示相应的号码及声音提示,所以只要分别给为选和段选送相应的位码,并连接一个扬声器在有人抢答的时候取反即可。

最后复位键按下后还要实行循环跑马,即要循环判断复位键,但用while

(1)语句判断的时候要注意它是一个死循环,所以还要设置变量y但复位键按下后y=-0;

跳出循环进入下一轮的跑马。

4.1亮灭变化声音提示设计

数码管停止跑马,6个数码管同时亮谁的编号。

由于共阴极是低电平有效所以当P2的位选送“0”的时候有效,延迟产生视觉暂留效果。

程序如下:

P2=0x00;

P0=tab1[num];

mDelay(5);

扩展要求:

对应的数码管亮5次抢答人的编号,并发出声音提示。

在子函数display()里面,beep就是扬声器,取反就能发出声音提示。

先送位选,并用for语句实现5次循环,刚开始段选为0,即灭,在每一次for语句的循环里面都是实行一灭一亮,所以只要5次。

display()

{beep=~beep;

P2=tab2[num];

for(k=0;

k<

5;

k++)

{

P0=0x00;

mDelay(500);

P0=tab1[num];

}}

4.2抢答按键电路及复位按键电路设计

在按键电路中要注意按键抖动的消除。

按键或键盘都是一个机械开关,键的按下和放开是利用机械触点的闭合和断开来实现的。

由于机械触点的弹性作用,一个按键开关在闭合及断开瞬间均有一连串的抖动,抖动的时间长短由按键的机械特性决定,一般为5~10ms。

为了确保按键动作只确认一次,必须消除抖动的影响。

消除抖动的措施有硬、软件两种。

硬件:

可用RS触发器或单稳态电路消除抖动。

软件:

在判断有键按下后,延时10ms后,再确定该键是否保持闭合状态,若是则确认为被按键,否则忽略此次按键。

在本设计中,定义了子函数scan()进行键盘扫描,并对K1到K6的抢答按键都进行了消抖编程,部分程序如下:

if(K1==0){mDelay(10);

if(K1==0){while(~K1);

num=0;

flag=0;

}}

复位按键就只有K0,复位的目的就是将前面运行的结果清零,并从头开始跑马,

所以要进行复位键是否按下的判断,如果按下,就显示抢答的号码,因为在显示魔魁啊里面有用到一个while

(1)的循环所以会导致一直跳不出当前的循环,所以要定义一个变量y进行预置和判断后设值,当y=0;

就会跳出寻环进而进入主程序的while

(1)死循环,从而进入下一轮的抢答。

while(y){if(K0==0){y=0;

flag=1;

4.3优先抢答设计

在按键扫描的时候要进行判断,哪个键先按下,哪个优先级就最高,避免显示多人同时抢答。

所以在设计的时候就要设置一个抢答标志位flag,一开始跑马的时候flag=1表示可以开始抢答,而当有抢答键按下的时候就flag=0关掉开始抢答标志,使得按其他5个抢答键系统都不会响应。

而在抢答结束后复位键按下之后就要将flag=1使系统又可以重新开始抢答。

5功能调试及结果分析

(1)调试方法:

利用Keil软件和proteus软件分别编写程序和设计电路并运行。

图10proteus电路连接

(2)调试结果:

通过仿真调试和改进实现了跑马,抢答,复位的功能,改变延时的参数,使得数码管显示和跑马有序,延迟的时间越小,其送位选的速度就越快。

在跑马的时候将延迟的时间设为400ms数码管就会逐一显示。

在基本要求里面,将延迟的时间改成5ms,可以实现6位数码管静态显示。

在扩展要求里面,将延迟的时间改为400ms就可以实现段选送数的。

(3)结果分析:

经过调节及更改程序里面的延迟函数参数,使得数码管的显示更加有序,并达到了设计的标准。

不过抢答器的按键有时候不是很灵敏,这主要是与程序里面的延时函数有关,当运行延时程序时,按键不能检测,所以应尽量减小和减少延时。

(4)调试现象

当电源开始键按下的时候,抢答器就开始从1~6跑马,当K3按下的时候,6位数码管全显示3。

若有人再抢答系统也不会给予响应,直到复位键按下,又开始下一轮的跑马抢答。

当K5按下的时候,第五位数码管就开始闪烁,先灭后亮,最后停在5。

6设计总结

6.1该系统的优点

(1)使用简单的元器件,简易的程序就可以实现抢答,声音提示及复位的功能。

(2)扬声器的使用可以通过取反实现,而不用定时器中断实现,使得程序更加简单。

(3)使用子函数使得主程序更加明了简洁。

由于程序里多次要进行按键扫描,判断是否有人抢答,而按键扫描又要消抖,又有6个,语句比较长,所以调用子函数显得很有必要。

(4)只需要通过允许抢答标志位的设定可以使抢答器实现有一人抢答后,系统不再响应他人的抢答。

6.2该系统的缺点

(1)由于循环语句程序中的延时的使用,导致抢答按键显示电路在抢答的时候,会有延时效应,导致抢答键一按下,不能立马显示有人抢答。

虽然尽量减小和减少延时可以使得抢答按键更加灵敏,但是在循环送数显示的时候,还是要设定一个合适的值,使得闪烁显示和跑马能够逐一显示,不然设置小了,跑马就会更快。

(2)程序里的括号用的有点多,一直嵌套,使得程序看起来不够简洁。

6.3设计心得

在设计中着实遇到了一些问题,其一是定时器中断程序的编写,为了能让扬声器响久一点,编了一段程序,并把闪烁五下也放在定时器中断里面,但后来发现就算不用定时器,照样可以发出声音提示,所以就采取最简单的取反来实现声音提示了;

其二是复位按键电路程序的编写,因为在抢答后是通过用while

(1)来判断是否有复位键按下,而while

(1)又是一个死循环,所以在后面判断按键的时候根本就不会有反应,根本就不能跳出循环,后来通过定义一个变量才得以跳出循环,到达跑马的程序里面。

程序编写的过程其实就是不断修正的过程,编出来的东西有时候不一定能实现最终的功能,都要通过修改运行才能看到最终结果。

基本部分:

#include<

reg51.h>

sbitK0=P3^4;

sbitK1=P1^0;

sbitK2=P1^1;

sbitK3=P1^2;

sbitK4=P1^3;

sbitK5=P1^4;

sbitK6=P1^5;

inti,j,num;

charflag=1,begin,y;

voidmDelay(unsignedintDelay)

{unsignedinti;

for(;

Delay>

0;

Delay--)

{for(i=0;

i<

124;

i++)

{;

}

unsignedcharcodetab1[]={0x06,0x5B,0x4F,0x66,0x6D,0x7D};

unsignedcharcodetab2[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF};

scan()

}}//送抢答号,不允许再次抢答

if(K2==0){mDelay(10);

if(K2==0){while(~K2);

num=1;

if(K3==0){mDelay(10);

if(K3==0){while(~K3);

num=2;

if(K4==0){mDelay(10);

if(K4==0){while(~K4);

num=3;

if(K5==0){mDelay(10);

if(K5==0){while(~K5);

num=4;

if(K6==0){mDelay(10);

if(K6==0){while(~K6);

num=5;

}}}

main()

while

(1)

{for(j=0;

j<

6;

j++)

{for(i=0;

{P2=tab2[i];

P0=tab1[j];

//跑1到6数

mDelay(400);

if(flag==1)//如果无人抢答,就开始按键扫描

{scan();

if(flag==0)//如果有人抢答,显示

{y=1;

//设定可环变量

j=0;

//复位后再次抢答时从1开始寻循环

scan();

//键盘扫描

while(y)

{

P2=0x00;

//位选全选,同时显示

//送相应的位选

if(K0==0)//如果复位键按下,跳出循环

{y=0;

}//允许抢答

}

}

#include"

reg51.h"

sbitbeep=P3^0;

chari,j,k,num,begin,y,flag=1;

scan()//键盘扫面电路

{if((K0==0)){mDelay(10);

if(K0==0){while(~K0);

begin=1;

}}//按键消抖,允许抢答

if(K1==0){mDelay(10);

if(K2==0){while(~K2)num=1;

}}}

//扬声器发声

k++)//循环5次

mDelay(400);

//先灭后亮

{

while

(1)

{for(j=0;

mDelay(300);

if(flag==1)//如果无人抢答,就开始按键扫描

{scan();

i=-1;

//复位后再次抢答时从第1位开始循环

//复位后再次抢答时从1开始循环

display();

{

//键盘扫描判断复位键

if(begin==1)

if(flag==1)//如果复位键按下,跳出循环

{y=0;

}}}}}

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

当前位置:首页 > 党团工作 > 入党转正申请

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

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