ImageVerifierCode 换一换
格式:DOCX , 页数:21 ,大小:203.48KB ,
资源ID:5748545      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5748545.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于51单片机的八路抢答器要点.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

基于51单片机的八路抢答器要点.docx

1、基于51单片机的八路抢答器要点 题 目 基于单片机的八路抢答器 学院名称 信息工程学院 指导老师 X X X 班 级 11级电信2班 学 号 学生姓名 时 间 摘 要在日常生活中,我们可以在电视,或者现实生活活动现场可以看到在答题或者游戏中,他总能第一时间测到谁是第一个,让我们的世界少了那些不必要的争议,那是什么,那就是抢答器。通过一次又一次科学的进步,单片机在发展,各种功能运用到现实生活的各种领域让我们生活更加的接近理想话以及通过简单的操作完成手工无法完成或者很难做到的事情,例如家电,通信,商业,工业,航空,航天,军事以及汽车方面。当然这次我们做的是其中的一种那就是抢答器,它具有很高的安全性

2、、可靠性,准确性,应用日益广泛。本次设计使用 AT89C51 实现一基于单片机的抢答器设计,其主要具有如下功能: (1)抢答时间调试,限时时间调试这两个功能都是要在最开始时调试。可以改变调试抢答时间和限时时间。(2)声光报警系统。抢答时间倒计时时会报警闪烁,以及蜂鸣器报警还有时间提示。(3)锁定功能。为了很好的在第一时间锁定第一位,抢答器做了很好的反馈功能,为此能够更加精确的锁定反馈第一位抢答器是由一个AT89C51、输出八段显示电路。另外系统还有 LED 提示灯,报警蜂鸣器等。 抢答器的功能在于反馈以及最快的时间做出选择: (1)限时时间调试抢答时间调试功能:这是一个十分人性化的设计,他可以

3、在不同的场合用不同的时间来限定抢答以及限时时间的调试。 (2)抢答锁定功能:当按下抢答键时,抢答器会判断第一个抢答的以及显示抢答人的编号。 (3)报警系统:当抢答倒计时到5秒时开始二极管开始闪烁报警蜂鸣器开始鸣叫。 主要的设计实施过程:首先,选用 ATMEL公司的单片机 AT89C51,以及选购其他电子元器件。第二步,使用Protel设计硬件电路原理图,并设计 PCB图完成人工布线。第三步,使用Medwin 软件编写单片机的 C语言程序、仿真、软件调试。第四部,使用 PROTEUS 软件进行模拟软、硬件调试。最后,联合软、硬件调试电路板,完成本次设计。 1.3功能显示区.62 软件设计.64

4、附录.9概 述随着科技的发展,单片机已不是一个陌生的名词,它的出现是近代计算机技术发展史上的一个重要里程碑,因为单片机的诞生标志着计算机正式形成了通用计算机系统和嵌入式计算机系统两大分支。单片机单芯片的微小体积和低的成本,可广泛地嵌入到如玩具、家用电器、机器人、仪器仪表、汽车电子系统、工业控制单元、办公自动化设备、金融电子系统、舰船、个人信息终端及通讯产品中,成为现代电子系统中最重要的智能化工具。本文所涉及的是市场占有率最高的是MCS51系列,因为世界上很多知名的IC生产厂家都生产51兼容的芯片。到目前为止,MCS51单片机已有数百个品种,还在不断推出功能更强的新产品。本设计是基于单片机的抢答

5、器设计方案,根据要求,给出了该单片机抢答器的硬件电路和软件程序,同时给出了单片机型号的选择、硬件设计、软件流程图、单片机存储单元的分配、汇编语言源程序及详细注释等内容1总体设计方案方案一:采用数字电路控制。采用数字显示电路的好处就是设计简单。用以在P0口外接电阻做输出口并接数码管来显示时间 ,共设了8个用户输入键,当抢答的时候,其中只有1个是有效按键,其它的都是干扰按键,若按下干扰键,将无反应只显示第一位抢答编号,如果用户抢答的时间剩下5秒(一般情况下,用户不会超过5秒,若用户觉得不便,还可以修改)电路将报警。电路由两大部分组成:显示器电路和主电源电源(UPS),其中设置时间调整是为了可以合理

6、的调节时间更加的人性化和用于不同的场合。方案二:采用一种是用以AT89C51为核心的单片机控制方案。利用单片机灵活的编程设计和丰富的IO端口,及其控制的准确性,不但能实现基本的抢答器功能,还能添加调节功能等等。通过比较以上两种方案,单片机方案有较大的活动空间,不但能实现所要求的功能而且能在很大的程度上扩展功能,故本次设计采用方案二。1.1系统设计方案 本方案采用一种是用以AT89C51为核心的单片机控制方案。利用单片机灵活的编程设计和丰富的I/O端口,及其控制的准确性,实现基本的抢答显示功能。初步设计思路如下:抢答器用按钮为了更加方便直观的使用。LED数码管显示第一位抢答号以及抢答时间以及限时

