#include <AT89X52.H>
unsigned char code dispbitcode[]={0xfe,0xfd,0xfb,0xf7,
0xef,0xdf,0xbf,0x7f};
unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,0x00};
unsigned char dispbuf[8]={10,10,10,10,10,0,0,0};
unsigned char code tab[]={0,0, 0, 1, 0, 2, 0, 0, 3, 0 ,
4, 0, 0, 5, 0, 6, 0, 0, 7, 0 ,
8, 0, 0, 9, 0, 0, 10, 0, 11, 0 ,
0, 12, 0, 13, 0, 0, 14, 0, 15, 0 ,
0, 16, 0, 17, 0, 0, 18, 0, 19, 0,
0, 20, 0, 0, 21, 0, 22, 0, 0, 23,
0, 24, 0, 0, 25, 0, 26, 0, 0, 27,
0, 28, 0, 0, 29, 0, 0, 30, 0, 31,
0, 0, 32, 0, 33, 0, 0, 34, 0, 35,
0, 0, 36, 0, 37, 0, 0, 38, 0, 39,
0, 0, 40, 0, 0, 41, 0, 42, 0, 0,
43,0, 44, 0, 0, 45, 0, 46, 0, 0,
47,0, 48, 0, 0, 49, 0, 50, 0, 0,
51,0, 0, 52, 0, 53, 0, 0, 54, 0 ,
55,0, 0, 56, 0, 57, 0, 0, 58, 0,
59,0, 0, 60, 0, 0, 61, 0, 62, 0,
0, 63, 0, 64, 0, 0, 65, 0, 66, 0,
0, 67, 0, 68, 0, 0, 69, 0, 70, 0,
0, 71, 0, 0, 72, 0, 73, 0, 0, 74,
0, 75, 0, 0, 76, 0, 77, 0, 0, 78,
0, 79, 0, 0, 80, 0, 0, 81, 0, 82,
0, 0, 83, 0, 84, 0, 0, 85, 0, 86,
0, 0, 87, 0, 88, 0, 0, 89, 0, 90,
0, 0, 91, 0, 0, 92, 0, 93, 0, 0,
94,0, 95, 0, 0, 96, 0, 97, 0, 0,
98,0, 99, 0, 0, 100,0, 0, 0};
unsigned char dispcount;
unsigned int R1;
sbit ST=P3^0;
sbit OE=P3^1;
sbit EOC=P3^2;
unsigned char channel=0xbc; //1011 1100£¬ABC£½110Ñ¡ÔñµÚÈýͨµÀͬʱʹST=0£¬OE=0Êä³öÊý¾ÝÏ߳ʸß×è״̬£¬EOC=1¡£
unsigned char getdata;
void main(void)
{
TMOD=0x01;
TH0=(65536-4000)/256;
TL0=(65536-4000)%256;
TR0=1;
ET0=1;
EA=1;
P3=channel;
while(1)
{
ST=0;
ST=1;
ST=0;
while(EOC==0);
OE=1;
getdata=P0;
OE=0;
getdata=tab[getdata];
R1=getdata%2;
getdata=getdata/2;
dispbuf[5]=getdata/10;
dispbuf[6]=(getdata%10);
if(R1==1)
dispbuf[7]=5;
else
dispbuf[7]=0;
}
}
void t0(void) interrupt 1 using 0
{
TH0=(65536-350)/256;
TL0=(65536-350)%256;
P2=0xff;
if(dispcount==5)
{P1=dispcode[dispbuf[dispcount]]|0x80;
P2=dispbitcode[dispcount]; }
else
{P1=dispcode[dispbuf[dispcount]];
P2=dispbitcode[dispcount]; }
dispcount++;
if(dispcount==8)
{
dispcount=0;
}
}