51单片机hc-sr04测距代码
时间: 2024-10-08 16:26:54 浏览: 67
51单片机HC-SR04测距-c语言(TX开发板)
5星 · 资源好评率100%
51单片机HC-SR04超声波测距模块是一种非接触式的距离测量传感器。以下是基本的测距代码示例,假设你已经将HC-SR04连接到单片机的IO口:
```c
#include <reg52.h> // 假设这是51单片机的头文件
// HC-SR04默认配置
#define ECHO_PIN P3_3 // 发射信号
#define TRIGGER_PIN P3_2 // 触发信号
#define MAX_RANGE 400 // 测量范围,单位毫米
#define DELAY_TIME_US 20 // 超声波发射后的等待时间,这里假设大约是20us
void init_hcsr04() {
TRIGGER_PIN = 0; // 设置触发信号低电平
ECHO_PIN = 0; // 设置发射信号低电平
}
unsigned int get_distance() {
unsigned int distance_mm = 0;
// 发射触发脉冲
TRIGGER_PIN = 1;
delay_us(DELAY_TIME_US); // 等待一段时间
TRIGGER_PIN = 0;
// 计算回波信号到来的时间
while (!ECHO_PIN);
unsigned int timestamp_echo = TMR0; // 当echo_pin变为高电平时记录时间
while (ECHO_PIN); // 等待echo_pin再次变低
unsigned int timestamp_trig = TMR0; // 当echo_pin变为低电平时记录时间
// 计算声音传播时间
unsigned int time_diff = (timestamp_trig - timestamp_echo) * 18 / 2; // 每个微秒对应50cm/μs
// 根据公式计算距离(速度乘以时间)
if (time_diff > MAX_RANGE * 2) { // 如果时间过长,可能是无响应或障碍物远离
return MAX_RANGE;
} else {
distance_mm = MAX_RANGE - time_diff / 2;
return distance_mm;
}
}
void main() {
init_hcsr04();
while (1) {
unsigned int dist = get_distance();
printf("Distance: %d mm\n", dist);
delay_ms(100); // 控制输出频率
}
}
阅读全文