出問題的程序 代碼如下:
#include <AT89X51.H>
#define uint unsigned int
#define uchar unsigned char
sbit Tx=P2^1;
sbit Rx=P2^0;
bit TimeUp=0;
int Th0,Tl0;
unsigned int time0=0;
void main (void);
void LED4_Display (void);
void LED_OUT(uchar X);
unsigned char code fseg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned char code segbit[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
unsigned char disbuf[4]={0,0,0,0};
unsigned char code LED_0F[];
sbit DIO=P1^0;
sbit RCLK=P1^1;
sbit SCLK=P1^2;
uchar LED[8];
uint Measureresult=0;
void delay(unsigned int xms)
{
unsigned char j;
while(xms--)
{
for(j=0;j<125;j++);
}
}
void LED4_Display (void)
{
unsigned char code *led_table;
uchar i;
led_table = LED_0F + LED[0];
i = *led_table;
LED_OUT(i);
LED_OUT(0x01);
RCLK = 0;
RCLK = 1;
led_table = LED_0F + LED[1];
i = *led_table;
LED_OUT(i);
LED_OUT(0x02);
RCLK = 0;
RCLK = 1;
led_table = LED_0F + LED[2];
i = *led_table;
LED_OUT(i);
LED_OUT(0x04);
RCLK = 0;
RCLK = 1;
led_table = LED_0F + LED[3];
i = *led_table;
LED_OUT(i);
LED_OUT(0x08);
RCLK = 0;
RCLK = 1;
i=0xff;
LED_OUT(i);
LED_OUT(0x01);
RCLK=0;
RCLK=1;
LED_OUT(i);
LED_OUT(0x02);
RCLK=0;
RCLK=1;
LED_OUT(i);
LED_OUT(0x04);
RCLK=0;
RCLK=1;
LED_OUT(i);
LED_OUT(0x08);
RCLK=0;
RCLK=1;
}
void LED_OUT(uchar X)
{
uchar i;
for(i=8;i>=1;i--)
{
if (X&0x80) DIO=1; else DIO=0;
X<<=1;
SCLK = 0;
SCLK = 1;
}
}
unsigned char code LED_0F[] =
{
0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x8C,0xBF,0xC6,0xA1,0x86,0xFF,0xbf
};
uint Measure(void)
{
char Del20us=0;
char RxBack=1;
Tx=0;
Th0=0;
Tl0=0;
TimeUp=0;
TR0=0;
TH0=0;
TL0=0;
Tx=1;
for(Del20us=20;Del20us>0;Del20us--);
Tx=0;
while(Rx==0);
TH0=0;
TL0=0;
TR0=1;
while(RxBack)
{
if(Rx==0||TimeUp==1)
{
TR0=0;
Th0=TH0;Tl0=TL0;
TR0=1;
RxBack=0;
}
}
while(!TimeUp);
time0=(Th0*256+Tl0);
Measureresult=((unsigned int)(344)*time0)/2000;
if(Measureresult<30||Measureresult>900)
{
Measureresult=0;
}
return Measureresult;
}
void T0_time() interrupt 1
{
TimeUp=1;
}
void main()
{
uchar ge,shi,bai,qian;
TMOD=0x11;
TH1=(65536-200)/256;
TL1=(65536-200)%256;
EA=1;
ET0=1;
ET1=1;
TR1=1;
while(1)
{
ge=Measure()%1000%100%10;
shi=Measure()%1000%100/10;
bai=Measure()%1000/100;
qian=Measure()/1000;
LED[0]=ge;
LED[1]=shi;
LED[2]=bai;
LED[3]=qian;
}
}
void T1_time() interrupt 3
{
TH1=(65536-200)/256;
TL1=(65536-200)%256;
LED4_Display ();
delay(15);
}
|