#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
#define uchar unsigned char
#define uint unsigned int
sbit BEEP=P1^2;
sbit lcdrs=P3^7;
sbit lcdrw=P3^6;
sbit lcden=P3^5;
sbit echo=P1^0;
sbit send=P1^1;
uchar t0,flag;
volatile uchar Count_TH,Count_TL;
uint time;
uchar code table1[]="distance ";
uchar code table2[]=" ";
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=1000;y>0;y--);
}
void delay_300us()
{
uint x;
for(x=75;x>0;x--);
}
void delay_100us()
{
uint x;
for(x=24;x>0;x--);
}
sbit lcdrs=P3^7;
sbit lcdrw=P3^6;
sbit lcden=P3^5;
sbit echo=P1^0;
sbit send=P1^1;
uchar t0,flag;
volatile uchar Count_TH,Count_TL;
uint time;
uchar code table1[]="distance ";
uchar code table2[]=" ";
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=1000;y>0;y--);
}
void delay_300us()
{
uint x;
for(x=75;x>0;x--);
}
void delay_100us()
{
uint x;
for(x=24;x>0;x--);
}
void write_com(uchar com)
{
lcdrs=0;
P2=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void write_data(uchar datb)
{
lcdrs=1;
P2=datb;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void display(uint datb)
{
uchar bai,shi,ge;
bai=datb/100;
shi=datb%100/10;
ge=datb%10;
write_com(0x80+0x40+8);
write_data(0x30+bai);
write_data(0x30+shi);
write_data(0x30+ge);
}
{
lcdrs=0;
P2=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void write_data(uchar datb)
{
lcdrs=1;
P2=datb;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void display(uint datb)
{
uchar bai,shi,ge;
bai=datb/100;
shi=datb%100/10;
ge=datb%10;
write_com(0x80+0x40+8);
write_data(0x30+bai);
write_data(0x30+shi);
write_data(0x30+ge);
}
void init_T0()
{
TMOD=0x12;
TH0=0xe7;
TL0=0xe7;
EA=0;
ET0=1;
TR0=1;
}
void init_T1()
{
TMOD=0x12;
TH1=0;
TL1=0;
EA=0;
ET1=1;
TR1=1;
}
void init_inter0()
{
IT0=0;
EA=0;
EX0=0;
}
{
TMOD=0x12;
TH0=0xe7;
TL0=0xe7;
EA=0;
ET0=1;
TR0=1;
}
void init_T1()
{
TMOD=0x12;
TH1=0;
TL1=0;
EA=0;
ET1=1;
TR1=1;
}
void init_inter0()
{
IT0=0;
EA=0;
EX0=0;
}
void init_Total()
{
init_T0();
init_T1();
init_inter0();
EA=1;
}
void inter0() interrupt 0
{
TR1=0;//T1Í£Ö¹¹¤×÷
EX0=0;//¹ØÍⲿÖжÏ0
flag=1;
}
void inter_T0() interrupt 1//¶¨Ê±Æ÷T0ÖжϺ¯Êý ²úÉú40KHZµÄ·½²¨
{
send=~send;
}
void inter_T1() interrupt 3
{
TR1=0;
EX0=0;//¹ØÍⲿÖжÏ0
TH1=0;
TL1=0;
flag=2;
}
{
init_T0();
init_T1();
init_inter0();
EA=1;
}
void inter0() interrupt 0
{
TR1=0;//T1Í£Ö¹¹¤×÷
EX0=0;//¹ØÍⲿÖжÏ0
flag=1;
}
void inter_T0() interrupt 1//¶¨Ê±Æ÷T0ÖжϺ¯Êý ²úÉú40KHZµÄ·½²¨
{
send=~send;
}
void inter_T1() interrupt 3
{
TR1=0;
EX0=0;//¹ØÍⲿÖжÏ0
TH1=0;
TL1=0;
flag=2;
}
void send_T()//·¢10¸ö³¬Éù²¨Âö³å
{
delay_100us();//·¢ËÍ100usµÄ·½²¨
TR0=0;//T0Í£Ö¹¹¤×÷
}
{
delay_100us();//·¢ËÍ100usµÄ·½²¨
TR0=0;//T0Í£Ö¹¹¤×÷
}
void main()
{
uint t,s;
init_T0tal();//×ܳõʼ»¯
while(1)
{
TR1=1;//Æô¶¯¶¨Ê±Æ÷1
TR0=1;//Æô¶¯¶¨Ê±Æ÷0
send_T();//·¢ËÍ100us³¬Éù²¨Âö³å
delay_300us();//ÑÓʱ300usÌø¹ýÃ¤Çø
EX1=0;//¿ªÍⲿÖжÏ1
while(!flag);//µÈ´ý»Ø²¨»ò¶¨Ê±Æ÷T1Òç³ö
if(flag==1)//»Ø²¨
{
Count_TH=TH1;//¶Á¼ÆÊýÆ÷T1µÄ¸ßλTH1
Count_TL=TL1;//¶Á¼ÆÊýÆ÷T1µÄµÍλTL1
t=Count_TH*256+Count_TL;
s=(33140*t)/200000;
display(s);
}
else//¶¨Ê±Æ÷T1Òç³ö
{
Count_TH=0xfe;
Count_TL=0x7f;
}
delay(150);
flag=0;//±ê־λÇå0
TH1=0;//T1Çå0ÖØÐ¼ÆÊ±
TL1=0;
}
}