//TX是超声波发射的端口 //RX是超声波接收的端口 void init() //定时器初始化 { TMOD|=0x11; //打开定时器1 TH1 = 0; //设定定时器初值 TL1 = 0; EA=1; //打开总中断 } void send() //发送一段声波 { TX=1; Delay20us(); TX=0; } void main() { while(1) { if(flag==1) { flag=0; send(); while(RX==0); //RX端是否接收到声波返回 TR1=1; //返回,则定时器1开始计数 while(!(RX==0)); //RX端是否接收到声波返回 TR1=0; //停止计数 if(TF1==1) //计数值满了,标志位溢出 { distance=999; //所测距离最大 TF1=0; //标志位清零 } else { t=TH1; t<<=8; t|=TL1; distance=(uint)(t*0.017); //计算距离 } TH1=0; //清除计数值 TL1=0; } num[0]=distance/100; //将距离值分开保存 num[1]=distance/10%10; num[2]=distance%10; _com(0x80+0x4a); _write(0x30+num[0]); //用1602显示模块表示出来 _write(0x30+num[1]); _write(0x30+num[2]); } }