
#include <AT89X51.H>
code unsigned char num[]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F};

void digit(unsigned char k);
void delay(unsigned int time);
void display(void);
void serial(unsigned char d);
unsigned char a,b,c;
unsigned char value;
unsigned char bdata d_sent;
sbit shif=d_sent^7;
//====================
sbit rclk=P1^0;
sbit sclk=P1^1;
sbit d_clk=P1^2;
//=======================
void main(void)
{a=b=c=0;
 value=0;

  while(1)
 {
   digit(value);
serial(num[c]);
   
   serial(num[b]);
   serial(num[a]);
   display();
   delay(10000);
   value++;
   if(value>=255)value=0;
 }
}

void digit(unsigned char k)
{a=b=c=0;
  a=k/100;
  k%=100;
  b=k/10;
  c= k%10;
 
}
void delay(unsigned int time)
{unsigned int x;
 for(x=0;x<time;x++);
}
void display(void)
{
     rclk=1;
     delay(100);
     rclk=0;;
     delay(100);
}
void serial(unsigned char d)
{unsigned char k;
   d_sent=d;
   k=0;
	while(k<=7)
	{
	 d_clk=shif;	 
	 d_sent=d_sent<<1;
     sclk=1;
     delay(100);
     sclk=0;;
     delay(100);
	 k++;
	 delay(30);
	}
}
