基于单片机实现智能4路抢答器的设计报告Word文档下载推荐.docx

上传人:b****2 文档编号:13934540 上传时间:2022-10-15 格式:DOCX 页数:18 大小:163.58KB
下载 相关 举报
基于单片机实现智能4路抢答器的设计报告Word文档下载推荐.docx_第1页
第1页 / 共18页
基于单片机实现智能4路抢答器的设计报告Word文档下载推荐.docx_第2页
第2页 / 共18页
基于单片机实现智能4路抢答器的设计报告Word文档下载推荐.docx_第3页
第3页 / 共18页
基于单片机实现智能4路抢答器的设计报告Word文档下载推荐.docx_第4页
第4页 / 共18页
基于单片机实现智能4路抢答器的设计报告Word文档下载推荐.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

基于单片机实现智能4路抢答器的设计报告Word文档下载推荐.docx

《基于单片机实现智能4路抢答器的设计报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《基于单片机实现智能4路抢答器的设计报告Word文档下载推荐.docx(18页珍藏版)》请在冰豆网上搜索。

基于单片机实现智能4路抢答器的设计报告Word文档下载推荐.docx

2、系统总体设计方案与实现框图……………………3

三、理论分析…………………………………………………3

四、电路设计…………………………………………………4

1、按键部分………………………………………………4

2、显示部分………………………………………………5

3、总原理图………………………………………………6

五、软件流程图模块……………………………………………7

六、结论…………………………………………………………8

七、程序………………………………………………………9

一、前言

本设计要求能够在主持人按下开始键后,四个参赛者开始抢按自己的按键,谁的按键先按下,谁面前的灯就会亮并且有相应的提示,当参赛者耗时太多时又会有相应的提示。

根据设计的要求,本系统采用独立式按键,通过单片机不停的扫描按键来控制LED灯和蜂鸣器,并用定时器T0、T1来定超时的时间,其中抢答定时时间可以由主持人随意的修改。

当超时的时候让蜂鸣器响和点亮相应的LED灯(T0用于参赛者回答问题的定时,T1用于参赛者抢答时间的选定)。

二、方案设计

1、方案比较

(1)、总体设计

方案一:

采用可编程I/O口扩展芯片8155

8155作为单片机的扩展接口能实现很多功能,但是这个系统并不复杂,用8155会浪费很多的资源,而且8155要用P0和P2端口作为地址线对它进行读写,这样不仅浪费端口还使得编程变的复杂。

从节省资源和简化编程的角度考虑,放弃了此方案。

方案二:

直接采用AT89C51单片机

直接用单片机不仅编程被简化,还有效的利用了各个端口。

8051单片机的资源完全够这个系统的要求。

所以最终选择了此方案。

(2)、模块

方案一:

采用4*4矩阵键盘

此种键盘是常用的按键扫描方法,但是本系统只需要六个按键,这样就会浪费十个,而且矩阵按键扫描要送数读数,对于编程很复杂,最终放弃了此方案。

方案二:

采用独立式键盘

本系统只要8个按键就可以,用独立式键盘不仅节省端口还使编程变得简单。

程序只要不停的读数检查就行。

所以,最终选择此方案。

2、系统总体设计方案与实现框图

抢答模块、修改抢答时间模块、主持人控制模块一共采用8个独立式的键盘作为按键输入,当在主持人按下开始键后有参赛者按键按下时,就会有对应于这个按键的灯亮并且蜂鸣器响一声,其它按键再按也无效。

在规定时间之后如不清除,蜂鸣器就会一直响,超时的LED会点亮,提示已经到时间。

框图如图1。

修改抢答时间是在按下了修改按键之后就会等待增量、减量的输入以修改时间,直到再一次按下修改键以确定修改完成。

图1

三、理论分析

51单片机的端口上电是高电平,而且当外部没有输入时能自动的弹跳到高电平,所以通过按键所接端口的高低电平变化可以判断出哪个按键按下了。

图2

四、电路设计

图3

1、按键扫描部分

单片机不停的扫描P1口的电平变化,当有按键按下时,对应的I/O口会跳变为低电平,单片机检测到后,经过处理将作出相应的显示。

电路如图1.

图4

2、显示部分

根据按键按下的情况LED作出相应的亮灭,蜂鸣器作出相应的反应。

当开始键按下启动后,当S1按下时,则灯D1亮,并蜂鸣器响一声,如果超过规定时间,蜂鸣器一直响,并提示超时LED灯被点亮。

如果S1在限定的时间内再次被按下,说明参赛者1已完成回答;

当S2按下时,则灯D2亮,并蜂鸣器响一声,如果超过规定时间,蜂鸣器一直响,并提示超时LED灯被点亮。

如果S2在限定的时间内再次被按下,说明参赛者2已完成回答;

当S3按下时,则灯D3亮,并蜂鸣器响一声,如果超过规定时间,蜂鸣器一直响,并提示超时LED灯被点亮。

