1、HC-SR04使用方法:给触发端子trig一个10us以上的高电平即可触发,触发后echo端子将接受到高电平,高电平的持续时间就是测距的往返时间。2、例程:#include<reg52.h>#define uchar unsigned char#define uint unsigned int/*位定义*/sbit CHUFA=P0^1; //位定义超声波触发端(10us以上高电平触发)sbit JIESHOU=P0^3; //接收端(接受高电平)sbit BEEP=P2^0; //蜂鸣器sbit OUT0=P3^2; //外部中断0uchar JS_FLAG; //接收标志uint CF_TIME,t0,t1,shu;/*函数声明*/void timer0(); void int0();void display(uint);main(){ CHUFA=0; //初始化拉低触发端和接收端电平 JIESHOU=0; JS_FLAG=0; CF_TIME=15; //初始化触发时间(大于10us) TMOD=0x11; //定时器方式选择 EA=1; //开总中断 ET0=1; //开定时器0中断 EX0=1; //开外部中断0 IT0=0; //外部中断选择下降沿触发 //JIESHOU=1; while(1){ OUT0=JIESHOU; //外部中断0被赋值为接收端信号,当出现下降沿是触发外部中断0 if(JS_FLAG==0){ //如果没有接收到高电平则触发 CHUFA=1; while(CF_TIME--); //10us以上高电平触发传感器 } if(JIESHOU==1){ TR0=1; //如果接收端收到高电平则启动定时器 JS_FLAG=1; //并且标志位置1 BEEP=0; //蜂鸣器响 } display(t1); //显示测量时间(秒) }}/*定时器0中断程序*/void timer0() interrupt 1{ TH0=(65536-10000)/256; //装初值 10ms TL0=(65536-10000)%256; t0++; //每进入一次中断t0加1 }/*外部中断0中断程序*/void int0() interrupt 0{ TR0=0; //一旦进入外部中断0,说明接收端收到下降沿信号。关闭定时器0 JS_FLAG=0; //接收标志位置0 BEEP=1; //关闭蜂鸣器 t1=t0*10/1000; //测量时间为 进入定时器中断次数t0乘以每次时间10ms,除以1000化为秒为单位 t0=0; //t0清零}/*数码管显数函数*/void display(uint shu){ //数码管显示函数}