1、当主持人按下按键,抢答开始,抢答时间会自动开始倒计时,如果有选手按下按键,数码管则会对应的显示出该选手的编号和答题时间开始倒计时,在倒时时间的最后5s蜂鸣器会发出声音提示。
2、当主持人没有按下按键,如果有选手按下按键,则视为违规抢答,数码管上会显示“FF”和违规选手的编号并蜂鸣器报警提示。
3、可以设置抢答时间和答题时间,设置的参数具有掉电保存功能,保存在单片机内部。
4、第一次按设置键可以设置抢答时间,第二次按下设置键可以设置答题时间,再按8号和7号键就可以加减设置的时间。
完整版 电路图和程序代码 下载地址
https://pan.baidu.com/s/1kNaPK19EJ_wHW81UlWZ65w?pwd=3456
部分代码展示
#include<reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
uchar time,aa,man,shi,ge,num,start,noman,antime,mod,fuwei;
uchar data qsj,asj;
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x8e,0xff};
sbit START=P3^0;
sbit SET=P3^1;
sbit JIA=P3^2;
sbit JIAN=P3^3;
sbit RESET=P3^4;
sbit BEEP=P3^5;
sbit SCL=P3^6;
sbit SDA=P3^7;
void delay(uint z);
void display(uchar num,uchar shi,uchar ge);
void init();
void answer();
void set();
void display2(uchar mod,uchar shi,uchar ge);
void reset();
void beep();
void nop();
void init2();
void ready();
void stop();
void writebyte(uchar j);
uchar readbyte();
void clock();
uchar read24c02(uchar address);
void write24c02(uchar address,uchar info);
void save();
void load();
void main()
{
init();
load();
while(1)
{
if(RESET==0)
reset();
if(START==0&&fuwei==1)
{
time=qsj;
start=1;
num=11;
noman=1;
fuwei=0;
}
if(SET==0&&fuwei==1)
set();
if(aa==20)
{
aa=0;
if(time>0&&fuwei==0)
{
time--;
shi=time/10;
ge=time%10;
if(time<=5)
beep();
}
else
{
shi=10;
ge=10;
if(fuwei==0)
noman=0;
}
}
if(noman==1)
man=P1;
switch(man)
{
case 0xfe:num=1;answer();break;
case 0xfd:num=2;answer();break;
case 0xfb:num=3;answer();break;
case 0xf7:num=4;answer();break;
case 0xef:num=5;answer();break;
case 0xdf:num=6;answer();break;
case 0xbf:num=7;answer();break;
case 0x7f:num=8;answer();break;
default:break;
}
display(num,shi,ge);
if(start==0&&num!=11)
beep();
}
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void display(uchar num,uchar shi,uchar ge)
{
P2=0x01;
P0=table[num];
delay(3);
if(start==1)
{
P2=0x08;
P0=table[ge];
}
else if(start==0)
{
P2=0x08;
P0=table[10];
}
delay(3);
if(start==1)
{
P2=0x04;
P0=table[shi];
}
else if(start==0)
{
P2=0x04;
P0=table[10];
}
delay(3);
}