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

全部回答5
默认 最新
  • CHUFA=1;while(CF_TIME--); //10us以上高电平触发传感器要产生10us的脉冲 拉高后你要拉低啊 CHUFA=1;while(CF_TIME--); //10us以上高电平触发传感器CHUFA=0;
    0 点赞
  • 初学C,只懂些简单语法,不懂单片机。不知道这个会不会影响:sbit JIESHOU=P0^3; //接收端(接受高电平)JIESHOU=0;//JIESHOU=1;后面就没有见到再给JIESHOU赋值。
    0 点赞
  • 硬件做好了吗我做单片机设计的
    0 点赞
  • 一,你计时器初值填错了二,每次,while(CF_TIME--); 之后没置CF_TIME为15还有你us级延时可能不能用循环,要用_nop()_然而现在还是不对
    0 点赞
  • 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){    //数码管显示函数}
    0 点赞

没有更多内容了

返回顶部
产品求购 求购