比赛时间还原、暂停、倒计时设置
按键1用来还原比赛的时间。本设计设定的每节比赛的时间为12分钟。当按下1键时,每节比赛剩余时间还原为“12:00”,并显示在数码管上。时间还原后比赛就可以开始了,如果裁判吹响开始的哨声,则应立即按下2键使倒计时开始。如果出现死球情况,就要按下3键,使倒计时停止。暂停时间到时,再按下2键继续倒计时,直至结束。
key1 key2 key3
程序:
#include
#define uint unsigned int
void delay(uint);
unsigned char DUANZHI[]={0x3f,0x30,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//定义0~9指针
unsigned char dpsbf[]={0,0,0,0};
unsigned char A[]={0xfe,0xfd,0xfb,0xf7};
sbit key1=P3^0;
sbit key2=P3^1;
sbit key3=P3^2;
unsigned char num,msecond=1,mminute=1;
unsigned char i,key1_1=0,key2_1=0,key3_1=0;
void display();
void Time0_Init() //中断初始化
{
TMOD=0X01;
IE=0X82;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
}
void main() //主函数
{
num=0;
Time0_Init();
for(;;)
{
if(key1==0)
{
msecond=1;
mminute=13;
key3_1=0;
}
if(key2==0)key3_1=1;
if(key3==0)key3_1=0;
display();
}
}
void delay(uint x) //延迟
{
uint i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
void T0_time()interrupt 1 // 中断
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
if(key3_1==1)
num++;
}
void display() //显示
{
if(key3_1==1)
{
if(num>=20)
{
num=0;
msecond--;
if(msecond<=0)
{
msecond=60;mminute--;
if(mminute<=0)
{
msecond=1;
mminute=1;
key3_1=0;
}
}
}
}
dpsbf[3]=(msecond-1)%10;
dpsbf[2]=(msecond-1)/10;
dpsbf[1]=(mminute-1)%10;
dpsbf[0]=(mminute-1)/10;
for(i=0;i<=3;i++)
{
P1=A[i];
P0=DUANZHI[dpsbf[i]];
delay(3);
}
}
本文来源:https://www.2haoxitong.net/k/doc/c776246f9b6648d7c1c746b4.html
文档为doc格式