7、时间。用发光二极管代替报警的电路,发光表示倒计时已经进入5秒计时。到计时间到,系统报警。打开电源后,显示器显示“F FF”,只要第一个按下抢答器的就会显示抢答号。这样可预防抢答的时候出现不必要的麻烦。按“复位”键,清除显示器为“F FF”。按开始键开始抢答倒计时,当有人抢到第一个诞生那么主持人开始问问题,并且按下限时按钮开始倒计时,一共为二十秒,抢答人必须要在20秒内讲出答案如果进入最后5秒那么开始报警闪光提示,当闪光介绍那么就说明答题介绍并且蜂鸣器鸣叫以提示。然后进入第二轮的抢答要按下复位按钮,来更好的完成接下来的任务。1.2系统总体结构框图本次设计主控制器为AT89C51单片。1.3功能实

8、现显示区在本次设计中,基于节省材料的原则,暂时用发光二极管代替提示系统,发光管亮,表示5秒倒计时;灭,表示倒计时介绍。当P口输出低电平时,二极管发光,提示答题即将结束。硬件设计2.软件设计主要过程是LED数码管提示开始倒计时和限时抢答号,通过按键抢答,同时LED显示倒计时情况,按下抢答键后判断第一位抢答号,作出倒计时和抢答号已经报警提示处理。由于采用多个按键来完成抢答,那么其中一个第一个完成按键的会在数码管上显示抢答号。在抢答过程中,首先要进入开始抢答的步骤,接着根据抢答号由显示的抢答人来答题,直到回答出或者倒计时结束,才能完成抢答过程。进入抢答号的判断比较处理状态并给出相应的处理过程。2.1

9、程序流程图3 仿真和调试采用Keil 和Protues软件相结合进行仿真。数码管初始化显示“F FF”:按下开始按钮后,进入抢答倒计时:选手在20秒内抢答,如8号选手:进入倒计时(5s):非正规抢答,如6号选手:4 附录(源代码:)#include#define uchar unsigned char#define uint unsigned intchar s;uchar num=0;char time=20; /抢答时间char datitime=30; /答题限时时间uint tt,t1; /T0,T1定时器定一秒时bit flag,s_flag=1,b_flag,fall_flag;

10、/标志位bit K_startcountflag,K_timecountflag; /时间调整标志位sbit K0=P30;sbit beep=P37; /蜂鸣器输出口sbit rled=P31; /指示灯输出口sbit K1=P10; sbit K2=P11;sbit K3=P12;sbit K4=P13;sbit K5=P14;sbit K6=P15;sbit K7=P16;sbit K8=P17;sbit K_Time=P32; /答题计时键sbit K_startcount=P33; /开始抢答时间调整键sbit K_timecount=P34; /答题计时时间调整键void dela

11、y(uchar ms) uchar y; for(;ms0;ms-) for(y=120;y0;y-);uchar code tabledu=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;uchar code tablewe=0XFE,0XFD,0XFB,0XF7;void T0_Init(void) TMOD=0X01; TH0=(65536-2000)/256; TL0=(65536-2000)%256; TH1=(65536-2000)/256; TL1=(65536-200

12、0)%256; ET0=1; ET1=1; EA=1; P0=0;void Key_Scan(void) /开始键扫描 if(K0=0) delay(10); if(K0=0) while(!K0); TR0=1; s=time; tt=0; flag=1; s_flag=1; b_flag=1; num=0; beep=1; rled=1; fall_flag=0; /清除违规标志位 K_startcountflag=0; K_timecountflag=0; void Scan(void) /八路热键扫描(哪个键先按下,哪个优先级最高) if(K1=0) delay(10); if(K1=

13、0) while(!K1); num=1; /数码管显示1号1 TR0=0; /关闭定时器0,时间停止 TR1=1; /打开定时器1,使扬声器响一声 s_flag=0; /关闭开始键标志位,使再按其他七个键不会响应 if(K2=0) /下面七个键的处理同上 delay(10); if(K2=0) while(!K2); num=2; TR0=0; TR1=1; s_flag=0; /重要 if(K3=0) delay(10); if(K3=0) while(!K3); num=3; TR0=0; TR1=1; s_flag=0; if(K4=0) delay(10); if(K4=0) whi

14、le(!K4); num=4; TR0=0; TR1=1; s_flag=0; if(K5=0) delay(10); if(K5=0) while(!K5); num=5; TR0=0; TR1=1; s_flag=0; if(K6=0) delay(10); if(K6=0) while(!K6); num=6; TR0=0; TR1=1; s_flag=0; if(K7=0) delay(10); if(K7=0) while(!K7); num=7; TR0=0; TR1=1; s_flag=0; if(K8=0) delay(10); if(K8=0) while(!K8); num

