基于51单片机八路抢答器的设计.doc
《基于51单片机八路抢答器的设计.doc》由会员分享,可在线阅读,更多相关《基于51单片机八路抢答器的设计.doc(60页珍藏版)》请在咨信网上搜索。
毕业设计(论文) 题 目: 基于51单片机的抢答器系统设计 函授站点: 中国矿业大学继续教育学院 学习层次: 专科 班级名称: 徐工技师学院 函机电2015班 姓名: 彭乾坤 学号: 中国矿业大学继续教育学院 20 年 月 日 摘 要 随着科学技术的发展和普及,各种各样的竞赛越来越多,其中抢答器的作用也就显而易见。目前很多抢答器基本上采用小规模数字集成电路设计,使用起来不够理想。因此设计一更易于使用和区分度高的抢答器成了非常迫切的任务。现在单片机已进入各个领域,以其功耗小、智能化而著称,所以若利用单片机来设计抢答器,便使以上问题得以解决.针对以上情况,本文设计出以STC89C52RC单片机为核心的八路抢答器。我们采用了数字显示器直接指示,自动锁存显示结果,并自动复位的设计思想,它能根据不同的抢答输入信号,经过单片机的控制处理并产生不同的与输入信号相对应的输出信号,最后通过LED数码管显示相应的路数,即使两组的抢答时间相差几微秒,也可分辨出是哪组优先按下的按键,它充分利用了单片机系统的优点,具有结构简单、功能强大、可靠性好、实用性强的特点。 本设计是以八路抢答为基本理念。考虑到依需设定限时回答的功能,利用51单片机及外围接口实现的抢答系统,利用单片机的定时器/计数器定时和记数的原理,将软、硬件有机地结合起来,使得系统能够正确地进行计时,同时使数码管能够正确地显示时间。用开关做键盘输出,扬声器发生提示。同时系统能够实现:在抢答中,只有开始后抢答才有效,如果在开始抢答前抢答为犯规;满时后系统计时自动复位及主控强制复位;按键锁定,在有效状态下,按键无效非法。 关键词:STC89C52RC; 共阴数码管; 按键 ;蜂鸣器 目 录 前 言 1 第一章 工作原理 2 1.1设计目标 2 1.1.1基本功能 2 1.1.2主要技术参数 2 第二章 硬件设计与原理 3 2.1 总设计框图 3 2.2 硬件设计分析 3 2.2.1 电源的设计 3 2.2.2 单片机最小系统 4 2.2.3 数码管显示电路 10 2.2.4 按键输入电路 11 2.2.5 报警与指示电路 14 第三章 软件设计与分析 15 3.1 软件设计的组成 15 3.2 各部分软件分析 15 3.2.1 延时子函数 15 3.2.2 初始化子函数 15 3.2.3 开始键扫描子函数 16 3.2.4 选手抢答按键扫描子函数 17 3.2.5 显示子函数 20 3.2.6 调整时间键扫描子函数 24 3.2.7 定时器0中断子函数 26 3.2.8 定时器1中断子函数 27 3.2.9 主函数 28 3.3 总源程序 30 第四章 软件仿真 46 4.1 PROTEUS简介 46 4.2仿真图 48 4.3原理图 49 4.4 元件清单 50 4.5 仿真结果图 51 总结 54 致 谢 56 参考文献 57 前 言 最近几年来,随着科技的飞速发展,单片机领域正在不断的走向社会各个角落,还带动传统控制检测日新月异更新。在实时运作和自动控制的单片机应用到系统中,单片机如今是作为一个核心部件来使用,仅掌握单片机方面知识是不够的,还应根据其具体硬件结构,以及针对具体应用对象特点的软件结合,加以完善。“单片机原理及应用课程设计”是电子类专业的学科基础科,它是继“汇编语言程序设计”,“接口技术”等课程之后开出的实践环节课程。 第一章 工作原理 1.1设计目标 1.1.1基本功能 1、同时供8名选手比赛,分别用8个按钮K1 ~ K8表示。 2、设置一个系统抢答控制开关K0,该开关由主持人控制。 3、抢答器具有锁存与显示功能。即选手按动按钮,锁存相应的编号,扬声器发出声响提示,并在七段数码管上显示选手号码。选手抢答实行优先锁存,优先抢答选手的编号一直保持到主持人将系统清除为止。 4、抢答器具有定时抢答功能,且一次抢答的时间由主持人设定(如30秒)。当主持人启动"开始"键后,定时器进行减计时。 5、参赛选手在设定的时间内进行抢答,抢答有效,定时器停止工作,显示器上显示选手的编号和抢答的时间,并保持到主持人将系统清除为止。在这段时间如果定时时间已到,无人抢答,本次抢答无效,系统报警并禁止抢答,定时显示器上显示00。 1.1.2主要技术参数 1、在抢答中,只有开始后抢答才有效,如果在开始抢答前抢答为犯规。 2、抢答限定时间和回答问题的时间是在10~60s设定。 3、可以显示是哪位选手有效抢答和无效抢答,正确按键后有音提示。 4、抢答时间和回答问题时间倒记时显示,时间完后系统自动复位。 5、按键锁定,在有效状态下,按键无效非法。 第二章 硬件设计与原理 以STC89C52RC单片机为核心,起着控制作用。系统包括数码管显示电路、复位电路、时钟电路、按键输入电路和蜂鸣器报警电路。设计思路分为六个模块:复位电路、晶振电路模块、STC89C52RC、数码管显示电路、按键输入电路和蜂鸣器报警电路这六个模块。 2.1 总设计框图 2.2 硬件设计分析 2.2.1 电源的设计 系统电源使用外接直流5伏。 2.2.2 单片机最小系统 51单片机是对目前所有兼容intel 8031指令系统的单片机的统称。该系列单片机的始祖是intel的8031单片机,后来随着技术的发展,成为目前广泛应用的8为单片机之一。单片机是在一块芯片内集成了CPU、RAM、ROM、定时器/计数器和多功能I/O口等计算机所需要的基本功能部件的大规模集成电路,又称为MCU。51系列单片机内包含以下几个部件: 一个8位CPU;一个片内振荡器及时钟电路; 4KB的ROM程序存储器; 一个128B的RAM数据存储器; 寻址64KB外部数据存储器和64KB外部程序存储空间的控制电路; 32条可编程的I/O口线; 两个16位定时/计数器; 一个可编程全双工串行口; 5个中断源、两个优先级嵌套中断结构。 如图2-2-1所示为STC89C52RC单片机基本构造,其基本性能介绍如下: 图2-2-1 STC89C52RC单片机 STC89C52RC本身内含40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中端口,3个16位可编程定时计数器,2个全双工串行通信口,STC89C51RC可以按照常规方法进行编程,但不可以在线编程。其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。 STC89C52RC的主要特性如下表所示: 兼容MCS—51指令系统 32个可编程I/O线 4k字节可编程闪烁存储器 可编程UARL通道 三个16位可编程定时/计数器中断 时钟频率0-24MHz 2个外部中断源,共8个中断源 256×8bit内部RAM 2个读写中断口线 可直接驱动LED 软件设置睡眠和唤醒功能 低功耗空闲和掉电模式 表2-2-1 STC89C52RC主要功能描述 STC89C52RC为40脚双列直插封装的8位通用微处理器,采用工业标准的C51内核,在内部功能及管脚排布上与通用的8xc52相同,其主要用于会聚调整时的功能控制。功能包括对会聚主IC内部寄存器、数据RAM及外部接口等功能部件的初始化,会聚调整控制,会聚测试图控制,红外遥控信号IR的接收解码及与主板CPU通信等。主要管脚有:XTAL1(19脚)和XTAL2(18脚)为振荡器输入输出端口,外接12MHz 晶振。RST/Vpd(9脚)为复位输入端口,外接电阻电容组成的复位电路。VCC(40脚)和VSS(20脚)为供电端口,分别接+5V电源的正负端。P0~P3 为可编程通用I/O脚,其功能用途由软件定义,在本设计中,P0端口(32~39脚)被定义为N1功能控制端口,分别与N1的相应功能管脚相连接,13脚定义为IR输入端,10脚和11脚定义为I2C总线控制端口,分别连接N1的SDAS(18脚)和SCLS(19脚)端口,12脚、27脚及28脚定义为握手信号功能端口,连接主板CPU的相应功能端,用于当前制式的检测及会聚调整状态进入的控制功能。 P0口:P0口是一组8位漏极开路型双向I/O 口,也即地址/数据总线复用口。作为输出口用时,每位能吸收电流的方式驱动8个TTL逻辑门电路,对端口P0写“1”时,可作为高阻抗输入端用。在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。在Flash 编程时,P0口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻。 P1口:P1是一个带内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。与AT89C51不同之处是,P1.0和P1.1还可分别作为定时/计数器2 的外部计数输入(P1.0/T2)和输入(P1.1/T2EX)。Flash编程和程序校验期间,P1接收低8位地址。 P2口:P2是一个带有内部上拉电阻的8 位双向I/O口,P2的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口P2写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。在访问外部程序存储器或16位地址的外部数据存储器(例如执行MOVX @DPTR指令)时,P2口送出高8位地址数据。在访问8位地址的外部数据存储器(如执行MOVX @RI指令)时,P2口输出P2锁存器的内容。Flash编程或校验时,P2亦接收高位地址和一些控制信号。 P3口:P3口是一组带有内部上拉电阻的8位双向I/O口。P3口输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对P3口写入“1”时,它们被内部上拉电阻拉高并可作为输入端口。此时,被外部拉低的P3口将用上拉电阻输出电流(IIL)。P3口除了作为一般的I/O口线外,更重要的用途是它的第二功能P3口还接收一些用于Flash 闪速存储器编程和程序校验的控制信号。 RST:复位输入。当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。 ALE/PROG:当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。一般情况下,ALE仍以时钟振荡频率的1/6输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。要注意的是:每当访问外部数据存储器时将跳过一个AL脉冲。对Flash存储器编程期间,该引脚还用于输入编程脉冲(PROG)。如有必要,可通过对特殊功能寄存器(SFR)区中的8EH单元的D0位置位,可禁止ALE操作。该位置位后,只有一条 MOVX 和MOVC指令才能将ALE激活。此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE禁止位无效。 PSEN:程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当STC89C51RC由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN有效,即输出两个脉冲。在此期间,当访问外部数据存储器,将跳过两次PSEN信号。 EA/VPP:外部访问允许。欲使CPU仅访问外部程序存储器(地址为0000H—FFFFH),EA端必须保持低电平(接地)。需注意的是:如果加密位LB1被编程,复位时内部会锁存EA端状态。如EA端为高电平(接Vcc端),CPU则执行内部程序存储器中的指令。Flash存储器编程时,该引脚加上+12V的编程允许电源Vpp,当然这必须是该器件是使用12V编程电压Vpp。 XTAL1:振荡器反相放大器的及内部时钟发生器的输入端。 XTAL2:振荡器反相放大器的输出端。 单片机最小原理图如图2-2-2所示。 图2-2-2 单片机最小系统 单片机最小系统说明: 时钟信号的产生:在MCS-51芯片内部有一个高增益反相放大器,其输入端为芯片引脚XTAL1,其输出端为引脚XTAL2。而在芯片的外部,XTAL1和XTAL2之间跨接晶体振荡器和微调电容,从而构成一个稳定的自激振荡器,这就是单片机的时钟振荡电路。 时钟电路产生的振荡脉冲经过触发器进行二分频之后,才成为单片机的时钟脉冲信号。 一般地,电容C2和C3取30pF左右,晶体的振荡频率范围是1.2-12MHz。如果晶体振荡频率高,则系统的时钟频率也高,单片机的运行速度也就快。 单片机复位使CPU和系统中的其他功能部件都处在一个确定的初始状态下,并从这个状态开始工作。单片机复位条件:必须使9脚加上持续两个机器周期(即24个振荡周期)的高电平。 2.2.3 数码管显示电路 显示系统采用四位一体数码管来显示,LED显示屏作为大型显示设备的一种,具有亮度高、价格低、寿命长、维护简便等优点。LED数码管的结构简单,分为七段和八段两种形式,也有共阳和共阴之分。以八段共阳管为例,它有8个发光二极管(比七段多一个发光二极管,用来显示sP,即点),每个发光二极管的阳极连在一起,如图(图2-2-4)所示。这样,一个LED数码管就有I根位选线和8根段选线,要想显示一个数值,就要分别对它们的高低电平来加以控制。为方便起见,本文主要讨论共阴八段LED数码显示管,其他类形的显示管与其类似。 图2-2-3 LED数码管 LED 灯的显示原理:通过同名管脚上所加电平的高低来控制发光二极管是否点亮而显示不同的字形,如 H,G,F,E,D,C,B,A全亮显示为8,采用共阴极连接驱动代码,代码表如下表(表2-2-2)所示。 表2-2-2 驱动代码表 显示数值 H,G,F,E,D,C,B,A 驱动代码 0 00111111 3FH 1 00000110 06H 2 01011011 5BH 3 01001111 4FH 4 01100110 66H 5 01101101 6DH 6 01111101 7DH 7 00000111 07H 8 01111111 7FH 9 01101111 6FH 2.2.4 按键输入电路 按键是由一组按压式或触摸式开关构成的阵列,是一种常用的输入设备。键盘可分为编码式键盘和非编码式键盘两种。 1.编码键盘通过硬件电路产生被按按键的键码,这种键盘所需程序简单,但硬件电路复杂、价格昂贵通常不被单片机系统采用。 2.非编码键盘常用一些按键排列成行列矩阵,其硬件逻辑与按键编码不存在严格的对应关系,而要由所用的程序来决定。非编码键盘的硬件接口简单,但是要占用较多的CPU时间,通常采用可编程键盘管理芯片来克服这个缺点。本设计使用两种按键,一种是按键式非编码键盘和轻触式非编码开关。 在接线时由于有四个引脚,连接时需要用万用表进行测量,然后接通两个引脚,原理图如下。 要进行数据的计算就必须先进行数据的输入,也就必须确定按键输入的数值是什么,这就需要对键盘进行扫描,从而确定究竟是哪个键按下。 图2-2-4 按键电路 2.2.5 报警与指示电路 图2-2-5 报警与指示电路 第三章 软件设计与分析 3.1 软件设计的组成 该系统由延时子函数、初始化子函数、开始键扫描子函数、选手抢答按键扫描子函数、显示子函数、调整时间键扫描子函数、定时器0中断子函数、定时器1中断子函数、主函数和数据定义这几部分组成。 3.2 各部分软件分析 3.2.1 延时子函数 //延时子函数 void delay(uchar x) { uchar y; for(;x>0;x--) for(y=120;y>0;y--); } 3.2.2 初始化子函数 //初始化子函数 void init() { TMOD=0x11; TH0=(65536-2000)/256; TL0=(65536-2000)%256; TH1=(65536-2000)/256; TL1=(65536-2000)%256; ET0=1; ET1=1; EA=1; P0=0x00; time1=10; time2=10; flag2=1; } 3.2.3 开始键扫描子函数 //开始键扫描子函数 void key1() { uchar i=100; if(K0==0) { delay(10); if(K0==0) { while(K0==0&&i) { i--; delay(10); } TR0=1; s=time1; m=0; flag1=1; flag2=1; flag3=1; num=0; beep=1; D0=1; flag4=0; //清除违规标志位 aa=0; bb=0; } } } 3.2.4 选手抢答按键扫描子函数 //选手抢答按键扫描子函数 void key() { if(K1==0) { delay(10); if(K1==0) { while(!K1); num=1; //数码管显示1号"1" TR0=0; //关闭定时器0,时间停止 TR1=1; //打开定时器1,使扬声器响一声 flag2=0; //关闭开始键标志位,使再按其他七个键不会响应 } } if(K2==0) //下面七个键的处理同上 { delay(10); if(K2==0) { while(!K2); num=2; TR0=0; TR1=1; flag2=0; //重要 } } if(K3==0) { delay(10); if(K3==0) { while(!K3); num=3; TR0=0; TR1=1; flag2=0; } } if(K4==0) { delay(10); if(K4==0) { while(!K4); num=4; TR0=0; TR1=1; flag2=0; } } if(K5==0) { delay(10); if(K5==0) { while(!K5); num=5; TR0=0; TR1=1; flag2=0; } } if(K6==0) { delay(10); if(K6==0) { while(!K6); num=6; TR0=0; TR1=1; flag2=0; } } if(K7==0) { delay(10); if(K7==0) { while(!K7); num=7; TR0=0; TR1=1; flag2=0; } } if(K8==0) { delay(10); if(K8==0) { while(!K8); num=8; TR0=0; TR1=1; flag2=0; } } } 3.2.5 显示子函数 //显示子函数 void display() { if(flag1==1) //开始键按下,开始计时抢答 { if(num!=0) //如果有人抢答,则显示相应的几号 { P0=table1[num]; //显示几号抢到了 P2=table2[0]; delay(2); P0=0; P2=0xff; } else //否则没人抢答,则前面不显示几号 { P0=0x00; P2=0xff; } P0=table1[s/10]; //下面为显示抢答倒计时 P2=table2[2]; delay(2); P0=0; P2=0xff; P0=table1[s%10]; P2=table2[3]; delay(2); P2=0xff; P0=0x00; } else //如果开始键没有按下,则显示F FF(若有违规者,则显示违规号码及 FF)或时间调整 { if(flag4==1) //违规显示 { if(num!=0) { P0=table1[num]; //显示几号违规了 P2=table2[0]; delay(2); P0=0x00; P2=0xff; P0=table1[15]; //下面显示 FF,表示违规了 P2=table2[2]; delay(2); P0=0x00; //消隐 P2=0xff; P0=table1[15]; P2=table2[3]; delay(2); P0=0x00; P2=0xff; } else { P0=0x00; P2=0xff; } } else //没有人违规才显示调整时间 { if(aa==1) { P0=0x6d; //第一位数码管显示"5(S)"(表示抢答时间调整) P2=table2[0]; delay(2); P0=0x00; P2=0xff; P0=table1[time1/10]; //下面显示调整的抢答时间 P2=table2[2]; delay(2); P0=0x00; P2=0xff; P0=table1[time1%10]; P2=table2[3]; delay(2); P0=0x00; P2=0xff; } else if(bb==1) { P0=0x07; //第一位与第二位数码管合起来显示"T",表示答题时间调整 P2=table2[0]; delay(2); P0=0x00; P2=0xff; P0=0x31; P2=table2[1]; delay(2); P0=0x00; P2=0xff; P0=table1[time2/10]; P2=table2[2]; delay(2); P0=0x00; P2=0xff; P0=table1[time2%10]; P2=table2[3]; delay(2); P0=0x00; P2=0xff; } else //否则显示F FF { P0=table1[15]; P2=table2[0]; delay(2); P0=0x00; P0=table1[15]; P2=table2[2]; delay(2); P0=0x00; //消隐 P2=0xff; P0=table1[15]; P2=table2[3]; delay(2); P0=0x00; P2=0xff; } } } } 3.2.6 调整时间键扫描子函数 //调整时间键扫描子函数 void key2() { uchar i=100; if(S2==0) //抢答时间调整 { delay(10); if(S2==0) { while(S2==0&&i) { i--; delay(10); } time1++; if(time1==61) { time1=10; } aa=1; //将抢答时间标志位置1 bb=0; //同时关闭答题时间标志位 } } if(S3==0) //答题时间调整 { delay(10); if(S3==0) { while(S3==0&&i) { i--; delay(10); } time2++; if(time2==61) { time2=10; } bb=1; aa=0; } } } 3.2.7 定时器0中断子函数 //定时器0中断子函数 void t0() interrupt 1 { TH0=(65536-2000)/256; //2ms TL0=(65536-2000)%256; if(flag3) //开始(START)键按下,嘟一声(长1秒),表示开始抢答 { beep=~beep; } else beep=1; if(s<5) //抢答时间快到报警,隔1秒响一声且红灯闪烁,响三声 { if(s%2==0) { flag3=1; D0=0; } else { flag3=0; D0=1; } } m++; if(m==500) //1秒 { m=0; s--; flag3=0; //关闭开始键按下响一秒的嘟声 if(s==-1) { s=20; TR0=0; flag1=0; //显示F FF flag2=1; num=0; D0=1; } } } 3.2.8 定时器1中断子函数 //定时器1中断子函数 void t1() interrupt 3 //定时器1处理有人按下抢答器嘟一声(长1秒) { TH1=(65536-2000)/256; TL1=(65536-2000)%256; beep=~beep; n++; if(n==500) { n=0; TR1=0; } } 3.2.9 主函数 //主函数 void main() { uchar i=100; init();//调用初始化子函数 while(1) { key1();//调用开始键扫描子函数 if((flag1==0)&(flag2==1)) //当开始键没按下及没有人违规时才可进行时间调整 { key2(); } if((flag1==1)&(flag2==0)) //当开始键按下及有人抢答才进行开始回答计时倒计时 { if(S1==0) { delay(10); if(S1==0) { while(S1==0&&i) { i--; delay(10); } s=time2; TR0=1; m=0; TR1=1; } } } if((flag1==0)&(flag2==1)) //违规 { key(); if(num!=0) //开始键没有按下时,有人按下了抢答器,则置违规标志位 { flag4=1; D0=0; } } if((flag1==1)&(flag2==1)) //如果开始键按下且抢答键没有人按下,则进行八路抢答键扫描 { key(); } display();//显示到数码管上 } } 3.3 总源程序 #include<reg51.h> typedef unsigned char uchar; typedef unsigned int uint; sbit K0=P3^0;//开始抢答按键 sbit beep=P3^7;//蜂鸣器 sbit D0=P3^1;//指示灯 sbit K1=P1^0;//1号选手抢答按键 sbit K2=P1^1;//2号选手抢答按键 sbit K3=P1^2;//3号选手抢答按键 sbit K4=P1^3;//4号选手抢答按键 sbit K5=P1^4;//5号选手抢答按键 sbit K6=P1^5;//6号选手抢答按键 sbit K7=P1^6;//7号选手抢答按键 sbit K8=P1^7;//8号选手抢答按键 sbit S1=P3^2;//答题计时键 sbit S2=P3^3;//开始抢答时间调整键 sbit S3=P3^4;//答题计时时间调整键 char s; uchar num=0; char time1;//抢答时间 char time2;//答题限时时间 uint m,n;//T0,T1定时器定一秒时 bit flag1,flag2,flag3,flag4; //标志位 bit aa,bb;//时间调整标志位 //延时子函数 void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=120;y>0;y--); } uchar code table1[]={ //共阴数码管段码值 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71 }; uchar code table2[]={ //共阴数码管位码值 0xfe,0xfd, 0xfb,0xf7 }; //初始化子函数 void init() { TMOD=0x11; TH0=(65536-2000)/256; TL0=(65536-2000)%256; TH1=(65536-2000)/256; TL1=(65536-2000)%256; ET0=1; ET1=1; EA=1; P0=0x00; time1=10; time2=10; flag2=1; } //开始键扫描子函数 void key1() { uchar i=100; if(K0==0) { delay(10); if(K0==0) { while(K0==0&&i) { i--; delay(10); } TR0=1; s=time1; m=0; flag1=1; flag2=1; flag3=1; num=0; beep=1; D0=1; flag4=0; //清除违规标志位 aa=0; bb=0; } } } //选手抢答按键扫描子函数 void key() { uchar i=100; if(K1==0) { delay(10); if(K1==0) { while(K1==0&&i) { i--; delay(10); } num=1; //数码管显示1号"1" TR0=0; //关闭定时器0,时间停止 TR1=1; //打开定时器1,使扬声器响一声 flag2=0; //关闭开始键标志位,使再按其他七个键不会响应 } } if(K2==0) //下面七个键的处理同上 { delay(10); if(K2==0) { while(K2==0&&i) { i--; delay(10); } num=2; TR0=0; TR1=1; flag2=0; //重要 } } if(K3==0) { delay(10); if(K3==0) { while(K3==0&&i) { i--; delay(10); } num=3; TR0=0; TR1=1; flag2=0; } } if(K4==0) { delay(10); if(K4==0) { while(K4==0&&i) { i--; delay(10); } num=4; TR0=0; TR1=1; flag2=0; } } if(K5==0) { delay(10); if(K5==0) { while(K5==0&&i) { i--; delay(10); } num=5; TR0=0; TR1=1; flag2=0; } } if(K6==0) { delay(10); if(K6==0) { while(K6==0&&i) { i--; delay(10); } num=6; TR0=0; TR1=1; flag2=0; } } if(K7==0) { delay(10); if(K7==0) { while(K7==0&&i) { i--; de- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 51 单片机 八路 抢答 设计
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【天****】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【天****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【天****】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【天****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文