#include<reg52.h>
#include<intrins.h>
sbit DIG_DATA=P0^2;
sbit DIG_SHCP=P0^4;
sbit DIG_STCP=P2^3;
code unsigned char Segment[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
code unsigned char Select[]={0xff,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
void DigOutput(unsigned char SelectByte,unsigned char SegmentByte)
{
unsigned char i;
DIG_SHCP=0;
DIG_STCP=0;
for(i=0;i<8;i++)
{
if(SegmentByte&0x80)
{
DIG_DATA=1;
}
else
{
DIG_DATA=0;
}
_nop_();
DIG_SHCP=1;
_nop_();
DIG_SHCP=0;
_nop_();
SegmentByte<<=1;
}
for(i=0;i<8;i++)
{
if(SelectByte&0x80)
{
DIG_DATA=1;
}
else
{
DIG_DATA=0;
}
_nop_();
DIG_SHCP=1;
_nop_();
DIG_SHCP=0;
_nop_();
SelectByte<<=1;
}
DIG_STCP=1;
_nop_();
DIG_STCP=0;
_nop_();
}
void main(void)
{
while(1)
{
DigOutput(Select[8],Segment[1]);
DigOutput(Select[7],Segment[2]);
DigOutput(Select[6],Segment[3]);
DigOutput(Select[5],Segment[4]);
DigOutput(Select[4],Segment[5]);
DigOutput(Select[3],Segment[6]);
DigOutput(Select[2],Segment[7]);
DigOutput(Select[1],Segment[8]);
}
}