15、=8; TR0=0; TR1=1; s_flag=0; void display(void) if(flag=1) /开始键按下,开始计时抢答 if(num!=0) /如果有人抢答,则显示相应的几号 P0=tabledunum; /显示几号抢到了 P2=tablewe0; delay(2); P0=0; P2=0XFF; else /否则没人抢答,则前面不显示几号 P0=0; P2=0XFF; P0=tabledus/10; /下面为显示抢答倒计时 P2=tablewe2; delay(2); P0=0; P2=0XFF; P0=tabledus%10; P2=tablewe3; delay(

16、2); P2=0XFF; P0=0; else /如果开始键没有按下,则显示F FF(若有违规者,则显示违规号码及 FF)或时间调整 if(fall_flag=1) /违规显示 if(num!=0) P0=tabledunum; /显示几号违规了 P2=tablewe0; delay(2); P0=0; P2=0XFF; P0=tabledu15; /下面显示 FF,表示违规了 P2=tablewe2; delay(2); P0=0; /消隐 P2=0XFF; P0=tabledu15; P2=tablewe3; delay(2); P0=0; P2=0XFF; else P0=0; P2=0

17、XFF; else /没有人违规才显示调整时间 if(K_startcountflag=1) P0=0X6D; /第一位数码管显示5(S)(表示抢答时间调整) P2=tablewe0; delay(2); P0=0; P2=0XFF; P0=tabledutime/10; /下面显示调整的抢答时间 P2=tablewe2; delay(2); P0=0; P2=0XFF; P0=tabledutime%10; P2=tablewe3; delay(2); P0=0; P2=0XFF; else if(K_timecountflag=1) P0=0X07; /第一位与第二位数码管合起来显示T,表

18、示答题时间调整 P2=tablewe0; delay(2); P0=0; P2=0XFF; P0=0X31; P2=tablewe1; delay(2); P0=0; P2=0XFF; P0=tabledudatitime/10; P2=tablewe2; delay(2); P0=0; P2=0XFF; P0=tabledudatitime%10; P2=tablewe3; delay(2); P0=0; P2=0XFF; else /否则显示F FF P0=tabledu15; P2=tablewe0; delay(2); P0=0; P0=tabledu15; P2=tablewe2;

19、delay(2); P0=0; /消隐 P2=0XFF; P0=tabledu15; P2=tablewe3; delay(2); P0=0; P2=0XFF; void Time_Scan(void) /调整时间键扫描 if(K_startcount=0) /抢答时间调整 delay(10); if(K_startcount=0) while(!K_startcount); time+; if(time=50) time=20; K_startcountflag=1; /将抢答时间标志位置1 K_timecountflag=0; /同时关闭答题时间标志位 if(K_timecount=0)

20、/答题时间调整 delay(10); if(K_timecount=0) while(!K_timecount); datitime+; if(datitime=60) datitime=30; K_timecountflag=1; K_startcountflag=0; void main(void) T0_Init(); while(1) Key_Scan(); /开始键扫描 if(flag=0)&(s_flag=1) /当开始键没按下及没有人违规时才可进行时间调整 Time_Scan(); if(flag=1)&(s_flag=0)/当开始键按下及有人抢答才进行开始回答计时倒计时 if(

21、K_Time=0) delay(10); if(K_Time=0) while(!K_Time); s=datitime; TR0=1; tt=0; TR1=1; if(flag=0)&(s_flag=1) /违规 Scan(); if(num!=0) /开始键没有按下时,有人按下了抢答器,则置违规标志位 fall_flag=1; rled=0; if(flag=1)&(s_flag=1) /如果开始键按下且抢答键没有人按下,则进行八路抢答键扫描 Scan(); display(); /显示到数码管上 void timer0(void) interrupt 1 TH0=(65536-2000)

22、/256; /2ms TL0=(65536-2000)%256; if(b_flag) /开始(START)键按下,嘟一声(长1秒),表示开始抢答 beep=beep; else beep=1; if(s5) /抢答时间快到报警,隔1秒响一声且红灯闪烁,响三声 if(s%2=0) b_flag=1; rled=0; else b_flag=0; rled=1; tt+; if(tt=500) /1秒 tt=0; s-; b_flag=0; /关闭开始键按下响一秒的嘟声 if(s=-1) s=20; TR0=0; flag=0; /显示F FF s_flag=1; num=0; rled=1; void timer1(void) interrupt 3 /定时器1处理有人按下抢答器嘟一声(长1秒) TH1=(65536-2000)/256; TL1=(65536-2000)%256; beep=beep; t1+; if(t1=500) t1=0; TR1=0;

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

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