写一个51单片机相关的超声波测距程序
时间: 2023-12-11 19:54:54 浏览: 49
您好!以下是一个基于51单片机的超声波测距程序:
```c
#include <reg51.h>
#define TRIGGER P2_0 // 超声波模块的触发引脚
#define ECHO P2_1 // 超声波模块的回声引脚
sbit LATCH = P1 ^ 4; // 数码管锁存引脚
sbit DATA = P1 ^ 5; // 数码管数据引脚
sbit CLK = P1 ^ 6; // 数码管时钟引脚
unsigned int distance = 0; // 定义距离变量
void delay(unsigned int count) { // 延时函数
unsigned int i, j;
for (i = 0; i < count; i++)
for (j = 0; j < 1275; j++)
;
}
void showDistance(unsigned int d) { // 数码管显示函数
unsigned char code table[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66,
0x6d, 0x7d, 0x07, 0x7f, 0x6f};
unsigned char b[4], i;
b[0] = d / 1000; // 千位
b[1] = d % 1000 / 100; // 百位
b[2] = d % 100 / 10; // 十位
b[3] = d % 10; // 个位
for (i = 0; i < 4; i++) { // 循环显示
LATCH = 0;
DATA = table[b[i]];
CLK = 0;
CLK = 1;
LATCH = 1;
delay(1);
}
}
void main() {
while (1) {
TRIGGER = 1;
delay(1);
TRIGGER = 0;
while (ECHO == 0) // 等待Echo信号变高
;
TH0 = 0; // 定时器清零
TL0 = 0;
while (ECHO == 1) // 计算Echo脉冲宽度,即回声时间
;
distance = 5 * (unsigned int)TL0 / 58; // 计算距离
showDistance(distance); // 显示距离
delay(500); // 延时500ms
}
}
```
希望对您有所帮助!
阅读全文