基于单片机的四路抢答器
- 格式:doc
- 大小:795.50 KB
- 文档页数:21
基于单片机的四路抢答器1.由于剩余4个引脚,所以可以扩展到8路2.矩阵键盘输入任意两位数倒计时初值一、功能要求以8051系列单片机为核心,设计一个4路竞赛抢答器。
具体功能要求如下:1、该抢答器最多可供4名选手参赛,用4个按钮S0~S3表示,设置一个系统复位和抢答控制开关S,由主持人控制。
2、当主持人启动“抢答开始”键后,定时器进行减计时,同时扬声器发出短暂的声响,参赛选手在设定的时间内进行抢答,抢答有效,定时器停止工作,LED显示器上显示选手的编号和抢答的时间并保持到主持人将系统清除为止;如规定的时间内无人抢答则蜂鸣器发声,计时器复位,为下一次计时做好准备。
3、抢答器具有定时抢答功能,且一次抢答的时间由主持人设定(如30秒)。
4、只有主持人的操作将电路复位后,方可结束上一次的抢答,为下一次抢答做好准备。
二.设计方案(1)倒计时用矩阵键盘输入,程序中用keycount来记录按下按键的次数,我只设置两次,只能输入两位数,多按下几次是没有效果的,相当于键盘自锁,之后单片机读取键值,缓存入一个两位的数组table【2】。
(2)采用的是3位led动态扫描的方式显示(3)中断扫描选手按键,选手按键用的用独立键盘,用与门接选手按键,当有人按下时,与门由高到低,产生下降沿而引起中断,单片机扫描独立键盘。
(4)蜂鸣器电路(5)开始按键和复位按键1-1主流程图1-2 外部中断扫描选手按键1-3 定时器中断电路图如下图由于仿真软件proteus不能用PnP仿真,所以去掉了PnP,直接用IO口驱动;真实是不行的。
#include<reg52.h>#define uchar unsigned char#define uint unsigned intsbit FUW=P3^5; //抢答键sbit CLR=P3^4; //清零,复位键sbit xuan1=P2^4;//选手1,2,3,4sbit xuan2=P2^5;sbit xuan3=P2^6;sbit xuan4=P2^7;sbit wei1=P2^0;//位选1,2,3,4sbit wei2=P2^1;sbit wei3=P2^2;sbit wei4=P2^3;sbit buz=P3^0;uchar code numtab[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共阳极uint table[3]={0,0,0};//倒计时缓存uchar keycount=0;uint time=0;uchar num=0;uint ge,shi;/***********延时函数*****************/void delayms(uint xms){uint i,j;for(i=xms;i>0;i--)for(j=110;j>0;j--);}/************蜂鸣器****************/void buzzer(){buz=0;delayms(50);buz=1;}/************报警部分独立按键扫描********************/ void kscan(){uchar sk;if(xuan1==0){delayms(10);if(xuan1==0){buzzer();sk=1;table[2]=sk;}}else if(xuan2==0){delayms(10);if(xuan2==0){buzzer();sk=2;table[2]=sk;}}else if(xuan3==0){delayms(10);if(xuan3==0){buzzer();sk=3;table[2]=sk;}}else if(xuan4==0){delayms(10);if(xuan4==0){buzzer();sk=4;table[2]=sk;}}}/**********矩阵键盘扫描***************/ void keyscan(){uint temp,key;P1=0xfe;//第一行为0temp=P1;temp=temp&0xf0;//与上11110000if((temp!=0xf0)&&(keycount<2))delayms(10);//去抖temp=P1;temp=temp&0xf0;if(temp!=0xf0){temp=P1;switch(temp){case 0xde:key=0;table[keycount]=key;keycount++;break;}while(temp!=0xf0){temp=P1;temp=temp&0xf0;}}}P1=0xfd;//第二行为0temp=P1;temp=temp&0xf0;//与上11110000if((temp!=0xf0)&&(keycount<2))delayms(10);//去抖temp=P1;temp=temp&0xf0;if(temp!=0xf0){temp=P1;switch(temp){case 0xed:key=1;table[keycount]=key;keycount++;break;case 0xdd:key=2;table[keycount]=key;keycount++;break;case 0xbd:key=3;table[keycount]=key;keycount++;break;}while(temp!=0xf0){temp=P1;temp=temp&0xf0;}}}P1=0xfb;//第三行为0temp=P1;temp=temp&0xf0;//与上11110000if((temp!=0xf0)&&(keycount<2)){delayms(10);//去抖temp=P1;temp=temp&0xf0;if(temp!=0xf0){temp=P1;switch(temp){case 0xeb:key=4;table[keycount]=key;keycount++;break;case 0xdb:key=5;table[keycount]=key;keycount++;break;case 0xbb:key=6;table[keycount]=key;keycount++;break;}while(temp!=0xf0){temp=P1;temp=temp&0xf0;}}}P1=0xf7;//第四行为0temp=P1;temp=temp&0xf0;//与上11110000if((temp!=0xf0)&&(keycount<2)){delayms(10);//去抖temp=P1;temp=temp&0xf0;if(temp!=0xf0){temp=P1;switch(temp){case 0xe7:key=7;table[keycount]=key;keycount++;break;case 0xd7:key=8;table[keycount]=key;keycount++;break;case 0xb7:key=9;table[keycount]=key;keycount++;break;}while(temp!=0xf0){temp=P1;temp=temp&0xf0;}}}}/********显示函数*********/ void display(){ge=time%10;shi=time/10;wei1=1;wei2=0;wei3=0;P0=numtab[shi];delayms(5);P0=0xff;wei1=0;wei2=1;wei3=0;P0=numtab[ge];delayms(5);P0=0xff;wei2=0;wei1=0;wei3=1;P0=numtab[table[2]];delayms(5);P0=0xff;wei3=0;}/****************主函数**********************/ main(){EA=1;TMOD=0x01;TH0=(65536-50000)/256;//定时50msTL0=(65536-50000)%256;ET0=1;EX0=1;IT0=1; //下降沿触发PX0=1;PT0=0;while(1){if(keycount<2){ keyscan();if(keycount==2){time=10*table[0]+table[1];}}if(keycount==2){display(); }/******按下开始抢答键********/if(FUW==0){delayms(10);if(FUW==0){TR0=1;while(!FUW);}}/********按下清零键*********/if(CLR==0){delayms(10);if(CLR==0){TR0=0;EX0=1;time=0;ge=0;shi=0;table[0]=0;table[1]=0;table[2]=0;keycount=0;while(!CLR);}}}}/**************定时器0中断******************/ void t0() interrupt 1{TH0=(65536-50000)/256;//定时50msTL0=(65536-50000)%256;num++;if(num==20){num=0;time--;if(time==0){TR0=0;}}}/*********外部中断0***********/void estern0() interrupt 0{uchar ks;EX0=0;//关掉中断,防止键盘抖动,多次中断,还有就是//只扫描第一次按键的选手,之后按键不扫描if(TR0==0||time==0){kscan();}else if(xuan1==0&&TR0==1 ){delayms(10);if(xuan1==0){ks=1;table[2]=ks;TR0=0;while(!xuan1);}}else if(xuan2==0&&TR0==1 ) {delayms(10);if(xuan2==0){ks=2;table[2]=ks;TR0=0;while(!xuan2);}}else if(xuan3==0&&TR0==1 ){delayms(10);if(xuan3==0){ks=3;table[2]=ks;TR0=0;while(!xuan3);}}else if(xuan4==0&&TR0==1 ){delayms(10);if(xuan4==0){ks=4;table[2]=ks;TR0=0;while(!xuan4);}}}。
智能四路抢答器目录一、前言 (3)二、方案设计 (3)1、方案比较 (3)2、系统总体设计方案与实现框图 (3)三、理论分析 (3)四、电路设计 (4)1、按键部分 (4)2、显示部分 (4)五、软件模块 (5)六、测试方法与数据 (6)七、结论 (6)八、参考文献 (6)一、前言本设计要求能够在主持人按下开始键后,四个参赛者开始抢按自己的按键,谁的按键先按下,谁面前的灯就会亮并且有相应的提示,当参赛者耗时太多时又会有相应的提示。
根据设计的要求,本系统采用独立式按键,通过单片机不停的扫描按键来控制LED灯和蜂鸣器,并用定时器T0来定超时的时间,当超时的时候让蜂鸣器响。
二、方案设计1、方案比较(1)、总体设计方案一:采用可编程I/O口扩展芯片81558155作为单片机的扩展接口能实现很多功能,但是这个系统并不复杂,用8155会浪费很多的资源,而且8155要用P0和P2端口作为地址线对它进行读写,这样不仅浪费端口还使得编程变的复杂。
从节省资源和简化编程的角度考虑,放弃了此方案。
方案二:直接采用AT89C51单片机直接用单片机不仅编程被简化,还有效的利用了各个端口。
8051单片机的资源完全够这个系统的要求。
所以最终选择了此方案。
(2)、模块方案一:采用4*4矩阵键盘此种键盘是常用的按键扫描方法,但是本系统只需要六个按键,这样就会浪费十个,而且矩阵按键扫描要送数读数,对于编程很复杂,最终放弃了此方案。
方案二:采用独立式键盘本系统只要六个按键就可以,用独立式键盘不仅节省端口还使编程变得简单。
程序只要不停的读数检查就行。
所以,最终选择此方案。
2、系统总体设计方案与实现框图采用六个独立式的键盘作为按键输入,当在开始后有按键按下时,就会有对应于这个按键的灯亮并且蜂鸣器响一声,其它按键再按也无效。
十秒之后如不清除,蜂鸣器就会一直响,提示已经到时间。
框图如图1。
- 1 -6图1三、理论分析51单片机的端口上电是高电平,而且当外部没有输入时能自动的弹跳到高电平,所以通过按键所接端口的高低电平变化可以判断出哪个按键按下了。
课程设计(论文)题目名称多路数字抢答器设计课程名称单片机原理及其应用学生姓名学号系、专业指导教师2013年6月24日摘要近年来随着科技的飞速发展单片机的应用正在不断深入同时带动传统控制检测日新月异。
此次设计提出一种用AT89C51单片机作为核心控制元件与电阻、液晶显示屏、蜂鸣器等构成硬件操作再利用C语言编程来控制抢答器的功能实现。
本论文对抢答器的背景与现状、硬件设计、软件设计及其仿真都做了详细的介绍使我们不仅对抢答器的原理及设计有了深入的了解也对单片机的设计研发过程有了更加深刻的体会。
本次设计的系统主要采用单片机控制、采用手动抢答的方式。
有人抢答后,系统自动封锁其他选手的抢答按钮,使其不再抢答,从而实现抢答功能。
该系统还增加了抢答倒计时功能,可以调整。
通过自主的设计、编程和调试出一个简单的四路抢答并在液晶屏显示抢答成功者;熟悉C语言编程;了解单片机仿真系统的使用方法,达到提高综合运用相关知识的能力;进一步熟悉和掌握Proteus7的使用方法;掌握单片机系统设计全部过程的目的。
关键字:抢答单片机液晶屏显示目录第1章前言 (1)第2章方案设计 (2)第3章硬件电路的工作原理 (3)3.1抢答器的电路图 (3)3.2液晶屏显示电路 (3)3.3按键控制电路 (4)第4章软件设计 (5)4.1软件编程 (5)4.2系统调试和结果分析 (6)总结 (11)参考文献 (12)附录1 源程序 (14)第1章前言电子技术和微型计算机的迅速发展,促进微型计算机测量和控制技术的迅速发展和广泛应用,单片机(单片微型计算机)的应用已经渗透到国民经济的各个部门和领域,它起到了越来越重要的作用。
单片微型计算机就是将中央处理单元、存储器、定时/计数器和多种接口都集成到一块集成电路芯片上的微型计算机。
因此一块芯片就构成了一台计算机。
它已成为工业控制领域、智能仪器仪表、尖端武器、日常生活中最广泛使用的计算机。
抢答器一般是由很多电路组成的,线路复杂,可靠性不高,功能也比较简单,特别是当抢答路数很多时,实现起来就更为困难。
目录一、摘要 (3)二、方案设计 (4)2.1、设计要求 (4)2.2、总体法案设计 (4)三、硬件电路设计 (5)3.1、元器件简介 (5)3.2、独立式按键电路 (7)3.3、时钟电路设计 (6)3.4、指示灯电路设计 (7)四、制作以调试 (8)4.1系统程序设计 (8)4.2主程序流程图主程序流程图 (8)4.3程序清单 (9)五、心得与体会 (11)六、参考文献 (12)一、摘要单片机作为一种工具,现在已经广泛的应用于智力和只是竞赛场合。
本次设计是基于单片机51系列的理论知识综合运用AT89C52单片机设计的简易四路抢答器。
利用AT89C52单片机的外围接口来实现抢答系统,利用单片机的定时器/计数器计数和定时的原理,将软、硬件有机的结合起来,使得系统能正确的记时,发光二极管能正常的闪烁。
同时系统能够实现:在抢答过程中只有在主持人按下开始抢答键开始之后抢答才有效,如果在开始抢答之前抢答视为无效。
在抢答成功之后发光二极管会变成闪烁状态与提示选手开始回答问题。
同时还有主持人控制的系统复位键,以实现系统的复位。
还有按键锁定,在一个选手抢答成功或者法规状态下其他按键无效。
通过这次的设计,对51系列的单片机的运用有了更深一层次的了解,也提高了我们的动手能力,加深我们对单片机的映像,为我们以后的学习打下一定的基础。
二、方案设计2.1、设计要求(1)、总共4个按键,四个供四个选手用作“抢答”操作。
(2)、用1个发光二极管用作开始抢答的指示灯,用4个发光二极管分别显示4个选手的抢答状态。
(3)、开始抢答后,哪个选手抢答键最先按下,该选手的抢答指示灯点亮,表示抢答成功,此时其他选手再按键为无效,抢答成功后开始3秒计时,到时指示灯变为闪烁,以提示选手选手抢答后必须3秒内回答问题。
2.2、总体法案设计方案:依据课题要求,基于AT89C52单片机制作的抢答器,其最大的好处就是处理快,准确性高、可靠性好、控制功能强。
课程设计(论文)课程设计名称单片机原理及其在电气和测控学科中的应用题目名称基于单片机的四路抢答器设计系别专业电气工程系、姓名学号指导教师2011年6月21日邵阳学院课程设计(论文)任务书注:1.此表由指导教师填写,经系、教研室审批,指导教师、学生签字后生效;2.此表1式3份,学生、指导教师、教研室各1份。
指导教师(签名):学生(签名):邵阳学院课程设计(论文)评阅表学生姓名学号系电气工程系专业班级电气测控类一班题目名称四路抢答器设计课程名称单片机原理及应用一、学生自我总结二、指导教师评定注:1、本表是学生课程设计(论文)成绩评定的依据,装订在设计说明书(或论文)的“任务书”页后面;2、表中的“评分项目”及“权重”根据各系的考核细则和评分标准确定。
目录........摘要 (1)第一章抢答器总体设计 (2)1.1 设计任务与要求 (2)1.2 方案设计与论证 (2)第二章单片机应用系统简介 (3)2.1 单片机结构 (3)2.2 单片机的封装形式,引脚定义及功能 (3)第三章硬件电路设计 (4)3.1 抢答器的电路图 (5)3.2 单元电路设计 (5)3.3 复位电路设计 (6)3.4 报警电路设计 (6)3.5 显示电路 (7)第四章软件设计 (7)4.1 系统主程序设计 (8)4.2 主程序清单 (9)第五章调试及性能分析 (23)第六章设计总结及心得 (24)附录:参考文献摘要随着现代娱乐节目及其它游戏环节的需要,也为了完善节目的紧张气氛和观众的互动,就出现了多路抢答器。
它是人们常用于各种需要抢答比赛时用的电路器材,是一名公正的裁判员。
抢答器的出现给人们带来极大的方便,他能准确无误的从若干名参赛中确定出最先抢答者,并且有显示,声效等功能。
DigestWith modern entertainment programs and other game loop, also need in order to improve the program of tension and the audience interaction, appeared more road vies to answer first device. It is often used in all kinds of people in the game to vies to answer first circuit equipment, is a fair judge. The emergence of the vies to answer first people brings great convenience, he can accurate from several of participating in the first vies to answer first determine the, and have a show, sound effects, and other functions.第一章 抢答器的总体设计1.1设计任务与要求要求实现功能:将其中3个按键定义为1—4号,第一位数码管用于计时,第二位数码管用于显示当前抢答着。
【实例56】基于MCS-51单片机的四路抢答器1.显示程序void delay_20ms(void) //延时20msvoid max7219_reset(void) //初始化MAX7219void write_reg(uchar reg,uchar sdata) //写入命令void write_digit(uchar digit,uchar number)//显示数字void send_data(uchar byte) //MAX7219的驱动程序void display_time(void) //显示倒计时剩余时间2.按键扫描程序bit control_key(void) //检测主持人是否按键{if(KEY5==1) //如果KEY5为高说明没有按键return 1; //返回1,表示没有按键动作else //如果KEY5为低说明可能有按键动作delay_20ms(); //延时20ms,去抖动if(KEY5==1) //如果20ms后KEY5变为高电平是干扰return 1; //返回1else //如果20ms后仍为低电平确认有按键动作return 0; //返回0}子程序get_key_num()用于检测是否有参赛者按动答题按键。
程序代码如下:uchar get_key_num() //检测哪个参赛者按键{uchar key_state=0;key_state=P1;key_state&=0x0f; //读取P1口的低四位if(key_state==0x0f) //若均为高电平,说明无人按键return 0; //返回1else{key_state^=0xff;if(key_state&0x01) return 1; //如果KEY1被按下,返回1else if(key_state&0x02) return 2; //如果KEY2被按下,返回2else if(key_state&0x04) return 3; //如果KEY3被按下,返回3else return 4; /如果KEY4被按下,返回4}}子程序key_handle()用于对答题按键进行处理。
/*功能:通过按键实现四路抢答器,并且通过数码管显示部分显示在主持人按下复位按钮后,开始下一轮的抢答。
*/#include<reg51.h>#define uchar unsigned char#define uint unsigned intuchar k;uchar code table1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};sbit kongzhi=P2^1;sbit key5=P3^4;//复位按钮sbit key1=P3^0;//抢答器1sbit key2=P3^1;//抢答器2sbit key3=P3^2;//抢答器3sbit key4=P3^3;//抢答器4void delayms(uint max)//延时函数{ uint i,j;for(i=max;i>0;i--)for(j=110;j>0;j--);}void main()//主函数{bit fak;//通过控制fak,使数码管保持最开始按下的数字P0=0x3f;//最开始,数码管显示0kongzhi=0;//数码管的公共端是低电平有效,由于使用的是PNP,故输入高电平。
while(!fak)//关键在此{if(!key1)//如果第一个按键按下,数码管显示1{P0=0x06;fak=1;}else if(!key2) //如果第二个按键按下,数码管显示2{P0=0x5b;fak=1;}else if(!key3) //如果第三个按键按下,数码管显示3{P0=0x4f;fak=1;}else if(!key4) //如果第四个按键按下,数码管显示4{P0=0x66;fak=1;}}while(fak){if(key5==0)//复位按钮的设定{P0=0x3f;fak=0;}}}。
单片机课程设计报告项目名称基于单片机的抢答器设计摘要此次设计提出了用STC89C52单片机为核心控制元件,设计一个简易的抢答器,本方案以STC89C52单片机作为主控核心,发光二极管、数码管、蜂鸣器等构成四路抢答器,利用了单片机的按键复位电路、时钟电路、定时/中断等电路,设计的抢答器具有实时显示抢答选手的的特点,还有复位电路,使其再开始新的一轮的答题和比赛,同时还利用C语言编程,使其实现一些基本的功能。
本设计的系统实用性强、判断精确、操作简单、扩展功能强。
它的功能实现是比赛开始,主持人读完题之后按下总开关,此时数码管显示初始状态0,直到有一个选手抢答时,对应的会在数码管上显示出该选手的编号,同时发光二极管出现闪烁状态,蜂鸣器也会发出声音,以提示有人抢答本题,主持人按下复位键,示意可以答题。
关键字:STC89C52单片机;动态显示;中断;按键控制AbstractThis design use STC89C52as the core control element is presented to design a simple responder, this scheme is STC89C52 single chip microcomputer as control core, light-emitting diode, digital tube, buzzer and so on four road vies to answer first device, using the single chip microcomputer button reset circuit, clock circuit, timing/interrupt circuit, design of vies to answer first appliance has the characteristic of real-time display vies to answer first contestant's number, and reset circuit, to start a new round of the answer and, at the same time also use of C language programming, make it implements some basic functionality.The design of the system is practical, accurate judgment, simple operation, strong extended functionality. Its function realization is the match began, and the host to read the topic after press the main switch, the digital tube display initial condition 0, until there is a contestant vies to answer first, the corresponding in the contestant's serial number is shown on the digital tube, light-emitting diodes, flicker status at the same time, the buzzer will sound, to remind someone vies to answer first ontology, host press the reset button, the signal can be the answer.Keywords:STC89C52 microcomputer; Dynamic display; Interrupt; The key control目录摘要IAbstractII第1章绪论11.1 单片机抢答器的背景11.2 单片机抢答器的意义11.3 抢答器的应用1第2章系统硬件部分的设计22.1设计要求22.2 总体设计方案22.3 单元模块设计32.3.1 单片机简介32.3.2 最小系统的设计52.3.3 数码管显示电路62.3.4 按键模块设计6第3章系统的软件设计 (8)3.1 抢答器工作原理83.2 流程图83.3 KEIL软件简介9第4章系统的仿真与调试114.1 软件的仿真与调试114.2硬件的安装与调试114.2.1晶振电路的测试114.2.2复位电路的测试124.2.3显示电路的测试12总结13参考文献13附录1源程序代码14附录2 元件清单16附录3 仿真图17附录4 实物照片展示18致19第1章绪论1.1 单片机抢答器的背景二十世纪跨越了三个“电”的时代,即电气时代、电子时代和现已进入的电脑时代。
摘要 (I)Abstract (II)引言 (1)1系统概述 (2)1.1抢答器需求分析 (2)1.2 抢答器工作过程 (2)2 单片机功能简介 (3)2.1 STC89C51的功能 (3)2.1.1 STC89C51特殊功能寄存器 (3)2.2 STC89c51单片机的内部结构 (5)3 系统硬件电路的设计 (6)3.1 系统总电路如图 (6)3.2 最小系统的设计 (7)3.2.1 电源的设计 (7)3.2.2 时钟频率电路的设计 (7)3.2.3 复位电路的设计 (9)3.3 显示电路的设计 (11)3.3.1 数码管简介 (12)3.3.2 CD4511七段译码器简介 (12)3.4 按键电路的设计 (14)3.5 蜂鸣器设计 (15)3.6元器件焊接及调试 (17)4 系统软件的设计 (17)4.1 延时子程序 (19)4.2 显示子程序 (19)4.3 倒计时加按键扫描子程序 (19)4.4主程序及分析 (20)5 结论 (23)参考文献 (24)致谢 (25)附录 1 (26)附录2 (27)Contents Abstract....................................................... I I Introduction. (1)1 System overview (2)1.1 The analysis of responder needs (2)1.2 Responder work process (2)2 MCU features (3)2.1 STC89C51 (3)2.1.1 Special function register (3)2.2 The internal structure of STC89c51 (5)3 The design of circuit system (6)3.1 The circuit system (6)3.2 The design of minimum system (7)3.2.1 The design of power supply (7)3.2.2 The design of clock circuit (7)3.2.3 The design of reset circuit (9)3.3 The design of display circuit (11)3.3.1 Digital tube profile (12)3.3.2 The introduction of CD4511 (13)3.4 The design of key circuit (15)3.5 The design of buzzer (15)3.6 Components and welding debuggin g (17)4 The design of software (19)4.1 Delay subroutine (19)4.2 Display program (19)4.3 The countdown and keyboard scanning subroutine (19)4.4 Main program and analysis (20)5 Conclusions (23)References (24)Acknowledgement (25)Appendix 1 (26)Appendix 2 (27)基于51单片机的四路抢答器设计作者:吴新春,指导教师:刘平(山东农业大学讲师)【摘要】本文设计以STC89C51单片机为核心的四路抢答器。
安阳师范学院课程实践报告书单片机程实践——竞赛抢答器作者:陈玉琦141154004李晴141154013 系(院):物电学院专业:电气自动化年级:14专升本班学号:141154004 141154013指导教师:丁电宽日期:2014/12/18摘要随着现代娱乐节目及其它游戏环节的需要,也为了完善节目的紧张气氛和观众的互动,就出现了多路抢答器。
它是人们常用于各种需要抢答比赛时用的电路器材,是一名公正的裁判员。
抢答器的出现给人们带来极大的方便,他能准确无误的从若干名参赛中确定出最先抢答者,并且有显示,声效等功能。
第一章 抢答器的总体设计1.1设计任务与要求要求实现功能:将其中3个按键定义为1—4号,第一位数码管用于计时,第二位数码管用于显示当前抢答着。
当开始后第二位数码管闪烁显示“-”,计时开始后,等待抢答。
抢答后,停止计时,第二位数码管显示抢答者对应编号,按清除键清除。
1. 设计出电气原理图;2. 设计出程序流程图;3. 设计出程序;4. 在实验室做出产品或仿真调试。
1.2 设计方案与论证方案:该系统采用51系列单片机AT89C51作为控制核心,该系统可以完成运算控制,信号识别以及显示功能的实现。
由于用了单片机,使其技术比较成熟,应用起来方便,便于控制和实现。
具有灵活的可编程性,能方便对系统功能的扩张和更改。
图1.2 抢答器原理图第二章单片机应用系统简介2.1单片机结构(1)80C51单片机的功能结构图2.1 单片机内部结构图2.2 单片机的封装形式,引脚定义及功能。
(1)80C51封装80C51系列单片机具有双列直插式和方形两种封装。
(2)80C51系列单片机引脚功能VCC---工作电源+5VGND---电源接地ALE/PROG—访问外部存储器时作为低8位地址锁存控制信号。
PSEN--- 外部程序读选通信号。
EA/VPP---访问程序存储器控制信号。
RET---复位信号XTAL1---片内震荡电路输入端。
XTAL2---片内震荡电路输出端。
P0-- P3—输入输出端口。
图2.2 80C51双列直插式引脚分布图第三章硬件电路设计3.1 抢答器的电路图如图3.1所示为电路图,其工作原理为:接通电源后主持人将开关拨到“清零”状态,抢答器处于禁止状态,定时器设定时间,主持人将开关置“开始”,宣布抢答开始时,定时器倒计时,扬声器发出响声。
选手要在规定时间内完成抢答;优先判断,编号锁存,扬声器提示。
图3.1 抢答器电路图3.2 单元电路设计3.2.1 抢答选手开关电路图3.2所示,该图为各个选手抢答信号的输入装置,在通过单片机,选择有效信号,同时封锁图3.2.1 抢答器选手开关电路3.2.2复位电路设计外部中断的内部中断并存,单片机硬件复位端。
图3.2.2 复位端电路图3.2.3报警电路设计报警电路用于报警,但遇到信号时,发出报警,图3.2.3就是报警电路。
选手在设定时间内抢答时,实现优先判断编号锁存等提示。
图3.2.3 报警器电路图3.2.4 显示电路显示电路用于显示抢答时间以及抢答信号,同时对犯规抢答组进行闪烁显示。
其显示电路如图3.2.4所示。
图3.2.4 显示电路图第四章软件设计4.1主程序系统结构图如图4-1所示为总体原理框图。
其工作原理为:接通电源后,主持人将开光FW 拨到“清零”状态,抢答器处于禁止状态,编号显示器灭灯,定时器显示设定时间;主持人将开光置“开始”状态,宣布“开始”抢答器工作。
定时器开始倒计时。
选手在规定的15s定时时间内抢答时,抢答器完成:优先判断、编号显示、扬声器提示,倒计时显示。
当一轮抢答之后,定时器停止、禁止二次抢答、定时器显示剩余时间。
如果再次抢答必须由主持人再次操作“清除”和“开始”状态开关。
图4-1 总体原理框图4.2 系统主程序为了能过达到抢答的公平,公正,合理,应该在主持人发布抢答命令之前必须设定抢答时间,因而设定时间程序很重要。
下面是抢答器主程序流程图4.2图4.2 抢答器主程序流程图4.3 主程序清单OK EQU 20H ;抢答开始标志位RING EQU 22H ;响铃标志位DATA0 EQU 36H ;抢答按键口数据存放地址ORG 0000HAJMP MAINORG 0003HAJMP INTT0ORG 000BHAJMP T0INTORG 001BHAJMP T1INTORG 0040HMAIN: MOV R1,#15 ;初设抢答时间为15s MOV R2,#45 ;初设答题时间为45smov 38h,#60 ;启用锦囊时间从60s倒计时MOV TMOD,#11H ;设置未定时器/模式1MOV TH0,#0F0HMOV TL0,#0FFH ;越高发声频率越高,越尖MOV TH1,#3CHMOV TL1,#0B0H ;50ms为一次溢出中断SETB EASETB ET0SETB ET1 ;允许二个中断,T0/T1CLR OKCLR RINGSETB TR1SETB TR0 ;一开始就运行定时器,以开始显示FFF.如果想重新计数,重置TH1/TL1就可以了;========================================================================; =================================查询程序================================ ;======================================================================== START: MOV DATA0,#0FFH ;初始化MOV R5,#0BHMOV R4,#0BHMOV R3,#0BHACALL DISPLAY ;未开始抢答时候显示FFFJNB P3.3,SELSUB0JNB P3.4,TZ3 ;倒计时调整JB P3.0,NEXTACALL DELAYJB P3.0,NEXT ;去抖动,如果"开始键"按下就向下执行,否者跳到非法抢答查询SETB EX0 ;开放INT0ACALL BARK ;按键发声MOV A,R1MOV R6,A ;送R1->R6,因为R1中保存了抢答时间SETB OK ;抢答标志位,在使用锦囊时用作判断是抢答倒计时还是回答倒计时MOV R3,#0AH ;抢答只显示计时,灭号数AJMP COUNT ;进入倒计时程序,"查询有效抢答的程序"在COUNT里面NEXT: JNB P1.0,FALSE1JNB P1.1,FALSE2JNB P1.2,TZ1JNB P1.3,TZ2AJMP STARTTZ1: AJMP FALSE3TZ2: AJMP FALSE4TZ3: AJMP SELSUB1AJMP START========================================================================= ===========================非法抢答处理程序============================== ;======================================================================== FALSE1: MOV R3,#01HAJMP ERRORFALSE2: MOV R3,#02HAJMP ERRORFALSE3: MOV R3,#03HAJMP ERRORFALSE4: MOV R3,#04HAJMP ERROR;======================================================================== =========================SELSUB0(抢答时间R1调整程序)===================== ;======================================================================== SELSUB0: MOV A,R1MOV B,#0AHDIV ABMOV R5,AMOV R4,BMOV R3,#0AHACALL DISPLAY ;先在两个时间LED上显示R1JNB P3.5,INC0 ;P3.5为+1s键,如按下跳到INCOJNB P3.6,DEC0 ;P3.6为-1s键,如按下跳到DECOJNB P3.1,BACK0 ;P3.1为确定键,如按下跳到BACKOAJMP SELSUB0INC0: MOV A,R1CJNE A,#63H,ADD0 ;如果不是99,R2加1,如果加到99,R1就置0,重新加起。
MOV R1,#00HACALL DELAY1AJMP SELSUB0ADD0: INC R1ACALL DELAY1AJMP SELSUB0DEC0: MOV A,R1JZ SETR1 ;如果R1为0, R1就置99,DEC R1ACALL DELAY1AJMP SELSUB0SETR1: MOV R1,#63HACALL DELAY1AJMP SELSUB0BACK0: AJMP START;=========================SELSUB1(回答时间R2调整程序)===================== ;======================================================================== SELSUB1: MOV A,R2MOV B,#0AHDIV ABMOV R5,AMOV R4,BMOV R3,#0AHACALL DISPLAYJNB P3.5,INC1JNB P3.6,DEC1JNB P3.1,BACK1AJMP SELSUB1INC1: MOV A,R2CJNE A,#63H,ADD1MOV R2,#00HACALL DELAY1AJMP SELSUB1ADD1: INC R2ACALL DELAY1AJMP SELSUB1DEC1: MOV A,R2JZ SETR2DEC R2ACALL DELAY1AJMP SELSUB1SETR2: MOV R2,#63HACALL DELAY1AJMP SELSUB1BACK1: AJMP START===============================启用锦囊程序============================== ;======================================================================== REPEAT:MOV A,38h ;使用锦囊时重新计时MOV R6,ACLR RING ;当倒计时进入最后5秒的时候,启用锦囊能消除蜂鸣========================================================================= =============倒计时程序(抢答倒计时和回答倒计时都跳到改程序)============== ========================================================================= COUNT: MOV R0,#00H ;重置定时器中断次数MOV TH1,#3CHMOV TL1,#0B0H ;重置定时器RECOUNT:MOV A,R6 ;R6保存了倒计时的时间,之前先将抢答时间或回答时间给R6MOV B,#0AHDIV AB ;除十分出个位/十位MOV 30H,A ;十位存于(30H)MOV 31H,B ;个位存于(31H)MOV R5,30H ;取十位MOV R4,31H ;取个位MOV A,R6SUBB A,#07HJNC LARGER ;大于5s跳到LARGER,小于等于5s会提醒MOV A,R0CJNE A,#0AH,FULL ;1s中0.5s向下运行CLR RINGAJMP CHECKFULL: CJNE A,#14H,CHECK ;下面是1s的情况,响并显示号数并清R0,重新计SETB RINGMOV A,R6JZ QUIT ;计时完毕MOV R0,#00HDEC R6 ;一秒标志减1AJMP CHECKLARGER: MOV A,R0CJNE A,#14H,CHECK ;如果1s向下运行,否者跳到查"停/显示"DEC R6 ;计时一秒R6自动减1MOV R0,#00HCHECK: JNB P3.1,QUIT;如按下停止键退出JNB OK,CHECKK ;只在回答倒计时才有效AJMP NEXTTCHECKK:JNB P3.0,REPEAT ;判断是否使用锦囊NEXTT: ACALL DISPLAYJB OK,ACCOUT;如果是抢答倒计时,如是则查询抢答,否者跳过查询继续倒数(这里起到锁抢答作用)AJMP RECOUNTACCOUT:MOV A,DATA0JNB ACC.0,TRUE1JNB ACC.1,TRUE2JNB ACC.3,TZ8AJMP RECOUNTTZ7: AJMP TRUE3TZ8: AJMP TRUE4AJMP RECOUNTQUIT: CLR OK ;如果按下了"停止键"执行的程序CLR RINGAJMP START========================================================================= ============================正常抢答处理程序============================= ========================================================================= TRUE1: ACALL BARKMOV A,R2MOV R6,A ;抢答时间R2送R6MOV R3,#01HCLR OK ;因为答题的计时不再查询抢答,所以就锁了抢答AJMP COUNTTRUE2:ACALL BARKMOV A,R2MOV R6,AMOV R3,#02HCLR OKAJMP COUNTTRUE3:ACALL BARKMOV A,R2MOV R6,AMOV R3,#03HCLR OKAJMP COUNTTRUE4:ACALL BARKMOV A,R2MOV R3,#04HCLR OKAJMP COUNT========================================================================= ============================犯规抢答程序================================= ========================================================================= ERROR: MOV R0,#00HMOV TH1,#3CHMOV TL1,#0B0HMOV 34H,R3 ;犯规号数暂存与(34H)HERE: MOV A,R0CJNE A,#06H,FLASH ;0.3s向下运行->灭并停响CLR RINGMOV R3,#0AHMOV R4,#0AHMOV R5,#0AH ;三灯全灭AJMP CHECK1FLASH: CJNE A,#0CH,CHECK1 ;下面是0.8s的情况,响并显示号数并清R0,重新计SETB RINGMOV R0,#00HMOV R3,34H ;取回号数MOV R5,#0BHMOV R4,#0BH ;显示FF和号数AJMP CHECK1CHECK1: JNB P3.1,QUIT1ACALL DISPLAYAJMP HEREQUIT1: CLR RINGCLR OKAJMP START========================================================================= ===============================显示程序================================== ========================================================================= DISPLAY:MOV DPTR,#DAT1 ;查表显示程序,利用P0口做段选码口输出/P2低三位做位选码输出,MOV A,R3MOVC A,@A+DPTRMOV P2,#0feHMOV P0,AACALL DELAYMOV DPTR,#DAT2MOV A,R5MOVC A,@A+DPTRMOV P2,#0fdHMOV P0,AACALL DELAYMOV A,R4MOVC A,@A+DPTRMOV P2,#0fbHMOV P0,AACALL DELAYRETDAT1:DB 00h,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,00H,71H "灭","1","2","3","4","5","6","7","8","9","灭","F"DAT2:DB 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,00H,71H第一个为零,其他与上相同,因为十位如果为零显示熄灭========================================================================= ================加减时间延时(起到不会按下就加N个数)====================== ========================================================================= DELAY1: MOV 35H,#08HLOOP0: ACALL DISPLAYDJNZ 35H,LOOP0RET========================================================================= =====================延时(显示和去抖动用到)============================== ========================================================================= DELAY: MOV 32H,#12HLOOP: MOV 33H,#0AFHLOOP1: DJNZ 33H,LOOP1DJNZ 32H,LOOPRET=====================================================================================================发声程序===================================== ========================================================================= BARK: SETB RINGACALL DELAY1ACALL DELAY1CLR RING ;按键发声RET========================================================================= =======================TO溢出中断(响铃程序)============================== ========================================================================= T0INT: MOV TH0,#0ECHMOV TL0,#0FFHJNB RING,OUT;CPL P3.7 ;RING标志位为1时候P3.7口不断取反使喇叭发出一定频率的声音OUT: RETI========================================================================= ========================T1溢出中断(计时程序)============================= ========================================================================= T1INT: MOV TH1,#3CHMOV TL1,#0B0HINC R0RETI========================================================================= ===========================INTT0中断服务程序============================= ========================================================================= INTT0:MOV DATA0,P1CLR EX0RETIEND第5章调试及性能分析1、具有清零装置和抢答控制,可由主持人操纵,避免有人在主持人说“开始”前提前抢答违反规则。