导航:首页 > 操作系统 > 51单片机控制的超声波

51单片机控制的超声波

发布时间:2025-03-14 12:33:36

㈠ 51单片机 HC-SR04超声波测距 我写的C语言代码,请问

HC-SR04超声波测距传感器的工作原理是通过触发端子Trig发送一个10us以上的高电平信号,触发传感器开始测量。随后,接收端Echo会输出一个持续时间与超声波往返时间成正比的高电平信号。此项目使用51单片机进行测距,编写了相应的C语言代码。

代码中定义了几个重要的变量:超声波触发端、接收端、蜂鸣器、外部中断0信号。其中,超声波触发端为P0.1,接收端为P0.3,蜂鸣器为P2.0,外部中断0信号为P3.2。

主函数中,首先初始化了触发端和接收端电平,然后设置了触发时间(大于10us),并开启了定时器0中断、外部中断0,以及下降沿触发模式。主循环中,外部中断0被赋值为接收端信号,当出现下降沿时触发外部中断0。如果接收端未接收到高电平,则触发传感器;若接收到高电平,则启动定时器,标志位置1,并使蜂鸣器响。

定时器0中断程序中,定时器设置为10ms,每进入一次中断t0加1。外部中断0中断程序中,一旦进入外部中断0,关闭定时器0,接收标志位置0,关闭蜂鸣器,测量时间为进入定时器中断次数t0乘以每次时间10ms,除以1000化为秒为单位。

数码管显示函数用于显示测量时间。此代码未完全实现,需要进一步完善。

整体程序设计思路清晰,功能实现基本满足需求,但在实际应用中还需要考虑更多细节,如传感器的误差校正、数据处理等。

此外,还需注意定时器和中断的正确配置,确保程序稳定运行。

希望以上信息对你有所帮助。

㈡ 51单片机外围模块中,超声波测距模块上 STC11 芯片是什么STC11、TL074和MAX232的作用都是什么

STC11是一款STC单片机(STC单片机的一个系列,而不是一个具体的单片机型号),在这里的作用是根据收到的发送信号TRIG,发送一端超声波波形给MAX232;还有个作用是根据接收到的超声波波形,返回一段ECHO信号。
MAX232在这里做电平转换,因为单片机给的波形是TTL波形,这里要转换电平,提高发射功率。
TL074应该是对接收的超声波波形进行滤波、放大、解调之类的

㈢ 高分求51单片机超声波测距避障小车程序(差速转向)设计。(最好能够实现pid控制的,不行的话简单的避障)

我也遇到过你这样的问题,主要是电源驱动能力不够,L298把电压拉低,单片机不正常工作,
我解决的办法是用一个12V的锂电池,或者多串几个干电池,最起码要10V以上,单独驱动L298模块,控制两个电机,再自制一块小转接板,用7805把12V电压转到5V,控制单片机电路,单片机肯定正常工作,小车跑的那是嗷嗷的

㈣ 51单片机 HC-SR04超声波测距 我写的C语言代码,请问

1、HC-SR04使用方法:给触发端子trig一个10us以上的高电平即可触发,触发后echo端子将接受到高电平,高电平的持续时间就是测距的往返时间。


2、例程:

#include<reg52.h>
#defineucharunsignedchar
#defineuintunsignedint
/*位定义*/
sbitCHUFA=P0^1;//位定义超声波触发端(10us以上高电平触发)
sbitJIESHOU=P0^3;//接收端(接受高电平)
sbitBEEP=P2^0;//蜂鸣器
sbitOUT0=P3^2;//外部中断0
ucharJS_FLAG;//接收标志
uintCF_TIME,t0,t1,shu;
/*函数声明*/
voidtimer0();
voidint0();
voiddisplay(uint);
main(){
CHUFA=0;//初始化拉低触发端和接收端电平
JIESHOU=0;
JS_FLAG=0;
CF_TIME=15;//初始化触发时间(大于10us)
TMOD=0x11;//定时器方式选择
EA=1;//开总中断
ET0=1;//开定时器0中断
EX0=1;//开外部中断0
IT0=0;//外部中断选择下降沿触发
//JIESHOU=1;
while(1){
OUT0=JIESHOU;//外部中断0被赋值为接收端信号,当出现下降沿是触发外部中断0
if(JS_FLAG==0){//如果没有接收到高电平则触发
CHUFA=1;
while(CF_TIME--);//10us以上高电平触发传感器
}
if(JIESHOU==1){
TR0=1;//如果接收端收到高电平则启动定时器
JS_FLAG=1;//并且标志位置1
BEEP=0;//蜂鸣器响
}
display(t1);//显示测量时间(秒)
}
}
/*定时器0中断程序*/
voidtimer0()interrupt1{
TH0=(65536-10000)/256;//装初值10ms
TL0=(65536-10000)%256;
t0++;//每进入一次中断t0加1
}
/*外部中断0中断程序*/
voidint0()interrupt0{
TR0=0;//一旦进入外部中断0,说明接收端收到下降沿信号。关闭定时器0
JS_FLAG=0;//接收标志位置0
BEEP=1;//关闭蜂鸣器
t1=t0*10/1000;//测量时间为进入定时器中断次数t0乘以每次时间10ms,除以1000化为秒为单位
t0=0;//t0清零
}
/*数码管显数函数*/
voiddisplay(uintshu){
//数码管显示函数
}

