一款串口输出超声波测距模块使用范例
- 格式:docx
- 大小:131.16 KB
- 文档页数:16
超声波测距模块[串口输出]【编号】0003【简介】串口输出的超声波测距离之用的电子模块;使用了收发独立的超声波传感器。
低成本的超声波流量计、超声波液位计、雷达液位计、农业机械自动Array化等应用的实用模块。
串口输出的系列产品有两种,(两者在硬件上、软件上都有不同)US-A:测量距离29厘米~3米,精度1厘米。
US-D:测量距离7.5厘米~99厘米,精度0.5厘米。
价格见本文末。
(这是很多集成商客户实际使用的模块,性能稳定,并非仅供学习的实验板)一、产品介绍1.可用作应用系统的测距模块。
因为它是串口TTL电平输出的,而且尺寸小巧3cmx5cm。
可应用在倒车雷达、机器人避障、液位检测、入侵报警、距离测量等产品中。
板上留有安装孔;左右各有一排插针孔,以备插到应用板上。
2.使用了STC公司的C51单片机。
低成本的超声波流量计、超声波液位计、雷达液位计、农业机械自动化等应用的实用模块。
实物图:技术参数:★模块尺寸:33x45mm2(火柴盒大小)★输入电压:DC3.5~5.5V★输出接口定义:(信号输出脚是第3脚TX,可接应用系统单片机的RX引脚)。
★串口传输协议:9600,N,8,1★数据格式:每个距离数据输出占用4个字节。
前两个为固定值0xff,0xaa;后两个为距离值,先是低字节,后是高字节,单位为厘米。
(对于US-D型号产品,数据格式一样,只是单位是0.5厘米。
)★数据传输控制:连续输出,每200ms一次。
(需要使能控制的客户,我们可以提供定制服务)二、产品的调试产品模块拿到手后,如何知道它是否正常工作,是否达到要求的参数。
最简单的方法就是让它将数据显示在电脑上。
连接方法示意图如下:赛先生科技提供了这样的调试软件工具。
你只要找一根RS232转TTL电平的数据线插到电脑的串口上,然后运行本软件工具即可。
软件运行界面如下:此调试程序exe档下载★PC串口接收此超声波模块的示范源代码(VC++工程)点击下载此编程的详细步骤见:/articles/Read.asp? ID=1264★单片机应用系统接收此超声波模块的示范代码(Keil C工程、包含了连接原理图。
HC-SR04超声波测距模块◼产品概述HC-SR04是一款升级的超声波测距模块。
新增加UART,IIC及1-WIRE(单总线)功能,模式可以通过外围电阻设置。
2CM超小盲区,4M典型最远测距,2mA超低工作电流。
采用自研超声波测距解调芯片,使其外围更加简洁,工作电压更宽(2.8-5.5V)。
驱动采用扫频技术,减少探头本身一致性对灵敏度的影响。
内部40K驱动频率采用正温度补偿,切合探头中心频率的温度特性,减小温度影响。
外部晶振为外观兼容而放置的晶振,不起任何作用,不焊接晶振的模块价格更有优势。
◼实物图片◼主要特性⚫采用专业解调芯片⚫工作电压:2.8-5.5V⚫工作电流:2mA⚫支持GPIO,UART,IIC及1-WIRE多种接口模式,默认输出模式兼容HC-SR04⚫2CM盲区,4M典型最远测距⚫200mS周期⚫可配置各种颜色及加固型探头◼典型应用⚫玩具,机器人避障⚫液位,水位测量⚫坐姿检测⚫其它测距应用◼性能参数◼GPIO/UART/IIC/1-WIRE模式选择◼测量操作一:GPIO模式工作模式同HC-SR04。
外部MCU给模块Trig脚一个大于10uS的高电平脉冲;模块会给出一个与距离等比的高电平脉冲信号,可根据脉宽时间“T”算出:距离=T*C/2(C为声速)声速温度公式:c=(331.45+0.61t/℃)m•s-1(其中330.45是在0℃)0℃声速:330.45M/S20℃声速:342.62M/S40℃声速:354.85M/S0℃-40℃声速误差7左右。
实际应用,如果需要精确距离值,必需要考虑温度影响,做温度补偿。
如有需要,可关注我司带温补单芯片RCWL-9700。
二:UART模式UART模式波特率设置:9600N1命令返回值说明0XA0BYTE_HBYTE_MBYTE_L 输出距离为:((BYTE_H<<16)+(BYTE_M<<8)+BYTE_L)/1000单位mm0XF1公司及版本信息连接串口。
HC-SR04超声波测距模块之阳早格格创做
1、本模块本能宁静,测度距离透彻.能战海中的
SRF05,SRF02等超声波测距模块相媲好.模块下粗度,盲区(2cm)超近,宁静的测距是此产品乐成走背商场的有力根据!
2主要技能参数: 1:使用电压:DC5V 2:固态电流:小于2mA 3:电仄输出:下5V 4:电仄输出:底0V 5:感触角度:没有大于15度 6:探测距离:2cm-450cm
交线办法,VCC、trig(统造端)、 echo(交支端)、GND
3模块处事本理:
(1)采与IO触收测距,给起码10us的下电仄旗号;
(2)模块自动收支8个40khz的圆波,自动检测是可有旗号返回;
(3)有旗号返回,通过IO输出一下电仄,下电仄持绝的时间便是
超声波从收射到返回的时间.尝试距离=(下电通常间*声速(340M/S))/2;
本模块可提供齐套测距步调:C51,PIC18F877,超声波LCD1602隐现,超声波LCD12864隐现,数码管隐现,串心隐现等,测距参照步调.
供以下齐套资料
超声波模块本理图:。
URM04 超声波测距模块说明性能描述1.工作电源:+5V2.工作电流:<20mA3.工作温度范围:-10℃~+70℃4.超声波距离测量:最大测量距离―500cm最小测量距离―4cm分辨率-1cm5.模块使用RS485总线通讯,编写通讯程序非常的便捷。
6.模块内带温度补偿电路提高测量的精度。
7.模块重量:约30g模块测量角度模块角度60度功能描述正面图图1 URM04超声波测距模块管脚1: +5V 电源+5V输入2: GND 电源地3: A RS485总线A(正)4: B RS485总线B (负)通讯协议模块波特率 115200BPS,无奇偶效验,一位停止位。
出厂的模块地址可以进行重新编址,以适应组网需要。
注意这时RS485总线只能连接一只待编程的模块。
发送通用的编址命令,将地址ADD参数设置到模块,ADD地址范围0到128。
模块返回操作标志。
设置成功S返回0X01,设置失败无返回。
2.启动超声波测量0XFF本指令读取一次环境温度,温度高字节的高4位代表温度正负,当高4位都是1时说明是负温度,当高4位都是0时是正温度,除去温度高字节的高4位后是12位的温度。
分辨率0.1度,每个数字代表0.1摄氏度。
当测量无效时返回的温度高位和低位数据都是0xff。
55 aa ab 01 55 11 11 返回 55 AA 11 01 55 01 67 设置为地址0X1155 aa 11 00 01 11 返回 55 AA 11 02 01 00 04 17 读取地址为0X11的模块距离55 aa 11 00 02 12 返回 55 AA 11 02 02 01 06 1B 读取地址为0X01的模块温度。
超声波测距模块该超声波测距模块采用AVR的ATMEGA8单片机作处理器,模块的工作电压为:DC4.5-5V;测量距离范围为:5cm~150cm,测量结果由三位数码管直接显示出来,当测量超过上限值150cm收不到回波时显示“C C C”, 测量低于下限值5cm时显示“- - -”。
模块上设有一输出端口,用于输出报警信号,正常情况下,输出5V高平,当测量结果小于设定的报警值时输出低电平信号。
报警值可通过板上的两个按键开关K1、K2设定,设定值范围5cm~150cm(与测量上限值相配)。
测量可调次数可调,调整范围为:1-20次/秒;测量上限值可调,调整范围5-150cm;工作环境温度通过按键开关设定,可实现手工温度补偿会修正测量结果,温度范围0-40度。
以上所有设定好的值存于单片机内的EEPROM中,断电后数值不会消失。
模块尺寸:68mm× 30 mm。
一、 各参数设定1、各参数设定顺序为:环境温度、测量次数、测量上限、报警值、保存设定参数。
2、K1为功能键,K2为定值调整。
3、设定方法:模块接通工作电源处于工作状态后,点动功能键K1,显示值显示字符,之后转入显示当前定值,现次点动K1键,闪动显示的位数为当前要调整的值,按动K2进行定值设定,设定好一位后,点动K1设定下一位。
3、设定定值的流程:环境温度、测量次数、测量上限、报警值、保存设定参数。
工作状态→K1→显示“t C”环境温度→K1→K1→K2设定十位数→K1→K2设定个位数→K1→显示“C S”测量次数 → K1→K1→K2设定十位数→K1→K2设定个位数→K1→显示“HHH”测量上限→ K2设定百位数→K1→ K2设定十位数→K1→K2设定个位数→K1→显示“AAA”报警值→ K2设定百位数→K1→ K2设定十位数→K1→K2设定个位数→K1储存当前定值后,重新进入工作状态。
一款超声波测距模块运用程序本模块性能稳定,使用方便,测度距离精确。
能和国外的SRF05,SRF02等超声波测距模块相媲美,且价格实惠,是你采购超声波器件的理想选择。
模块高精度,盲区(2cm)超近,稳定的测距是此产品成功走向市场的有力根据!测量范围在2cm~500cm,测量精度3mm,测量时与被测物体无直接接触,能够清晰稳定地显示测量结果。
由于超声波指向性强,能量消耗缓慢,在介质中传播的距离较远,因而超声波经常用于距离的测量,如测距仪和物位测量仪等都可以通过超声波来实现。
超声波测距器,可以应用于汽车倒车、建筑施工工地以及一些工业现场的位置监控,也可用于液位、井深、管道长度的测量,用于机器人控制、小车躲避障碍等场合中。
小车上安装此模块配合舵机使用能控制得更方便。
利用超声波检测往往比较迅速、方便、计算简单、易于做到实时控制,并且在测量精度方面能达到工业实用的要求。
因此在移动机器人的研制上也得到了广泛的应用。
模块性能1:使用电压:DC5V;2:静态电流:小于2mA;3:输出信号:电平信号,高电平5V,低电平为0V;4:感应角度:不大于15度;5:探测距离:2cm-500cm6: 高精度:可达0.3cm超声波测距模块工作原理:(1)采用单片机IO触发测距,给至少10us的高电平信号;(2)模块自动发送8个40khz的方波,自动检测是否有信号返回;(3)有信号返回,通过echo输出一高电平,高电平持续的时间就是超声波从发射到返回的时间。
用户通过从trig脚输入40kHz的方波信号,即用户从单片机的IO口连续发出高低电平,产生方波,方波的个数一般为10个左右;然后就可以在接收端等待高电平输出,一有输出就可以开定时器计时,当此口变为低电平时就可以读定时器的值,高电平的时间就是此次测距的时间,根据以下公式计算测量距离:测试距离=(高电平时间*声速(340m/s))/2;注意事项1、超声波发射头向外发射60度角的超声束,因此,在探头与被测物体之间不能有其他障碍物。
.超声波测距模块04C-SRH 1、产品特点:2cm-400cm 的非接触式距离感测功能,HC-SR04 超声波测距模块可提供基本工;模块包括超声波发射器、接收器与控制电路。
测距精度可达高到3mm作原理:模块自动发的高电平信号; (2) TRIG 触发测距,给至少 10us (1)采用 IO 口有信号返回,通过 40khz 的方波,自动检测是否有信号返回; (3) 8 送个输出一个高电平,高电平持续的时间就是超声IO 口 ECHO(340M/S))/2;声速=(高电平时间*波从发射到返回的时间。
测试距离、实物图:2VCC 供如右图接线,,GND 为地电5V 源信线,TRIG 触发控制信响号输入,ECHO 回线。
等四支号输出图一实物图3、电气参数HC-SR04超声波模电气参工作电DC 5 V工作电15mA工作频率40Hz....4、超声波时序图:图二、超声波时序图以上时序图表明你只需要提供一个 10uS 以上脉冲触发信号,该模块内部将发出 8 个 40kHz 周期电平并检测回波。
一旦检测到有回波信号则输出回响信号回响信号的脉冲宽度与所测的距离成正比。
由此通过发射信号到收到的回响信号时间间隔可以计算得到距离。
公式:uS/58=厘米或者 uS/148=英寸;或是:距离=高电平时间*声速(340M/S)/2;建议测量周期为 60ms 以上,以防止发射信号对回响信号的影响。
注:1、此模块不宜带电连接,若要带电连接,则先让模块的GND 端先连接,否则会影响模块的正常工作。
2、测距时,被测物体的面积不少于0.5 平方米且平面尽量要求平整,否则影响测量的结果、实物规格:5.。
超声波测距资料超声波测距模块连线:我们将超声波测距模块用红色,绿色两根导线引出,红色线(超声波测距模块电源脚)接5208K实验仪+5V,绿色线(超声波测距模块接地脚)接5208K实验仪GND.打开5208K实验仪电源, 超声波测距模块初始化显示27.将超声波发射接收头对准障碍物,数码管将显示超声波测距模块与障碍物之间的距离。
超声波测距学习板,可应用于汽车倒车、建筑施工工地以及一些工业现场的位置监控,也可用于如液位、井深、管道长度的测量等场合。
测量时与被测物体无直接接触,能够清晰稳定地显示测量结果。
超声波学习板采用AT89S51单片机晶振为12M,单片机用P1.0口输出超声波换能器所需的40K方波信号,利用外中断监测超声波接收电路输出的返回信号,显示电路采用简单的4位共阳LED数码管,段码驱动用74LS244集成电路,位码用S8550三极管驱动。
超声波测距的算法原理: 超声波在空气中传播速度为每秒钟340米(15℃时)。
X2是声波返回的时刻,X1是声波发声的时刻,X2-X1得出的是一个时间差的绝对值,假定X2-X1=0.03S,则距离为340mx0.03S=10.2米。
这就是超声波探头到反射物体之间的距离。
产品性能特点:成品板上自带:超声波收发传感器、接收放大电路、四位LED数码显示、四位按键(四个按钮和蜂鸣器属于功能预留,程序中无定义),电源部分自带整流、滤波、稳压电路,允许交流7~15V或者直流9~16V输入,经过实际测试,测量范围可达27~250厘米,测量精度为1厘米。
下图是超声波测距学习板的元件布局图,以下是部分汇编源程序;/////////////////////////////////////////////////////// ; USE BY :超声波测距器; IC :AT89C51; TEL :; OSCCAL :XT (12M); display :共阳LED显示;/////////////////////////////////////////////////////// ;测距范围7CM-11M,堆栈在4FH以上,20H用于标志;显示缓冲单元在40H-43H,使用内存44H、45H、46H用于计算距离;VOUT EQU P1.0 ; 红外脉冲输出端口speak equ p1.1;********************************************;* 中断入口程序 *;********************************************;ORG 0000HLJMP STARTORG 0003HLJMP PINT0ORG 000BHretiORG 0013HRETIORG 001BHLJMP INTT1ORG 0023HRETIORG 002BHRETI;;********************************************;* 主程序 *;********************************************;START: MOV SP,#4FHMOV R0,#40H ;40H-43H为显示数据存放单元(40H为最高位)MOV R7,#0BHCLEARDISP: MOV @R0,#00HDJNZ R7,CLEARDISPMOV 20H,#00HMOV TMOD,#11H ;T1为 T0为16位定时器MOV TH0,#00H ;65毫秒初值MOV TL0,#00HMOV TH1,#00HMOV TL1,#00HMOV P0,#0FFHMOV P1,#0FFHMOV P2,#0FFHMOV P3,#0FFHMOV R4,#04H ;超声波肪冲个数控制(为赋值的一半)SETB PX0SETB ET1SETB EASETB TR1 ;开启测距定时器start1: LCALL DISPLAYJNB 00H,START1 ;收到反射信号时标志位为1CLR EALCALL WORK ;计算距离子程序clr EAMOV R2,#32h;#64H ;测量间隔控制(约4*100=400MS)LOOP: LCALL DISPLAYDJNZ R2,LOOPCLR 00Hsetb et0mov th0,00hmov tl0,00hSETB TR1 ;重新开启测距定时器SETB EASJMP Start1;;**************************************************** ;* 中断程序* *;****************************************************;T1中断,发超声波用 ;T1中断,65毫秒中断一次INTT1: CLR EAclr ex0MOV TH0,#00HMOV TL0,#00HMOV TH1,#00HMOV TL1,#00HSETB ET0SETB EASETB TR0 ;启动计数器T0,用以计intt11:CPL VOUT ;40KHZnopnopnopnopnopnopnopnopnopDJNZ R4,intt11;超声波发送完毕,MOV R4,#04Hlcall delay_250 ;延时,避开发射的直达声波信号SETB EX0 ;开启接收回波中断RETIOUT: RETI;外中断0,收到回波时进入PINT0: nopjb p3.2,pint0_exitCLR TR0 ;关计数器CLR EA ;CLR EX0 ;MOV 44H,TL0 ;将计数值移入处理单元MOV 45H,TH0 ;mov th0,#00hmov tl0,#00hjnb p3.2,$SETB 00H ;接收成功标志pint0_exit:RETI;;****************************************************;* 显示程序 *;****************************************************; 40H为最高位,43H为最低位,先扫描高位DISPLAY: MOV R1,#40H;GMOV R5,#7fH;GPLAY: MOV A,R5MOV P0,#0FFHMOV P2,AMOV A,@R1MOV DPTR,#TABMOVC A,@A+DPTRMOV P0,ALCALL DL1MSINC R1MOV A,R5JNB ACC.4,ENDOUT;GRR AMOV R5,AAJMP PLAYENDOUT: MOV P2,#0FFHMOV P0,#0FFHRET;TAB: DB 18h, 7Bh, 2Ch, 29h, 4Bh, 89h, 88h, 3Bh, 08h, 09h,0ffh ;共阳段码表 "0" "1" "2" "3" "4" "5""6" "7" "8" "9" "不亮""A""-" ;;**************************************************** ;* 延时程序 *;**************************************************** ;DL1MS:push 06hpush 07hMOV R6,#14HDL1: MOV R7,#19HDL2: DJNZ R7,DL2DJNZ R6,DL1pop 07hpop 06hRET;;**************************************************** ;* 距离计算程序 (=计数值*17/1000cm) *;**************************************************** ;work: PUSH ACCPUSH PSWPUSH BMOV PSW, #18hMOV R3, 45HMOV R2, 44HMOV R1, #00DMOV R0, #17DLCALL MUL2BY2MOV R3, #03HMOV R2, #0E8HLCALL DIV4BY2LCALL DIV4BY2MOV 40H, R4MOV A,40HJNZ JJ0MOV 40H,#0AH ;最高位为零,不点亮JJ0: MOV A, R0MOV R4, AMOV A, R1MOV R5, AMOV R3, #00DMOV R2, #100DLCALL DIV4BY2MOV 41H, R4MOV A,41HJNZ JJ1MOV A,40H ;次高位为0,先看最高位是否为不亮SUBB A,#0AHJNZ JJ1MOV 41H,#0AH ;最高位不亮,次高位也不亮JJ1: MOV A, R0MOV R4, AMOV A, R1MOV R5, AMOV R3, #00DMOV R2, #10DLCALL DIV4BY2MOV 42H, R4MOV A,42HJNZ JJ2MOV A,41H ;次次高位为0,先看次高位是否为不亮SUBB A,#0AHJNZ JJ2MOV 42H,#0AH ;次高位不亮,次次高位也不亮JJ2: MOV 43H, R0POP BPOP PSWPOP ACCRET;;**************************************************** ;* 两字节无符号数乘法程序 *;**************************************************** ; R7R6R5R4 <= R3R2 * R1R0超声波专用发射接收头,有T字样的是发射头,标有R字样的是接收头.。
超声波测距资料超声波测距模块连线:我们将超声波测距模块用红色,绿色两根导线引出,红色线(超声波测距模块电源脚)接5208K实验仪+5V,绿色线(超声波测距模块接地脚)接5208K实验仪GND.打开5208K实验仪电源, 超声波测距模块初始化显示27.将超声波发射接收头对准障碍物,数码管将显示超声波测距模块与障碍物之间的距离。
超声波测距学习板,可应用于汽车倒车、建筑施工工地以及一些工业现场的位置监控,也可用于如液位、井深、管道长度的测量等场合。
测量时与被测物体无直接接触,能够清晰稳定地显示测量结果。
超声波学习板采用AT89S51单片机晶振为12M,单片机用P1.0口输出超声波换能器所需的40K方波信号,利用外中断监测超声波接收电路输出的返回信号,显示电路采用简单的4位共阳LED数码管,段码驱动用74LS244集成电路,位码用S8550三极管驱动。
超声波测距的算法原理: 超声波在空气中传播速度为每秒钟340米(15℃时)。
X2是声波返回的时刻,X1是声波发声的时刻,X2-X1得出的是一个时间差的绝对值,假定X2-X1=0.03S,则距离为340mx0.03S=10.2米。
这就是超声波探头到反射物体之间的距离。
产品性能特点:成品板上自带:超声波收发传感器、接收放大电路、四位LED数码显示、四位按键(四个按钮和蜂鸣器属于功能预留,程序中无定义),电源部分自带整流、滤波、稳压电路,允许交流7~15V或者直流9~16V输入,经过实际测试,测量范围可达27~250厘米,测量精度为1厘米。
下图是超声波测距学习板的元件布局图,以下是部分汇编源程序;/////////////////////////////////////////////////////// ; USE BY :超声波测距器; IC :AT89C51; TEL :; OSCCAL :XT (12M); display :共阳LED显示;/////////////////////////////////////////////////////// ;测距范围7CM-11M,堆栈在4FH以上,20H用于标志;显示缓冲单元在40H-43H,使用内存44H、45H、46H用于计算距离;VOUT EQU P1.0 ; 红外脉冲输出端口speak equ p1.1;********************************************;* 中断入口程序 *;********************************************;ORG 0000HLJMP STARTORG 0003HLJMP PINT0ORG 000BHretiORG 0013HRETIORG 001BHLJMP INTT1ORG 0023HRETIORG 002BHRETI;;********************************************;* 主程序 *;********************************************;START: MOV SP,#4FHMOV R0,#40H ;40H-43H为显示数据存放单元(40H为最高位)MOV R7,#0BHCLEARDISP: MOV @R0,#00HINC R0DJNZ R7,CLEARDISPMOV 20H,#00HMOV TMOD,#11H ;T1为 T0为16位定时器MOV TH0,#00H ;65毫秒初值MOV TL0,#00HMOV TH1,#00HMOV TL1,#00HMOV P0,#0FFHMOV P1,#0FFHMOV P2,#0FFHMOV P3,#0FFHMOV R4,#04H ;超声波肪冲个数控制(为赋值的一半)SETB PX0SETB ET1SETB EASETB TR1 ;开启测距定时器start1: LCALL DISPLAYJNB 00H,START1 ;收到反射信号时标志位为1CLR EALCALL WORK ;计算距离子程序clr EAMOV R2,#32h;#64H ;测量间隔控制(约4*100=400MS)LOOP: LCALL DISPLAYDJNZ R2,LOOPCLR 00Hsetb et0mov th0,00hmov tl0,00hSETB TR1 ;重新开启测距定时器SETB EASJMP Start1;;**************************************************** ;* 中断程序* *;****************************************************;T1中断,发超声波用 ;T1中断,65毫秒中断一次INTT1: CLR EACLR TR0clr ex0MOV TH0,#00HMOV TL0,#00HMOV TH1,#00HMOV TL1,#00HSETB ET0SETB EASETB TR0 ;启动计数器T0,用以计intt11:CPL VOUT ;40KHZnopnopnopnopnopnopnopnopnopDJNZ R4,intt11;超声波发送完毕,MOV R4,#04Hlcall delay_250 ;延时,避开发射的直达声波信号SETB EX0 ;开启接收回波中断RETIOUT: RETI;外中断0,收到回波时进入PINT0: nopjb p3.2,pint0_exitCLR TR0 ;关计数器CLR EA ;CLR EX0 ;MOV 44H,TL0 ;将计数值移入处理单元MOV 45H,TH0 ;mov th0,#00hmov tl0,#00hjnb p3.2,$SETB 00H ;接收成功标志pint0_exit:RETI;;**************************************************** ;* 显示程序 *;**************************************************** ; 40H为最高位,43H为最低位,先扫描高位DISPLAY: MOV R1,#40H;GMOV R5,#7fH;GPLAY: MOV A,R5MOV P0,#0FFHMOV P2,AMOV A,@R1MOV DPTR,#TABMOVC A,@A+DPTRMOV P0,ALCALL DL1MSINC R1MOV A,R5JNB ACC.4,ENDOUT;GRR AMOV R5,AAJMP PLAYENDOUT: MOV P2,#0FFHMOV P0,#0FFHRET;TAB: DB 18h, 7Bh, 2Ch, 29h, 4Bh, 89h, 88h, 3Bh, 08h, 09h,0ffh ;共阳段码表 "0" "1" "2" "3" "4" "5""6" "7" "8" "9" "不亮""A""-" ;;****************************************************;* 延时程序 *;****************************************************;DL1MS:push 06hpush 07hMOV R6,#14HDL1: MOV R7,#19HDL2: DJNZ R7,DL2DJNZ R6,DL1pop 07hpop 06hRET;;****************************************************;* 距离计算程序 (=计数值*17/1000cm) *;****************************************************;work: PUSH ACCPUSH PSWPUSH BMOV PSW, #18hMOV R3, 45HMOV R2, 44HMOV R1, #00DMOV R0, #17DLCALL MUL2BY2MOV R3, #03HMOV R2, #0E8HLCALL DIV4BY2LCALL DIV4BY2MOV 40H, R4MOV A,40HJNZ JJ0MOV 40H,#0AH ;最高位为零,不点亮JJ0: MOV A, R0MOV R4, AMOV A, R1MOV R5, AMOV R3, #00DMOV R2, #100DLCALL DIV4BY2MOV 41H, R4MOV A,41HJNZ JJ1MOV A,40H ;次高位为0,先看最高位是否为不亮SUBB A,#0AHJNZ JJ1MOV 41H,#0AH ;最高位不亮,次高位也不亮JJ1: MOV A, R0MOV R4, AMOV A, R1MOV R5, AMOV R3, #00DMOV R2, #10DLCALL DIV4BY2MOV 42H, R4MOV A,42HJNZ JJ2MOV A,41H ;次次高位为0,先看次高位是否为不亮SUBB A,#0AHJNZ JJ2MOV 42H,#0AH ;次高位不亮,次次高位也不亮JJ2: MOV 43H, R0POP BPOP PSWPOP ACCRET;;****************************************************;* 两字节无符号数乘法程序 *;****************************************************; R7R6R5R4 <= R3R2 * R1R0超声波专用发射接收头,有T字样的是发射头,标有R字样的是接收头。
一款串口输出超声波测距模块使用范例一、模块简介:该串口输出超声波测距模块采用STC11F04E单片机作处理器,工作电源:DC5V,工作电流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 ;//头文件#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//数码管位3uchars,i,pd,jsh,ml[3]={0,0,0},zj,xm0,xm1,xm2,xm3,buffe r[3];//程序中用到的变量ucharconvert[10]={0xA0,0xBD,0x64,0x34,0x39,0x32,0x22,0 xBC,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;//串口中断允许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;//启动定时器1sx=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;//串口中断标志位置0pd=SBUF;//接收到的数据送中间变变量pd储存if(pd==0x20)//判断接收到的数据是否为0x20(这是ASCII码的空格的代码){jsh=0;//接收位数计数器jsh置0pd=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"的段码是0xE2buffer[1]=0xE2;//显示"C"的段码是0xE2buffer[2]=0xE2;//显示"C"的段码是0xE2}else if ((ml[0]==45)&&(ml[1]==45)) //判断接收到的ASCII码数值为"-",表示模块的测量范围在盲区范围内这时的显示用"- - -"表示{buffer[0]=0x7F;//显示"-"的段码是0x7Fbuffer[1]=0x7F;//显示"-"的段码是0x7Fbuffer[2]=0x7F;//显示"-"的段码是0x7F}}。