導航:首頁 > 操作系統 > 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單片機控制的超聲波相關的資料

熱點內容
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長什麼樣子 瀏覽:241
za解壓軟體官方下載 瀏覽:888
教育網dns伺服器地址 瀏覽:421
廣聯達計價軟體橙色加密鎖 瀏覽:130