#include //包括一个 52 标准内核的头文件#define uchar unsigned char //定义一下方便使用#define uint unsigned int#define ulong unsigned longsbit Trig = P1^0; //产生脉冲引脚sbit Echo = P3^2; //回波引脚sbit test = P1^1; //测试用引脚uchar code SEG7 [ 10]= { ~ 0xC0, ~ 0xF9, ~ 0xA4,~0xB0 , ~ 0x99 , ~0x92, ~0x82,~0xF8,~0x80,~0x90};//数码管 0—9uint distance[4]; //测距接收缓冲区uchar ge,shi,bai,temp,flag,outcomeH,outcomeL,i; //自定义寄存器bit succeed_flag; //测量成功标志//********函数声明void conversion(uint temp_data);void delay_20us();void main(void) // 主程序{ uint distance_data,a,b;uchar CONT_1; i=0;flag=0;test =0;Trig=0; //首先拉低脉冲输入引脚TMOD=0x11; //定时器 0,定时器 1,16 位工作方式TR0=1; //启动定时器 0IT0=0; //由高电平变低电平,触发外部中断ET0=1; //打开定时器 0 中断EX0=0; //关闭外部中断EA=1; //打开总中断 0 while(1) //程序循环{ EA=0;Trig=1;delay_20us();Trig=0; //产生一个 20us 的脉冲,在 Trig 引脚 while(Echo==0); //等待 Echo 回波引脚变高电平succeed_flag=0; //清测量成功标志EX0=1; //打开外部中断TH1=0; //定时器 1 清零TL1=0; //定时器 1 清零TF1=0; //TR1=1; //启动定时器 1EA=1;while(TH1 〈 30);//等待测量的结果,周期 65.535 毫秒(可用中断实现) TR1=0; //关闭定时器 1EX0=0; //关闭外部中断if(succeed_flag==1) { distance_data=outcomeH*256+outcomeL;distance_data= (distance_data*1.87)/100; } //为什么除以 58 等于厘米, Y 米=(X 秒*344)/2 // X 秒=( 2*Y 米)/344 ==》X 秒=0。0058*Y 米 ==》厘米=微秒/58 if(succeed_flag==0) { distance_data=0; //没有回波则清零 test = !test; //测试灯变化 }/********************************************每循环 3 次就显示结果一次*********************************************/ a=distance_data; if(b==a) CONT_1=0; if(b!=a) CONT_1++; if(CONT_1>=3) { CONT_1=0; b=a; conversion(b);} }}//***...