资讯详情

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

一、模块简介:

该串口输出超声波测距模块采用C11F04E单片机作处理器,工作电源:5V,工作电流10mA。测量数据输出方式为TTL串口输出,数据格式为标准的ASCII码,数据由:空格位(起始位)+百+十位+个位。工作方式有两种:一是连续测量方式;二是查询测量方式。

测量范围:方式一:5cm~200cm(盲区5cm);方式二:25cm~350cm(盲区25cm)。

测量过程中,当接收不到障碍物反射的回波时,输出“C C C”,当测量低于下限值(在盲区内)时显示“- - -”。测量结果由模块上的输出端口输出,输出方式为串口(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 <REGX51.H> //头文件 #include <intrins.h> //头文件 #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段码单片机端口P0.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; //串口中断允许 SC = 0x50; //串口方式1,允许接收 TMOD = 0x21; //定时器1定时方式2 TCON = 0x40; //定时器1开始计数 TH1 = 0xF3; //6MHz 1200波特率 = 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 } }

-电子元器件采购网(www.ruidan.com)是本土元器件目录分销商,采用“小批量、现货、样品”销售模式,致力于满足客户多型号、高质量、快速交付的采购需求。 自建高效智能仓储,拥有自营库存超过50,000种,提供一站式正品现货采购、个性化解决方案、选型替代等多元化服务。
锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台