stm32超声波代码没错,但是没反应

stm32超声波代码没错,但是没反应,第1张

是你的超声波电路有问题。

超声波是一种频率高于20000赫兹的声波,它的方向性好,穿透能力强,易于获得较集中的声能,在水中传播距离远,可用于测距、测速、清洗、焊接、碎石、杀菌消毒等。在医学、军事、工业、农业上有很多的应用。超声波因其频率下限大于人的听觉上限。

at89c2051制作的超声波测距源程序

· 文件版本: V10

· 开发商: 本站原创

· 文件来源: 本地

· 界面语言: 简体中文

· 授权方式: 免费

at89c2051制作的超声波测距源程序

关键词: 超声波测距

at89c2051制作的超声波测距源程序

#include <REG2051H>

#define k1 P3_4

#define csbout P3_5 //超声波发送

#define csbint P3_7 //超声波接收

#define csbc=0034

#define bg P3_3

unsigned char csbds,opto,digit,buffer[3],xm1,xm2,xm0,key,jpjs;//显示标识

unsigned char convert[10]={0x3F,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0~9段码

unsigned int s,t,i, xx,j,sj1,sj2,sj3,mqs,sx1;

bit cl;

void csbcj();

void delay(j); //延时函数

void scanLED(); //显示函数

void timeToBuffer(); //显示转换函数

void keyscan();

void k1cl();

void k2cl();

void k3cl();

void k4cl();

void offmsd();

void main() //主函数

{

EA=1; //开中断

TMOD=0x11; //设定时器0为计数,设定时器1定时

ET0=1; //定时器0中断允许

ET1=1; //定时器1中断允许

TH0=0x00;

TL0=0x00;

TH1=0x9E;

TL1=0x57;

csbds=0;

csbint=1;

csbout=1;

cl=0;

ōpto=0xff;

jpjs=0;

sj1=45;

sj2=200;

sj3=400;

k4cl();

TR1=1;

while(1)

{

keyscan();

if(jpjs<1)

{

csbcj();

if(s>sj3)

{

buffer[2]=0x76;

buffer[1]=0x76;

buffer[0]=0x76;

}

else if(s<sj1)

{

buffer[2]=0x40;

buffer[1]=0x40;

buffer[0]=0x40;

}

else timeToBuffer();

}

else timeToBuffer(); //将值转换成LED段码

offmsd();

scanLED(); //显示函数

if(s<sj2)

bg=0;

bg=1;

}

}

void scanLED() //显示功能模块

{

digit=0x04;

for( i=0; i<3; i++) //3位数显示

{

P3=~digit&opto; //依次显示各位数

P1=~buffer; //显示数据送P1口

delay(20); //延时处理

P1=0xff; //P1口置高电平(关闭)

if((P3&0x10)==0) //判断3位是否显示完

key=0;

digit>>=1; //循环右移1位

}

}

void timeToBuffer() //转换段码功能模块

{

xm0=s/100;

xm1=(s-100xm0)/10;

xm2=s-100xm0-10xm1;

buffer[2]=convert[xm2];

buffer[1]=convert[xm1];

buffer[0]=convert[xm0];

}

void delay(i)

{

while(--i);

}

void timer1int (void) interrupt 3 using 2

{

TH1=0x9E;

TL1=0x57;

csbds++;

if(csbds>=40)

{

csbds=0;

cl=1;

}

}

void csbcj()

{

if(cl==1)

{

TR1=0;

TH0=0x00;

TL0=0x00;

i=10;

while(i--)

{

csbout=!csbout;

}

TR0=1;

i=mqs; //盲区

while(i--)

{

}

i=0;

while(csbint)

{

i++;

if(i>=2450) //上限值

csbint=0;

}

TR0=0;

TH1=0x9E;

TL1=0x57;

t=TH0;

t=t256+TL0;

s=tcsbc/2;

TR1=1;

cl=0;

}

}

void keyscan() //健盘处理函数

{

xx=0;

if(k1!=1) // 判断开关是否按下

{

delay(400); //延时去抖动

if(k1!=1) // 判断开关是否按下

{

while(!k1)

{

delay(30);

xx++;

}

if(xx>2000)

{

jpjs++;

if(jpjs>4)

jpjs=0;

}

xx=0;

switch(jpjs)

{

case 1: k1cl();break;

case 2: k2cl();break;

case 3: k3cl();break;

case 4: k4cl();break;

}

}

}

}

void k1cl()

{

sj1=sj1+5;

if(sj1>100)

sj1=30;

s=sj1;

}

void k2cl()

{

sj2=sj2+5;

if(sj2>500)

sj2=40;

s=sj2;

}

void k3cl()

{

sj3=sj3+10;

if(sj3>500)

sj3=100;

s=sj3;

}

void k4cl()

{

sx1=sj1-1;

sx1=sx1/csbc;

mqs=sx1/45;

}

void offmsd()

{

if (buffer[0] == 0x3f)

buffer[0] = 0x00;

}

发射周期是60mS的信号,那意味这在这个60mS时间内接收到的信号都被发射信号掩盖了。

因为60mS的时间,相当于测距10m多一点了。

最好按照技术文档的要求,发射与换能器相匹配的信号,然后再周期一般不要超过30个周期的信号。

连接5V和GND,超声波模块的Trig和Echo引脚可以连接至树莓派的任意GPIO引脚,连线方式和我们的不一样也没关系,记住Trig和Echo引脚对应的BCM引脚编码

编译命令:

gcc -Wall -o disMeasure chaoc -lwiringPi

以上就是关于stm32超声波代码没错,但是没反应全部的内容,包括:stm32超声波代码没错,但是没反应、求超声波测距c程序、STM32F发送0X55到超声波传感器是发送了什么数据,这个公式是怎么测量距离的,具体是什么计算的。。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9290142.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-26
下一篇 2023-04-26

发表评论

登录后才能评论

评论列表(0条)

保存