㈤ 做基于51单片机的超声波避障小车方案,还有详细元器件清单!要详细的 谢谢

51单片机一个,20或30pf的电容4个,小车一个,L298N电机驱动2个,7V或12V锂电池一个,晶振2个,杜邦线40根,烙铁,焊锡丝,超声波模块,LED灯若干,舵机一个。
方案很简单,上述元件做好51最小系统,淘宝买超声波模块,有51示例代码,直接拿来用,这样你可以取得小车和障碍物的距离了,然后,组装小车,把7v锂电池直接接L298N上,L298有转出5V的插针接口,用它转出的5v电压给单片机和超声波模块供电,然后淘宝买舵机要参考代码,当发现前方有障碍后,减速,单片机控制舵机转动一个角度,避过障碍,至于驱动小车的话,用单片机产生11KHZ的PWM输出到L298N上,把小车电机也接到L298上,这个可以看L298的说明书,淘宝商家会给你的。大体就是这样

㈥ 求一段汇编程序,利用51单片机控制超声波传感器测距的程序。

; 基于AT89C2051单片机超声波测距系统
; 测量范围35-300厘米
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 中断入口程序 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ORG 0000H
AJMP START
ORG 000BH
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 主 程 序 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
START : MOV R0,#70H ;立即数70H送寄存器R0中
MOV R7,#0BH ;立即数0BH送寄存器R7中
MOV 20H,#00H ;立即数00H送20H单元中
CLEARDISP: MOV @R0,#00H ;立即数立即数00H送R0中的地址单元中
INC R0 ;寄存器R0加1
DJNZ R7,CLEARDISP;寄存器中的数值减1非零时转移
MOV TMOD,#01H ;置定时器T0工作方式样3,对内部机器周期计数
CJZCX:MOV TL0,#00H ;装入定时器初值
MOV TH0,#00H
MOV R0,#0FH
MOV R1,#5bH
puzel:MOV 14H,#08H ;超声波发射持续200us
Here:CPL P3.5 ;输出40kHz方波
NOP ;
NOP ;
NOP ;
DJNZ 14H,Here ;
SETB TR0
SETB P3.2
MOV R6,#53H ;延时1.5ms
DL0: MOV R5,#03H
DJNZ R5,$
DJNZ R6,DL0
QBA:JNB P3.7,QBC
DJNZ R1,QBA
DJNZ R0,QBA
QBC:CLR P3.2
CLR TR0
MOV 70H,tl0
MOV 71H,tH0
MOV R2,71H
MOV R3,70H
MOV R6,#22H
MOV R7,#0H
LCALL MULD
MOV R6,#64H
MOV R7,#0H
LCALL DIVD
MOV 73H,R2
MOV 74H,R3
MOV R3,#0H
MOV R4,#0H
MOV R5,#0H
MOV R6,73H
MOV R7,74H
LCALL HB2
MOV A,R4 ;分离BCD
MOV B,#10H
DIV AB
MOV 78H,A
MOV 77H,B
MOV A,R5
MOV B,#10H
DIV AB
MOV 76H,A
MOV 75H,B
MOV 7AH,#0EFH
XXX:LCALL DISPLAY
DJNZ 7AH,XXX
AJMP CJZCX
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 乘34程序(乘声速) ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

