51单片机 HC-SR04超声波测距 我写的C语言代码,请问

2020-10-28 科技 84阅读

1、HC-SR04使用方法:给触发端子trig一个10us以上的高电平即可触发,触发后echo端子将接受到高电平,高电平的持续时间就是测距的往返时间。


2、例程:

#include
#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;        //外部中断0
uchar 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){
    //数码管显示函数
}
声明:你问我答网所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流。若您的权利被侵害,请联系fangmu6661024@163.com