#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
uchar qnumber;
void mdelay(unsigned int t)//延时程序
{
unsigned char n;
for(;t>0;t--)
for(n=0;n<125;n++) ;
}
sbit START=P2^4; //开关
sbit k1=P1;//抢答的按键接口
sbit beep=P1^6;//蜂鸣器接口
sbit led1=P1^4;//提示红灯接口
sbit led2=P1^5;//绿灯接口
sbit led3=P3^1;//1号位指示灯
sbit led4=P3^2;//2号位指示灯
sbit led5=P3^3;//3号位指示灯
sbit led6=P3^4;//4号位指示灯
sbit ww=P3^0;
/////共阴数码管段选//////////////////////////////////////////////
uchar table[22]=
{0x3F,0x06,0x5B,0x4F,0x66,
0x6D,0x7D,0x07,0x7F,0x6F,
0x77,0x7C,0x39,0x5E,0x79,0x71,
0x40,0x38,0x76,0x00,0xff,0x37};//'-',L,H,灭,全亮,n 16-21
bit d_flag;//开始抢答标志位
uchar dat;
void fengming()
{ led1=0;//红灯亮
led2=1;//关闭绿灯
beep=0;//蜂鸣器发出提示音
mdelay(1000);//蜂鸣器延时
beep=1;//蜂鸣器关闭
while(d_flag)P0=table[dat]; //数码管上锁定显示1号
}
void qiang_da()//按键抢答函数
{ unsigned char x;
x=P1&0x0f;
switch(x)
{ case 0x0e:if(START==0)
{dat=1;
led3=0;//1号位指示灯亮
d_flag=1;//数码管上锁定显示1号
fengming();//1号选手抢答成功
break;}
case 0x0d:if(START==0)
{dat=2;
led4=0;//2号位指示灯亮
d_flag=1;//数码管上锁定显示2号
fengming();//2号选手抢答成功
break;}
case 0x0b:if(START==0)
{dat=3;
led5=0;//3号位指示灯亮
d_flag=1;//数码管上锁定显示3号
fengming();//3号选手抢答成功
break;}
case 0x07:if(START==0)
{dat=4;
led6=0;//4号位指示灯亮
d_flag=1;//数码管上锁定显示4号
fengming();//4号选手抢答成功
break;} }
}
void main()
{
beep=1;//关闭蜂鸣器
led2=0;//开启绿灯
ww=0;
P0=table[16]; //待机是显示“-”
while(1)
{
qiang_da();//按键抢答函数
}
}
|