电子产业一站式赋能平台

PCB联盟网

搜索
查看: 4262|回复: 9
收起左侧

超声波模块Echo电平一直是低

[复制链接]

2851

主题

4614

帖子

2万

积分

官网认证

Rank: 3Rank: 3

积分
25793

活跃会员热心会员推广达人优秀版主

发表于 2022-7-13 17:31:49 | 显示全部楼层 |阅读模式
超声波模块Echo电平一直是低-1.jpg

超声波模块Echo电平一直是低-2.jpg

问问各位该怎么解决,不知道怎么修改
该会员没有填写今日想说内容.
回复

使用道具 举报

589

主题

924

帖子

4975

积分

四级会员

Rank: 4

积分
4975
发表于 2022-7-13 17:32:49 | 显示全部楼层
这是我的代码


#include <STC15F2K60S2.H>
#include <intrins.h>


#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long


sbit led_sel=P2^3;


uchar code duanxuan[]={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};


sbit Trig=P1^0;
sbit Echo=P1^1;


uchar data_H,data_L;
uint  distance;
void Init(){
P0M0=0XFF;
P0M1=0X00;

P2M0=0XFF;
P2M1=0X00;

TR1=1;
TR0=0;

TMOD=0x11;
AUXR=0xC0;

EA=1;
ET0=0;
ET1=1;

TH1=(65536-60000)/256;
TL1=(65535-60000)%256;
}


void S_Init(){
Trig=0;
Echo=0;
}


void Delay20us()//@11.0592MHz
{
unsigned char i;


_nop_();
_nop_();
_nop_();
i = 52;
while (--i);
}


void Timer1() interrupt 3{
EA=0;
TH1=(65536-60000)/256;
TL1=(65536-60000)%256;

Trig=1;
Delay20us();
Trig=0;

while(Echo==0);
TH0=0;
TL0=0;

TR0=1;
while(Echo==1);
data_H=TH0;
data_L=TL0;

TH0=0;
TL0=0;

distance=data_H;
distance=distance<<8;
distance=distance|data_L;
distance=distance/58;

EA=1;
}


void Delay10us()//@11.0592MHz
{
unsigned char i;


_nop_();
i = 25;
while (--i);
}


void seg_display(){
uchar ge_data,shi_data,bai_data;
bai_data=distance/100;
shi_data=distance%100/10;
ge_data=distance%100/10%10;

led_sel=0;

P0=0x00;
P2=0x00;
Delay10us();
P2=0x00;
P0=duanxuan[bai_data];
Delay10us();
P2=0x01;
P0=duanxuan[shi_data];
Delay10us();
P2=0x01;
P0=duanxuan[ge_data];
Delay10us();
}


void main(){
Init();
S_Init();
while(1){
seg_display();
}
}
回复 支持 反对

使用道具 举报

591

主题

959

帖子

5157

积分

四级会员

Rank: 4

积分
5157
发表于 2022-7-13 17:33:48 | 显示全部楼层
把你的S_Init()函数删去再试试
回复 支持 反对

使用道具 举报

591

主题

1772

帖子

5770

积分

四级会员

Rank: 4

积分
5770
发表于 2022-7-13 17:34:34 | 显示全部楼层
#include<reg52.h>
#include<intrins.h>


#define uint unsigned int
#define uchar unsigned char
#define LCD1602 P0


sbit E=P2^7;
sbit RS=P2^6; //写数据or命令
sbit RW=P2^5;//读or写数据


sbit TRIG=P3^7;//产生脉冲
sbit ECHO=P3^6;//接收脉冲


uchar zm[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38};//在LCD1602上的0~9
uint h,l,flag=0,sum;//高八位 低八位 接收成功标志 高电平时长
uchar dist_[4];   //存储距离的各个位


void Delay1ms(uint a)
{
uint i;
while(a--)
{
for(i=0;i<1000;i++)
_nop_();
}
}


void Delay1us(uint a)
{
while(a--)
{
_nop_();
}
}


void LcdWriteCom(uchar com)
{
E=0;
RS=0;
RW=0;


LCD1602=com;
Delay1ms(1);
E=1;
Delay1ms(5);
E=0;
}


