匿名用户
1级
2014-10-30 回答
#include
#define uint unsigned int
#define uchar unsigned char
uint temp,temp1,temp2,num,shi,ge,i,j;
uchar code table[]={0x01,0x67,0x12,0x42,0x64,0x48,0x08,0x63,0x00,0x40};
sbit E1=P0^7;
sbit welay1=P2^6;
sbit welay2=P2^7;
sbit SNL=P2^2;
sbit SNY=P2^1;
sbit SNR=P2^0;
sbit EWL=P2^5;
sbit EWY=P2^4;
sbit EWR=P2^3;
void init()
{
P0=0xff;
P2=0xff;
temp=0;
temp1=0;
temp2=0;
shi=0;
ge=0;
E1=0;
TMOD=0x21;
TH0=0x3c;//50ms
TL0=0xb0;
EA=1;
ET0=1;
TF0=0;
TR0=1;
}
void delay(uchar z)
{
uchar x,y;
for(x=110;x>0;x--)
for(y=z;y>0;y--);
}
void display()
{
shi=num/10;
ge=num%10;
P0=table[ge];
welay2=1;
welay1=0;
delay(10);
welay1=1;
P0=table[shi];
welay1=1;
welay2=0;
delay(10);
welay2=1;
}
void time0() interrupt 1 using 1
{
temp++;
temp1++;
TH0=0x3c;
TL0=0xb0;
//display();
TR0=1;
}
void main()
{
init();
while(1)
{
if(temp==0)
{
EWL=0;
SNR=0;
num=31;
temp1=0;
for(i=30;i>0;i--)
{
num--;
while(temp1!=20)
{
display();
}
temp1=0;
}
}
if(temp==600) //
{
EWL=1;
num=6;
j=0;
for(i=12;i>0;i--)
{
j++;
if(j%2==0)
{
num--;
}
temp2=temp;
EWY=!EWY; //灯闪烁
while(temp-temp2!=10)
{
display();
};
}
}
if(temp==720)
{
EWY=1;
EWR=0;
SNR=1;
SNL=0;
num=24;
temp1=0;
for(i=24;i>0;i--)
{
num--;
while(temp1!=20)
{
display();
}
temp1=0;
}
}
if(temp==1200)
{
SNL=1;
j=0;
num=6;
for(i=12;i>0;i--)
{
temp2=temp;
SNY=!SNY;
j++;
if(j%2==0)
{
num--;
}
while(temp-temp2!=10)
{
display();
};
}
SNY=1;
EWR=1;
temp=0;
}
}
}
直接修改显示的时间就可以达到要求。