#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit dula=P2^6;
sbit wela=P2^7;
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
uchar code table1[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
uchar a,b,c,bai,shi,ge,d,e,f,temp,key;
void delay(uint z)
{
uint y;
while(z--)
for(y=500;y>0;y--);
}
/*void time0() interrupt 1
{
TR0=0;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
a++;
if(a==20)
{
a=0;
temp++;
d++;
e++;
f++;
if(f==8)f=0;
if(e==8)e=0;
if(d==8)d=0;
bai=temp/100;
shi=temp%100/10;
ge=temp%10;
}
TR0=1;
}*/
void display(uchar bai,uchar shi,uchar ge)
{ wela=1;
P0=table1[f];
wela=0;
dula=1;
P0=table[bai];
dula=0;
delay(1);
wela=1;
P0=table1[e];
wela=0;
dula=1;
P0=table[shi];
dula=0;
delay(1);
wela=1;
P0=table1[d];
wela=0;
dula=1;
P0=table[ge];
dula=0;
delay(1);
}
void keyscan()
{
P3=0xfe;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xee:key=1;break;
case 0xde:key=2;break;
case 0xbe:key=3;break;
case 0x7e:key=4;break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
P3=0xfd;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xed:key=5;break;
case 0xdd:key=6;break;
case 0xbd:key=7;break;
case 0x7d:key=8;break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
P3=0xfb;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xeb:key=9;break;
case 0xdb:key=10;break;
case 0xbb:key=11;break;
case 0x7b:key=12;break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
P3=0xf7;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xe7:key=13;break;
case 0xd7:key=14;break;
case 0xb7:key=15;break;
case 0x77:key=16;break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
}
void main()
{
d=0;
e=1;
f=2;
/* TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;*/
while(1)
{
keyscan();
bai=key/100;
shi=key%100/10;
ge=key%10;
display(bai,shi,ge);
}
}