如果S3在限定的时间内再次被按下,说明参赛者3已完成回答;

当S4按下时,则灯D4亮,并蜂鸣器响一声,如果超过规定时间,蜂鸣器一直响,并提示超时LED灯被点亮。

如果S4在限定的时间内再次被按下,说明参赛者4已完成回答;

抢答完后可以按下主持人的确定键将其初始化。

总原理图如图所示:

五、软件模块

本系统用了定时器0和定时器1。

图5

六、结论

本次设计按照题目要求,基于单片机,利用较合适的控制算法,成功的实现了抢答器的基本功能。

硬件原理结构简单,减少硬件成本和繁琐的电路连接;

软件设计方面,设计简单,可塑造性强,便于维护。

因此选择使用单片机实现四人抢答器的设计具有很强的效益,能任意地修改抢答时间,使此抢答器适合在很多场合使用且成本低。

通过此课程设计让我真正的了解到了程序设计的难点所在,难的并不是程序框架的搭建、理论上的思考此方法是否可行、代码的写入、调试其结果,真正难的是在调试的过程中,明明知道是有些问题的,但是又无法锁定问题所在,造成的结果是心理的成就感受到抨击,反复的对可能存在的问题反复修改,一次又一次的修改,可怕的是代码越修越错,结果该不会来。

折腾一段时间后,一不小心才发现开始的时候问题仅仅时非常简单、愚蠢的错误。

从这程序设计过程中不断的提醒我,必须步步为营,步步小心,耐心加细心即等于完美的程序设计的实现。

七、程序代码:

//实现功能:

四人抢答器

/*1、只有主持人宣布开始抢答时,选手才能进行抢答,抢答有一定的时间限制,超过一定时间就会出现报警声。

2、选手回答时必须在规定的时间里面回答,否则就会出现报警声

3、数码管会显示时间

4、各通道的规定:

5、抢答时间是可以设置的*/

#include<

reg52.h>

#include<

intrins.h>

#defineuintunsignedint

#defineucharunsignedchar

sbitbeep=P3^6;

//makingvoice(低电平有效)

sbitLED1=P2^7;

//competitor1(低电平有效)

sbitONE=P1^0;

//(高电平有效)

sbitLED2=P2^6;

//competitor2(低电平有效)

sbitTWO=P1^1;

sbitLED3=P2^5;

//competitor3(低电平有效)

sbitTHREE=P1^2;

sbitLED4=P2^1;

//competitor4

sbitFOUR=P1^3;

sbitLED5=P2^0;

//hostannouncedbeging

sbitHOST=P1^5;

//低电平有效

sbitOVER=P3^7;

//overtime

sbitCHANG=P1^4;

//changetheovertime(低电平有效)

sbitUP=P1^6;

//(低电平有效)

sbitDOWN=P1^7;

sbitLS138A=P2^2;

//定义译码器输入端A在P2.2管脚上

sbitLS138B=P2^3;

//定义译码器输入端B在P2.3管脚上

sbitLS138C=P2^4;

//定义译码器输入端C在P2.4管脚上

staticuintmax1=10,num1=20;

uintmax,num,temp,tt=0,dd=0x00;

//max用于表示选手抢答的时间

//uinti,LedNumVal=1;

//uintLedOut[10];

unsignedcharcodeDisp_Tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};

voiddelay(uintx);

voiddisplay(uintKey_Val);

voidchange();

voidpress(void);

voidtime1_max();

voidtime0_num();

//unsignedlong

uintLedOut[5],LedhdsjVal;

voiddisplay(uintKey_Val)

{

uchari;

/********以下将键值送到LED数码管显示*************/

LedhdsjVal=Key_Val;

//把键值送到LedhdsjVal变量中

LedOut[0]=Disp_Tab[LedhdsjVal%10000/1000];

LedOut[1]=Disp_Tab[LedhdsjVal%1000/100];

//|0x80;

LedOut[2]=Disp_Tab[LedhdsjVal%100/10];

//十位

LedOut[3]=Disp_Tab[LedhdsjVal%10];

//个位

for(i=1;

i<

4;

i++)

{

P0=LedOut[i];

/*switch(i)

{//138译码

case0:

LS138A=0;

LS138B=0;

LS138C=0;

break;

case1:

LS138A=1;

case2:

LS138B=1;

case3:

}

delay(100);

*/

switch(i)

case0:

delay(10);

//P0=0x00;

//LS138A=1;

}

//voidtime()//选手的回答时间,时间不可更改

//{

/***********************************************************

purpose:

系统初始化

/**********************************************************/

voidtime1_max()

{

TMOD|=0x11;

TH1=(65536-50000)/256;

//12.000

TL1=(65536-50000)%256;

IE=0x8A;

TR1=1;

}

voidtime0_num()

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

IE=0x83;

TR0=1;

}

voiddelay(uintx)

uinty;

for(

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

当前位置:首页 > 求职职场 > 简历

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

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