#include <reg52.h>
#define uchar unsigned char
#define CH P1
sbit P2_0 = P2^0;
sbit P2_1 = P2^1;
sbit P2_2 = P2^2;
sbit P2_3 = P2^3;
sbit P3_1 = P3^1;
sbit P3_6 =P3^6;
sbit IN1=P2^4;
sbit IN2=P2^5;
sbit IN3=P2^6;
sbit IN4=P2^7;
sbit OUT=P3^0;
unsigned char timer1,torge=13;
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,
0xf8,0x80,0x90,0x88,0x80,0xc6,0xc0,0x86,0x8e};
uchar f;
#define Imax 14000 //′Ë′|Îa¾§ÕñÎa11.0592ê±μÄè¡Öμ,
#define Imin 8000 //èçóÃÆäËüÆμÂêμľ§Õñê±,
#define Inum1 1450 //òa¸Ä±äÏàó|μÄè¡Öμ¡£
#define Inum2 700
#define Inum3 3000
unsigned char Im[4]={0x00,0x00,0x00,0x00};
uchar show[2]={0,0};
unsigned long m,Tc;
unsigned char IrOK;
void delay(uchar i)
{
uchar j,k;
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
void display()
{
P2_0 = 0;P2_1 = 1;P2_2 = 1;P2_3 = 1;
P0=table[show[0]];
delay(2);
P2_0 = 1;P2_1 = 0;P2_2 = 1;P2_3 = 1;
P0=table[show[1]];
delay(2);
if(show[0]==4&&show[1]==6)
{
if(timer1>100) timer1=0;
if(timer1<30)CH=0xaa;
else CH=0x00;
}
if(show[0]==1&&show[1]==5)
{
CH=0x55;
delay(3);
}
if(show[0]==4&&show[1]==0)
{
CH=0x00;
delay(3);
}
if(show[0]==4&&show[1]==4)
{
CH=0x96;
delay(3);
}
if(show[0]==4&&show[1]==3)
{
CH=0x69;
delay(3);
}
if(show[0]==4&&show[1]==5)
{
torge=4;
delay(3);
}
if(show[0]==4&&show[1]==7)
{
torge=11;
delay(3);
}
if(show[0]==0&&show[1]==7)
{
torge=13;
delay(3);
}
if(show[0]==0&&show[1]==9)
{
torge=15;
delay(3);
}
if(show[0]==1&&show[1]==6)
{
torge=21;
delay(3);
}
if(P3_1==0)
{
show[0]=4;
show[1]=6;
delay(3);
}
}
/*ÑYê¾Ö÷3ìDò*/
void main(void)
{
unsigned int a;
m=0;
f=0;
EA=1;
IT1=1;EX1=1;
IT0=1;EX0=1;
TH0=0xff;
TL0=0xa3;
ET0=1; //¶¨ê±Æ÷ÖD¶Ï′ò¿a
TR0=1;
TMOD=0x11;
TH1=0;
TL1=0;
TR1=1;//ET0=1;
while(1)
{
if(IrOK==1)
{
show[1]=Im[2] & 0x0F; //衼üÂëμÄμíËÄλ
show[0]=Im[2] >> 4;
IrOK=0;
}
for(a=100;a>0;a--)
{
display();
}
}
}
void jiting(void) interrupt 0 using 1
{
uchar sum;
P3_6=0;
if(CH==0xaa)
{
CH=0x55;
for(sum=0;sum<15;sum++)
{
delay(500);
}
show[0]=0;
CH=0x00;
for(sum=0;sum<200;sum++)
{
P3_6=~P3_6;
delay(100);
}
}
}
//ía2¿ÖD¶Ï½aÂë3ìDò
void intersvr1(void) interrupt 2 using 1
{
Tc=TH1*256+TL1;
TH1=0;
TL1=0;
if((Tc>Imin)&&(Tc<Imax))
{
m=0;
f=1;
return;
} //Õòμ½Æôê¼Âë
if(f==1)
{
if(Tc>Inum1&&Tc<Inum3)
{
Im[m/8]=Im[m/8]>>1|0x80; m++;
}
if(Tc>Inum2&&Tc<Inum1)
{
Im[m/8]=Im[m/8]>>1; m++; //è¡Âë
}
if(m==32)
{
m=0;
f=0;
if(Im[2]==~Im[3])
{
IrOK=1;
}
else IrOK=0; //è¡Âëíê3éoóÅD¶Ï¶áÂëêÇ·ñÕyè·
}
//×¼±¸¶áÏÂò»Âë
}
}
void Timer0_isr(void) interrupt 1 using 1
{
static unsigned char i;
TH0=0xff;
TL0=0xa3;
i++;
if(i==torge)
{
OUT=0;
}
if(i==200)
{
i=0;
OUT=1;
}
}
|