抢答器的按键程序为了机会公平不可以用轮询法和软件延时,而是所有抢答键同时查询,比如 if(P1!=0xff),一旦有键动作立即封锁所有抢答键,再查询主持键是否按下,否则属违规。给你一个思路参考:
void keyscan()
{
unsigned char num; //局部变量
static bit key_sign=0;//按键自锁标志
if(P1!=0xff && key_sign==0)
{
key_sign=1;//自锁,
num=P1;//读键状态
switch(num)
{
case 0xfe: TheWinner=1;break;
case 0xfd: TheWinner=2;break;
.......
.......
default:TheWinner=0; break;
}
if(allow)//主持
//TheWinner胜出
else
//TheWinner违规
}
else
{
if(key_sign==1)
{
if(...)//主持操作
key_sign=0;//解锁
}
}
}
|