一款串口输出超声波测距模块使用范例.docx

上传人:b****9 文档编号:25631188 上传时间:2023-06-10 格式:DOCX 页数:10 大小:119.44KB
下载 相关 举报
一款串口输出超声波测距模块使用范例.docx_第1页
第1页 / 共10页
一款串口输出超声波测距模块使用范例.docx_第2页
第2页 / 共10页
一款串口输出超声波测距模块使用范例.docx_第3页
第3页 / 共10页
一款串口输出超声波测距模块使用范例.docx_第4页
第4页 / 共10页
一款串口输出超声波测距模块使用范例.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

一款串口输出超声波测距模块使用范例.docx

《一款串口输出超声波测距模块使用范例.docx》由会员分享,可在线阅读,更多相关《一款串口输出超声波测距模块使用范例.docx(10页珍藏版)》请在冰豆网上搜索。

一款串口输出超声波测距模块使用范例.docx

一款串口输出超声波测距模块使用范例

一款串口输出超声波测距模块使用范例

一、模块简介:

该串口输出超声波测距模块采用STC11F04E单片机作处理器,工作电源:

DC5V,工作电流10mA。

测量数据输出方式为TTL串口输出,数据格式为标准的ASCII码,数据由:

空格位(起始位)+百+十位+个位。

工作方式有两种:

一是连续测量方式;二是查询测量方式。

测量范围:

方式一:

5cm~200cm(盲区5cm);方式二:

25cm~350cm(盲区25cm)。

测量过程中,当接收不到障碍物反射的回波时,输出“CCC”,当测量低于下限值(在盲区内)时显示“---”。

测量结果由模块上的输出端口输出,输出方式为串口(TTL电平)输出。

测量结果可通过电脑进行显示。

模块使用串口通讯可靠性更高,同时可以通过电脑串口采集数据,编写通讯程序非常的便捷。

波特率:

1200

校验位:

数据位:

8

停止位:

ASCII码数据格式:

空格位(起始位)+百+十位+个位。

二、模块的使用设置

下图为模块的背面图片。

图中标有A、B、C短接焊盘是作为设置测量方式用;标有0-7的短路焊盘是设置查询方式下的模块地址用。

方式1:

设置为小盲区期测量。

设置方法,标号为B的焊盘即单片机的P3.5脚与地断开,这时的测量范围为:

5-200;这种方式下,测量盲区值小,适合长时间近距离测量用。

方式2:

设置为远距离测量,这种方式,盲区值相对较大,测量相对较远一些,设置方法:

将标号为B的焊盘即单片机的P3.5脚与地短接,这时的测量范围为:

25-350厘米。

方式3:

连续方式测量。

将标号为A的焊盘即单片机的P3.4脚与地断开,这时模块测量方式是连续的进行测量,测量间隔为1-2次/秒,每测量一次,就将测量结果通过串口送出。

方式4:

查询方式测量。

将标号为A的焊盘即单片机的P3.4脚与地短接,这时的测量方式为查询方式测量,即通过控制设备向模块发出一个命令后,模块才测量一次。

查询方式下,每向测距模块发送一次查询命令,模块才进行测量一次,完成测量后即将测量结果通过串口发送出来。

设置成查询方式,模块可多块模块连接在一起组网测量。

查询命令格式:

AT+CL=1-255(1-255为模的的地址编码,每个模块的地址编码由模块上单片机P1口与地短接的情况决定,各块模块的编码可独立,由使用者自己设定,设定范围1-255,只在查询方式下有效),数据格式为16进制数据。

三、模块使用

为减小本超声波测距模块外形尺寸,该超声波测距元件采用双面安装,全部元件安装在一块长6cm宽2.5cm的PCB上。

模块可用作应用系统的测距模块。

因为它是串口TTL电平输出的。

可应用在倒车雷达、机器人避障、液位检测、入侵报警、距离测量等产品中。

板上留有安装孔;有一排插针,以备插到应用板上。

对外接口定义:

(信号输出脚是第3脚TXD,5V左右的TTL电平,可接应用系统单片机的RXD引脚)。

测试显示程序范例如下:

#include;

//头文件

#include;

//头文件

#defineucharunsignedchar

//定义变量类型为字符型

#defineuintunsignedint

//定义变量类型为长整型

#defineLEDP0

//数码管段码输出端

#defineLED1P2_6

//数码管位1

#defineLED2P2_4

//数码管位2

#defineLED3P2_5

//数码管位3

#definesxP2_3

//数码管位3

uchars,i,pd,jsh,ml[3]={0,0,0},zj,xm0,xm1,xm2,xm3,buffer[3];//程序中用到的变量

ucharconvert[10]={0xA0,0xBD,0x64,0x34,0x39,0x32,0x22,0xBC,0x20,0x30};//0~9段码单片机端口P0.0-P0.7分别接数码管的A、B、F、D、E、H、C、G各段