MULD: MOV A,R3 ;计算R3乘R7
MOV B,R7
MUL AB
MOV R4,B ;暂存部分积
MOV R5,A
MOV A,R3 ;计算R3乘R6
MOV B,R6
MUL AB
ADD A,R4 ;累加部分积
MOV R4,A
CLR A
ADDC A,B
MOV R3,A
MOV A,R2 ;计算R2乘R7
MOV B,R7
MUL AB
ADD A,R4 ;累加部分积
MOV R4,A
MOV A,R3
ADDC A,B
MOV R3,A
CLR A
RLC A
XCH A,R2 ;计算R2乘R6
MOV B,R6
MUL AB
ADD A,R3 ;累加部分积
MOV R3,A
MOV A,R2
ADDC A,B
MOV R2,A
RET

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 除100程序(除法) ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DIVD: CLR C ;比较被除数和除数
MOV A,R3
SUBB A,R7
MOV A,R2
SUBB A,R6
JC DVD1
SETB OV ;溢出
RET
DVD1: MOV B,#10H ;计算双字节商
DVD2: CLR C ;部分商和余数同时左移一位
MOV A,R5
RLC A
MOV R5,A
MOV A,R4
RLC A
MOV R4,A
MOV A,R3
RLC A
MOV R3,A
XCH A,R2
RLC A
XCH A,R2
MOV F0,C ;保存溢出位
CLR C
SUBB A,R7 ;计算(R2R3-R6R7)
MOV R1,A
MOV A,R2
SUBB A,R6
ANL C,/F0 ;结果判断
JC DVD3
MOV R2,A ;够减,存放新的余数
MOV A,R1
MOV R3,A
INC R5 ;商的低位置一
DVD3: DJNZ B,DVD2 ;计算完十六位商(R4R5)
MOV A,R4 ;将商移到R2R3中
MOV R2,A
MOV A,R5
MOV R3,A
CLR OV ;设立成功标志
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; BCD转换 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
HB2: CLR A ;BCD码初始化
MOV R3,A
MOV R4,A
MOV R5,A
MOV R2,#10H ;转换双字节十六进制整数
HB3: MOV A,R7 ;从高端移出待转换数的一位到CY中
RLC A
MOV R7,A
MOV A,R6
RLC A
MOV R6,A
MOV A,R5 ;BCD码带进位自身相加,相当于乘2
ADDC A,R5
DA A ;十进制调整
MOV R5,A
MOV A,R4
ADDC A,R4
DA A
MOV R4,A
MOV A,R3
ADDC A,R3
MOV R3,A ;双字节十六进制数的万位数不超过6,不用调整
DJNZ R2,HB3 ;处理完16bit
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 显示程序 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DISPLAY: MOV R1,#76H ;立即数76H送寄存器中
MOV R5,#0FEH ;立即数FEH送寄存器R5中
PLAY: MOV A,R5 ;寄存器R5中的数值送累加器A中
MOV P3,A ;累加器A中的数值送P3口
MOV A,@R1 ;以寄存器R1中的数为地址单元的数值送累加器中
MOV DPTR,#TAB ;16位地址送地址寄存器中
MOVC A,@A+DPTR ;以中的地址为基地变址寻址单元中的数送累加器
MOV P1,A ;累加器A中的数值送P1口
MOV R6,#14H ;立即数据14送寄存器R6中
DL1:MOV R7,#19H ;立即数据19送寄存器R7中
DL2:DJNZ R7,DL2 ;寄存器中的数据减1,不为零时则转移
DJNZ R6,DL1 ;寄存器中的数据减1,不为零时则转移
INC R1 ;寄存器R1中的数值加1
MOV A,R5 ;寄存器R5中的数值送累加器A中
JNB ACC.2,ENDOUT ;地址位为0则转到ENDOUT
RL A ;累加器循环右移
MOV R5,A ;累加器A中的数值送寄存器R5中
AJMP PLAY ;绝对短转移
ENDOUT: SETB P3.5 ;置P3.5口
MOV P1,#0FFH ;立即数0FEH送P1口
RET ;返回
TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH
END ;结束

我见过一款制作容易免调试的超声波测距板,你可到“谷歌”上搜索一下《一款制作容易免调试的超声波测距板》,该超声波测距板结构简单、制作容易不需要调试、测量精度高,比较适合单片机初学都使用,同时也是单片机课程设计比较好的实训课题。该超声波测距系统,提供套件,及组装好的板件,含原理图、源程序、设计说明等。

㈦ 51单片机超声波测距数码管显示为什么示数一直不稳定,而且变化幅度好大,感觉有点儿不准

你有没有做滤波啊?
超声波遇到障碍物会反射,特别是在室内,会多次反射,如果你对发射的频率(只是发射的频率,而非超声波频率)不做限制,前后反射的信号被接收后叠加,自然就会出现你说的那种情况了。
你要做的:
1、对数据做数字滤波,取几次结果,然后抛弃一些不正常的数据(比如取10个值,去两个最大值,两个最小值,剩下6个数取平均值)等等,这样数据会稳定很多。
2、控制发射频率,不要太快,发射的间隔稍微长一些,这样前后信号叠加现象会少很多。
3、加入温度测量,根据温度测量结果,选用当前温度下的声速精确值,提高精度。

阅读全文

与51单片机控制的超声波相关的资料

热点内容
磁力计校正算法 浏览:491
解压缩后变小了 浏览:957
智友文件夹 浏览:81
android操作系统开发的操作系统 浏览:478
原神手机怎么改b站服务器 浏览:296
桩基箍筋加密区高度规范 浏览:91
手机樱花动漫app怎么用 浏览:382
php科学计数法转换 浏览:642
sip认证算法 浏览:785
androidapp卡顿原因 浏览:905
25编程器电路 浏览:849
安卓九是什么东西 浏览:939
隐藏nodejs命令行窗口 浏览:62
人体与写生素描pdf 浏览:883
java集合性能 浏览:143
单片机三线通信 浏览:209
昆山ug编程培训学费 浏览:628
黄色app怎么盈利的 浏览:957
怎么修改linux密码 浏览:703
国家发展中心app长什么样子 浏览:242