基于单片机八路抢答器的仿真与设计作者:***来源:《微型电脑应用》2019年第08期摘要:设计了一种基于STC12C5A60S2单片机的八路抢答器,由P3口八位控制八路抢答选手,抢答成功的同时对应选手位置的LED小灯点亮,与选手对应的指示灯由P1口控制。
设计包括数码管显示模块,用来进行显示复位、开始、选手号与提示时间信息,单片机控制模块,处理按键与数码管显示,按键模块对选手是否抢答进行按键检测,和报警模块,实现超时未抢答和倒计时时间进行报警功能等四部分。
实验结果表明,该8路抢答器的设计达到了预期的要求,具有反应快、操作简便、硬件电路简单、成本低廉等特点。
关键词:报警; 锁存; 按键; 抢答器; 数码管中图分类号: TP368.12文献标志码: ADesign and Simulation of Eight-way Responder Based on MCUWANG Fajie(Institute of Electronic Engineering,Xi’an Aeronautical Polytechnic Institute,Xi’an710089)Abstract:An 8-way answering device based on STC12C5A60S2 MCU is designed. The 8-way answering contestant numbers are controlled by the P3 ports. At the same time, the LED light corresponding to the contestant position is lit, and the corresponding indicator light is controlled by the P1 ports. The design includes a digital display module for display reset, start, player number and prompt time information. The MCU control module handles the display of keys and digital tubes, and the keyboard module detects which competitor presses the button firstly. Alarm module achieves timeout and no answer and countdown time for alarm functions. Experimental results show that the design of the 8-way responder including the above four modules meets the anticipated requirements and has the characteristics of fast response, simple operation, simple hardware circuit and low cost.Key words:Alarm; Latch;Button;Responder; Nixie tube0;引言随着各类比赛和娱乐活动的层出不穷,对抢答器功能和性能要求越来越高,目前市场上的智力竞赛抢答器多数是由数字电路设计组成,虽然功能强大,但是线路复杂,可靠性、稳定性不高,功能相对简单,当抢答器路数多时,成品面积较大、运维较困难[1];。
因此设计以单片机为核心的新型智能抢答器,利用STC12C5A60S2单片机及外围接口实现抢答系统,结合单片机的定时器的功能,将软件编程与硬件设计结合起来,使得系统能够准确地进行计时,通过数码管显示选手号和时间,能够准确、公平、公正判断出抢答选手,该系统制作过程简单,易于安装和维护,具有一定的使用和推广价值。
1;硬件系统设计八路抢答器系统采用STC12C5A60S2单片机为控制芯片,与四位一体共阳数码管SM410561D3B和10只自复位轻触开关按键组成[2];。
系统的总框图如图1所示。
按键模块包括抢答复位和抢答开始按键,用于电路的复位和主持人提示抢答开始进行倒计时,以及八位选手进行抢答的八个按键,如果选手抢答成功则数码管显示该选手按键号,同时对应选手按键的LED小灯发光,数码管的后两位显示答题时间,倒计时5S时,蜂鸣器报警提示[3];。
由于数码管的段选和位选均由单片机P0口控制,所以通过74HC573锁存器来确定位选和段选,锁存器的使能端由单片机P2.6和P2.7控制。
2;软件程序设计2.1;按键模块设计八位选手的按键由P3口的八位分别控制,P2.0控制抢答器复位按键,P2.1控制抢答开始按键,P1 口的八位分别控制与八位选手按键相对应的八只LED小灯。
程序设计时,将按键模块设计一个“KEY.H”头文件供主函数调用[4];。
按键函数对十个按键进行编程控制,根据硬件电路图,先通过程序进行按键消抖,对选手按键操作时,用“if语句”判断按键是否按下,延时一段时间后再确定是否按下,如果按键按下,数码管则显示相应的按键序号,同时与该按键对应小灯发光,按键标示为清零,例如判断按键1是否按下,主要代码“if(flag==1){if(key1==0) { delay(10); if(key1==0){ num=1; flag=0; P1=0xfe;} }”,其中,“flag==1”表示主持人已按下“开始”按键标志位,当“flag==0”时,表示按下开始按键的前提条件下,进一步判断是哪位选手抢答成功,并执行“ if(flag==0) {show(num,11,temp2/10,temp2%10);}”語句,将选手号“num”显示在第一位数码管上,第二位数码管“g”段发光,第三位数码管显示答题时间的十位,第四位数码管显示答题时间的个位。
其他七位选手按键操作类似,只是对应调整判断按键号码,即第一位数码管显示数值和小灯对应点亮即可。
2.2;显示模块设计由于LED数码管显示的位选与段选都由P0口控制,所以用74HC573进行位选或段选存储。
当74HC573锁存器的使能端为有效电平即高电平时,则改变输入端的电平,则相应的输出端与输入端电平一致,若使能端为低电平,则输出端的电平为前一次状态输入电平不变,一直保持到使能端有效[5];。
程序设计时,先选择位码,使位码控制的锁存器使能端高电平有效,再进行位扫描刷新,然后位码使能端设置低电平,进行段码显示,给P0口送入要显示的数据,到数码管显示数组里获取相应的数值显示到数码管再对数码管段显示使能清零,数码管显示数组赋初值定义为“uchar code table_seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf,0x7f};”用来显示“0-9”数字,数码管灭,“g”段点亮和小数点点亮[6];,主要代码如下:void display(){ uchar sx;for(sx=0;sx<4;sx++)//四位数码管{wela=1;//位选使能P0=0x01<<sx;//刷新位wela=0;//位选关闭P0=0xff;dula=1;//段选使能P0=table_seg[seg[sx]];//数码管显示dula=0;delay(800); }}2.3;报警模块设计主持人按下开始按键后3秒钟开始抢答,数码管前两位不显示后两位显示倒计时时间,到时间没人抢答,则进定时器T0中断进行蜂鸣器报警,同时,四位数码管的中间段,即“g”段发光,说明此次抢答无效。
若在规定时间内有选手按下按键进行抢答,答题时间为90秒,5秒倒计时提示,进中断蜂鸣器报警[7];。
程序设计主要包含主函数和中断函数,在主函数里配置定时器T0为工作模式1,打开定时器,并且开定时器T0中断,赋定时器T0中断初值为50ms,调用前面的按键与数码管显示头文件函数,“ key();”和“display();”,用“if语句”判断“flag”标志位,当“if(flag==1)”时,说明按下“开始”按键P2.1,按键消抖后,执行按键函数里的语句“ if(key10==0){ TR0=1;flag=1;flag1=1; }”,置位按键开始和抢答时间标志,同时,调用数码管显示函数,执行语句“ if(flag==1) {show(10,10,temp1/10,temp1%10); }”显示倒计时时间,当时间到无人按下按键抢答时,进中断进行蜂鸣器报警“if (temp1==0){ temp1=0;TR0=0;flag=2;beep=0; }”;当“flag==2”时,数码管“g”段点亮,“if(flag==2){ show(11,11,11,11);}”; 当复位标志“flag==3”时,则执行语句“ if(flag==3) {show(12,12,12,12);}”,四位数码管显示小数点[8];。
此外,在中断函数里要对答题5s进行报警提示,其流程图如图2所示。
中断函数里的主要代码如下:if(num!=0) //有选手按下按键{temp2--;//90 s倒计时,初值为90if(temp2<=5) //倒计时5 s{beep=~beep;//蜂鸣器报警if(temp2==0)//答题时间到{temp2=0;TR0=0;beep=1;delay(50000);beep=0;//蜂鸣器报警} }}3;软件仿真与实物制作程序编译通过后,先下载到proteus仿真软件电路图里进行调试,仿真无误后焊接硬件电路,这样可以减少由于电路或程序的问题而导致实物调试的故障。
仿真电路图如图3所示。
单片机的P0口的8位依次和74HC573的“D0-D7”相连,“P2.7”和“P2.6”进行数码管位码和段码的控制,P3口的八位接抢答选手按键,P1口八位接八个LED小灯[9];。
锁存器74HC573芯片的/OE为高电平时,输出为高阻态,芯片处于不可控制状态,在本电路中,如图3所示,/OE接低电平。
LE是输出端状态改变使能端,当LE为低电平,输出端Q始终保持上一次存储的信号,当LE为高电平时,Q紧随D的状态变化,并将D的状态锁存,电路中,U2和U3的LE分别接单片机“P2.7”和“P2.6”进行数码管位码和段码的控制。
仿真运行时可以模拟抢答过程,例如“6号选手”按下抢答器按键时,对应“D6”点亮,同时,数码管显示从90 s开始倒计时到了3 s,蜂鸣器报警[10];,实物制作如图4所示。