|
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,
0xc9,0x5FF,0x40 };
void delay(uint x);
void display(uchar,uchar,uchar,uchar);
void scankeys();
void traffic();
uchar num,num1,num2,shi1,ge1,shi2,ge2,
value1,value2,value3,value4,count1,
count2,flag1,flag2;
void mian()
{
TMOD=0x01;
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
EA=1;
ET0=1;
TR0=1;
value1=15;
value2=5;
value3=10;
value4=5;
num1=value1;
num2=value2+value1;
P1=0x41;
while(1)
{
if(num==20)
{
num=0;
num1--;
num2--;
traffic();
shi1=num1/10;
ge1=num1%10;
shi2=num2/10;
ge2=num2%10;
}
scankeys();
display(shi1,ge1,shi2,ge2);
}
}
void traffic()
{
if(num1==0)
{
count1++;
if(count1==1)
{
P1=0x42;
num1=value2;
}
if(count1==2)
{
P1=0x14;
num1=value3+value4;
}
if(count1==3)
{
P1=0x41;
num1=value1;
count1=0;
}
}
if(num==0)
{
count2++;
if(count2==1)
{
P1=0x14;
num2=value3;
}
if(count2==2)
{
P1=0x24;
num2=value4;
}
if(count2==3)
{
P1=0x41;
num2=value1+value2;
count2=0;
}
}
}
void display(uchar shi1,uchar ge1,uchar shi2,uchar ge2)
{
uchar temp;
temp=P2;
P2=0xfe;
P0=table[shi1];
delay(5);
P2=0xfd;
P0=table[ge1];
delay(5);
P2=0xfd;
P0=table[shi2];
delay(5);
P2=0xf7;
P0=table[ge2];
delay(5);
}
void delay(uint x)
{
uint i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
void scankeys()
{
uchar temp,key;
P3=0xfe;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xee:key=0;break;
case 0xde:key=1;break;
case 0xbe:key=2;break;
case 0x7e:key=3;break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
if(key==0)
{
TR0=~TR0;
flag1=~flag1;
flag2=~flag2;
}
if(key==1&&flag1==0)
{
TR0=0;
P1=0x44;
shi1=ge1=shi2=ge2=16;
}
if(key==2&&flag2==0)
{
TR0=1;
num=0;
P1=0x41;
num1=value1;
num2=value2+value1;
shi1=num/10;
ge1=num1%10;
shi2=num2/10;
ge2=num2%10;
}
if(key==3&&P1==0x44)
{
P1=0xff;
delay(1000);
P1=~P1;
shi1=ge1=shi2=ge2=17;
P1=0x44;
}
}
}
P3=0xf7;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xe7:key=0;break;
case 0xd7:key=1;break;
case 0xb7:key=2;break;
case 0x77:key=3;break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
if(key==0&&P1==0x44)
{
P1=0x41;
shi1=ge1=shi2=ge2=18;
}
if(key==1&&P1==0x44)
{
P1=0x41;
shi1=ge1=shi2=ge2=18;
}
if(key==2&&P1==0x44)
{
P1=0x41;
shi1=ge1=shi2=ge2=18;
}
if(key==3&&P1==0x44)
{
P1=0x41;
shi1=ge1=shi2=ge2=18;
}
}
}
P3=0xfd;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xeb:key=0;break;
case 0xdb:key=1;break;
case 0xbb:key=2;break;
case 0x7b:key=3;break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
if(key==0&&P1==0x44)
{
num2=value3;
if(num1!=159)
{
num2++;
value3=num2;
}
shi2=num2/10;
ge2=num2%10;
num1=value3+value4;
shi1=num1/10;
ge1=num1%10;
}
if(key==1&&P1==0x44)
{ num2=value4;
if(num1!=159)
{
num2++;
value4=num2;
}
shi2=num2/10;
ge2=num2%10;
num1=value3+value4;
shi1=num1/10;
ge1=num1%10;
}
if(key==2&&P1==0x44&&value3>3)
{ num2=value3;
num2--;
value3=num2;
shi2=num2/10;
ge2=num2%10;
num2=value3+value4;
shi1=num1/10;
ge1=num1%10;
}
if(key==3&&P1==0x44&&value4>3)
{ num2=value4;
num2--;
value4=num2;
shi2=num2/10;
ge2=num2%10;
num1=value3+value4;
shi1=num1/10;
ge1=num1%10;
}
}
}
P3=0xf7;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xe7:key=0;break;
case 0xd7:key=1;break;
case 0xb7:key=2;break;
case 0x77:key=3;break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
if(key==0&&P1==0x44)
{
P1=0x41;
shi1=ge1=shi2=ge2=18;
}
if(key==1&&P1==0x44)
{
P1=0x41;
shi1=ge1=shi2=ge2=18;
}
if(key==2&&P1==0x44)
{
P1=0x41;
shi1=ge1=shi2=ge2=18;
}
if(key==3&&P1==0x44)
{
P1=0x41;
shi1=ge1=shi2=ge2=18;
}
}
}
}
void T0_time() interrupt 1
{
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
num++;
}
|
|