写51单片机的关于超声波测距的代码
时间: 2023-12-01 17:04:05 浏览: 35
您好!以下是51单片机超声波测距的代码示例:
```c
#include <reg51.h>
typedef unsigned char uchar; // 定义无符号字符类型
typedef unsigned int uint; // 定义无符号整型类型
sbit Trig = P1^0; // 定义超声波信号发出引脚
sbit Echo = P1^1; // 定义超声波信号接收引脚
uchar distance; // 定义测距距离
void Delay10us() // 延时函数:10微秒
{
uchar i;
for(i=0;i<12;i++);
}
void Init() // 初始化函数
{
TMOD=0x01; // 定时器1工作在方式1(16位定时器)下
TH0=0; // 清空计数器初值
TL0=0; // 清空计数器初值
TR0=1; // 打开定时器1开关
Trig = 1; // 超声波信号发出引脚设置为高电平
}
uint GetEchoTime() // 获取超声波声波返回时间函数
{
uint i = 0;
while(!Echo); // 等待 Echo 引脚为高电平
TR0 = 1; // 重启定时器1
while(Echo) // Echo 引脚等待低电平
{
i++;
Delay10us();
if(i>=500) break; // 超时退出(约5000微秒)
}
TR0 = 0; // 关闭定时器1
return ((TH0*256)+TL0)*10; // 返回计数器中的时间(单位:微秒)
}
void main()
{
Init(); // 初始化
while(1)
{
Trig = 0; // 超声波信号发出引脚设置为低电平
Delay10us();
Trig = 1; // 超声波信号发出引脚设置为高电平
Delay10us();
Trig = 0; // 超声波信号发出引脚设置为低电平
distance = GetEchoTime()/58; // 计算距离(单位:厘米)
}
}
```
希望可以帮到您,如有疑问请随时提出。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_lunwen.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![7z](https://img-home.csdnimg.cn/images/20210720083312.png)