51單片機控制hcsr04代碼示例
时间: 2025-01-01 17:09:25 浏览: 21
51单片机控制HC-SR04超声波模块通常用于测量距离,以下是一个基本的C语言代码示例,假设你正在使用ATmega8或类似型号的单片机:
```c
#include <reg52.h> // 对于ATmega8
#define TRIGPin PB0 // 发射信号的引脚
#define ECHOPin PB1 // 接收回音的引脚
#define MAX_RANGE 400 // 测量的最大范围(单位毫米)
void delay(unsigned int ms) {
for(int i = 0; i <= ms * 256; i++);
}
int main(void) {
DDRA |= (1 << TRIGPin); // 设置发射信号引脚为推挽输出
DDRB |= (1 << ECHOPin); // 设置接收信号引脚为输入
while(1) {
// 发送触发脉冲
PORTA &= ~(1 << TRIGPin);
delay(10); // 高电平持续10us
PORTA |= (1 << TRIGPin);
delayMicroseconds(10); // 然后低电平10us
// 等待回音并计算时间差
unsigned long duration = 0;
do {
duration++;
} while((PORTA & (1 << ECHOPin)) == 0);
duration--;
float distance = duration / 58; // HC-SR04的时间常数乘以声速除以2,这里默认声速为343mm/us
if(distance > MAX_RANGE) {
printf("Distance out of range!\n");
} else {
printf("Distance: %.1f cm\n", distance * 10);
}
delay(500); // 每次测量间隔500ms
}
}
```
这个程序首先设置好I/O口模式,然后发送触发脉冲,并等待回声。通过计算时间差,可以得到距离信息。注意,这是一个简化的版本,实际应用中可能需要考虑延时精度、错误处理等因素。
阅读全文
相关推荐















