数字篮球比赛计分器:
1、数码管显示两队分数。
2、通过按键实现加1、2、3分。
3、显示倒计时。
sbit lie2=P1^2;
sbit lie3=P1^1;
sbit lie4=P1^0;
sbit beep=P1^5;//蜂鸣器
sbit smg1=P2^2;//数码管
sbit smg2=P2^3;
sbit smg3=P2^4;
//数码管编码
uchar code smgduan0[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//显示0~9,无小数点
uchar code smgduan1[10]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};//显示0~9,有小数点
uchar time=0,mode=0;//系统变量
uchar miao=0;//计时
uchar beep_time=0;//蜂鸣器计时
uchar fena=0,fenb=0;//分数
//延时
void delay(uint i)
{
while(i--);
}
//按键检测
uchar key=0;
uchar key_scan()
{
uchar i=0;
h1=0;h2=0;h3=0;
if((P1 & 0x0f)!=0x0f)
{
delay(1000);
if((P1 & 0x0f)!=0x0f)
{
h1=0;h2=1;h3=1;
if(!lie1)
i=1;
if(!lie2)
i=2;
if(!lie3)
i=3;
if(!lie4)
i=4;
h1=1;h2=0;h3=1;
if(!lie1)
i=5;
if(!lie2)
i=6;
if(!lie3)
i=7;
if(!lie4)
i=8;
h1=1;h2=1;h3=0;
if(!lie1)
i=9;
if(!lie2)
i=10;
if(!lie3)
i=11;
if(!lie4)
i=12;
}
}
if(key!=i)
{
key=i;
return key;
}
else
return 0;
}
//主函数
void main()
{
uchar i=0;
beep=0;
TMOD|=0X01;
TH0=0X3C;
TL0=0XB0;
ET0=1;//打开定时器0中断允许
EA=1;//打开总中断
TR0=1;//打开定时器
while(1)
{
i=key_scan();//读取按键
if(mode==0) //设置模式
{
if(i==9)//开始
{
mode=1;
miao=24;
}
}
else
{
if(i==2)//A加1
{
if(fena<99)
fena++;
}
if(i==3)//A加2
{
if(fena<98)
fena+=2;
}
if(i==4)//A加3
{
if(fena<97)
fena+=3;
}
if(i==6)//B加1
{
if(fenb<99)
fenb++;
}
if(i==7)//B加2
{
if(fenb<98)
fenb+=2;
}
if(i==8)//B加3
{
if(fenb<97)
fenb+=3;
}
}
if(i==10)//暂停
{
资料借鉴于此纷传