#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit we = P2^7;
sbit du = P2^6;
sbit beep=P1^3;
int temp;
int wei=0;
int stop_beep;
int i,miao,fen,shi;
int ni,nmiao,nfen;
int nshi=17;
int nshi1=16;
int nshi0=16;
int nfen1=16;
int nfen0=16;
int nmiao1=16;
int nmiao0=16;
int ni1=16;
int ni0=16;
int flag=0;
int key=10;
int moshi;
uint j;
int k;
uint a;
int ji=0;
int jmiao=0;
int jfen=0;
int jshi;
uchar code leddata[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40
};
void zhengchangbianhua()//时间正常变化
{
i++;
if(i>=100)
{
i=0;
miao++;
if(miao>=60)
{
miao=0;
fen++;
if(fen>=60)
{
fen=0;
shi++;
if(shi>=24)
{
shi=0;
}
}
}
}
}
void daobianhua()//倒计时变化
{
nshi=nshi1*10+nshi0;
nfen=nfen1*10+nfen0;
nmiao=nmiao1*10+nmiao0;
ni=ni1*10+ni0;
if(ni!=0)
ni--;
else if(ni<=0&&(nshi!=0||nfen!=0||nmiao!=0))
{
if(nmiao!=0)
{
ni=99;
nmiao--;
}
else if(nmiao==0&&nfen!=0)
{
nfen--;
nmiao=59;
ni=99;
}
else if(nmiao==0&&nfen==0&&nshi!=0)
{
nshi--;
nfen=59;
nmiao=59;
ni=99;
}
if(nmiao<=0&&(nshi!=0||nfen!=0))
{
if(nfen!=0)
{
nmiao=60;
nfen--;
}else if(nfen==0&&nshi!=0)
{
nmiao=59;
nshi--;
nfen=59;
}
if(nfen<=0&&(nshi!=0))
{
if(nshi!=0)
{
nfen=60;
nshi--;
}
}
}
}
nshi1=nshi/10;
nshi0=nshi%10;
nfen1=nfen/10;
nfen0=nfen%10;
nmiao1=nmiao/10;
nmiao0=nmiao%10;
ni1=ni/10;
ni0=ni%10;
}
void jishibianhua()
{
ji++;
if(ji>=100)
{
ji=0;
jmiao++;
if(jmiao>=60)
{
jmiao=0;
jfen++;
if(jfen>=60)
{
jfen=0;
jshi++;
if(jshi>=24)
{
jshi=0;
}
}
}
}
}
void delay(uint z)
{
uint x,y;
for(x = z; x > 0; x--)
for(y = 114; y > 0 ; y--);
}
void zhengchangxianshi()
{
P0 = 0xfe;//1111 1110 是左边第一位数码管
we = 1;//打开位选
we = 0; //关闭位选
P0 = leddata[shi/10];
du = 1; //打开段选
du = 0; //关闭段选
delay(2);//延时
P0 = 0xfd;//1111 1101 只选通第二位数码管
we = 1; //打开位选
we = 0; //关闭位选
P0 = leddata[shi%10]|0x80;
du = 1;//打开段选
du = 0; //关闭段选
delay(2);//延时
P0 = 0xfb;// 1111 1011只选通第三位数码管
we = 1; //打开位选
we = 0; //关闭位选
P0 = leddata[fen/10];
du = 1;//打开段选
du = 0; //关闭段选
delay(2);//延时
P0 = 0xf7;//1111 0111 只选通第四位数码管
we = 1; //打开位选
we = 0; //关闭位选
P0 = leddata[fen%10]|0x80;
du = 1;//打开段选
du = 0; //关闭段选
delay(2);//延时
P0 = 0xef;//1110 1111 只选通第五位数码管
we = 1; //打开位选
we = 0; //关闭位选
P0 = leddata[miao/10];
du = 1;//打开段选
du = 0; //关闭段选
delay(2);//延时
P0 = 0xdf;//1101 1111 只选通第六位数码管
we = 1; //打开位选
we = 0; //关闭位选
P0 = leddata[miao%10]|0x80;
du = 1;//打开段选
du = 0; //关闭段选
delay(2);//延时
we = 1; //打开位选
P0 = 0xbf;//1011 1111 只选通第七位数码管
we = 0; //关闭位选
P0 = leddata[i/10]; //
du = 1;//打开段选
du = 0; //关闭段选
delay(2);//延时
P0 = 0x7f;//0111 1111 只选通第八位数码管
we = 1; //打开位选
we = 0; //关闭位选
P0 = leddata[i%10];
du = 1;//打开段选
du = 0; //关闭段选
delay(2);//延时
}
void jixianshi()
{
P0 = 0xfe;//1111 1110 是左边第一位数码管
we = 1;//打开位选
we = 0; //关闭位选
P0 = leddata[jshi/10];
du = 1; //打开段选
du = 0; //关闭段选
delay(2);//延时
P0 = 0xfd;//1111 1101 只选通第二位数码管
we = 1; //打开位选
we = 0; //关闭位选
P0 = leddata[jshi%10]|0x80;
du = 1;//打开段选
du = 0; //关闭段选
delay(2);//延时
P0 = 0xfb;// 1111 1011只选通第三位数码管
we = 1; //打开位选
we = 0; //关闭位选
P0 = leddata[jfen/10];
du = 1;//打开段选
du = 0; //关闭段选
delay(2);//延时
P0 = 0xf7;//1111 0111 只选通第四位数码管
we = 1; //打开位选
we = 0; //关闭位选
P0 = leddata[jfen%10]|0x80;
du = 1;//打开段选
du = 0; //关闭段选
delay(2);//延时
P0 = 0xef;//1110 1111 只选通第五位数码管
we = 1; //打开位选
we = 0; //关闭位选
P0 = leddata[jmiao/10];
du = 1;//打开段选
du = 0; //关闭段选
delay(2);//延时
P0 = 0xdf;//1101 1111 只选通第六位数码管
we = 1; //打开位选
we = 0; //关闭位选
P0 = leddata[jmiao%10]|0x80;
du = 1;//打开段选
du = 0; //关闭段选
delay(2);//延时
we = 1; //打开位选
P0 = 0xbf;//1011 1111 只选通第七位数码管
we = 0; //关闭位选
P0 = leddata[ji/10]; //
du = 1;//打开段选
du = 0; //关闭段选
delay(2);//延时
P0 = 0x7f;//0111 1111 只选通第八位数码管
we = 1; //打开位选
we = 0; //关闭位选
P0 = leddata[ji%10];
du = 1;//打开段选
du = 0; //关闭段选
delay(2);//延时
}
void keyscan0()//输入flag值
{
P3=0xfb;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xbb: //按键S16
flag=1;
break;
case 0x7b: //按键S17
flag=0;
break;
}
}
}
P3=0xf7;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xe7: //按键S18
flag=2;
break;
case 0xd7: //按键S19
flag=3;
break;
case 0xb7: //按键S20
flag=4;
break;
case 0x77: //按键S21
flag=5;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
beep=0;
}
beep=1;
}
}
}
void keyscan()
{
{
P3=0xfe;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xee: //S6
key=0;
wei++;
break;
case 0xde:
key=1;
wei++;
break;
case 0xbe:
key=2;
wei++;
break;
case 0x7e:
key=3;
wei++;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
beep=0;
}
beep=1;
}
}
P3=0xfd;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xed:
key=4;
wei++;
break;
case 0xdd:
key=5;
wei++;
break;
case 0xbd:
key=6;
wei++;
break;
case 0x7d:
key=7;
wei++;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
beep=0;
}
beep=1;
}
}
P3=0xfb;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xeb:
key=8;
wei++;
break;
case
评论0