void LcdWriteDat(uchar dat)
{
E=0;
RS=1;
RW=0;


LCD1602=dat;
Delay1ms(1);
E=1;
Delay1ms(5);
E=0;
}


void LcdInit()
{
LcdWriteCom(0x38);  //开显示
LcdWriteCom(0x0c);  //开显示不显示光标
LcdWriteCom(0x06);  //写一个指针加1
LcdWriteCom(0x01);  //清屏
LcdWriteCom(0x80);  //设置数据指针起点
}


void InitTime()
{
TMOD=0X01;//定时器0 工作方式1
TH0=(65536-1)/256;//1us
TL0=(65536-1)%256;
ET0=1;
}


void Dat_chuli()
{
uint dist;
dist=sum*170/10000;  //cm
dist_[3]='\0';
dist_[2]=dist/100;
dist_[1]=dist%100/10;
dist_[0]=dist%10;
}   


void Lcd_xianshi()
{
uchar i;
LcdWriteCom(0x80);
for(i=0;dist_!='\0';i++)
{
LcdWriteDat(zm[dist_]);
}
}
void main()
{  
uint i=0;
LcdInit();  // lcd1602初始化
InitTime();  //定时器0初始化
IT0=1;  //下降沿触发
EA=1;
while(1)
{
TRIG=0;
ECHO=0;
Delay1ms(10);
TRIG=1;
Delay1us(20);//输出一个20us的高脉冲
TRIG=0;

  
while(ECHO==0);   //等待回波
flag=0;
EX0=1; //打开中断0 计时器0
TH0=0;
TL0=0;
TR0=1;
//*********************************高电平结束,进入中断0函数
while(TH0<30);//等待测量结果
TR0=0;
TH0=0;
TL0=0;
  
if(flag==1)
{
sum=h*256+l;//计算接收总时长
}
else
{
sum=0;
}
Dat_chuli();   //计算距离并将其各个位分开
Lcd_xianshi();   //将得到的结果显示到Lcd1602上
}
}


void Time0() interrupt 1
{
TH0=0;
TL0=0;
flag=0;   //回波过长,测量失败
}


void It0() interrupt 0
{
h=TH0; //提取ECHO负跳变瞬间计时器的时间
l=TL0;
flag=1; //接收成功
EX0=0;//关闭中断0
}
回复 支持 反对

使用道具 举报

657

主题

1025

帖子

5598

积分

四级会员

Rank: 4

积分
5598
发表于 2022-7-13 17:35:33 | 显示全部楼层
能给我看看吗 谢谢,我的程序卡在while(ECHO==0); //等待回波
回复 支持 反对

使用道具 举报

591

主题

1772

帖子

5770

积分

四级会员

Rank: 4

积分
5770
发表于 2022-7-13 17:36:02 | 显示全部楼层
也是echo一直为低电平
回复 支持 反对

使用道具 举报

2851

主题

4614

帖子

2万

积分

官网认证

Rank: 3Rank: 3

积分
25793

活跃会员热心会员推广达人优秀版主

发表于 2022-7-13 17:36:52 | 显示全部楼层
楼主找到原因了吗,我的程序也是这样
回复 支持 反对

使用道具 举报

598

主题

943

帖子

5138

积分

四级会员

Rank: 4

积分
5138
发表于 2022-7-13 17:37:01 | 显示全部楼层
我来终结此贴,echo接P32
回复 支持 反对

使用道具 举报

657

主题

1025

帖子

5598

积分

四级会员

Rank: 4

积分
5598
发表于 2022-7-13 17:37:15 | 显示全部楼层
哇忘记看帖子了,原因一般是出在Trig高电平持续时间,最好是用器件推荐的,我当时随意给的20us。结果器件写的是10us……
回复 支持 反对

使用道具 举报

568

主题

922

帖子

4783

积分

四级会员

Rank: 4

积分
4783
发表于 2022-7-13 17:37:52 | 显示全部楼层
因为单片机拉低了,外部抬不起来!
回复 支持 反对

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


联系客服 关注微信 下载APP 返回顶部 返回列表