#include <reg51.h>
#include<INTRINS.H>
#include "1602.h"
sbit EN=P1^0;
uchar Key_Value=0xff;
void Int_init(void);
void Distance(void);
uchar Change_ASC(uchar temp);
void Key_Scan(void);
void delay10us(void);
uint sync_trans=0;
uint sync_rec=0;
uint sync=0;
bit trans_ed=0;
bit rec_ed=0;
uint overtime=0;
uint temp=0;
float result=0;
bit error=0;
void main()
{
EN=1;
InitLcd();
Int_init();
while(1)
{
if(trans_ed==0&&sync_trans==sync&&error==0)
{
TH0=TL0=0x00;
EA=1;
EX1=1;
sync_trans++;
trans_ed=1;
overtime=0;
EN=0;
TR0=1;
_nop_();_nop_();_nop_();_nop_();_nop_(); _nop_(); _nop_();
EN=1;
rec_ed=0;
}
else
{
EX1=0;TR0=0;error=1;
}
while(trans_ed==1&&rec_ed==0&&sync_rec==sync&&overtime<=30000&&error==0)
{overtime++;}
if(trans_ed==1&&rec_ed==1&&sync_rec==sync&&overtime<30000&&error==0)
{
EX1=0;overtime=0;
sync_rec++;
temp=TH0*256+TL0;
result=temp*(0.0344/2)*(12/11.0592);
temp=(uint)result;
DisplayOneChar(0,0,Change_ASC((temp/100)%10));
DisplayOneChar(1,0,Change_ASC((temp/10)%10));
DisplayOneChar(2,0,Change_ASC(temp%10));
DisplayOneChar(3,0,'.');
DisplayOneChar(4,0,Change_ASC((uchar)(result*10)%10));
DisplayOneChar(5,0,Change_ASC((uchar)(result*100)%10));
DisplayOneChar(6,0,'C');
DisplayOneChar(7,0,'M');
DisplayOneChar(8,0,' ');
sync++;
overtime=0;
trans_ed=0;
rec_ed=0;
}
else if(overtime>=30000)
{
EX1=0;TR0=0;
DisplayListChar(0,0,"OVER TIME ");
error=1;
}
else{EX1=0;TR0=0;error=1;}
if(sync!=sync_trans||sync!=sync_rec||error==1)
{
TR0=0;EX1=0;
rec_ed=0;trans_ed=0;
sync=sync_trans=sync_rec=0;
error=0;overtime=0;
delay(200);
}
if(sync>=60000){sync=sync_trans=sync_rec=0;}
delay(200);
}
}
void Int_init(void) //外部1,定时0计数
{
TH0=0;
TL0=0;
TMOD=0x11;
}
uchar Change_ASC(uchar temp)
{
uchar result;
if(temp>9) result=temp+0x37;
else result=temp+0x30;
return result;
}
void Int2(void) interrupt 2
{
TR0=0;
EX1=0;
rec_ed=1;
}
void delay10us(void)
{
uchar i=0;
for(i=0;i<2;i++);
}