#include"reg52.h"
#define u unsigned int
#define uchar unsigned char
uchar code table0[]="距离是:";
uchar code table[]="0123456789";
u s,
time;
uchar bai,shi,ge,qian;
***it trig=P2^1;
***it echo=P2^2;
***it en=P3^4;
***it rs=P3^5;
***it rw=P3^6;
***it p***=P3^7;
void delay(u x)
{
u y,z;
for(y=x;y>0;y--)
for(z=110;z>0;z--);
}
void mai()
{
trig=0;
delay(1);
trig=1;
delay(1);
trig=0;
}
void wrcom(uchar com)
{
rs=0;
rw=0;
0=com;
delay(1);
en=1;
delay(1);
en=0;
}
void wrdat(uchar dat)
{
rs=1;
rw=0;
0=dat;
delay(1);
en=1;
delay(1);
en=0;
}
void init()
{
EA=1;
TMOD=0x01;
ET0=1;
TH0=0;
TL0=0;
p***=1;
wrcom(0x38);
wrcom(0x0c);
wrcom(0x01);
}
void dis0()
{
uchar i;
wrcom(0x80);
for(i=0;i<8;i++)
{
wrdat(table0
);
delay(1);
}
wrcom(0x86);
wrdat('c');
wrdat('m');
}
void dis()
{
wrcom(0x84);
wrdat(table[qian]);
wrdat(table[bai]);
wrdat(table[shi]);
wrdat(table[ge]);
}
void jisuan()
{
time=TH0*256+TL0;
s=time*1.87/100+1;
TH0=0;
TL0=0;
if(s>9999)
{
uchar i;
wrcom(0x86);
for(i=0;i<4;i++)
{
wrdat('-');
}
}
else
{
qian=s/1000;
bai=s%1000/100;
shi=s%100/10;
ge=s%10;
}
}
void main()
{
init();
dis0();
while(1)
{
mai();
while(!echo);
TR0=1;
while(echo);
TR0=0;
jisuan();
dis();
delay(1000);
}
}
void timer0() interrupt 1
{
TH0=0;
TL0=0;
}
在测距时,显示的数字总是卡死