基于单片机的16路抢答器课程设计姓名:王文杰黄祥班级:1421202学号:201420120201201420120204专业:测控技术与仪器基于单片机的16路抢答器课程设计摘要本次课程设计通过对16路抢答器的研究与分析,了解抢答器的工作原理,以AT89C51微处理器作为主要模块、数码管做为显示模块组成的用于表决选择的抢答器。本文主要介绍AT89C51微处理器、数码管等电子元器件的相关功能及其应用。合理选取AT89C51系列集成电路芯片通过划分功能模块完成抢答部分与显示部分的电路设计,结合实际应用与理论设计,通过16个按键开关来摸拟16路选手的抢答,开始键按下,则进入到16个按键的扫描中。通过数码管来显示抢答选手的号数。关键词:抢答器,集成芯片,AT89C51设计方案一硬件设计方案抢答器由基本电路和扩展电路两部分组成。基本电路完成基本的抢答功能,即抢答开始后,当选手按下抢答键,能显示选手的编号,同时能封锁输入电路,禁止其他选手抢答。根据课程设计要求可以大概构思出硬件电路图:数码管与单片机的P0口的低八位相连接;P3口接16个按键。用以AT89C51为核心的单片机控制方案,通过相应的程序,并通过按键来进行电平识别,再由单片机输出相应的程序,并将相应数值通过数码来显示。用单片机来制作的抢答器,硬件电路比较简单,容易明白,且成本相对较低。二硬件电路设计1微处理器AT89C51简介AT89C51是一种带4K字节FLASH存储器(FPEROM—FlashProgrammableandErasableReadOnlyMemory)的低电压、高性能CMOS8位微处理器,俗称单片机。外形及引脚排列如图3-1所示。图3-1AT89C51逻辑符号2管脚说明VCC:供电电压。GND:接地。P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P0口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的低八位。在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须接上拉电阻。P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为低八位地址接收。P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3口也可作为AT89C51的一些特殊功能口,如下表所示:口管脚备选功能P3.0RXD(串行输入口)P3.1TXD(串行输出口)P3.2/INT0(外部中断0)P3.3/INT1(外部中断1)P3.4T0(计时器0外部输入)P3.5T1(计时器1外部输入)P3.6/WR(外部数据存储器写选通)P3.7/RD(外部数据存储器读选通)P3口同时为闪烁编程和编程校验接收一些控制信号。RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的低位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2:来自反向振荡器的输出。振荡器特性:XTAL1和XTAL2分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。3模块电路原理分析3.1抢答器的电路框图如图3-2所示为电路框图。其工作原理为:接通电源后,主持人宣布“开始”,抢答器工作。选手在定时时间内抢答时,抢答器完成:优先判断、编号锁存、编号显示。当一轮抢答之后,定时器停止、禁止二次抢答。图3-2抢答器框图3.2时序控制电路控制电路是抢答器设计的关键,它要完成以下功能:a.主持人宣布“开始”时,抢答电路进入正常抢答工作状态;b.当参赛选手按动抢答键时,抢答电路停止工作。时钟电路复位电路电源电路AT89C51单片机显示电路3.3时钟电路外部震荡电路单片机必须在AT49C51的驱动下才能工作,在单片机内部有一个时钟震荡电路,只需要外接一个振荡器就能产生一定的时钟信号送到单片机内部的各个单元,外部震荡电路如图3-3所示。图3-3外部震荡电路3.4复位电路复位电路,就是利用它把电路恢复到起始状态。为确保微机系统中电路稳定可靠工作,复位电路是必不可少的一部分,复位电路的第一功能是上电复位。上电复位电路图如图3-4所示。图3-4上电复位3.5扩展电路a.数码管的设计:图3-4中数码管采用的是8段数码管,用两个MC74HC573芯片,一个输入八段数码管的段信号(控制八段数码管显示的内容),一个输入八段数码管的位信号(控制八段数码管哪些数码管工作),分别接到单片机的P0.0-P0.7口,由单片机输出的P0口数据来决定段码值。图3-5数码管显示电路b.输入电路:键盘是单片机不可缺少的输入设备,是实现人机对话的纽带。因为矩阵键盘使用灵活,功能更多,故这里选择矩阵键盘。如图3-6为矩阵键盘在原理图中的连线。其中S1~S16为抢答按键。3-6按键输入电路二软件设计方案1.中断的开通与关断设计主持人发出开始抢答信号发出后,开外部中断0以接收选手抢答中断信号。选手抢答后,开外部中断1从而使主持人再次按下按键后可以开始下一次抢答。2.数码管的显示采用静态显示,是指当数码管显示某一字符时,八段数码管的对应段的发光二极管被选中,在这种显示方式下,每段LED都对应一个单片机口线。3.程序设计#includereg51.hsbitdula=P2^6;sbitwela=P2^7;unsignedcharkey=0,p,j,i,k,temp,n=10;unsignedcharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0^9的段码voiddelay(unsignedchari){for(j=i;j0;j--)for(k=125;k0;k--);}voidxianshi(unsignedcharj){P0=table[j%10];dula=1;dula=0;P0=0xfD;wela=1;wela=0;delay(5);P0=table[j/10];dula=1;dula=0;P0=0xfe;wela=1;wela=0;delay(5);}voidanjian(){P3=0xfe;temp=P3;temp=temp&0xf0;if(temp!=0xf0){delay(10);//软件消抖if(temp!=0xf0){temp=P3;switch(temp){case0xee:key=1;break;case0xde:key=2;break;case0xbe:key=3;break;case0x7e:key=4;break;}while(temp!=0xf0){temp=P3;temp=temp&0xf0;}}}P3=0xfd;temp=P3;temp=temp&0xf0;if(temp!=0xf0){delay(10);if(temp!=0xf0){temp=P3;switch(temp){case0xed:key=5;break;case0xdd:key=6;break;case0xbd:key=7;break;case0x7d:key=8;break;}while(temp!=0xf0){temp=P3;temp=temp&0xf0;}}}P3=0xfb;temp=P3;temp=temp&0xf0;if(temp!=0xf0){delay(10);if(temp!=0xf0){temp=P3;switch(temp){case0xeb:key=9;break;case0xdb:key=10;break;case0xbb:key=11;break;case0x7b:key=12;break;}while(temp!=0xf0){temp=P3;temp=temp&0xf0;}}}P3=0xf7;temp=P3;temp=temp&0xf0;if(temp!=0xf0){delay(10);if(temp!=0xf0){temp=P3;switch(temp){case0xe7:key=13;break;case0xd7:key=14;break;case0xb7:key=15;break;case0x77:key=16;break;}while(temp!=0xf0){temp=P3;temp=temp&0xf0;}}}}voidmain(){TMOD=0x01;TH0=(65536-46080)/256;//由于晶振为11.0592,故所记次数应为46080,计时器每隔50000微秒发起一次中断。TL0=(65536-46080)%256;//46080的来历,为50000*11.0592/12ET0=1;EA=1;while(1){anjian();if(p==20){p=0;n--;}if(n==0){TR0=0;p=0;while(1){xianshi(0);}}if(key!=0&&n!=0){p=0;TR0=0;while(1){xianshi(key);}}}}voidtime0()interrupt1{TH0=(65536-46080)/256;TL0=(65536-46080)%256;p++;}