《四路抢答器的文档(共12页).doc》由会员分享,可在线阅读,更多相关《四路抢答器的文档(共12页).doc(12页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上“融园杯”电子竞赛之四路抢答器的设计组长: 组员: 设计时间:2010、11、11一、前言: 在电视中,我们经常会看到一些抢答题目,而抢答器却是这个衡量时间的至关重要的工具。而作为设计者的我们需要就是把那些看似很远的东西拿到身边,让科学与我们越来越近,体会到科学真正给我们带来的喜悦以及给生活带来的便利。单片机具有CPU所具有的功能,从而使我们的产品更接近智能化和高可控制性等特点。本次设计主要是通过数码管实现四路抢答器的功能。数码管拥有蜂鸣器和数码管以及LED显示,因此,选择数码管进行实现四路抢答器功能是合理并且实现方便。因此对于四路抢答器的硬件设计便是对数码管的硬件电
2、路的设计。 本次竞赛作品,主要针对一些时间限制的抢答,因此,本产品具有较强的实用性和比较合适的价钱。二、设计目的:1、 熟悉抢答器的工作原理2、 了解和熟悉单片机的软硬件的设计方法3、 加强自己的实践动手能力,在做实物的过程中充分锻炼自己能力,扬长避短,达到更进一步的提高自己综合素质三、设计任务和要求:1.设计任务(1)设计一台可供4名选手参加比赛的智力竞赛抢答器。 用数字显示抢答倒计时间,由“20”倒计到“0”时,无人抢答,蜂鸣器鸣响。选手抢答时,数码显示选手组号,同时蜂鸣器鸣响,倒计时停止。(2)分组:负责抢答硬件电路的设计和调试。负责编写程序和相关调试工作。2.设计要求 (1)4名选手编
3、号为:1,2,3,4。各有一个抢答按钮,按钮的编号与选手的编号对应,也分别为1,2,3,4。(2)当选手按下自己抢答器时候,数码立即显示从20秒开始逐秒递减,抢答的开始。(3)如果抢答定时已到,却没有选手抢答时,本次抢答无效。系统扬声器报警,并封锁输入编码电路,禁止选手超时后抢答,时间显示器显示0。四、总体方案选择:1)硬件电路的设计:1、原理图(附件一)2、硬件电路的PCB2、protues仿真图2)程序设计:程序清单(附件一):五、元器件清单:元器件名称规格数量AT89S521底座3晶振12MHZ1发光二极管9单排插40脚1三极管90129蜂鸣器1小按键9下载口座子十芯118b20温度传感
4、器1六脚开关1USB电源线加接口1电阻2001电阻4.7K1电阻1K3电阻47024电解电容220uF1瓷片电容33pF2排阻10K2短路帽3杜邦线8p1PCB板子1电源黄色插座1五、设计感想:通过本次参与竞赛,我们获得不少。首先,从知识积累和技术提高方面来讲。无论是对硬件电路的设计、调试以及检查错误还是对电路的工作原理的都需要我们运用自己已有的知识以及自己掌握一些自己不熟悉的知识。需要我们较强的学习能力和较强的领悟能力,和理解分析能力。对于程序的设计方面,让我更加熟练的运用自己已学的C语言,对于自己提高C语言和更加熟练的掌握C语言有很好的巩固作用。其次,对于仿真电路的设计以及调试工作让我更加
5、对电路的原理以及工作方式有更明确的理解。对使用Protues、multisim以及keil的调试,让我们更加熟悉它们的使用和调试。更加有助于我们的学习和实践相结合。再次,对于自己的一些综合素质提高也很有帮助。当问题出现时,我们可能会有点不开心,但是这个时候我们需要更加坚定自己的信念和决心。我们需要自己学会分析和解决问题,有自己的独立见解。同时,我们学会更加懂得分析的重要性。七、参考文献:1康华光.电子技术基础数字部分.北京:高等教育出版社,20062王彦朋.大学生电子设计与应用.北京:中国电力出版社,20073张钦双.实用电子电路200例.北京:机械工业出版社,20034李光弟 朱月秀 单片机
6、基础.北京:北京航空航天大学出版社,20065马忠梅 .单片机的C语言应用程序设计. 北京航空航天大学出版社,20066常华.仿真软件教程.北京:清华大学出版社,2006附件一:程序清单/*项目名称:四路抢答器的设计设计者: 刘军 设计日期:2010年11月11日*功能要求:(1)显示系统提示符“P.”。(2)设计一个四路抢答器。键功能:S2:抢答开始;S3:抢答结束;S4、S5、S6、S7为四路抢答按键;S8:抢答器复位。指示灯:LED0:抢答开始指示;LED1:抢答结束指示;LED2:违规指示;LED3:超时指示;LED4、LED5、LED6、LED7为四路位置指示;要求: 在抢答开始键S
7、2按下之前,有S4、S5、S6、S7键按下,视为违规,违规指示 灯LED2亮,蜂鸣器报警,数码管显示违规回路号;抢答开始键S2键按下后,抢答开始指示灯LED0亮,蜂鸣器报警;如20秒之内无人抢答,抢答结束指示灯LED1亮,蜂鸣器报警;抢答开始键S2键按下后,如20秒之内有人抢答,则相应回路指示灯亮,蜂鸣器报警,数码管显示回路号并开始倒计时,计时初值20秒:如在20秒内没有回答完毕,则超时指示灯LED3亮,蜂鸣器报警;如在20秒内回答完毕,则需按抢答结束键S3,抢答结束指示灯LED1亮,蜂鸣器报警;按下S8键抢答器复位,重新开始抢答。*LED数码管显示器设定;P0.7-P0.0段控线,接LED的
8、显示段dp,g,f,e,d,c,b,aP2.0-P2.7位控线,从左至右(LED7,LED6,LED5,LED4,LED3,LED2,LED1,LED0)*独立式键盘设定;8个按键S2至S9分别依次接在P1.0至P1.7口线/*宏定义*数组区共阳数码管字型码P.显示序号*函数区void DelayX1ms(uint count) 延时函数void find_code_auto_flush(void)显示缓冲区更新函数void timer0(void)定时器t0中断服务函数void put_on_leds(void)显示输出函数void init_sys(void)定时器初始化函数keychul
9、i()键值处理函数key()键盘扫描函数void main()主函数*变量定义uchar sec计时变量uchar pos段码序号数组下标uchar dmask位控码uchar k返回键值uchar keyzhi,keyzhii键盘按键值临时存放uchar biaozhi标志位位变量定义bit biaozhi0=biaozhi0; 超时标志位bit biaozhi1=biaozhi1; 抢答标志位bit biaozhi2=biaozhi2; 开始标志位*/#includereg52.h#include#define uchar unsigned char#define uint unsigne
10、d int #define ulong unsigned long/* 定义定时器TO时间常数和方式控制字 */#define v_th0 0x3c#define v_tl0 0xb0#define v_tmod 0x01uchar sec; /定义计时变量/*共阳数码管字型码*/*0,1,2,3,4,5,6,7,8,9,p.,灭*/char code dispcode=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x0c,0xff; /*P.显示代码序号*/ char find_code8=10,11,11,11,11,11,11,11
11、;/*/函数名: void DelayX1ms(uint count)/功能: 延时时间为1ms/调用函数:/输入参数:count,1ms计数/输出参数:/说明:总共延时时间为1ms乘以count,crystal=12Mhz/*/void DelayX1ms(uint count) uint j; while(count-!=0) for(j=0;j=20) click=0; if(-sec=0) TR0=0;P3=0x77;DelayX1ms(30); find_code_auto_flush(); /LED显示缓冲区时间值更新 /*显示输出函数*/void put_on_leds(void
12、) uchar dmask=0xFE; /位控码初始化 uchar pos; for(pos=0;pos0) /超时标志位处理biaozhi0=0;else biaozhi0=1; if(biaozhi1=0) P3=0xfd;/有人抢答则LED3亮 else P3=0xf7;/无人抢答则LED1亮 keyzhiii=key(); /调键盘扫描函数得到按键键码 switch(keyzhiii) /按键功能控制 case 0: /没有键按下,则返回 put_on_leds(); DelayX1ms(2); break; case 1: /S2按下开始抢答 TR0=1; P3=0xfe; biao
13、zhi2=1; find_code0=11; TR0=1;find_code_auto_flush();put_on_leds();break; case 2: /S3按下,结束抢答 biaozhi0=1;TR0=0; find_code_auto_flush();put_on_leds();break; case 4: /S4按下,一号抢答 if(biaozhi2=0) /判断是否开始 P3=0x7b;find_code0=1;break; /违规抢答、显示一号,蜂鸣器叫 if(biaozhi0=1|biaozhi1=1)break; /判断是否超时或已有其他选手抢答 else find_c
14、ode0=1; /显示一号 P3=0xef;/LED4亮,置计时初值 sec=20; biaozhi1=1; /抢答标志位 find_code_auto_flush();put_on_leds();break; case 8: if(biaozhi2=0) P3=0x7b;find_code0=2;break; if(biaozhi0=1|biaozhi1=1)break; else find_code0=2; P3=0xdf; sec=20; biaozhi1=1; find_code_auto_flush();put_on_leds();break;case 16: if(biaozhi2
15、=0) P3=0x7b;find_code0=3;break; if(biaozhi0=1|biaozhi1=1)break; else find_code0=3; P3=0xbf; sec=20; biaozhi1=1; find_code_auto_flush();put_on_leds();break;case 32: if(biaozhi2=0) P3=0x7b;find_code0=4;break; if(biaozhi0=1|biaozhi1=1)break; else find_code0=4; P3=0x7f; sec=20; biaozhi1=1; find_code_auto_flush();put_on_leds();break;case 64:/S8键按下复位 TR0=0;/关定时器 P3=0xff;/等灭 biaozhi0=0;/标志位清零 biaozhi1=0; biaozhi2=0; sec=20; find_code0=10; find_code6=11; find_code7=11; put_on_leds();break; 专心-专注-专业
限制150内