標(biāo)題:
51單片機(jī)超聲波模塊的測(cè)距程序
[打印本頁(yè)]
作者:
CTKM
時(shí)間:
2024-8-11 22:08
標(biāo)題:
51單片機(jī)超聲波模塊的測(cè)距程序
基于stc89c52單片機(jī),采用HC-SR04模塊利用聲波反彈算出距離。
#include "reg52.h"
//距離小于10cm,D5亮,D6滅,反之相反現(xiàn)象
sbit D5 = P2^0;
sbit D6 = P2^1;
sbit Trig = P1^5;
sbit Echo = P1^6;
void Delay10us() //@11.0592MHz
{
unsigned char i;
i = 2;
while (--i);
}
void Time0Init()
{
TMOD &= 0xF0; //設(shè)置定時(shí)器模式
TMOD |= 0x01;
TH0 = 0;
TL0 = 0;
//設(shè)置定時(shí)器0工作模式1,初始值設(shè)定0開(kāi)始數(shù)數(shù),不著急啟動(dòng)定時(shí)器
}
/*
十進(jìn)制2左移1位,變成20。相當(dāng)于乘以10
二禁止1左移1位,變成10(2)。相當(dāng)于乘以2,左移8位,乘以2的8次方=256;*/
void startHC()
{
Trig = 0;
Trig = 1;
Delay10us();
Trig = 0;
}
void main()
{
double time;
double dis;
Time0Init();
while(1){
//1. Trig ,給Trig端口至少10us的高電平
startHC();
//2. echo由低電平跳轉(zhuǎn)到高電平,表示開(kāi)始發(fā)送波
while(Echo == 0);
//波發(fā)出去的那一下,開(kāi)始啟動(dòng)定時(shí)器
TR0 = 1;
//3. 由高電平跳轉(zhuǎn)回低電平,表示波回來(lái)了
while(Echo == 1);
//波回來(lái)的那一下,我們開(kāi)始停止定時(shí)器
TR0 = 0;
//4. 計(jì)算出中間經(jīng)過(guò)多少時(shí)間
time = (TH0 * 256 + TL0)*1.085;//us為單位
//5. 距離 = 速度 (340m/s)* 時(shí)間/2
dis = time * 0.017;
if(dis < 10){
D5 = 0;
D6 = 1;
}else{
D5 = 1;
D6 = 0;
}
//定時(shí)器數(shù)據(jù)清零,以便下一次測(cè)距
TH0 = 0;
TL0 = 0;
}
}
復(fù)制代碼
1723385268482.png
(372.23 KB, 下載次數(shù): 13)
下載附件
2024-8-11 22:08 上傳
作者:
lsh04
時(shí)間:
2024-8-20 08:37
謝謝分享
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1