单片机/MCU论坛
直播中

陌月柯

1年用户 10经验值
擅长:嵌入式技术 光电显示 控制/MCU
私信 关注
[问答]

51单片机的超声波测距,并用74HC595驱动数码管显示超声波测距的距离

个人是小白,实在不会写,麻烦大佬们帮忙写一个程序,实现51单片机的超声波测距,并用74HC595驱动数码管显示超声波测距的距离!!!

回帖(2)

李鑫

2023-11-23 15:19:04
以下是一个简单的51单片机的超声波测距,并使用74HC595驱动数码管显示超声波测距距离的程序示例:

```c
#include

sbit TRIG = P3^4;  // 超声波发射引脚
sbit ECHO = P3^5;  // 超声波接收引脚

sbit SRCLK = P1^0;  // 74HC595的时钟引脚
sbit RCLK = P1^1;   // 74HC595的存储锁存引脚
sbit SER = P1^2;    // 74HC595的数据引脚

void delay(unsigned int count) {
    unsigned int i, j;
    for (i = 0; i < count; i++) {
        for (j = 0; j < 112; j++);
    }
}

void hc595SendByte(unsigned char dat) {
    unsigned char a;
    SRCLK = 0;
    RCLK = 0;
    for (a = 0; a < 8; a++) {
        SER = dat >> 7;
        dat <<= 1;
        SRCLK = 1;
        SRCLK = 0;
    }
    RCLK = 1;
    RCLK = 0;
}

void displayDistance(unsigned int distance) {
    unsigned char digit[10] = {
        0x3F,  // 0
        0x06,  // 1
        0x5B,  // 2
        0x4F,  // 3
        0x66,  // 4
        0x6D,  // 5
        0x7D,  // 6
        0x07,  // 7
        0x7F,  // 8
        0x67   // 9
    };
   
    unsigned char high, low;
    high = distance / 10;
    low = distance % 10;
   
    hc595SendByte(digit[high]);
    delay(1);
    hc595SendByte(digit[low]);
    delay(1);
}

void delayMicroseconds(unsigned int us) {
    while (us--) {
        unsigned char a, b;
        for (b = 1; b > 0; b--)
            for (a = 2; a > 0; a--);
    }
}

unsigned int ultrasonicMeasure(void) {
    unsigned int distance;
    TRIG = 0;
    delayMicroseconds(2);
    TRIG = 1;
    delayMicroseconds(10);
    TRIG = 0;
   
    while (!ECHO);
   
    TH0 = 0;
    TL0 = 0;
   
    while (ECHO);
    TR0 = 1;
    while (ECHO);
    TR0 = 0;
   
    distance = (TH0 << 8) | TL0;
    distance = distance / 58.0;
   
    return distance;
}

void main(void) {
    unsigned int distance;
   
    TMOD = 0x01;   // 16位定时器模式
    EA = 1;        // 启用全局中断
    ET0 = 1;       // 启用定时器0中断
   
    while (1) {
        distance = ultrasonicMeasure();
        displayDistance(distance);
        delay(20);
    }
}

void timer0Int() interrupt 1 {
    TH0 = 0;
    TL0 = 0;
}
```

希望以上程序能够帮助到你!如果有其他问题,请随时提问。
1 1 举报

阿信509

2023-11-24 09:45:07
超声波测距咱们论坛里面有帖子你先看看
2 举报
  • 陌月柯: 能不能麻烦你帮我找一下,我找了3小时没找到
  • 阿信509 回复 陌月柯: 你搜超声波测距,我看有不少呢,跟你的要求一模一样的没有

更多回帖

发帖
×
20
完善资料,
赚取积分