51单片机实现超声波测距数码管显示代码
时间: 2023-07-02 13:16:07 浏览: 135
51单片机使用8个数码管,在8个数码管上分别显示“12345678”这八个数字。
5星 · 资源好评率100%
以下是一个简单的51单片机实现超声波测距并在数码管上显示距离的代码:
```c
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit Trig = P1^0; //定义超声波模块Trig引脚
sbit Echo = P1^1; //定义超声波模块Echo引脚
uchar code table[] = { //数码管显示0-9的编码表
0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f
};
void delay(uint time) //延时函数
{
uint i, j;
for(i = time; i > 0; i--)
for(j = 110; j > 0; j--);
}
void display(uint dis) //数码管显示函数
{
uchar i;
for(i = 4; i > 0; i--) {
P2 = 0xff;
P0 = table[dis % 10]; //取最后一位数字的编码
P2 = ~(0x80 >> (i - 1)); //选择对应的数码管
delay(2); //延时2ms
dis /= 10; //去掉最后一位数字
}
}
uint read_distance() //测距函数
{
uint distance;
Trig = 0; //初始化Trig引脚
delay(2);
Trig = 1; //发送一个10us的高电平脉冲
delay(12);
Trig = 0;
while(Echo == 0); //等待Echo引脚变为高电平
TH0 = 0;
TL0 = 0;
while(Echo == 1); //等待Echo引脚变为低电平,并计算距离
distance = (TH0 * 256 + TL0) / 58;
return distance;
}
void main()
{
TMOD = 0x01; //设置定时器0为模式1
while(1) {
uint distance = read_distance(); //读取距离
display(distance); //显示距离
}
}
```
在该代码中,使用定时器0来计算Echo引脚的高电平时间,从而计算出距离。使用数码管显示函数将距离显示在数码管上。
阅读全文