voiddelay(i);

//延时函数

voidscanLED();

//显示函数

voidtimeToBuffer();

//显示转换函数

voidoffmsd();

//百位数为0判断处理模块

voidmain()

//主程序

{

EA=1;

//开总中断

ES=1;

//串口中断允许

SCON=0x50;

//串口方式1,允许接收

TMOD=0x21;

//定时器1定时方式2

TCON=0x40;

//定时器1开始计数

TH1=0xF3;

//6MHz1200波特率

TL1=0xF3;

//6MHz1200波特率

TI=0;

//串口发送中断标志置0

RI=0;

//串口接收中断标志置0

TR1=1;

//启动定时器1

sx=0;

while

(1)

{

timeToBuffer();

//调用转换段码功能模块

offmsd();

//调用百位数为0判断处理模块

scanLED();

//调用显示函数

}

}

voiddelay(i)

//延时子程序

{

while(--i);

//延时循环

}

voidscanLED()

//显示功能模块

{

LED=buffer[0];

//显示个位数值,个数位数的段码送显示端口

LED3=0;

//个位数位码,低电平有效,进行显示

delay

(1);

//显示延时,加大该值,显示亮度提高

LED3=1;

//关闭显示个位数显示

delay(20);

//关闭显示延时,减小该值时显示亮度提高

LED=buffer[1];

//显示十位数值,十数位数的段码送显示端口

LED2=0;

//十位数位码,低电平有效,进行显示

delay

(1);

//显示延时,加大该值,显示亮度提高

LED2=1;

//关闭显示十位数显示

delay(20);

//关闭显示延时,减小该值时显示亮度提高

LED=buffer[2];

//显示百位数值,百数位数的段码送显示端口

LED1=0;

//百位数位码,低电平有效,进行显示

delay

(1);

//显示延时,加大该值,显示亮度提高

LED1=1;

//关闭显示百位数显示

delay(20);

//关闭显示延时,减小该值时显示亮度提高

}

voidoffmsd()

//百位数为0判断处理模块

{

if(buffer[2]==0xA0)

//如果值为零时百位不显示

buffer[2]=0xff;

//数码管百位数的段码全部为1,即高电平,百位不显示

}

voidserial()interrupt4using3//串口中断接收程序

{

if(RI)

//串口接收到数据时串口中断标志位为1

{

RI=0;

//串口中断标志位置0

pd=SBUF;

//接收到的数据送中间变变量pd储存

if(pd==0x20)

//判断接收到的数据是否为0x20(这是ASCII码的空格的代码)

{

jsh=0;

//接收位数计数器jsh置0

pd=0;

//中间变变量pd清0

}

if(jsh==1)

//当jsh值为1时,代表串口接收到模块发送回的百位数值

{

ml[0]=SBUF;

//串口接收到模块发送回的百位数值存入ml[0]单元

}

elseif(jsh==2)

//当jsh值为2时,代表串口接收到模块发送回的十位数值

{

ml[1]=SBUF;

//串口接收到模块发送回的十位数值存入ml[1]单元

}

elseif(jsh==3)

//当jsh值为3时,代表串口接收到模块发送回的个位数值

{

ml[2]=SBUF;

//串口接收到模块发送回的个位数值存入ml[2]单元

s=ml[0]*100+ml[1]*10+ml[2];

//计算测量得到的距离值s,单位为厘米

}

jsh++;

//接收位数计数器值加1

}

}

voidtimeToBuffer()

//转换段码功能模块

{

xm0=ml[0]-48;

//接到的值为标准的ASCII码,进行十进制转换,百位数的值

xm1=ml[1]-48;

//接到的值为标准的ASCII码,进行十进制转换,十位数值

xm2=ml[2]-48;

//接到的值为标准的ASCII码,进行十进制转换,个位数值

buffer[0]=convert[xm2];

//转换成对应的显示码段

buffer[1]=convert[xm1];

//转换成对应的显示码段

buffer[2]=convert[xm0];

//转换成对应的显示码段

if((ml[0]==67)&&(ml[1]==67))//判断接收到的ASCII码数值为"C",表示模块接收不到回波,这时的显示用"CCC"表示

{

buffer[0]=0xE2;

//显示"C"的段码是0xE2

buffer[1]=0xE2;

//显示"C"的段码是0xE2

buffer[2]=0xE2;

//显示"C"的段码是0xE2

}

elseif((ml[0]==45)&&(ml[1]==45))//判断接收到的ASCII码数值为"-",表示模块的测量范围在盲区范围内这时的显示用"---"表示

{

buffer[0]=0x7F;

//显示"-"的段码是0x7F

buffer[1]=0x7F;

//显示"-"的段码是0x7F

buffer[2]=0x7F;

//显示"-"的段码是0x7F

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 工作计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1