您的位置 首页 电路

RS485接口一体化超声波测距模块

一、模块简介:该超声波测距模块采用STC11F04E单片机作处理器,工作电源:DC5V,工作电流20mA。测量数据输出方式为RS485输出,数据格式

一、模块简介:

超声波测距模块选用STC11F04E单片机作处理器,作业电源:DC5V,作业电流20mA。丈量数据输出方法为RS485输出,数据格局为规范的ASCII码,数据由:空格位(开端位)+百+十位+个位。作业方法有两种:一是接连丈量方法;二是查询丈量方法。

丈量规模:36cm~450cm(盲区36cm)。
丈量过程中,当接纳不到障碍物反射的回波时,输出“C C C”, 当丈量低于下限值(在盲区内)时显现“- – -”。丈量成果由模块上的输出端口输出,输出方法为RS485输出。丈量成果可经过电脑进行显现。模块运用RS485接口通讯,丈量成果传送间隔远,能够经过电脑收集数据,编写通讯程序十分的快捷。
波特率:1200
校验位:无
数据位:8
中止位:无
ASCII码数据格局:空格位(开端位)+百+十位+个位。
二、模块的运用设置
超声波模块的作业方法可进行设置,设置成果可保存在模块内部的单片机中,断电不会丢掉。设置指令格局如下:

查询指令格局:AT+CL=1-32(0-32为模的的地址编码,每个模块的地址可进行独立设定,设守时运用AT+WD=“ ”指令,各块模块的编码可独立,由运用者自己设定,设定规模0-32,只在查询方法下有用),数据格局为16进制数据。
三、模块运用
为减小本超声波测距模块外形尺寸,该超声波测距元件选用双面装置,模块长6.2cm宽2.4cm。模块可用作使用体系的测距模块。可使用在液位检测、车位检测、间隔丈量等产品中。板上留有装置孔,有一排6脚插针。测验显现程序典范如下:
#include //头文件
#include //头文件
#define uchar unsigned char //界说变量类型为字符型
#define uint unsigned int //界说变量类型为长整型
#define LED P0 //数码管段码输出端
#define LED1 P2_6 //数码管位1
#define LED2 P2_4 //数码管位2
#define LED3 P2_5 //数码管位3
#define sx P2_3 //数码管位3

uchar s,i,pd,jsh,ml[3]={0,0,0},zj,xm0,xm1,xm2,xm3,buffer[3];//程序中用到的变量
uchar convert[10]={0xA0,0xBD,0x64,0x34,0x39,0x32,0x22,0xBC,0x20,0x30};////0~9段码单片机端口P0x.0-P0.7 别离接数码管的A、B、F、D、E、H、C、G各段
void delay(i);//延时函数
void scanLED();//显现函数
void timeToBuffer();//显现转化函数
void offmsd();//百位数为0判别处理模块

void main()//主程序
{
EA=1;//开总中止
ES=1;//串口中止答应
SCON = 0x50; //串口方法1,答应接纳
TMOD = 0x21; //守时器1守时方法2
TCON = 0x40; //守时器1开端计数
TH1 = 0xF3;//6MHz 1200波特率
TL1 = 0xF3;//6MHz 1200波特率
TI = 0;//串口发送中止标志置0
RI =0;//串口接纳中止标志置0
TR1=1; //发动守时器1
sx=0;
while(1)
{
timeToBuffer();//调用转化段码功能模块
offmsd();//调用百位数为0判别处理模块
scanLED();//调用显现函数
}
}

void delay(i)//延时子程序
{
while(–i);//延时循环
}

void scanLED() //显现功能模块
{
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); //封闭显现延时,减小该值时显现亮度进步
}

void offmsd()//百位数为0判别处理模块
{
if (buffer[2]==0xA0) //假如值为零时百位不显现
buffer[2] = 0xff;//数码管百位数的段码悉数为1,即高电平,百位不显现
}

void serial() interrupt 4 using 3//串口中止接纳程序
{
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]单元
}
else if(jsh==2)//当jsh值为2时,代表串口接纳到模块发送回的十位数值
{
ml[1]=SBUF;//串口接纳到模块发送回的十位数值存入ml[1]单元
}
else if(jsh==3)//当jsh值为3时,代表串口接纳到模块发送回的个位数值
{
ml[2]=SBUF;//串口接纳到模块发送回的个位数值存入ml[2]单元
s=ml[0]*100+ml[1]*10+ml[2]; //核算丈量得到的间隔值s,单位为厘米
}
jsh++; //接纳位数计数器值加1
}
}

void timeToBuffer() //转化段码功能模块
{
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”,表明模块接纳不到回波,这时的显现用”C C C”表明
{
buffer[0]=0xE2;//显现”C”的段码是0xE2
buffer[1]=0xE2;//显现”C”的段码是0xE2
buffer[2]=0xE2; //显现”C”的段码是0xE2
}
else if ((ml[0]==45)&&(ml[1]==45))//判别接纳到的ASCII码数值为”-“,表明模块的丈量规模在盲区规模内这时的显现用”- – -“表明
{
buffer[0]=0x7F;//显现”-“的段码是0x7F
buffer[1]=0x7F;//显现”-“的段码是0x7F
buffer[2]=0x7F; //显现”-“的段码是0x7F
}
}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/fangan/dianlu/259563.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部